mirror of
https://github.com/oxc-project/oxc.git
synced 2026-09-14 19:36:11 +08:00
6efce65746
## Summary `oxc_react_compiler` had no committed test over the upstream React Compiler fixture corpus — the fixtures lived only in the `oxc-project/forked-react-compiler` checkout, exercised out-of-tree. That gap let real regressions slip past the 15 in-crate integration tests. This PR closes it. - **`crates/oxc_react_compiler/fixtures/`** — 1734 fixture *input* files (`.js`/`.ts`/`.tsx`/`.jsx`/`.mjs`), copied from the fork's `babel-plugin-react-compiler/src/__tests__/fixtures/compiler` tree with subdirectories preserved. Flow fixtures (the `@flow`-pragma ones) are excluded — oxc has no Flow parser. The upstream `.expect.md` goldens are also not copied; insta is the golden here. - **`crates/oxc_react_compiler/tests/snapshot.rs`** — an `insta::glob!` test that, per fixture, derives `PluginOptions`/`EnvironmentConfig` from the first-line `// @directive` pragmas (base `compilationMode=all` / `panicThreshold=all_errors`, matching the upstream `snap` runner), parses → builds semantic → runs `transform`, and snapshots the compiled output plus diagnostics. Unrecognised directives are ignored, as upstream does; camelCase flag directives map to `EnvironmentConfig` fields via `convert_case`. - **`crates/oxc_react_compiler/tests/snapshots/`** — 1734 committed `.snap` goldens (oxc's own output). - **`.typos.toml`** — excludes the fixtures dir (the upstream fixtures contain intentional typos; `**/*.snap` was already excluded). These snapshots are oxc's own golden output, so `cargo test` (and CI) now catches any change in compiler behaviour across the corpus. Regenerate after an intended change with `cargo insta accept`. ## Verification - `cargo test -p oxc_react_compiler` passes — the 1734-fixture snapshot test plus the existing 15 integration tests; also green under `--all-features` (matches the cross-target CI job). - clippy `-D warnings`, `cargo fmt`, and `typos` clean. - No fixture panics; 1336 compiled / 398 unchanged / 335 with diagnostics. - The `error.*` fixtures capture the exact diagnostics — including the "Cannot reassign variable after render" error that a recent scoping change had silently suppressed, confirming the suite catches real regressions. --- AI usage disclosure: authored with Claude Code and reviewed before submission. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
import fbt from 'fbt';
|
|
import * as React from 'react';
|
|
import {useState} from 'react';
|
|
|
|
// Minimized from MusicPartnerManagerMusicWorkDocumentStoreRenderer.react.js
|
|
// Tests AlignMethodCallScopes mutable_range sync after scope merging.
|
|
|
|
function nullthrows(x) {
|
|
if (x != null) return x;
|
|
throw new Error('nullthrows');
|
|
}
|
|
|
|
function Component({store}) {
|
|
const [isShown, setIsShown] = useState(false);
|
|
const id = nullthrows(store?.id);
|
|
const storeUri = nullthrows(store?.store_uri);
|
|
const licensedGeos = nullthrows(store?.licensed_geos);
|
|
const documentSchema = nullthrows(store?.document_schema);
|
|
const ingestionEnabled = nullthrows(store?.ingestion_enabled);
|
|
const cwrSenderIds = store?.cwr_sender_ids;
|
|
|
|
if (!store.hasOwnProperty('store_uri')) {
|
|
return;
|
|
}
|
|
|
|
return (
|
|
<div key={store.id}>
|
|
<span>
|
|
<span>
|
|
{fbt(
|
|
`Directory: ${fbt.param(
|
|
'store URI',
|
|
storeUri.replace('sftp://sftp.fb.com', '')
|
|
)}`,
|
|
'directory info'
|
|
)}
|
|
</span>
|
|
<span>
|
|
{fbt(`Schema: ${fbt.param('schema', documentSchema)}`, 'schema')},{' '}
|
|
{fbt(`Geos: ${fbt.param('geos', licensedGeos.length)}`, 'geos count')}
|
|
,{' '}
|
|
</span>
|
|
{cwrSenderIds != null && <span>Sender ID: {cwrSenderIds[0]}</span>}
|
|
<span>Ingestion: {ingestionEnabled ? 'Enabled' : 'Disabled'}</span>
|
|
<span>
|
|
{[...licensedGeos].sort().join(',')}
|
|
<button
|
|
onClick={() => {
|
|
console.log('copied');
|
|
}}>
|
|
Copy
|
|
</button>
|
|
</span>
|
|
</span>
|
|
<span>
|
|
<button onClick={() => setIsShown(true)} />
|
|
<button onClick={() => console.log(id.toString())} />
|
|
{isShown && <button onClick={() => setIsShown(false)} />}
|
|
</span>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export const FIXTURE_ENTRYPOINT = {
|
|
fn: Component,
|
|
params: [
|
|
{
|
|
store: {
|
|
id: '1',
|
|
store_uri: 'sftp://sftp.fb.com/Music',
|
|
licensed_geos: ['US', 'GB'],
|
|
document_schema: 'CWR',
|
|
ingestion_enabled: true,
|
|
cwr_sender_ids: ['123'],
|
|
},
|
|
},
|
|
],
|
|
};
|