Skip to content

Commit 4922fce

Browse files
committed
Generate ES versions dynamically
1 parent cdb135d commit 4922fce

File tree

6 files changed

+37
-89
lines changed

6 files changed

+37
-89
lines changed

src/components/conformance/ResultsDisplay/components/SuiteDataContainer/cards/TestGrid/index.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import React from "react";
22
import {
3-
SpecEdition,
43
TestOutcome,
54
TestResult,
65
SuiteResult,
@@ -64,12 +63,25 @@ function applyFilter(filter: FilterOption, outcome: TestOutcome): boolean {
6463
}
6564
}
6665

66+
function esFlagToEdition(esFlag: string): number {
67+
if (!esFlag.startsWith("es")) {
68+
throw RangeError("invalid esFlag");
69+
}
70+
71+
const parsedEsFlag = Number(esFlag.substring(2));
72+
if (!Number.isInteger(parsedEsFlag)) {
73+
throw RangeError("esFlag is not an integer");
74+
}
75+
76+
return parsedEsFlag;
77+
}
78+
6779
function Grid(props: GridProps): React.ReactNode {
6880
return (
6981
<>
7082
{props.esFlag
7183
? props.tests
72-
.filter((test) => test.edition <= SpecEdition[props.esFlag])
84+
.filter((test) => test.edition <= esFlagToEdition(props.esFlag))
7385
.filter((test) => applyFilter(props.filterOption, test.result))
7486
.map((test) => {
7587
return (

src/components/conformance/ResultsDisplay/components/SuiteSelector/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,17 +88,17 @@ function SuiteStatistics({
8888
setFilter(filterOption);
8989
}, [filterOption]);
9090

91-
let passed =
91+
const passed =
9292
filter == FilterOption.None || filter == FilterOption.Passed
9393
? testResults.passed
9494
: 0;
9595

96-
let ignored =
96+
const ignored =
9797
filter == FilterOption.None || filter == FilterOption.Ignored
9898
? testResults.ignored
9999
: 0;
100100

101-
let failed =
101+
const failed =
102102
filter == FilterOption.None || filter == FilterOption.Failed
103103
? `${testResults.total - testResults.passed - testResults.ignored} (${testResults.panic}\u26A0)`
104104
: 0;

src/components/conformance/ResultsDisplay/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
createSearchParams,
1414
mapToResultInfo,
1515
} from "@site/src/components/conformance/utils";
16-
import { useHistory, useLocation } from "@docusaurus/router";
16+
import { useHistory } from "@docusaurus/router";
1717

1818
import styles from "./styles.module.css";
1919

@@ -211,6 +211,7 @@ export default function ResultsDisplay(props: ResultsProps): React.ReactNode {
211211
<div className={styles.resultsDisplay}>
212212
<ResultNavigation
213213
state={props.state}
214+
editions={currentSuite ? Object.keys(currentSuite.versionedStats) : []}
214215
sliceNavToIndex={sliceNavToIndex}
215216
setEcmaScriptFlag={setEcmaScriptFlag}
216217
setSortOption={setSortOption}

src/components/conformance/ResultsDisplay/nav.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from "react";
2-
import { ConformanceState, FilterOption, SpecEdition } from "../types";
2+
import { ConformanceState, FilterOption } from "../types";
33

44
import styles from "./styles.module.css";
55
import Link from "@docusaurus/Link";
@@ -8,6 +8,7 @@ import { availableSortingOptions } from "../utils";
88

99
type ResultsNavProps = {
1010
state: ConformanceState;
11+
editions: string[];
1112
sliceNavToIndex: (number) => void;
1213
setEcmaScriptFlag: (string) => void;
1314
setSortOption: (string) => void;
@@ -21,6 +22,7 @@ export default function ResultNavigation(
2122
<div className={styles.resultsNav}>
2223
<div className={styles.navSection}>
2324
<EcmaScriptVersionDropdown
25+
editions={props.editions}
2426
setEcmaScriptFlag={props.setEcmaScriptFlag}
2527
esVersionValue={props.state.ecmaScriptVersion}
2628
/>
@@ -96,6 +98,7 @@ function BreadCrumbItem(props: BreadCrumbItemProps): React.ReactNode {
9698

9799
type DropDownProps = {
98100
esVersionValue: string;
101+
editions: string[];
99102
setEcmaScriptFlag: (string) => void;
100103
};
101104

@@ -122,15 +125,13 @@ function EcmaScriptVersionDropdown(props: DropDownProps): React.ReactNode {
122125
</Heading>
123126
<select value={dropdownValue} onChange={handleVersionSelection}>
124127
<option value={""}>All</option>
125-
{Object.keys(SpecEdition)
126-
.filter((v) => isNaN(Number(v)))
127-
.map((key) => {
128-
return (
129-
<option key={key} value={key}>
130-
{key}
131-
</option>
132-
);
133-
})}
128+
{props.editions.map((edition) => {
129+
return (
130+
<option key={edition} value={edition}>
131+
{edition}
132+
</option>
133+
);
134+
})}
134135
</select>
135136
</div>
136137
);

src/components/conformance/types.ts

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,7 @@ export type SuiteResult = {
5454
};
5555

5656
export type VersionedStats = {
57-
es5: TestStats;
58-
es6: TestStats;
59-
es7: TestStats;
60-
es8: TestStats;
61-
es9: TestStats;
62-
es10: TestStats;
63-
es11: TestStats;
64-
es12: TestStats;
65-
es13: TestStats;
57+
[edition: string]: TestStats;
6658
};
6759

6860
export type TestStats = {
@@ -74,7 +66,7 @@ export type TestStats = {
7466

7567
export type TestResult = {
7668
name: string;
77-
edition: SpecEdition;
69+
edition: number;
7870
strict: boolean;
7971
result: TestOutcome;
8072
};
@@ -85,16 +77,3 @@ export enum TestOutcome {
8577
Failed,
8678
Panic,
8779
}
88-
89-
export enum SpecEdition {
90-
es5 = 5,
91-
es6,
92-
es7,
93-
es8,
94-
es9,
95-
es10,
96-
es11,
97-
es12,
98-
es13,
99-
ESNext,
100-
}

src/components/conformance/utils.ts

Lines changed: 5 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import {
33
FilterOption,
44
ResultInfo,
55
SortOption,
6-
SpecEdition,
76
SuiteResult,
87
TestOutcome,
98
TestResult,
@@ -12,7 +11,6 @@ import {
1211
VersionedStats,
1312
VersionItem,
1413
} from "@site/src/components/conformance/types";
15-
import { url } from "node:inspector";
1614

1715
// Take a search param and create a state object
1816
export function createUrlState(search: string): UrlState {
@@ -251,32 +249,16 @@ export function mapToTestStats(unmappedValue: HttpStatistics): TestStats {
251249

252250
// Interface for the http response of boa_tester's versioned `Statistics`
253251
interface HttpVersionedStatistics {
254-
es5: HttpStatistics;
255-
es6: HttpStatistics;
256-
es7: HttpStatistics;
257-
es8: HttpStatistics;
258-
es9: HttpStatistics;
259-
es10: HttpStatistics;
260-
es11: HttpStatistics;
261-
es12: HttpStatistics;
262-
es13: HttpStatistics;
252+
[edition: string]: HttpStatistics;
263253
}
264254

265255
// Function for converting an http response of boa_tester's versioned `Statistics` to `VersionedStats`
266256
export function mapToVersionedStats(
267257
unmappedValue: HttpVersionedStatistics,
268258
): VersionedStats {
269-
return {
270-
es5: mapToTestStats(unmappedValue.es5),
271-
es6: mapToTestStats(unmappedValue.es6),
272-
es7: mapToTestStats(unmappedValue.es7),
273-
es8: mapToTestStats(unmappedValue.es8),
274-
es9: mapToTestStats(unmappedValue.es9),
275-
es10: mapToTestStats(unmappedValue.es10),
276-
es11: mapToTestStats(unmappedValue.es11),
277-
es12: mapToTestStats(unmappedValue.es12),
278-
es13: mapToTestStats(unmappedValue.es13),
279-
};
259+
return Object.fromEntries(
260+
Object.entries(unmappedValue).map(([k, v]) => [k, mapToTestStats(v)]),
261+
);
280262
}
281263

282264
// Interface for the http response of boa_tester's `TestResult`
@@ -291,39 +273,12 @@ interface HttpTestResult {
291273
export function mapToTestResult(unmappedValue: HttpTestResult): TestResult {
292274
return {
293275
name: unmappedValue.n,
294-
edition: mapToSpecEditionEnum(unmappedValue.v),
276+
edition: Number(unmappedValue.v),
295277
strict: Boolean(unmappedValue.s),
296278
result: mapToTestOutcomeEnum(unmappedValue.r),
297279
};
298280
}
299281

300-
export function mapToSpecEditionEnum(
301-
unmappedValue: number | string,
302-
): SpecEdition {
303-
switch (Number(unmappedValue)) {
304-
case 5:
305-
return SpecEdition.es5;
306-
case 6:
307-
return SpecEdition.es6;
308-
case 7:
309-
return SpecEdition.es7;
310-
case 8:
311-
return SpecEdition.es8;
312-
case 9:
313-
return SpecEdition.es9;
314-
case 10:
315-
return SpecEdition.es10;
316-
case 11:
317-
return SpecEdition.es11;
318-
case 12:
319-
return SpecEdition.es12;
320-
case 13:
321-
return SpecEdition.es13;
322-
default:
323-
return SpecEdition.ESNext;
324-
}
325-
}
326-
327282
export function mapToTestOutcomeEnum(unmappedValue: string): TestOutcome {
328283
switch (String(unmappedValue)) {
329284
case "O":

0 commit comments

Comments
 (0)