Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import React from "react";
import {
SpecEdition,
TestOutcome,
TestResult,
SuiteResult,
Expand Down Expand Up @@ -64,12 +63,25 @@ function applyFilter(filter: FilterOption, outcome: TestOutcome): boolean {
}
}

function esFlagToEdition(esFlag: string): number {
if (!esFlag.startsWith("es")) {
throw RangeError("invalid esFlag");
}

const parsedEsFlag = Number(esFlag.substring(2));
if (!Number.isInteger(parsedEsFlag)) {
throw RangeError("esFlag is not an integer");
}

return parsedEsFlag;
}

function Grid(props: GridProps): React.ReactNode {
return (
<>
{props.esFlag
? props.tests
.filter((test) => test.edition <= SpecEdition[props.esFlag])
.filter((test) => test.edition <= esFlagToEdition(props.esFlag))
.filter((test) => applyFilter(props.filterOption, test.result))
.map((test) => {
return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@ function SuiteStatistics({
setFilter(filterOption);
}, [filterOption]);

let passed =
const passed =
filter == FilterOption.None || filter == FilterOption.Passed
? testResults.passed
: 0;

let ignored =
const ignored =
filter == FilterOption.None || filter == FilterOption.Ignored
? testResults.ignored
: 0;

let failed =
const failed =
filter == FilterOption.None || filter == FilterOption.Failed
? `${testResults.total - testResults.passed - testResults.ignored} (${testResults.panic}\u26A0)`
: 0;
Expand Down
3 changes: 2 additions & 1 deletion src/components/conformance/ResultsDisplay/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
createSearchParams,
mapToResultInfo,
} from "@site/src/components/conformance/utils";
import { useHistory, useLocation } from "@docusaurus/router";
import { useHistory } from "@docusaurus/router";

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

Expand Down Expand Up @@ -211,6 +211,7 @@ export default function ResultsDisplay(props: ResultsProps): React.ReactNode {
<div className={styles.resultsDisplay}>
<ResultNavigation
state={props.state}
editions={currentSuite ? Object.keys(currentSuite.versionedStats) : []}
sliceNavToIndex={sliceNavToIndex}
setEcmaScriptFlag={setEcmaScriptFlag}
setSortOption={setSortOption}
Expand Down
21 changes: 11 additions & 10 deletions src/components/conformance/ResultsDisplay/nav.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from "react";
import { ConformanceState, FilterOption, SpecEdition } from "../types";
import { ConformanceState, FilterOption } from "../types";

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

type ResultsNavProps = {
state: ConformanceState;
editions: string[];
sliceNavToIndex: (number) => void;
setEcmaScriptFlag: (string) => void;
setSortOption: (string) => void;
Expand All @@ -21,6 +22,7 @@ export default function ResultNavigation(
<div className={styles.resultsNav}>
<div className={styles.navSection}>
<EcmaScriptVersionDropdown
editions={props.editions}
setEcmaScriptFlag={props.setEcmaScriptFlag}
esVersionValue={props.state.ecmaScriptVersion}
/>
Expand Down Expand Up @@ -96,6 +98,7 @@ function BreadCrumbItem(props: BreadCrumbItemProps): React.ReactNode {

type DropDownProps = {
esVersionValue: string;
editions: string[];
setEcmaScriptFlag: (string) => void;
};

Expand All @@ -122,15 +125,13 @@ function EcmaScriptVersionDropdown(props: DropDownProps): React.ReactNode {
</Heading>
<select value={dropdownValue} onChange={handleVersionSelection}>
<option value={""}>All</option>
{Object.keys(SpecEdition)
.filter((v) => isNaN(Number(v)))
.map((key) => {
return (
<option key={key} value={key}>
{key}
</option>
);
})}
{props.editions.map((edition) => {
return (
<option key={edition} value={edition}>
{edition}
</option>
);
})}
</select>
</div>
);
Expand Down
25 changes: 2 additions & 23 deletions src/components/conformance/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,7 @@ export type SuiteResult = {
};

export type VersionedStats = {
es5: TestStats;
es6: TestStats;
es7: TestStats;
es8: TestStats;
es9: TestStats;
es10: TestStats;
es11: TestStats;
es12: TestStats;
es13: TestStats;
[edition: string]: TestStats;
};

export type TestStats = {
Expand All @@ -74,7 +66,7 @@ export type TestStats = {

export type TestResult = {
name: string;
edition: SpecEdition;
edition: number;
strict: boolean;
result: TestOutcome;
};
Expand All @@ -85,16 +77,3 @@ export enum TestOutcome {
Failed,
Panic,
}

export enum SpecEdition {
es5 = 5,
es6,
es7,
es8,
es9,
es10,
es11,
es12,
es13,
ESNext,
}
55 changes: 5 additions & 50 deletions src/components/conformance/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import {
FilterOption,
ResultInfo,
SortOption,
SpecEdition,
SuiteResult,
TestOutcome,
TestResult,
Expand All @@ -12,7 +11,6 @@ import {
VersionedStats,
VersionItem,
} from "@site/src/components/conformance/types";
import { url } from "node:inspector";

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

// Interface for the http response of boa_tester's versioned `Statistics`
interface HttpVersionedStatistics {
es5: HttpStatistics;
es6: HttpStatistics;
es7: HttpStatistics;
es8: HttpStatistics;
es9: HttpStatistics;
es10: HttpStatistics;
es11: HttpStatistics;
es12: HttpStatistics;
es13: HttpStatistics;
[edition: string]: HttpStatistics;
}

// Function for converting an http response of boa_tester's versioned `Statistics` to `VersionedStats`
export function mapToVersionedStats(
unmappedValue: HttpVersionedStatistics,
): VersionedStats {
return {
es5: mapToTestStats(unmappedValue.es5),
es6: mapToTestStats(unmappedValue.es6),
es7: mapToTestStats(unmappedValue.es7),
es8: mapToTestStats(unmappedValue.es8),
es9: mapToTestStats(unmappedValue.es9),
es10: mapToTestStats(unmappedValue.es10),
es11: mapToTestStats(unmappedValue.es11),
es12: mapToTestStats(unmappedValue.es12),
es13: mapToTestStats(unmappedValue.es13),
};
return Object.fromEntries(
Object.entries(unmappedValue).map(([k, v]) => [k, mapToTestStats(v)]),
);
}

// Interface for the http response of boa_tester's `TestResult`
Expand All @@ -291,39 +273,12 @@ interface HttpTestResult {
export function mapToTestResult(unmappedValue: HttpTestResult): TestResult {
return {
name: unmappedValue.n,
edition: mapToSpecEditionEnum(unmappedValue.v),
edition: Number(unmappedValue.v),
strict: Boolean(unmappedValue.s),
result: mapToTestOutcomeEnum(unmappedValue.r),
};
}

export function mapToSpecEditionEnum(
unmappedValue: number | string,
): SpecEdition {
switch (Number(unmappedValue)) {
case 5:
return SpecEdition.es5;
case 6:
return SpecEdition.es6;
case 7:
return SpecEdition.es7;
case 8:
return SpecEdition.es8;
case 9:
return SpecEdition.es9;
case 10:
return SpecEdition.es10;
case 11:
return SpecEdition.es11;
case 12:
return SpecEdition.es12;
case 13:
return SpecEdition.es13;
default:
return SpecEdition.ESNext;
}
}

export function mapToTestOutcomeEnum(unmappedValue: string): TestOutcome {
switch (String(unmappedValue)) {
case "O":
Expand Down
Loading