@intentius/tsad-conformance 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter.d.ts +53 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/fixture.d.ts +28 -1
- package/dist/fixture.d.ts.map +1 -1
- package/dist/fixture.js +27 -2
- package/dist/fixture.js.map +1 -1
- package/dist/host.d.ts +13 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +33 -0
- package/dist/host.js.map +1 -1
- package/dist/runner.d.ts +28 -2
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +129 -3
- package/dist/runner.js.map +1 -1
- package/fixtures/F-Call/a-host-factory-is-invoked/expect.json +45 -0
- package/fixtures/F-Call/a-host-factory-is-invoked/project/app.ts +4 -0
- package/fixtures/F-Call/a-host-factory-is-invoked/project/nested.ts +3 -0
- package/fixtures/F-Call/a-host-factory-is-invoked/project/plain.ts +3 -0
- package/fixtures/F-Declarator/a-const-alias-of-a-call-resolves-at-the-declarator/expect.json +50 -0
- package/fixtures/F-Declarator/a-const-alias-of-a-call-resolves-at-the-declarator/project/app.ts +13 -0
- package/fixtures/F-Declarator/a-const-alias-of-a-call-resolves-at-the-declarator/project/nested.ts +5 -0
- package/fixtures/F-Declarator/a-const-alias-of-a-call-resolves-at-the-declarator/project/store.ts +3 -0
- package/fixtures/F-Div-Step/step-reads-the-resolved-composite/expect.json +48 -0
- package/fixtures/F-Div-Step/step-reads-the-resolved-composite/project/app.ts +4 -0
- package/fixtures/F-Div-Step/step-reads-the-resolved-composite/project/pipeline.ts +3 -0
- package/fixtures/F-Host-Closed-vs-Open/package-call-is-closed/expect.json +18 -5
- package/fixtures/F-Host-Composite/a-registered-composite-is-interpreted/expect.json +47 -0
- package/fixtures/F-Host-Composite/a-registered-composite-is-interpreted/project/app.ts +4 -0
- package/fixtures/F-Host-Composite/a-registered-composite-is-interpreted/project/store.ts +6 -0
- package/fixtures/F-IsolatedRefusal/a-project-factory-is-refused-not-invoked/expect.json +18 -0
- package/fixtures/F-IsolatedRefusal/a-project-factory-is-refused-not-invoked/project/app.ts +3 -0
- package/fixtures/F-IsolatedRefusal/a-project-factory-is-refused-not-invoked/project/shapes.ts +5 -0
- package/fixtures/F-Obs-Counters/a-build-reports-its-counts/expect.json +43 -0
- package/fixtures/F-Obs-Counters/a-build-reports-its-counts/project/app.ts +5 -0
- package/fixtures/F-Obs-Counters/a-build-reports-its-counts/project/shapes.ts +3 -0
- package/fixtures/F-Rule-Equivalence/same-source-same-findings/expect.json +21 -0
- package/fixtures/F-Rule-Equivalence/same-source-same-findings/project/buckets.ts +8 -0
- package/fixtures/F-Rule-Equivalence/same-source-same-findings/project/helpers.ts +3 -0
- package/fixtures/F-Rule-Input/a-rule-sees-the-folded-namespace/expect.json +21 -0
- package/fixtures/F-Rule-Input/a-rule-sees-the-folded-namespace/project/buckets.ts +4 -0
- package/fixtures/F-Rule-Phase/a-post-rule-reads-the-artifact/expect.json +21 -0
- package/fixtures/F-Rule-Phase/a-post-rule-reads-the-artifact/project/pairs.ts +3 -0
- package/fixtures/F-Rule-Pure/findings-are-a-function-of-the-input/expect.json +21 -0
- package/fixtures/F-Rule-Pure/findings-are-a-function-of-the-input/project/buckets.ts +4 -0
- package/fixtures/F-Rule-Pure/findings-are-a-function-of-the-input/project/clock.ts +1 -0
- package/fixtures/F-Rule-Supply/the-host-names-the-rule/expect.json +21 -0
- package/fixtures/F-Rule-Supply/the-host-names-the-rule/project/app.ts +4 -0
- package/fixtures/F-Val-Domain/every-case-is-a-value/expect.json +49 -0
- package/fixtures/F-Val-Domain/every-case-is-a-value/project/app.ts +6 -0
- package/fixtures/F-Val-Envelope/envelopes-are-the-output-in-data-host/expect.json +41 -0
- package/fixtures/F-Val-Envelope/envelopes-are-the-output-in-data-host/project/app.ts +5 -0
- package/fixtures/F-Val-Source/a-form-per-case-in-data-host/expect.json +74 -0
- package/fixtures/F-Val-Source/a-form-per-case-in-data-host/project/app.ts +8 -0
- package/fixtures/F-Val-Source/a-form-per-case-in-full/expect.json +35 -0
- package/fixtures/F-Val-Source/a-form-per-case-in-full/project/app.ts +7 -0
- package/fixtures/F-Val-Symbol-Scope/a-symbol-only-inside-an-intrinsic/expect.json +32 -0
- package/fixtures/F-Val-Symbol-Scope/a-symbol-only-inside-an-intrinsic/project/interior.ts +3 -0
- package/fixtures/F-Val-Symbol-Scope/a-symbol-only-inside-an-intrinsic/project/top.ts +1 -0
- package/fixtures/S-Disqualify/each-arm-disqualifies-the-file/expect.json +34 -0
- package/fixtures/S-Disqualify/each-arm-disqualifies-the-file/project/array.ts +1 -0
- package/fixtures/S-Disqualify/each-arm-disqualifies-the-file/project/class.ts +1 -0
- package/fixtures/S-Disqualify/each-arm-disqualifies-the-file/project/default-function.ts +3 -0
- package/fixtures/S-Disqualify/each-arm-disqualifies-the-file/project/let.ts +1 -0
- package/fixtures/S-Disqualify/each-arm-disqualifies-the-file/project/ok.ts +1 -0
- package/fixtures/S-Disqualify/each-arm-disqualifies-the-file/project/rest.ts +1 -0
- package/fixtures/S-Disqualify/each-arm-disqualifies-the-file/project/star.ts +1 -0
- package/fixtures/S-Disqualify/each-arm-disqualifies-the-file/project/uninitialized.ts +1 -0
- package/fixtures/S-Disqualify/each-arm-disqualifies-the-file/project/var.ts +1 -0
- package/fixtures/S-ExportDestructure/plain-elements/expect.json +16 -0
- package/fixtures/S-ExportDestructure/plain-elements/project/app.ts +3 -0
- package/fixtures/S-ExportNamed/local-names-with-an-alias/expect.json +19 -0
- package/fixtures/S-ExportNamed/local-names-with-an-alias/project/app.ts +4 -0
- package/fixtures/S-ExportResource/new-with-props/expect.json +26 -0
- package/fixtures/S-ExportResource/new-with-props/project/app.ts +3 -0
- package/fixtures/S-ExportSingle/an-expression-initializer/expect.json +21 -0
- package/fixtures/S-ExportSingle/an-expression-initializer/input.ts +1 -0
- package/fixtures/S-ExportTypeOnly/type-exports-are-invisible/expect.json +19 -0
- package/fixtures/S-ExportTypeOnly/type-exports-are-invisible/project/app.ts +12 -0
- package/fixtures/S-FactoryBody/consts-then-a-final-return/expect.json +38 -0
- package/fixtures/S-FactoryBody/consts-then-a-final-return/project/bad-shapes.ts +7 -0
- package/fixtures/S-FactoryBody/consts-then-a-final-return/project/empty.ts +3 -0
- package/fixtures/S-FactoryBody/consts-then-a-final-return/project/good-shapes.ts +7 -0
- package/fixtures/S-FactoryBody/consts-then-a-final-return/project/good.ts +3 -0
- package/fixtures/S-FactoryBody/consts-then-a-final-return/project/no-return.ts +3 -0
- package/fixtures/S-FactoryParams/one-plainly-bound-parameter/expect.json +38 -0
- package/fixtures/S-FactoryParams/one-plainly-bound-parameter/project/bad-shapes.ts +4 -0
- package/fixtures/S-FactoryParams/one-plainly-bound-parameter/project/good-shapes.ts +3 -0
- package/fixtures/S-FactoryParams/one-plainly-bound-parameter/project/named.ts +3 -0
- package/fixtures/S-FactoryParams/one-plainly-bound-parameter/project/rest.ts +3 -0
- package/fixtures/S-FactoryParams/one-plainly-bound-parameter/project/two.ts +3 -0
- package/fixtures/S-Module/non-exported-statements-are-invisible/expect.json +17 -0
- package/fixtures/S-Module/non-exported-statements-are-invisible/project/app.ts +13 -0
- package/fixtures/S-Prop/a-computed-key-rejects/expect.json +10 -0
- package/fixtures/S-Prop/a-computed-key-rejects/input.ts +3 -0
- package/fixtures/S-Prop/literal-keys/expect.json +15 -0
- package/fixtures/S-Prop/literal-keys/input.ts +1 -0
- package/fixtures/S-ReExport/named-from-a-sibling/expect.json +18 -0
- package/fixtures/S-ReExport/named-from-a-sibling/project/app.ts +1 -0
- package/fixtures/S-ReExport/named-from-a-sibling/project/config.ts +2 -0
- package/fixtures/S-Shorthand/a-shorthand-property-resolves-as-an-identifier/expect.json +14 -0
- package/fixtures/S-Shorthand/a-shorthand-property-resolves-as-an-identifier/input.ts +4 -0
- package/fixtures/S-TopConst/an-unexported-const-is-a-binding/expect.json +16 -0
- package/fixtures/S-TopConst/an-unexported-const-is-a-binding/project/binding.ts +3 -0
- package/fixtures/S-TopConst/an-unexported-const-is-a-binding/project/invisible.ts +3 -0
- package/fixtures/UNCOVERED.md +1 -28
- package/fixtures/roundtrip/a-resource-and-its-attribute/expect.json +8 -0
- package/fixtures/roundtrip/a-resource-and-its-attribute/value.json +29 -0
- package/fixtures/roundtrip/a-resource-by-args/expect.json +8 -0
- package/fixtures/roundtrip/a-resource-by-args/value.json +14 -0
- package/fixtures/roundtrip/intrinsics-and-a-symbol/expect.json +8 -0
- package/fixtures/roundtrip/intrinsics-and-a-symbol/value.json +36 -0
- package/fixtures/roundtrip/scalars-and-containers/expect.json +8 -0
- package/fixtures/roundtrip/scalars-and-containers/value.json +28 -0
- package/package.json +1 -1
- package/spec/VERSION +1 -1
- package/spec/hosts.md +6 -2
- package/spec/judgments.md +27 -10
- package/spec/rules.md +7 -4
- package/spec/values.md +47 -2
- package/src/adapter.ts +53 -0
- package/src/adapters/chant.ts +361 -10
- package/src/adapters/rust.ts +77 -0
- package/src/chant-agreement.test.ts +68 -23
- package/src/corpus.test.ts +12 -0
- package/src/corpus.ts +76 -34
- package/src/fixture.ts +42 -3
- package/src/host.ts +50 -0
- package/src/runner.test.ts +6 -2
- package/src/runner.ts +107 -5
- package/src/rust-agreement.test.ts +37 -0
package/dist/adapter.d.ts
CHANGED
|
@@ -38,7 +38,45 @@ export interface ProjectResult {
|
|
|
38
38
|
tentative?: Record<string, "fold" | "run">;
|
|
39
39
|
/** For a file J3 tainted, the file whose taint reached it. */
|
|
40
40
|
taintedBy?: Record<string, string>;
|
|
41
|
+
/** F-Obs-Counters, per build. Omitted by an implementation whose public entry exposes none. */
|
|
42
|
+
counters?: ExecutionCounters;
|
|
41
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* F-Obs-Counters: in-process factory or constructor invocations while folding;
|
|
46
|
+
* of those, how many resolved to project-owned code; and how many factory
|
|
47
|
+
* bodies were interpreted instead. Three non-negative integers; the names
|
|
48
|
+
* follow the reference and only the shape is normative.
|
|
49
|
+
*/
|
|
50
|
+
export interface ExecutionCounters {
|
|
51
|
+
factoryInvocations: number;
|
|
52
|
+
projectFactoryInvocations: number;
|
|
53
|
+
factoryInterpretations: number;
|
|
54
|
+
}
|
|
55
|
+
/** F-Rule-Finding's closed severity set. */
|
|
56
|
+
export type Severity = "error" | "warning" | "info";
|
|
57
|
+
/** F-Rule-Phase: named by the input the rule reads, the folded namespace or the artifact. */
|
|
58
|
+
export type RulePhase = "pre" | "post";
|
|
59
|
+
/**
|
|
60
|
+
* A finding, as data (F-Rule-Finding). `rule`, `severity` and `subject` are
|
|
61
|
+
* compared; `message` is not (F-Obs-Messages); `at` only when the fixture
|
|
62
|
+
* gives one and the implementation reports one (F-Obs-Provenance is
|
|
63
|
+
* optional). `file` names the file whose namespace holds the subject for a
|
|
64
|
+
* pre-synthesis finding; a post-synthesis finding concerns the artifact and
|
|
65
|
+
* carries none.
|
|
66
|
+
*/
|
|
67
|
+
export interface Finding {
|
|
68
|
+
rule: string;
|
|
69
|
+
severity: Severity;
|
|
70
|
+
subject: string;
|
|
71
|
+
message: string;
|
|
72
|
+
file?: string;
|
|
73
|
+
at?: {
|
|
74
|
+
line: number;
|
|
75
|
+
column: number;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** J2's ι (F-IsolatedRefusal): under `isolated`, no project code is invoked or imported on the fold path. */
|
|
79
|
+
export type IsolationMode = "open" | "isolated";
|
|
42
80
|
export interface ConformanceAdapter {
|
|
43
81
|
readonly name: string;
|
|
44
82
|
/**
|
|
@@ -60,6 +98,20 @@ export interface ConformanceAdapter {
|
|
|
60
98
|
*
|
|
61
99
|
* May be async: a real implementation resolves modules from a filesystem.
|
|
62
100
|
*/
|
|
63
|
-
foldProject?(files: Map<string, string>, host?: ConformanceHost): ProjectResult | "unavailable" | Promise<ProjectResult | "unavailable">;
|
|
101
|
+
foldProject?(files: Map<string, string>, host?: ConformanceHost, mode?: IsolationMode): ProjectResult | "unavailable" | Promise<ProjectResult | "unavailable">;
|
|
102
|
+
/**
|
|
103
|
+
* The findings of the host's rules of one phase over the build (#101).
|
|
104
|
+
* A rule is host code, so the harness carries only its identifier and its
|
|
105
|
+
* findings; an implementation that cannot run a rule the host names
|
|
106
|
+
* reports "unavailable" and the fixture is skipped visibly.
|
|
107
|
+
*/
|
|
108
|
+
rules?(files: Map<string, string>, host: ConformanceHost, phase: RulePhase): Finding[] | "unavailable" | Promise<Finding[] | "unavailable">;
|
|
109
|
+
/**
|
|
110
|
+
* The round trip's generator (#80): source in the subset, as one module,
|
|
111
|
+
* whose fold is `namespace` (export name to value, envelopes included).
|
|
112
|
+
* "unavailable" for an implementation with no generator, or for a value it
|
|
113
|
+
* has no form for; F-Val-Source says a form exists for every value.
|
|
114
|
+
*/
|
|
115
|
+
generate?(namespace: Record<string, unknown>, host?: ConformanceHost): string | "unavailable";
|
|
64
116
|
}
|
|
65
117
|
//# sourceMappingURL=adapter.d.ts.map
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAClB;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjF,aAAa,CAAC;AAClB,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAChF,oGAAoG;AACpG,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AACnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,iHAAiH;IACjH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;IAC3C,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/fixture.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ExecutionCounters } from "./adapter.js";
|
|
1
2
|
export interface ExpressionFixture {
|
|
2
3
|
kind: "expression";
|
|
3
4
|
profiles: Profile[];
|
|
@@ -15,6 +16,15 @@ export interface ExpressionFixture {
|
|
|
15
16
|
};
|
|
16
17
|
note?: string;
|
|
17
18
|
}
|
|
19
|
+
export interface ExpectedFinding {
|
|
20
|
+
rule: string;
|
|
21
|
+
subject: string;
|
|
22
|
+
severity: "error" | "warning" | "info";
|
|
23
|
+
at?: {
|
|
24
|
+
line: number;
|
|
25
|
+
column: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
18
28
|
export interface ProjectFixture {
|
|
19
29
|
kind: "project";
|
|
20
30
|
profiles: Profile[];
|
|
@@ -31,9 +41,25 @@ export interface ProjectFixture {
|
|
|
31
41
|
rejectRule?: Record<string, string>;
|
|
32
42
|
/** A named host from host.ts. Required for any fixture whose sources import one. */
|
|
33
43
|
host?: string;
|
|
44
|
+
/** J2's ι, `open` unless the fixture says `isolated` (F-IsolatedRefusal). */
|
|
45
|
+
mode?: "open" | "isolated";
|
|
46
|
+
/** The host's rules' findings, keyed by file (pre-synthesis) or "artifact" (post-synthesis). */
|
|
47
|
+
findings?: Record<string, ExpectedFinding[]>;
|
|
48
|
+
/** F-Obs-Counters: the values the build's counters must show. An adapter reporting none is skipped, not failed. */
|
|
49
|
+
counters?: Partial<ExecutionCounters>;
|
|
50
|
+
note?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface RoundtripFixture {
|
|
53
|
+
kind: "roundtrip";
|
|
54
|
+
profiles: Profile[];
|
|
55
|
+
id: string;
|
|
56
|
+
dir: string;
|
|
57
|
+
rules: string[];
|
|
58
|
+
value: Record<string, unknown>;
|
|
59
|
+
host?: string;
|
|
34
60
|
note?: string;
|
|
35
61
|
}
|
|
36
|
-
export type Fixture = ExpressionFixture | ProjectFixture;
|
|
62
|
+
export type Fixture = ExpressionFixture | ProjectFixture | RoundtripFixture;
|
|
37
63
|
export type Profile = "full" | "data-host";
|
|
38
64
|
/**
|
|
39
65
|
* The profiles a fixture is judged in (F-Profile, #78). Explicit
|
|
@@ -45,5 +71,6 @@ export declare function profilesOf(f: Fixture, explicit?: string[]): Profile[];
|
|
|
45
71
|
/** Kept as the name the expression-only callers import; `kind` narrows. */
|
|
46
72
|
export declare const expressionFixtures: (all: Fixture[]) => ExpressionFixture[];
|
|
47
73
|
export declare const projectFixtures: (all: Fixture[]) => ProjectFixture[];
|
|
74
|
+
export declare const roundtripFixtures: (all: Fixture[]) => RoundtripFixture[];
|
|
48
75
|
export declare function loadFixtures(root: string): Fixture[];
|
|
49
76
|
//# sourceMappingURL=fixture.d.ts.map
|
package/dist/fixture.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../src/fixture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../src/fixture.ts"],"names":[],"mappings":"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"}
|
package/dist/fixture.js
CHANGED
|
@@ -24,11 +24,27 @@
|
|
|
24
24
|
* "exports": { "config.ts": { "port": 8080 } }, // optional, for files that finally fold
|
|
25
25
|
* "rejectRule": { "app.ts": "F-Eval-CallLocal" }, // optional, the rule a run verdict must name; checked when the adapter reports one
|
|
26
26
|
* "host": "shapes", // optional, a named host from host.ts; required if the sources import one
|
|
27
|
+
* "mode": "isolated", // optional, J2's ι; "open" by default. An adapter that cannot honour it reports "unavailable"
|
|
28
|
+
* "findings": { "bucket.ts": [ { "rule": "SHAPES001", "subject": "bad", "severity": "error" } ], // optional (#101): the host's rules' findings, keyed by the
|
|
29
|
+
* "artifact": [ { "rule": "SHAPES002", "subject": "missing: Bucket", "severity": "warning" } ] }, // file whose namespace holds the subject (pre) or "artifact" (post); "at" optional
|
|
30
|
+
* "counters": { "projectFactoryInvocations": 0 }, // optional (F-Obs-Counters): the build's counters; the keys given are compared, all three must be reported
|
|
27
31
|
* "profiles": ["full"], // optional; see profilesOf for the default
|
|
28
32
|
* "note": "why this fixture exists" }
|
|
29
33
|
* `tentative` and `taintedBy` are what separate "folds because nothing
|
|
30
34
|
* reached it" from "would have folded, and an edge killed it" — without them
|
|
31
35
|
* a project fixture cannot tell F-Seed from F-Taint.
|
|
36
|
+
*
|
|
37
|
+
* `findings` is what an F-Rule-* fixture asserts (#101): the findings of the
|
|
38
|
+
* named host's rules, as data. Matched on rule, subject and severity; the
|
|
39
|
+
* message is non-normative, and a location only when both sides give one.
|
|
40
|
+
*
|
|
41
|
+
* A *roundtrip* fixture (#80) has no source at all. Its input is a namespace
|
|
42
|
+
* as data and the implementation's generator writes the source:
|
|
43
|
+
* value.json — { "<export>": <value> }, envelopes as F-Val-Domain writes them, "$undefined" as in expect.json
|
|
44
|
+
* expect.json — { "rules": ["F-Val-Source"], "roundtrip": true, "host": "shapes", "profiles": ["data-host"], "note": "…" }
|
|
45
|
+
* The fold of the generated source must equal the input. Judged in
|
|
46
|
+
* `data-host` unless the fixture says otherwise, since in `full` the fold of
|
|
47
|
+
* a resource's form is a live instance and not the envelope (F-Val-Fate).
|
|
32
48
|
*/
|
|
33
49
|
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
34
50
|
import { join, relative } from "node:path";
|
|
@@ -41,6 +57,8 @@ import { join, relative } from "node:path";
|
|
|
41
57
|
export function profilesOf(f, explicit) {
|
|
42
58
|
if (explicit)
|
|
43
59
|
return explicit;
|
|
60
|
+
if (f.kind === "roundtrip")
|
|
61
|
+
return ["data-host"];
|
|
44
62
|
const sources = f.kind === "expression" ? [f.input] : [...f.files.values()];
|
|
45
63
|
const usesNew = sources.some((s) => /\bnew\s+[A-Za-z_$]/.test(s));
|
|
46
64
|
if (f.kind === "project" && (f.host || f.tentative || f.taintedBy))
|
|
@@ -50,6 +68,7 @@ export function profilesOf(f, explicit) {
|
|
|
50
68
|
/** Kept as the name the expression-only callers import; `kind` narrows. */
|
|
51
69
|
export const expressionFixtures = (all) => all.filter((f) => f.kind === "expression");
|
|
52
70
|
export const projectFixtures = (all) => all.filter((f) => f.kind === "project");
|
|
71
|
+
export const roundtripFixtures = (all) => all.filter((f) => f.kind === "roundtrip");
|
|
53
72
|
function readProject(dir) {
|
|
54
73
|
const files = new Map();
|
|
55
74
|
const walk = (d) => {
|
|
@@ -76,9 +95,15 @@ export function loadFixtures(root) {
|
|
|
76
95
|
continue;
|
|
77
96
|
const e = JSON.parse(readFileSync(join(d, "expect.json"), "utf8"));
|
|
78
97
|
const id = `${rule}/${name}`;
|
|
79
|
-
if (e.
|
|
98
|
+
if (e.roundtrip) {
|
|
99
|
+
const fx = { kind: "roundtrip", id, dir: d, rules: e.rules, profiles: [], host: e.host, note: e.note,
|
|
100
|
+
value: JSON.parse(readFileSync(join(d, "value.json"), "utf8")) };
|
|
101
|
+
fx.profiles = profilesOf(fx, e.profiles);
|
|
102
|
+
out.push(fx);
|
|
103
|
+
}
|
|
104
|
+
else if (e.project) {
|
|
80
105
|
const fx = { kind: "project", id, dir: d, rules: e.rules, files: readProject(join(d, "project")), profiles: [],
|
|
81
|
-
verdicts: e.verdicts, tentative: e.tentative, taintedBy: e.taintedBy, exports: e.exports, rejectRule: e.rejectRule, host: e.host, note: e.note };
|
|
106
|
+
verdicts: e.verdicts, tentative: e.tentative, taintedBy: e.taintedBy, exports: e.exports, rejectRule: e.rejectRule, host: e.host, mode: e.mode, findings: e.findings, counters: e.counters, note: e.note };
|
|
82
107
|
fx.profiles = profilesOf(fx, e.profiles);
|
|
83
108
|
out.push(fx);
|
|
84
109
|
}
|
package/dist/fixture.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../src/fixture.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../src/fixture.ts"],"names":[],"mappings":"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"}
|
package/dist/host.d.ts
CHANGED
|
@@ -15,6 +15,17 @@ export interface HostIntrinsic {
|
|
|
15
15
|
readonly foldsEagerly?: boolean;
|
|
16
16
|
readonly outputKey?: string;
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* A rule the host supplies (F-Rule-Supply), by identifier. The rule's code is
|
|
20
|
+
* the implementation's; what the harness carries is the id, the phase, the
|
|
21
|
+
* rule's own severity (L11.6) and what it checks, in words.
|
|
22
|
+
*/
|
|
23
|
+
export interface HostRule {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly phase: "pre" | "post";
|
|
26
|
+
readonly severity: "error" | "warning" | "info";
|
|
27
|
+
readonly description: string;
|
|
28
|
+
}
|
|
18
29
|
export interface ConformanceHost {
|
|
19
30
|
readonly name: string;
|
|
20
31
|
/** F-Host-Trust arm 1: the specifiers this host owns. */
|
|
@@ -27,6 +38,8 @@ export interface ConformanceHost {
|
|
|
27
38
|
}[];
|
|
28
39
|
/** Specifier, then export name, to the real value. Revival calls these (F-Val-Fate). */
|
|
29
40
|
readonly values: ReadonlyMap<string, ReadonlyMap<string, unknown>>;
|
|
41
|
+
/** F-Host-Interface item 7: the rules this host supplies, if any. */
|
|
42
|
+
readonly rules?: readonly HostRule[];
|
|
30
43
|
}
|
|
31
44
|
export declare const HOSTS: ReadonlyMap<string, ConformanceHost>;
|
|
32
45
|
export declare function requireHost(name: string): ConformanceHost;
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5E,wFAAwF;IACxF,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5E,wFAAwF;IACxF,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;CACtC;AA2GD,eAAO,MAAM,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAoC,CAAC;AAE5F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAIzD"}
|
package/dist/host.js
CHANGED
|
@@ -32,6 +32,27 @@ class Pair {
|
|
|
32
32
|
Object.defineProperty(this, DECLARABLE, { value: true, enumerable: false });
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* F-Host-Interface item 6: the registration form. What it returns is what a
|
|
37
|
+
* *running* file would call; a folding one never invokes it, because
|
|
38
|
+
* F-Host-Composite makes the registered factory interpretable instead. The
|
|
39
|
+
* instance keeps its members enumerable and carries a marker on the
|
|
40
|
+
* prototype, so it is live (F-Val-Live) and spreads to its members.
|
|
41
|
+
*/
|
|
42
|
+
const COMPOSITE = Symbol.for("tsad.conformance.composite");
|
|
43
|
+
class CompositeInstance {
|
|
44
|
+
[COMPOSITE] = true;
|
|
45
|
+
}
|
|
46
|
+
const Composite = (factory, name = "anonymous") => {
|
|
47
|
+
const definition = (props) => Object.assign(new CompositeInstance(), factory(props));
|
|
48
|
+
return Object.assign(definition, { compositeName: name });
|
|
49
|
+
};
|
|
50
|
+
/** A host-published composite (L7.1: never interpreted, invoked at a declarator or read through a const, F-Eval-CompositeConst). */
|
|
51
|
+
const Stack = Composite((props) => ({ pair: new Pair(props.left, props.right) }), "Stack");
|
|
52
|
+
/** A host-published factory (F-Call step 6): invoked with the resolved arguments, it returns an entity. */
|
|
53
|
+
const makePair = (left, right) => new Pair(left, right);
|
|
54
|
+
/** A host export that is a function but returns plain data: step 7 refuses its result. */
|
|
55
|
+
const describe = (name) => ({ described: name });
|
|
35
56
|
/** A live object the host owns outright, for the F-CallLeak case: no construction involved. */
|
|
36
57
|
const registry = new Map([["one", "1"]]);
|
|
37
58
|
/** An intrinsic in tag form: revival invokes it as `Name(strings, ...values)`. */
|
|
@@ -53,6 +74,14 @@ const SHAPES = {
|
|
|
53
74
|
{ name: "count", isTag: false, foldsEagerly: true },
|
|
54
75
|
],
|
|
55
76
|
helpers: [{ name: "upper", module: "@tsad/shapes", note: "pure string transform, no environment read" }],
|
|
77
|
+
// Two rules, one per phase (F-Rule-Phase). The pre-synthesis one reads
|
|
78
|
+
// the folded namespace and names the export it concerns; the
|
|
79
|
+
// post-synthesis one reads the artifact and, finding nothing to attach
|
|
80
|
+
// to, reports the missing-resource form (F-Rule-Finding, L11.5).
|
|
81
|
+
rules: [
|
|
82
|
+
{ id: "SHAPES001", phase: "pre", severity: "error", description: "every Bucket declares a BucketName; the subject is the export that does not" },
|
|
83
|
+
{ id: "SHAPES002", phase: "post", severity: "warning", description: "the artifact declares at least one Bucket; otherwise the subject is `missing: Bucket`" },
|
|
84
|
+
],
|
|
56
85
|
values: new Map([
|
|
57
86
|
[
|
|
58
87
|
"@tsad/shapes",
|
|
@@ -65,6 +94,10 @@ const SHAPES = {
|
|
|
65
94
|
["count", count],
|
|
66
95
|
["SIZES", SIZES],
|
|
67
96
|
["registry", registry],
|
|
97
|
+
["Composite", Composite],
|
|
98
|
+
["makePair", makePair],
|
|
99
|
+
["Stack", Stack],
|
|
100
|
+
["describe", describe],
|
|
68
101
|
]),
|
|
69
102
|
],
|
|
70
103
|
]),
|
package/dist/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ConformanceAdapter } from "./adapter.js";
|
|
2
|
-
import type { ExpressionFixture, Fixture, ProjectFixture } from "./fixture.js";
|
|
1
|
+
import type { ConformanceAdapter, Finding } from "./adapter.js";
|
|
2
|
+
import type { ExpressionFixture, Fixture, ProjectFixture, RoundtripFixture } from "./fixture.js";
|
|
3
3
|
export interface FixtureReport {
|
|
4
4
|
fixture: string;
|
|
5
5
|
adapter: string;
|
|
@@ -19,8 +19,34 @@ export interface FixtureReport {
|
|
|
19
19
|
export declare function encodeValue(v: unknown): string;
|
|
20
20
|
export declare function runFixture(adapter: ConformanceAdapter, f: ExpressionFixture): FixtureReport;
|
|
21
21
|
export declare function runFixtures(adapter: ConformanceAdapter, fixtures: Fixture[]): Promise<FixtureReport[]>;
|
|
22
|
+
/**
|
|
23
|
+
* #80 — the round trip. The input is data; the implementation's generator
|
|
24
|
+
* writes source for it and the fold of that source must be the input. The
|
|
25
|
+
* "$undefined" sentinel in value.json is decoded before generation so the
|
|
26
|
+
* generator sees the value the domain has.
|
|
27
|
+
*/
|
|
28
|
+
export declare function runRoundtripFixture(adapter: ConformanceAdapter, f: RoundtripFixture): Promise<FixtureReport>;
|
|
29
|
+
/** The inverse of encodeValue's sentinel: "$undefined" in fixture data is the domain's undefined. */
|
|
30
|
+
export declare function decodeValue(v: unknown): unknown;
|
|
22
31
|
/** #24 — a whole-build fixture. J3's edges are invisible in any single file, so this is the only shape that can test them. */
|
|
23
32
|
export declare function runProjectFixture(adapter: ConformanceAdapter, f: ProjectFixture): Promise<FixtureReport>;
|
|
33
|
+
/**
|
|
34
|
+
* Every finding of both phases (#101). Each phase is run twice and the two
|
|
35
|
+
* runs must agree: F-Rule-Pure says a rule is a function of its input, and
|
|
36
|
+
* a rule that reads a clock or the environment fails here before its
|
|
37
|
+
* findings are compared with anything.
|
|
38
|
+
*/
|
|
39
|
+
export declare function collectFindings(adapter: ConformanceAdapter, f: ProjectFixture): Promise<Map<string, Finding[]> | "unavailable">;
|
|
40
|
+
/** Findings matched on rule, subject and severity; `at` only when both sides carry one. */
|
|
41
|
+
export declare function compareFindings(want: Record<string, {
|
|
42
|
+
rule: string;
|
|
43
|
+
subject: string;
|
|
44
|
+
severity: string;
|
|
45
|
+
at?: {
|
|
46
|
+
line: number;
|
|
47
|
+
column: number;
|
|
48
|
+
};
|
|
49
|
+
}[]>, got: Map<string, Finding[]>): string[];
|
|
24
50
|
/** #11 — two implementations must agree on every fixture, independently of what the fixture expects. */
|
|
25
51
|
export declare function compareAdapters(a: ConformanceAdapter, b: ConformanceAdapter, fixtures: Fixture[]): Promise<string[]>;
|
|
26
52
|
//# sourceMappingURL=runner.d.ts.map
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAgC,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIjG,MAAM,WAAW,aAAa;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE;AAExH;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAS9C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,CAAC,EAAE,iBAAiB,GAAG,aAAa,CAe3F;AACD,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAM5G;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,EAAE,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAkBlH;AAED,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAK/C;AAED,8HAA8H;AAC9H,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,EAAE,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAoD9G;AAMD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,kBAAkB,EAAE,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,CAcrI;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,EAAE,CAYzL;AAED,wGAAwG;AACxG,wBAAsB,eAAe,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsC1H"}
|
package/dist/runner.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { expressionFixtures, projectFixtures } from "./fixture.js";
|
|
1
|
+
import { expressionFixtures, projectFixtures, roundtripFixtures } from "./fixture.js";
|
|
2
2
|
import { requireHost } from "./host.js";
|
|
3
3
|
/**
|
|
4
4
|
* The comparison form of a folded value. `JSON.stringify` drops an
|
|
@@ -50,14 +50,58 @@ export async function runFixtures(adapter, fixtures) {
|
|
|
50
50
|
return [
|
|
51
51
|
...expressionFixtures(fixtures).map((f) => runFixture(adapter, f)),
|
|
52
52
|
...(await Promise.all(projectFixtures(fixtures).map((f) => runProjectFixture(adapter, f)))),
|
|
53
|
+
...(await Promise.all(roundtripFixtures(fixtures).map((f) => runRoundtripFixture(adapter, f)))),
|
|
53
54
|
];
|
|
54
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* #80 — the round trip. The input is data; the implementation's generator
|
|
58
|
+
* writes source for it and the fold of that source must be the input. The
|
|
59
|
+
* "$undefined" sentinel in value.json is decoded before generation so the
|
|
60
|
+
* generator sees the value the domain has.
|
|
61
|
+
*/
|
|
62
|
+
export async function runRoundtripFixture(adapter, f) {
|
|
63
|
+
const base = { fixture: f.id, adapter: adapter.name };
|
|
64
|
+
if (!adapter.generate || !adapter.foldProject)
|
|
65
|
+
return { ...base, pass: true, skipped: "no generator", failures: [] };
|
|
66
|
+
const host = f.host ? requireHost(f.host) : undefined;
|
|
67
|
+
const source = adapter.generate(decodeValue(f.value), host);
|
|
68
|
+
if (source === "unavailable")
|
|
69
|
+
return { ...base, pass: true, skipped: "generator unavailable for this value", failures: [] };
|
|
70
|
+
const r = await adapter.foldProject(new Map([["generated.ts", source]]), host);
|
|
71
|
+
if (r === "unavailable")
|
|
72
|
+
return { ...base, pass: true, skipped: "project entry unavailable", failures: [] };
|
|
73
|
+
const failures = [];
|
|
74
|
+
const v = r.verdicts["generated.ts"];
|
|
75
|
+
if (v?.kind !== "fold")
|
|
76
|
+
failures.push(`generated source does not fold${v?.kind === "run" ? ` (${v.reason})` : ""}:\n${source}`);
|
|
77
|
+
else {
|
|
78
|
+
for (const name of new Set([...Object.keys(f.value), ...Object.keys(v.exports)])) {
|
|
79
|
+
if (!(name in f.value)) {
|
|
80
|
+
failures.push(`export ${name} generated but not in the input`);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (encodeValue(v.exports[name]) !== encodeValue(f.value[name]))
|
|
84
|
+
failures.push(`export ${name} = ${encodeValue(v.exports[name])} ≠ input ${encodeValue(f.value[name])}\n${source}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return { ...base, pass: failures.length === 0, failures };
|
|
88
|
+
}
|
|
89
|
+
/** The inverse of encodeValue's sentinel: "$undefined" in fixture data is the domain's undefined. */
|
|
90
|
+
export function decodeValue(v) {
|
|
91
|
+
if (v === "$undefined")
|
|
92
|
+
return undefined;
|
|
93
|
+
if (v === null || typeof v !== "object")
|
|
94
|
+
return v;
|
|
95
|
+
if (Array.isArray(v))
|
|
96
|
+
return v.map(decodeValue);
|
|
97
|
+
return Object.fromEntries(Object.entries(v).map(([k, e]) => [k, decodeValue(e)]));
|
|
98
|
+
}
|
|
55
99
|
/** #24 — a whole-build fixture. J3's edges are invisible in any single file, so this is the only shape that can test them. */
|
|
56
100
|
export async function runProjectFixture(adapter, f) {
|
|
57
101
|
const base = { fixture: f.id, adapter: adapter.name };
|
|
58
102
|
if (!adapter.foldProject)
|
|
59
103
|
return { ...base, pass: true, skipped: "no project entry", failures: [] };
|
|
60
|
-
const r = await adapter.foldProject(f.files, f.host ? requireHost(f.host) : undefined);
|
|
104
|
+
const r = await adapter.foldProject(f.files, f.host ? requireHost(f.host) : undefined, f.mode);
|
|
61
105
|
if (r === "unavailable")
|
|
62
106
|
return { ...base, pass: true, skipped: "project entry unavailable", failures: [] };
|
|
63
107
|
const failures = [];
|
|
@@ -110,8 +154,80 @@ export async function runProjectFixture(adapter, f) {
|
|
|
110
154
|
}
|
|
111
155
|
}
|
|
112
156
|
}
|
|
157
|
+
if (f.findings) {
|
|
158
|
+
const got = await collectFindings(adapter, f);
|
|
159
|
+
if (got === "unavailable")
|
|
160
|
+
return { ...base, pass: failures.length === 0, skipped: "rules unavailable", failures };
|
|
161
|
+
failures.push(...compareFindings(f.findings, got));
|
|
162
|
+
}
|
|
163
|
+
if (f.counters) {
|
|
164
|
+
// F-Obs-Counters: the shape is normative, so all three must be present as non-negative integers; the fixture then pins the values it names.
|
|
165
|
+
if (!r.counters)
|
|
166
|
+
return { ...base, pass: failures.length === 0, skipped: "counters unavailable", failures };
|
|
167
|
+
for (const k of ["factoryInvocations", "projectFactoryInvocations", "factoryInterpretations"]) {
|
|
168
|
+
const v = r.counters[k];
|
|
169
|
+
if (!Number.isInteger(v) || v < 0)
|
|
170
|
+
failures.push(`counters.${k}: ${String(v)} is not a non-negative integer (F-Obs-Counters)`);
|
|
171
|
+
}
|
|
172
|
+
for (const [k, want] of Object.entries(f.counters)) {
|
|
173
|
+
const got = r.counters[k];
|
|
174
|
+
if (got !== want)
|
|
175
|
+
failures.push(`counters.${k}: ${got} ≠ expected ${want}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
113
178
|
return { ...base, pass: failures.length === 0, failures };
|
|
114
179
|
}
|
|
180
|
+
/** The key a finding is filed under: the file whose namespace holds the subject, or the artifact. */
|
|
181
|
+
const findingKey = (x, phase) => (phase === "post" ? "artifact" : x.file ?? "artifact");
|
|
182
|
+
const findingSig = (x) => `${x.rule} ${x.severity} ${x.subject}`;
|
|
183
|
+
/**
|
|
184
|
+
* Every finding of both phases (#101). Each phase is run twice and the two
|
|
185
|
+
* runs must agree: F-Rule-Pure says a rule is a function of its input, and
|
|
186
|
+
* a rule that reads a clock or the environment fails here before its
|
|
187
|
+
* findings are compared with anything.
|
|
188
|
+
*/
|
|
189
|
+
export async function collectFindings(adapter, f) {
|
|
190
|
+
if (!adapter.rules || !f.host)
|
|
191
|
+
return "unavailable";
|
|
192
|
+
const host = requireHost(f.host);
|
|
193
|
+
const out = new Map();
|
|
194
|
+
for (const phase of ["pre", "post"]) {
|
|
195
|
+
const first = await adapter.rules(f.files, host, phase);
|
|
196
|
+
if (first === "unavailable")
|
|
197
|
+
return "unavailable";
|
|
198
|
+
const second = await adapter.rules(f.files, host, phase);
|
|
199
|
+
if (second === "unavailable")
|
|
200
|
+
return "unavailable";
|
|
201
|
+
const a = first.map((x) => `${findingKey(x, phase)}: ${findingSig(x)}`).sort(), b = second.map((x) => `${findingKey(x, phase)}: ${findingSig(x)}`).sort();
|
|
202
|
+
if (a.join("\n") !== b.join("\n"))
|
|
203
|
+
throw new Error(`${f.id}: ${phase}-synthesis findings differ between two runs of the same input (F-Rule-Pure)\n${a.join("\n")}\n---\n${b.join("\n")}`);
|
|
204
|
+
for (const x of first) {
|
|
205
|
+
const k = findingKey(x, phase);
|
|
206
|
+
out.set(k, [...(out.get(k) ?? []), x]);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return out;
|
|
210
|
+
}
|
|
211
|
+
/** Findings matched on rule, subject and severity; `at` only when both sides carry one. */
|
|
212
|
+
export function compareFindings(want, got) {
|
|
213
|
+
const failures = [];
|
|
214
|
+
for (const key of new Set([...Object.keys(want), ...got.keys()])) {
|
|
215
|
+
const w = want[key] ?? [], g = got.get(key) ?? [];
|
|
216
|
+
for (const x of w) {
|
|
217
|
+
const hit = g.find((y) => findingSig(y) === findingSig(x));
|
|
218
|
+
if (!hit) {
|
|
219
|
+
failures.push(`${key}: expected finding ${findingSig(x)}, not reported`);
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
if (x.at && hit.at && (hit.at.line !== x.at.line || hit.at.column !== x.at.column))
|
|
223
|
+
failures.push(`${key}: ${findingSig(x)} at ${hit.at.line}:${hit.at.column}, expected ${x.at.line}:${x.at.column}`);
|
|
224
|
+
}
|
|
225
|
+
for (const y of g)
|
|
226
|
+
if (!w.some((x) => findingSig(x) === findingSig(y)))
|
|
227
|
+
failures.push(`${key}: finding ${findingSig(y)} reported but not expected (${y.message})`);
|
|
228
|
+
}
|
|
229
|
+
return failures;
|
|
230
|
+
}
|
|
115
231
|
/** #11 — two implementations must agree on every fixture, independently of what the fixture expects. */
|
|
116
232
|
export async function compareAdapters(a, b, fixtures) {
|
|
117
233
|
const dis = [];
|
|
@@ -119,7 +235,7 @@ export async function compareAdapters(a, b, fixtures) {
|
|
|
119
235
|
if (!a.foldProject || !b.foldProject)
|
|
120
236
|
continue;
|
|
121
237
|
const host = f.host ? requireHost(f.host) : undefined;
|
|
122
|
-
const [ra, rb] = await Promise.all([a.foldProject(f.files, host), b.foldProject(f.files, host)]);
|
|
238
|
+
const [ra, rb] = await Promise.all([a.foldProject(f.files, host, f.mode), b.foldProject(f.files, host, f.mode)]);
|
|
123
239
|
if (ra === "unavailable" || rb === "unavailable")
|
|
124
240
|
continue;
|
|
125
241
|
for (const path of new Set([...Object.keys(ra.verdicts), ...Object.keys(rb.verdicts)])) {
|
|
@@ -136,6 +252,16 @@ export async function compareAdapters(a, b, fixtures) {
|
|
|
136
252
|
dis.push(`${f.id} ${path}: tainted by — ${a.name} ${ra.taintedBy[path] ?? "nothing"}, ${b.name} ${rb.taintedBy[path] ?? "nothing"}`);
|
|
137
253
|
}
|
|
138
254
|
}
|
|
255
|
+
// F-Rule-Equivalence, across implementations: the same host rules over
|
|
256
|
+
// the same source report the same findings, whichever path each took.
|
|
257
|
+
if (f.findings) {
|
|
258
|
+
const [fa, fb] = await Promise.all([collectFindings(a, f), collectFindings(b, f)]);
|
|
259
|
+
if (fa !== "unavailable" && fb !== "unavailable") {
|
|
260
|
+
const sig = (m) => [...m.entries()].flatMap(([k, xs]) => xs.map((x) => `${k}: ${findingSig(x)}`)).sort().join("\n");
|
|
261
|
+
if (sig(fa) !== sig(fb))
|
|
262
|
+
dis.push(`${f.id}: findings — ${a.name}\n${sig(fa)}\n${b.name}\n${sig(fb)}`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
139
265
|
}
|
|
140
266
|
for (const f of expressionFixtures(fixtures)) {
|
|
141
267
|
const ra = a.foldExport(f.input, f.exportName), rb = b.foldExport(f.input, f.exportName);
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|