From 04c2be0550e3213579da7221158dc0e84409d635 Mon Sep 17 00:00:00 2001 From: Paul Loyd Date: Thu, 30 Nov 2017 14:27:05 +0300 Subject: [PATCH] json -> yaml for IR --- declarations/yaml-js.js | 4 ++ package.json | 3 +- src/cli.js | 9 ++- src/definitions.js | 6 +- src/globals.js | 5 +- src/utils.js | 19 ++++++- tests/run.js | 5 +- tests/samples/any.json | 17 ------ tests/samples/any.yaml | 9 +++ tests/samples/arrays.json | 67 ---------------------- tests/samples/arrays.yaml | 55 ++++++++++++++++++ tests/samples/disorder.json | 22 ------- tests/samples/disorder.yaml | 19 +++++++ tests/samples/elementType.json | 42 -------------- tests/samples/elementType.yaml | 26 +++++++++ tests/samples/empty.json | 3 - tests/samples/empty.yaml | 1 + tests/samples/enums.json | 49 ---------------- tests/samples/enums.yaml | 31 ++++++++++ tests/samples/exact.json | 24 -------- tests/samples/exact.yaml | 19 +++++++ tests/samples/externals.json | 64 --------------------- tests/samples/externals.yaml | 95 +++++++++++++++++++++++++++++++ tests/samples/generics.json | 38 ------------- tests/samples/generics.yaml | 37 ++++++++++++ tests/samples/inheritance.json | 58 ------------------- tests/samples/inheritance.yaml | 53 +++++++++++++++++ tests/samples/intersections.json | 64 --------------------- tests/samples/intersections.yaml | 52 +++++++++++++++++ tests/samples/keys.json | 20 ------- tests/samples/keys.yaml | 15 +++++ tests/samples/maps.json | 51 ----------------- tests/samples/maps.yaml | 29 ++++++++++ tests/samples/maybe.json | 67 ---------------------- tests/samples/maybe.yaml | 67 ++++++++++++++++++++++ tests/samples/mixed.json | 17 ------ tests/samples/mixed.yaml | 9 +++ tests/samples/nonMaybeType.json | 13 ----- tests/samples/nonMaybeType.yaml | 6 ++ tests/samples/objects.json | 36 ------------ tests/samples/objects.yaml | 23 ++++++++ tests/samples/pragmas.json | 35 ------------ tests/samples/pragmas.yaml | 49 ++++++++++++++++ tests/samples/primitives.json | 34 ----------- tests/samples/primitives.yaml | 46 +++++++++++++++ tests/samples/readOnly.json | 24 -------- tests/samples/readOnly.yaml | 19 +++++++ tests/samples/references.json | 56 ------------------ tests/samples/references.yaml | 48 ++++++++++++++++ tests/samples/scopes.json | 68 ---------------------- tests/samples/scopes.yaml | 70 +++++++++++++++++++++++ tests/samples/shadowing.json | 31 ---------- tests/samples/shadowing.yaml | 20 +++++++ tests/samples/shape.json | 20 ------- tests/samples/shape.yaml | 19 +++++++ tests/samples/skipFunctions.json | 30 ---------- tests/samples/skipFunctions.yaml | 34 +++++++++++ tests/samples/skipStatics.json | 11 ---- tests/samples/skipStatics.yaml | 7 +++ tests/samples/tuples.json | 44 -------------- tests/samples/tuples.yaml | 39 +++++++++++++ tests/samples/typeInMethod.json | 18 ------ tests/samples/typeInMethod.yaml | 12 ++++ tests/samples/unions.json | 46 --------------- tests/samples/unions.yaml | 32 +++++++++++ tests/samples/unionsAndEnums.json | 52 ----------------- tests/samples/unionsAndEnums.yaml | 34 +++++++++++ tests/samples/unused.json | 3 - tests/samples/unused.yaml | 1 + tests/samples/valueAsType.json | 25 -------- tests/samples/valueAsType.yaml | 19 +++++++ tests/samples/values.json | 20 ------- tests/samples/values.yaml | 15 +++++ 73 files changed, 1050 insertions(+), 1180 deletions(-) create mode 100644 declarations/yaml-js.js delete mode 100644 tests/samples/any.json create mode 100644 tests/samples/any.yaml delete mode 100644 tests/samples/arrays.json create mode 100644 tests/samples/arrays.yaml delete mode 100644 tests/samples/disorder.json create mode 100644 tests/samples/disorder.yaml delete mode 100644 tests/samples/elementType.json create mode 100644 tests/samples/elementType.yaml delete mode 100644 tests/samples/empty.json create mode 100644 tests/samples/empty.yaml delete mode 100644 tests/samples/enums.json create mode 100644 tests/samples/enums.yaml delete mode 100644 tests/samples/exact.json create mode 100644 tests/samples/exact.yaml delete mode 100644 tests/samples/externals.json create mode 100644 tests/samples/externals.yaml delete mode 100644 tests/samples/generics.json create mode 100644 tests/samples/generics.yaml delete mode 100644 tests/samples/inheritance.json create mode 100644 tests/samples/inheritance.yaml delete mode 100644 tests/samples/intersections.json create mode 100644 tests/samples/intersections.yaml delete mode 100644 tests/samples/keys.json create mode 100644 tests/samples/keys.yaml delete mode 100644 tests/samples/maps.json create mode 100644 tests/samples/maps.yaml delete mode 100644 tests/samples/maybe.json create mode 100644 tests/samples/maybe.yaml delete mode 100644 tests/samples/mixed.json create mode 100644 tests/samples/mixed.yaml delete mode 100644 tests/samples/nonMaybeType.json create mode 100644 tests/samples/nonMaybeType.yaml delete mode 100644 tests/samples/objects.json create mode 100644 tests/samples/objects.yaml delete mode 100644 tests/samples/pragmas.json create mode 100644 tests/samples/pragmas.yaml delete mode 100644 tests/samples/primitives.json create mode 100644 tests/samples/primitives.yaml delete mode 100644 tests/samples/readOnly.json create mode 100644 tests/samples/readOnly.yaml delete mode 100644 tests/samples/references.json create mode 100644 tests/samples/references.yaml delete mode 100644 tests/samples/scopes.json create mode 100644 tests/samples/scopes.yaml delete mode 100644 tests/samples/shadowing.json create mode 100644 tests/samples/shadowing.yaml delete mode 100644 tests/samples/shape.json create mode 100644 tests/samples/shape.yaml delete mode 100644 tests/samples/skipFunctions.json create mode 100644 tests/samples/skipFunctions.yaml delete mode 100644 tests/samples/skipStatics.json create mode 100644 tests/samples/skipStatics.yaml delete mode 100644 tests/samples/tuples.json create mode 100644 tests/samples/tuples.yaml delete mode 100644 tests/samples/typeInMethod.json create mode 100644 tests/samples/typeInMethod.yaml delete mode 100644 tests/samples/unions.json create mode 100644 tests/samples/unions.yaml delete mode 100644 tests/samples/unionsAndEnums.json create mode 100644 tests/samples/unionsAndEnums.yaml delete mode 100644 tests/samples/unused.json create mode 100644 tests/samples/unused.yaml delete mode 100644 tests/samples/valueAsType.json create mode 100644 tests/samples/valueAsType.yaml delete mode 100644 tests/samples/values.json create mode 100644 tests/samples/values.yaml diff --git a/declarations/yaml-js.js b/declarations/yaml-js.js new file mode 100644 index 0000000..7813e9c --- /dev/null +++ b/declarations/yaml-js.js @@ -0,0 +1,4 @@ +declare module 'yaml-js' { + declare function load(string): mixed; + declare function dump(mixed, null, null, {indent?: number, width?: number}): string; +} diff --git a/package.json b/package.json index c5c7e2f..1100faa 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,8 @@ "json-stringify-pretty-compact": "^1.0.4", "optimist": "^0.6.1", "resolve": "^1.5.0", - "wu": "^2.1.0" + "wu": "^2.1.0", + "yaml-js": "^0.2.0" }, "devDependencies": { "@babel/cli": "^7.0.0-beta.32", diff --git a/src/cli.js b/src/cli.js index c271868..93c2aed 100644 --- a/src/cli.js +++ b/src/cli.js @@ -1,4 +1,4 @@ -import stringify from 'json-stringify-pretty-compact'; +import * as yaml from 'yaml-js'; import * as optimist from 'optimist'; import collect from '.'; @@ -17,7 +17,12 @@ function run(path: string) { try { const {types} = collect(path); - console.log(stringify(types, {maxLength: 100})); + const output = yaml.dump({types}, null, null, { + indent: 4, + width: 100, + }); + + console.log(output.trimRight()); } catch (ex) { console.error(ex.message); console.error(ex.stack); diff --git a/src/definitions.js b/src/definitions.js index 82df707..c5d4416 100644 --- a/src/definitions.js +++ b/src/definitions.js @@ -56,7 +56,7 @@ function processInterfaceDeclaration(ctx: Context, node: InterfaceDeclaration) { parts.push({ kind: 'reference', - to: type.id, + to: type.id.slice(), }); } @@ -89,7 +89,7 @@ function processClassDeclaration(ctx: Context, node: ClassDeclaration) { const baseRef = { kind: 'reference', - to: base.id, + to: base.id.slice(), }; ctx.define(name, { @@ -326,7 +326,7 @@ function makeReference(ctx: Context, node: GenericTypeAnnotation): ?Type { return { kind: 'reference', - to: type.id, + to: type.id.slice(), }; } diff --git a/src/globals.js b/src/globals.js index 06b0ec7..82d0279 100644 --- a/src/globals.js +++ b/src/globals.js @@ -136,7 +136,10 @@ function values(params: (?Type)[], resolve: TypeId => Type): ?Type { invariant(record.kind === 'record'); - const variants = wu(record.fields).pluck('value').toArray(); + const variants = wu(record.fields) + .pluck('value') + .map(clone) + .toArray(); // TODO: empty records. // TODO: dedup values. diff --git a/src/utils.js b/src/utils.js index 79c6bb5..64839c0 100644 --- a/src/utils.js +++ b/src/utils.js @@ -10,6 +10,21 @@ export function last(list: T[]): T { return list[list.length - 1]; } -export function clone(obj: T): T { - return Object.assign({}, obj); +export function clone(that: T): T { + if (that == null || typeof that !== 'object') { + return that; + } + + if (that instanceof Array) { + return that.map(clone); + } + + const obj = {}; + + for (const key in that) { + obj[key] = clone(that[key]); + } + + // TODO: we skip complex objects. + return (obj: $FlowFixMe); } diff --git a/tests/run.js b/tests/run.js index b0b50cf..748a7e0 100644 --- a/tests/run.js +++ b/tests/run.js @@ -1,6 +1,7 @@ import * as assert from 'assert'; import * as fs from 'fs'; import * as path from 'path'; +import * as yaml from 'yaml-js'; import collect from '../src'; @@ -10,11 +11,11 @@ function run(title) { // Run the collector only if the suite will be checked. before(() => { actual = collect(title + '.js'); - expected = JSON.parse(fs.readFileSync(title + '.json', 'utf8')); + expected = yaml.load(fs.readFileSync(title + '.yaml', 'utf8')); }); it('should provide expected types', () => { - assert.deepEqual(actual.types, expected.types); + assert.deepEqual((actual: any).types, (expected: any).types); }); } diff --git a/tests/samples/any.json b/tests/samples/any.json deleted file mode 100644 index 6611a85..0000000 --- a/tests/samples/any.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "types": [ - { - "id": ["any", "X"], - "kind": "any" - }, - { - "id": ["any", "Y"], - "kind": "record", - "fields": [{ - "name": "y", - "value": {"kind": "any"}, - "required": true - }] - } - ] -} diff --git a/tests/samples/any.yaml b/tests/samples/any.yaml new file mode 100644 index 0000000..3656b05 --- /dev/null +++ b/tests/samples/any.yaml @@ -0,0 +1,9 @@ +types: +- kind: any + id: [any, X] +- kind: record + fields: + - name: y + value: {kind: any} + required: true + id: [any, Y] diff --git a/tests/samples/arrays.json b/tests/samples/arrays.json deleted file mode 100644 index 2227089..0000000 --- a/tests/samples/arrays.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "types": [ - { - "id": ["arrays", "Type"], - "kind": "record", - "fields": [ - { - "name": "a", - "value": {"kind": "array", "items": {"kind": "string"}}, - "required": true - }, - { - "name": "b", - "value": {"kind": "array", "items": {"kind": "string"}}, - "required": true - }, - { - "name": "c", - "value": {"kind": "array", "items": {"kind": "string"}}, - "required": true - } - ] - }, - { - "id": ["arrays", "Interface"], - "kind": "record", - "fields": [ - { - "name": "a", - "value": {"kind": "array", "items": {"kind": "string"}}, - "required": true - }, - { - "name": "b", - "value": {"kind": "array", "items": {"kind": "string"}}, - "required": true - }, - { - "name": "c", - "value": {"kind": "array", "items": {"kind": "string"}}, - "required": true - } - ] - }, - { - "id": ["arrays", "Class"], - "kind": "record", - "fields": [ - { - "name": "a", - "value": {"kind": "array", "items": {"kind": "string"}}, - "required": true - }, - { - "name": "b", - "value": {"kind": "array", "items": {"kind": "string"}}, - "required": true - }, - { - "name": "c", - "value": {"kind": "array", "items": {"kind": "string"}}, - "required": true - } - ] - } - ] -} diff --git a/tests/samples/arrays.yaml b/tests/samples/arrays.yaml new file mode 100644 index 0000000..fbb99c3 --- /dev/null +++ b/tests/samples/arrays.yaml @@ -0,0 +1,55 @@ +types: +- kind: record + fields: + - name: a + value: + kind: array + items: {kind: string} + required: true + - name: b + value: + kind: array + items: {kind: string} + required: true + - name: c + value: + kind: array + items: {kind: string} + required: true + id: [arrays, Type] +- kind: record + fields: + - name: a + value: + kind: array + items: {kind: string} + required: true + - name: b + value: + kind: array + items: {kind: string} + required: true + - name: c + value: + kind: array + items: {kind: string} + required: true + id: [arrays, Interface] +- kind: record + fields: + - name: a + value: + kind: array + items: {kind: string} + required: true + - name: b + value: + kind: array + items: {kind: string} + required: true + - name: c + value: + kind: array + items: {kind: string} + required: true + id: [arrays, Class] diff --git a/tests/samples/disorder.json b/tests/samples/disorder.json deleted file mode 100644 index 47437ab..0000000 --- a/tests/samples/disorder.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "types": [ - { - "id": ["disorder", "Z"], - "kind": "string" - }, - { - "id": ["disorder", "Y"], - "kind": "record", - "fields": [ - {"name": "z", "value": {"kind": "reference", "to": ["disorder", "Z"]}, "required": true} - ] - }, - { - "id": ["disorder", "X"], - "kind": "record", - "fields": [ - {"name": "y", "value": {"kind": "reference", "to": ["disorder", "Y"]}, "required": true} - ] - } - ] -} diff --git a/tests/samples/disorder.yaml b/tests/samples/disorder.yaml new file mode 100644 index 0000000..a89bf7e --- /dev/null +++ b/tests/samples/disorder.yaml @@ -0,0 +1,19 @@ +types: +- kind: string + id: [disorder, Z] +- kind: record + fields: + - name: z + value: + kind: reference + to: [disorder, Z] + required: true + id: [disorder, Y] +- kind: record + fields: + - name: y + value: + kind: reference + to: [disorder, Y] + required: true + id: [disorder, X] diff --git a/tests/samples/elementType.json b/tests/samples/elementType.json deleted file mode 100644 index 3608956..0000000 --- a/tests/samples/elementType.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "types": [ - { - "id": ["elementType", "X", "boolean"], - "kind": "record", - "fields": [{ - "name": "x", - "value": { - "kind": "union", - "variants": [ - {"kind": "boolean"}, - {"kind": "string"} - ] - }, - "required": true - }] - }, - { - "id": ["elementType", "Y", "x"], - "kind": "record", - "fields": [{ - "name": "y", - "value": { - "kind": "union", - "variants": [ - {"kind": "boolean"}, - {"kind": "string"} - ] - }, - "required": true - }] - }, - { - "id": ["elementType", "Z"], - "kind": "union", - "variants": [ - {"kind": "boolean"}, - {"kind": "string"} - ] - } - ] -} diff --git a/tests/samples/elementType.yaml b/tests/samples/elementType.yaml new file mode 100644 index 0000000..f6bb97f --- /dev/null +++ b/tests/samples/elementType.yaml @@ -0,0 +1,26 @@ +types: +- kind: record + fields: + - name: x + value: + kind: union + variants: + - {kind: boolean} + - {kind: string} + required: true + id: [elementType, X, boolean] +- kind: record + fields: + - name: y + value: + kind: union + variants: + - {kind: boolean} + - {kind: string} + required: true + id: [elementType, Y, x] +- kind: union + variants: + - {kind: boolean} + - {kind: string} + id: [elementType, Z] diff --git a/tests/samples/empty.json b/tests/samples/empty.json deleted file mode 100644 index e0d4d26..0000000 --- a/tests/samples/empty.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "types": [] -} diff --git a/tests/samples/empty.yaml b/tests/samples/empty.yaml new file mode 100644 index 0000000..77d540f --- /dev/null +++ b/tests/samples/empty.yaml @@ -0,0 +1 @@ +types: [] diff --git a/tests/samples/enums.json b/tests/samples/enums.json deleted file mode 100644 index 21efc9c..0000000 --- a/tests/samples/enums.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "types": [ - { - "id": ["enums", "Type"], - "kind": "record", - "fields": [{ - "name": "a", - "value": { - "kind": "union", - "variants": [ - {"kind": "literal", "value": "one"}, - {"kind": "literal", "value": "two"} - ] - }, - "required": true - }] - }, - { - "id": ["enums", "Interface"], - "kind": "record", - "fields": [{ - "name": "a", - "value": { - "kind": "union", - "variants": [ - {"kind": "literal", "value": "one"}, - {"kind": "literal", "value": "two"} - ] - }, - "required": true - }] - }, - { - "id": ["enums", "Class"], - "kind": "record", - "fields": [{ - "name": "a", - "value": { - "kind": "union", - "variants": [ - {"kind": "literal", "value": "one"}, - {"kind": "literal", "value": "two"} - ] - }, - "required": true - }] - } - ] -} diff --git a/tests/samples/enums.yaml b/tests/samples/enums.yaml new file mode 100644 index 0000000..7c56b70 --- /dev/null +++ b/tests/samples/enums.yaml @@ -0,0 +1,31 @@ +types: +- kind: record + fields: + - name: a + value: + kind: union + variants: + - {kind: literal, value: one} + - {kind: literal, value: two} + required: true + id: [enums, Type] +- kind: record + fields: + - name: a + value: + kind: union + variants: + - {kind: literal, value: one} + - {kind: literal, value: two} + required: true + id: [enums, Interface] +- kind: record + fields: + - name: a + value: + kind: union + variants: + - {kind: literal, value: one} + - {kind: literal, value: two} + required: true + id: [enums, Class] diff --git a/tests/samples/exact.json b/tests/samples/exact.json deleted file mode 100644 index b399291..0000000 --- a/tests/samples/exact.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "types": [ - { - "id": ["exact", "X"], - "kind": "record", - "fields": [ - {"name": "x", "value": {"kind": "string"}, "required": true}, - {"name": "y", "value": {"kind": "boolean"}, "required": true} - ] - }, - { - "id": ["exact", "Y"], - "kind": "reference", - "to": ["exact", "X"] - }, - { - "id": ["exact", "Z"], - "kind": "record", - "fields": [ - {"name": "z", "value": {"kind": "string"}, "required": true} - ] - } - ] -} diff --git a/tests/samples/exact.yaml b/tests/samples/exact.yaml new file mode 100644 index 0000000..6226fbc --- /dev/null +++ b/tests/samples/exact.yaml @@ -0,0 +1,19 @@ +types: +- kind: record + fields: + - name: x + value: {kind: string} + required: true + - name: y + value: {kind: boolean} + required: true + id: [exact, X] +- kind: reference + to: [exact, X] + id: [exact, Y] +- kind: record + fields: + - name: z + value: {kind: string} + required: true + id: [exact, Z] diff --git a/tests/samples/externals.json b/tests/samples/externals.json deleted file mode 100644 index 65b2913..0000000 --- a/tests/samples/externals.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "types": [ - { - "id": ["externals", "first", "A"], - "kind": "record", - "fields": [{"name": "a", "value": {"kind": "boolean"}, "required": true}] - }, - { - "id": ["externals", "first", "B"], - "kind": "record", - "fields": [{"name": "b", "value": {"kind": "string"}, "required": true}] - }, - { - "id": ["externals", "first", "CC"], - "kind": "record", - "fields": [{"name": "c", "value": {"kind": "number", "repr": "f64"}, "required": true}] - }, - { - "id": ["externals", "first", "D"], - "kind": "record", - "fields": [{"name": "d", "value": {"kind": "number", "repr": "f64"}, "required": true}] - }, - { - "id": ["externals", "X"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "reference", "to": ["externals", "first", "A"]}, "required": true}, - {"name": "b", "value": {"kind": "reference", "to": ["externals", "first", "B"]}, "required": true}, - {"name": "c", "value": {"kind": "reference", "to": ["externals", "first", "CC"]}, "required": true}, - {"name": "d", "value": {"kind": "reference", "to": ["externals", "first", "D"]}, "required": true} - ] - }, - { - "id": ["externals", "second", "N"], - "kind": "record", - "fields": [{"name": "n", "value": {"kind": "boolean"}, "required": true}] - }, - { - "id": ["externals", "second", "M"], - "kind": "record", - "fields": [{"name": "m", "value": {"kind": "string"}, "required": true}] - }, - { - "id": ["externals", "second", "KK"], - "kind": "record", - "fields": [{"name": "k", "value": {"kind": "number", "repr": "f64"}, "required": true}] - }, - { - "id": ["externals", "second", "P"], - "kind": "record", - "fields": [{"name": "p", "value": {"kind": "number", "repr": "f64"}, "required": true}] - }, - { - "id": ["externals", "Y"], - "kind": "record", - "fields": [ - {"name": "n", "value": {"kind": "reference", "to": ["externals", "second", "N"]}, "required": true}, - {"name": "m", "value": {"kind": "reference", "to": ["externals", "second", "M"]}, "required": true}, - {"name": "k", "value": {"kind": "reference", "to": ["externals", "second", "KK"]}, "required": true}, - {"name": "p", "value": {"kind": "reference", "to": ["externals", "second", "P"]}, "required": true} - ] - } - ] -} diff --git a/tests/samples/externals.yaml b/tests/samples/externals.yaml new file mode 100644 index 0000000..a61f940 --- /dev/null +++ b/tests/samples/externals.yaml @@ -0,0 +1,95 @@ +types: +- kind: record + fields: + - name: a + value: {kind: boolean} + required: true + id: [externals, first, A] +- kind: record + fields: + - name: b + value: {kind: string} + required: true + id: [externals, first, B] +- kind: record + fields: + - name: c + value: {kind: number, repr: f64} + required: true + id: [externals, first, CC] +- kind: record + fields: + - name: d + value: {kind: number, repr: f64} + required: true + id: [externals, first, D] +- kind: record + fields: + - name: a + value: + kind: reference + to: [externals, first, A] + required: true + - name: b + value: + kind: reference + to: [externals, first, B] + required: true + - name: c + value: + kind: reference + to: [externals, first, CC] + required: true + - name: d + value: + kind: reference + to: [externals, first, D] + required: true + id: [externals, X] +- kind: record + fields: + - name: n + value: {kind: boolean} + required: true + id: [externals, second, N] +- kind: record + fields: + - name: m + value: {kind: string} + required: true + id: [externals, second, M] +- kind: record + fields: + - name: k + value: {kind: number, repr: f64} + required: true + id: [externals, second, KK] +- kind: record + fields: + - name: p + value: {kind: number, repr: f64} + required: true + id: [externals, second, P] +- kind: record + fields: + - name: n + value: + kind: reference + to: [externals, second, N] + required: true + - name: m + value: + kind: reference + to: [externals, second, M] + required: true + - name: k + value: + kind: reference + to: [externals, second, KK] + required: true + - name: p + value: + kind: reference + to: [externals, second, P] + required: true + id: [externals, Y] diff --git a/tests/samples/generics.json b/tests/samples/generics.json deleted file mode 100644 index 7bca07a..0000000 --- a/tests/samples/generics.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "types": [ - { - "id": ["generics", "A", "string", "boolean"], - "kind": "record", - "fields": [ - {"name": "t", "value": {"kind": "string"}, "required": true}, - {"name": "k", "value": {"kind": "boolean"}, "required": true} - ] - }, - { - "id": ["generics", "X"], - "kind": "record", - "fields": [{ - "name": "a", - "value": {"kind": "reference", "to": ["generics", "A", "string", "boolean"]}, - "required": true - }] - }, - { - "id": ["generics", "A", "f64", "X"], - "kind": "record", - "fields": [ - {"name": "t", "value": {"kind": "number", "repr": "f64"}, "required": true}, - {"name": "k", "value": {"kind": "reference", "to": ["generics", "X"]}, "required": true} - ] - }, - { - "id": ["generics", "Y"], - "kind": "record", - "fields": [{ - "name": "a", - "value": {"kind": "reference", "to": ["generics", "A", "f64", "X"]}, - "required": true - }] - } - ] -} diff --git a/tests/samples/generics.yaml b/tests/samples/generics.yaml new file mode 100644 index 0000000..9637fa3 --- /dev/null +++ b/tests/samples/generics.yaml @@ -0,0 +1,37 @@ +types: +- kind: record + fields: + - name: t + value: {kind: string} + required: true + - name: k + value: {kind: boolean} + required: true + id: [generics, A, string, boolean] +- kind: record + fields: + - name: a + value: + kind: reference + to: [generics, A, string, boolean] + required: true + id: [generics, X] +- kind: record + fields: + - name: t + value: {kind: number, repr: f64} + required: true + - name: k + value: + kind: reference + to: [generics, X] + required: true + id: [generics, A, f64, X] +- kind: record + fields: + - name: a + value: + kind: reference + to: [generics, A, f64, X] + required: true + id: [generics, Y] diff --git a/tests/samples/inheritance.json b/tests/samples/inheritance.json deleted file mode 100644 index df40423..0000000 --- a/tests/samples/inheritance.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "types": [ - { - "id": ["inheritance", "A"], - "kind": "record", - "fields": [{"name": "a", "value": {"kind": "number", "repr": "f64"}, "required": true}] - }, - { - "id": ["inheritance", "B"], - "kind": "intersection", - "parts": [ - {"kind": "reference", "to": ["inheritance", "A"]}, - { - "kind": "record", - "fields": [{"name": "b", "value": {"kind": "string"}, "required": true}] - } - ] - }, - { - "id": ["inheritance", "C"], - "kind": "intersection", - "parts": [ - {"kind": "reference", "to": ["inheritance", "B"]}, - { - "kind": "record", - "fields": [{"name": "c", "value": {"kind": "boolean"}, "required": true}] - } - ] - }, - { - "id": ["inheritance", "X"], - "kind": "record", - "fields": [{"name": "x", "value": {"kind": "number", "repr": "f64"}, "required": true}] - }, - { - "id": ["inheritance", "Y"], - "kind": "intersection", - "parts": [ - {"kind": "reference", "to": ["inheritance", "X"]}, - { - "kind": "record", - "fields": [{"name": "y", "value": {"kind": "string"}, "required": true}] - } - ] - }, - { - "id": ["inheritance", "Z"], - "kind": "intersection", - "parts": [ - {"kind": "reference", "to": ["inheritance", "Y"]}, - { - "kind": "record", - "fields": [{"name": "z", "value": {"kind": "boolean"}, "required": true}] - } - ] - } - ] -} diff --git a/tests/samples/inheritance.yaml b/tests/samples/inheritance.yaml new file mode 100644 index 0000000..dee941c --- /dev/null +++ b/tests/samples/inheritance.yaml @@ -0,0 +1,53 @@ +types: +- kind: record + fields: + - name: a + value: {kind: number, repr: f64} + required: true + id: [inheritance, A] +- kind: intersection + parts: + - kind: reference + to: [inheritance, A] + - kind: record + fields: + - name: b + value: {kind: string} + required: true + id: [inheritance, B] +- kind: intersection + parts: + - kind: reference + to: [inheritance, B] + - kind: record + fields: + - name: c + value: {kind: boolean} + required: true + id: [inheritance, C] +- kind: record + fields: + - name: x + value: {kind: number, repr: f64} + required: true + id: [inheritance, X] +- kind: intersection + parts: + - kind: reference + to: [inheritance, X] + - kind: record + fields: + - name: y + value: {kind: string} + required: true + id: [inheritance, Y] +- kind: intersection + parts: + - kind: reference + to: [inheritance, Y] + - kind: record + fields: + - name: z + value: {kind: boolean} + required: true + id: [inheritance, Z] diff --git a/tests/samples/intersections.json b/tests/samples/intersections.json deleted file mode 100644 index 436adb6..0000000 --- a/tests/samples/intersections.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "types": [ - { - "id": ["intersections", "A"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "number", "repr": "f64"}, "required": true} - ] - }, - { - "id": ["intersections", "B"], - "kind": "record", - "fields": [ - {"name": "b", "value": {"kind": "string"}, "required": true} - ] - }, - { - "id": ["intersections", "X"], - "kind": "intersection", - "parts": [ - {"kind": "reference", "to": ["intersections", "A"]}, - {"kind": "reference", "to": ["intersections", "B"]} - ] - }, - { - "id": ["intersections", "C"], - "kind": "record", - "fields": [ - {"name": "c", "value": {"kind": "boolean"}, "required": true} - ] - }, - { - "id": ["intersections", "Y"], - "kind": "record", - "fields": [{ - "name": "y", - "value": { - "kind": "intersection", - "parts": [ - {"kind": "reference", "to": ["intersections", "A"]}, - {"kind": "reference", "to": ["intersections", "B"]}, - {"kind": "reference", "to": ["intersections", "C"]} - ] - }, - "required": true - }] - }, - { - "id": ["intersections", "Z"], - "kind": "record", - "fields": [{ - "name": "z", - "value": { - "kind": "intersection", - "parts": [ - {"kind": "reference", "to": ["intersections", "A"]}, - {"kind": "reference", "to": ["intersections", "C"]} - ] - }, - "required": true - }] - } - ] -} diff --git a/tests/samples/intersections.yaml b/tests/samples/intersections.yaml new file mode 100644 index 0000000..263b8f7 --- /dev/null +++ b/tests/samples/intersections.yaml @@ -0,0 +1,52 @@ +types: +- kind: record + fields: + - name: a + value: {kind: number, repr: f64} + required: true + id: [intersections, A] +- kind: record + fields: + - name: b + value: {kind: string} + required: true + id: [intersections, B] +- kind: intersection + parts: + - kind: reference + to: [intersections, A] + - kind: reference + to: [intersections, B] + id: [intersections, X] +- kind: record + fields: + - name: c + value: {kind: boolean} + required: true + id: [intersections, C] +- kind: record + fields: + - name: y + value: + kind: intersection + parts: + - kind: reference + to: [intersections, A] + - kind: reference + to: [intersections, B] + - kind: reference + to: [intersections, C] + required: true + id: [intersections, Y] +- kind: record + fields: + - name: z + value: + kind: intersection + parts: + - kind: reference + to: [intersections, A] + - kind: reference + to: [intersections, C] + required: true + id: [intersections, Z] diff --git a/tests/samples/keys.json b/tests/samples/keys.json deleted file mode 100644 index a50a656..0000000 --- a/tests/samples/keys.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "types": [ - { - "id": ["keys", "X"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "string"}, "required": true}, - {"name": "b", "value": {"kind": "boolean"}, "required": true} - ] - }, - { - "id": ["keys", "Y"], - "kind": "union", - "variants": [ - {"kind": "literal", "value": "a"}, - {"kind": "literal", "value": "b"} - ] - } - ] -} diff --git a/tests/samples/keys.yaml b/tests/samples/keys.yaml new file mode 100644 index 0000000..d6dae00 --- /dev/null +++ b/tests/samples/keys.yaml @@ -0,0 +1,15 @@ +types: +- kind: record + fields: + - name: a + value: {kind: string} + required: true + - name: b + value: {kind: boolean} + required: true + id: [keys, X] +- kind: union + variants: + - {kind: literal, value: a} + - {kind: literal, value: b} + id: [keys, Y] diff --git a/tests/samples/maps.json b/tests/samples/maps.json deleted file mode 100644 index d863b9a..0000000 --- a/tests/samples/maps.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "types": [ - { - "id": ["maps", "Type"], - "kind": "map", - "keys": {"kind": "string"}, - "values": {"kind": "boolean"} - }, - { - "id": ["maps", "Interface"], - "kind": "map", - "keys": {"kind": "string"}, - "values": {"kind": "boolean"} - }, - { - "id": ["maps", "Couple"], - "kind": "intersection", - "parts": [ - { - "kind": "map", - "keys": {"kind": "string"}, - "values": {"kind": "boolean"} - }, - { - "kind": "map", - "keys": {"kind": "number", "repr": "f64"}, - "values": {"kind": "string"} - } - ] - }, - { - "id": ["maps", "Mix"], - "kind": "intersection", - "parts": [ - { - "kind": "record", - "fields": [{ - "name": "foo", - "value": {"kind": "string"}, - "required": true - }] - }, - { - "kind": "map", - "keys": {"kind": "string"}, - "values": {"kind": "boolean"} - } - ] - } - ] -} diff --git a/tests/samples/maps.yaml b/tests/samples/maps.yaml new file mode 100644 index 0000000..ea22f92 --- /dev/null +++ b/tests/samples/maps.yaml @@ -0,0 +1,29 @@ +types: +- kind: map + keys: {kind: string} + values: {kind: boolean} + id: [maps, Type] +- kind: map + keys: {kind: string} + values: {kind: boolean} + id: [maps, Interface] +- kind: intersection + parts: + - kind: map + keys: {kind: string} + values: {kind: boolean} + - kind: map + keys: {kind: number, repr: f64} + values: {kind: string} + id: [maps, Couple] +- kind: intersection + parts: + - kind: record + fields: + - name: foo + value: {kind: string} + required: true + - kind: map + keys: {kind: string} + values: {kind: boolean} + id: [maps, Mix] diff --git a/tests/samples/maybe.json b/tests/samples/maybe.json deleted file mode 100644 index 83ff8a3..0000000 --- a/tests/samples/maybe.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "types": [ - { - "id": ["maybe", "X"], - "kind": "record", - "fields": [ - { - "name": "x", - "value": {"kind": "maybe", "value": {"kind": "string"}}, - "required": true - }, - { - "name": "xx", - "value": {"kind": "maybe", "value": {"kind": "array", "items": {"kind": "string"}}}, - "required": true - }, - { - "name": "xxx", - "value": {"kind": "array", "items": {"kind": "maybe", "value": {"kind": "string"}}}, - "required": true - } - ] - }, - { - "id": ["maybe", "Y"], - "kind": "record", - "fields": [ - { - "name": "y", - "value": {"kind": "maybe", "value": {"kind": "string"}}, - "required": true - }, - { - "name": "yy", - "value": {"kind": "maybe", "value": {"kind": "array", "items": {"kind": "string"}}}, - "required": true - }, - { - "name": "yyy", - "value": {"kind": "array", "items": {"kind": "maybe", "value": {"kind": "string"}}}, - "required": true - } - ] - }, - { - "id": ["maybe", "Z"], - "kind": "record", - "fields": [ - { - "name": "z", - "value": {"kind": "maybe", "value": {"kind": "string"}}, - "required": true - }, - { - "name": "zz", - "value": {"kind": "maybe", "value": {"kind": "array", "items": {"kind": "string"}}}, - "required": true - }, - { - "name": "zzz", - "value": {"kind": "array", "items": {"kind": "maybe", "value": {"kind": "string"}}}, - "required": true - } - ] - } - ] -} diff --git a/tests/samples/maybe.yaml b/tests/samples/maybe.yaml new file mode 100644 index 0000000..05c76af --- /dev/null +++ b/tests/samples/maybe.yaml @@ -0,0 +1,67 @@ +types: +- kind: record + fields: + - name: x + value: + kind: maybe + value: {kind: string} + required: true + - name: xx + value: + kind: maybe + value: + kind: array + items: {kind: string} + required: true + - name: xxx + value: + kind: array + items: + kind: maybe + value: {kind: string} + required: true + id: [maybe, X] +- kind: record + fields: + - name: y + value: + kind: maybe + value: {kind: string} + required: true + - name: yy + value: + kind: maybe + value: + kind: array + items: {kind: string} + required: true + - name: yyy + value: + kind: array + items: + kind: maybe + value: {kind: string} + required: true + id: [maybe, Y] +- kind: record + fields: + - name: z + value: + kind: maybe + value: {kind: string} + required: true + - name: zz + value: + kind: maybe + value: + kind: array + items: {kind: string} + required: true + - name: zzz + value: + kind: array + items: + kind: maybe + value: {kind: string} + required: true + id: [maybe, Z] diff --git a/tests/samples/mixed.json b/tests/samples/mixed.json deleted file mode 100644 index 302e6f0..0000000 --- a/tests/samples/mixed.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "types": [ - { - "id": ["mixed", "X"], - "kind": "mixed" - }, - { - "id": ["mixed", "Y"], - "kind": "record", - "fields": [{ - "name": "y", - "value": {"kind": "mixed"}, - "required": true - }] - } - ] -} diff --git a/tests/samples/mixed.yaml b/tests/samples/mixed.yaml new file mode 100644 index 0000000..ff30c6e --- /dev/null +++ b/tests/samples/mixed.yaml @@ -0,0 +1,9 @@ +types: +- kind: mixed + id: [mixed, X] +- kind: record + fields: + - name: y + value: {kind: mixed} + required: true + id: [mixed, Y] diff --git a/tests/samples/nonMaybeType.json b/tests/samples/nonMaybeType.json deleted file mode 100644 index 37cc667..0000000 --- a/tests/samples/nonMaybeType.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "types": [ - { - "id": ["nonMaybeType", "X"], - "kind": "maybe", - "value": {"kind": "string"} - }, - { - "id": ["nonMaybeType", "Y"], - "kind": "string" - } - ] -} diff --git a/tests/samples/nonMaybeType.yaml b/tests/samples/nonMaybeType.yaml new file mode 100644 index 0000000..cd4bca0 --- /dev/null +++ b/tests/samples/nonMaybeType.yaml @@ -0,0 +1,6 @@ +types: +- kind: maybe + value: {kind: string} + id: [nonMaybeType, X] +- kind: string + id: [nonMaybeType, Y] diff --git a/tests/samples/objects.json b/tests/samples/objects.json deleted file mode 100644 index beb87ce..0000000 --- a/tests/samples/objects.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "types": [ - { - "id": ["objects", "X"], - "kind": "map", - "keys": {"kind": "mixed"}, - "values": {"kind": "mixed"} - }, - { - "id": ["objects", "Y"], - "kind": "record", - "fields": [{ - "name": "y", - "value": { - "kind": "map", - "keys": {"kind": "mixed"}, - "values": {"kind": "mixed"} - }, - "required": true - }] - }, - { - "id": ["objects", "Z"], - "kind": "record", - "fields": [{ - "name": "z", - "value": { - "kind": "map", - "keys": {"kind": "mixed"}, - "values": {"kind": "mixed"} - }, - "required": true - }] - } - ] -} diff --git a/tests/samples/objects.yaml b/tests/samples/objects.yaml new file mode 100644 index 0000000..4b1e7be --- /dev/null +++ b/tests/samples/objects.yaml @@ -0,0 +1,23 @@ +types: +- kind: map + keys: {kind: mixed} + values: {kind: mixed} + id: [objects, X] +- kind: record + fields: + - name: y + value: + kind: map + keys: {kind: mixed} + values: {kind: mixed} + required: true + id: [objects, Y] +- kind: record + fields: + - name: z + value: + kind: map + keys: {kind: mixed} + values: {kind: mixed} + required: true + id: [objects, Z] diff --git a/tests/samples/pragmas.json b/tests/samples/pragmas.json deleted file mode 100644 index 6084650..0000000 --- a/tests/samples/pragmas.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "types": [ - { - "id": ["pragmas", "Type"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "number", "repr": "i32"}, "required": true}, - {"name": "b", "value": {"kind": "number", "repr": "i64"}, "required": true}, - {"name": "c", "value": {"kind": "number", "repr": "f32"}, "required": true}, - {"name": "d", "value": {"kind": "number", "repr": "f64"}, "required": true} - ] - }, - { - "id": ["pragmas", "Interface"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "number", "repr": "i32"}, "required": true}, - {"name": "b", "value": {"kind": "number", "repr": "i64"}, "required": true}, - {"name": "c", "value": {"kind": "number", "repr": "f32"}, "required": true}, - {"name": "d", "value": {"kind": "number", "repr": "f64"}, "required": true}, - {"name": "e", "value": {"kind": "string"}, "required": true} - ] - }, - { - "id": ["pragmas", "Class"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "number", "repr": "i32"}, "required": true}, - {"name": "b", "value": {"kind": "number", "repr": "i64"}, "required": true}, - {"name": "c", "value": {"kind": "number", "repr": "f32"}, "required": true}, - {"name": "d", "value": {"kind": "number", "repr": "f64"}, "required": true} - ] - } - ] -} diff --git a/tests/samples/pragmas.yaml b/tests/samples/pragmas.yaml new file mode 100644 index 0000000..ebdddd9 --- /dev/null +++ b/tests/samples/pragmas.yaml @@ -0,0 +1,49 @@ +types: +- kind: record + fields: + - name: a + value: {kind: number, repr: i32} + required: true + - name: b + value: {kind: number, repr: i64} + required: true + - name: c + value: {kind: number, repr: f32} + required: true + - name: d + value: {kind: number, repr: f64} + required: true + id: [pragmas, Type] +- kind: record + fields: + - name: a + value: {kind: number, repr: i32} + required: true + - name: b + value: {kind: number, repr: i64} + required: true + - name: c + value: {kind: number, repr: f32} + required: true + - name: d + value: {kind: number, repr: f64} + required: true + - name: e + value: {kind: string} + required: true + id: [pragmas, Interface] +- kind: record + fields: + - name: a + value: {kind: number, repr: i32} + required: true + - name: b + value: {kind: number, repr: i64} + required: true + - name: c + value: {kind: number, repr: f32} + required: true + - name: d + value: {kind: number, repr: f64} + required: true + id: [pragmas, Class] diff --git a/tests/samples/primitives.json b/tests/samples/primitives.json deleted file mode 100644 index d8601c5..0000000 --- a/tests/samples/primitives.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "types": [ - { - "id": ["primitives", "Type"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "string"}, "required": true}, - {"name": "b", "value": {"kind": "number", "repr": "f64"}, "required": true}, - {"name": "c", "value": {"kind": "boolean"}, "required": true}, - {"name": "d", "value": {"kind": "literal", "value": null}, "required": true} - ] - }, - { - "id": ["primitives", "Interface"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "string"}, "required": true}, - {"name": "b", "value": {"kind": "number", "repr": "f64"}, "required": true}, - {"name": "c", "value": {"kind": "boolean"}, "required": true}, - {"name": "d", "value": {"kind": "literal", "value": null}, "required": true} - ] - }, - { - "id": ["primitives", "Class"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "string"}, "required": true}, - {"name": "b", "value": {"kind": "number", "repr": "f64"}, "required": true}, - {"name": "c", "value": {"kind": "boolean"}, "required": true}, - {"name": "d", "value": {"kind": "literal", "value": null}, "required": true} - ] - } - ] -} diff --git a/tests/samples/primitives.yaml b/tests/samples/primitives.yaml new file mode 100644 index 0000000..66c9261 --- /dev/null +++ b/tests/samples/primitives.yaml @@ -0,0 +1,46 @@ +types: +- kind: record + fields: + - name: a + value: {kind: string} + required: true + - name: b + value: {kind: number, repr: f64} + required: true + - name: c + value: {kind: boolean} + required: true + - name: d + value: {kind: literal, value: null} + required: true + id: [primitives, Type] +- kind: record + fields: + - name: a + value: {kind: string} + required: true + - name: b + value: {kind: number, repr: f64} + required: true + - name: c + value: {kind: boolean} + required: true + - name: d + value: {kind: literal, value: null} + required: true + id: [primitives, Interface] +- kind: record + fields: + - name: a + value: {kind: string} + required: true + - name: b + value: {kind: number, repr: f64} + required: true + - name: c + value: {kind: boolean} + required: true + - name: d + value: {kind: literal, value: null} + required: true + id: [primitives, Class] diff --git a/tests/samples/readOnly.json b/tests/samples/readOnly.json deleted file mode 100644 index ef99e6b..0000000 --- a/tests/samples/readOnly.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "types": [ - { - "id": ["readOnly", "X"], - "kind": "record", - "fields": [ - {"name": "x", "value": {"kind": "string"}, "required": true}, - {"name": "y", "value": {"kind": "boolean"}, "required": true} - ] - }, - { - "id": ["readOnly", "Y"], - "kind": "reference", - "to": ["readOnly", "X"] - }, - { - "id": ["readOnly", "Z"], - "kind": "record", - "fields": [ - {"name": "z", "value": {"kind": "string"}, "required": true} - ] - } - ] -} diff --git a/tests/samples/readOnly.yaml b/tests/samples/readOnly.yaml new file mode 100644 index 0000000..e17f26e --- /dev/null +++ b/tests/samples/readOnly.yaml @@ -0,0 +1,19 @@ +types: +- kind: record + fields: + - name: x + value: {kind: string} + required: true + - name: y + value: {kind: boolean} + required: true + id: [readOnly, X] +- kind: reference + to: [readOnly, X] + id: [readOnly, Y] +- kind: record + fields: + - name: z + value: {kind: string} + required: true + id: [readOnly, Z] diff --git a/tests/samples/references.json b/tests/samples/references.json deleted file mode 100644 index 0816335..0000000 --- a/tests/samples/references.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "types": [ - { - "id": ["references", "A"], - "kind": "string" - }, - { - "id": ["references", "Type"], - "kind": "record", - "fields": [ - { - "name": "a", - "value": {"kind": "reference", "to": ["references", "A"]}, - "required": true - }, - { - "name": "b", - "value": {"kind": "array", "items": {"kind": "reference", "to": ["references", "A"]}}, - "required": true - } - ] - }, - { - "id": ["references", "Interface"], - "kind": "record", - "fields": [ - { - "name": "a", - "value": {"kind": "reference", "to": ["references", "A"]}, - "required": true - }, - { - "name": "b", - "value": {"kind": "array", "items": {"kind": "reference", "to": ["references", "A"]}}, - "required": true - } - ] - }, - { - "id": ["references", "Class"], - "kind": "record", - "fields": [ - { - "name": "a", - "value": {"kind": "reference", "to": ["references", "A"]}, - "required": true - }, - { - "name": "b", - "value": {"kind": "array", "items": {"kind": "reference", "to": ["references", "A"]}}, - "required": true - } - ] - } - ] -} diff --git a/tests/samples/references.yaml b/tests/samples/references.yaml new file mode 100644 index 0000000..b5cb55f --- /dev/null +++ b/tests/samples/references.yaml @@ -0,0 +1,48 @@ +types: +- kind: string + id: [references, A] +- kind: record + fields: + - name: a + value: + kind: reference + to: [references, A] + required: true + - name: b + value: + kind: array + items: + kind: reference + to: [references, A] + required: true + id: [references, Type] +- kind: record + fields: + - name: a + value: + kind: reference + to: [references, A] + required: true + - name: b + value: + kind: array + items: + kind: reference + to: [references, A] + required: true + id: [references, Interface] +- kind: record + fields: + - name: a + value: + kind: reference + to: [references, A] + required: true + - name: b + value: + kind: array + items: + kind: reference + to: [references, A] + required: true + id: [references, Class] diff --git a/tests/samples/scopes.json b/tests/samples/scopes.json deleted file mode 100644 index 4f6ca1b..0000000 --- a/tests/samples/scopes.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "types": [ - { - "id": ["scopes", "2", "X"], - "kind": "boolean" - }, - { - "id": ["scopes", "1", "Z"], - "kind": "string" - }, - { - "id": ["scopes", "2", "Y"], - "kind": "record", - "fields": [ - {"name": "x", "value": {"kind": "reference", "to": ["scopes", "2", "X"]}, "required": true}, - {"name": "z", "value": {"kind": "reference", "to": ["scopes", "1", "Z"]}, "required": true} - ] - }, - { - "id": ["scopes", "3", "X"], - "kind": "number", - "repr": "f64" - }, - { - "id": ["scopes", "3", "Y"], - "kind": "record", - "fields": [ - {"name": "x", "value": {"kind": "reference", "to": ["scopes", "3", "X"]}, "required": true}, - {"name": "z", "value": {"kind": "reference", "to": ["scopes", "1", "Z"]}, "required": true} - ] - }, - { - "id": ["scopes", "4", "X"], - "kind": "string" - }, - { - "id": ["scopes", "4", "Y"], - "kind": "record", - "fields": [ - {"name": "x", "value": {"kind": "reference", "to": ["scopes", "4", "X"]}, "required": true}, - {"name": "z", "value": {"kind": "reference", "to": ["scopes", "1", "Z"]}, "required": true} - ] - }, - { - "id": ["scopes", "1", "X"], - "kind": "number", - "repr": "f64" - }, - { - "id": ["scopes", "1", "Y"], - "kind": "record", - "fields": [ - {"name": "x", "value": {"kind": "reference", "to": ["scopes", "1", "X"]}, "required": true} - ] - }, - { - "id": ["scopes", "X"], - "kind": "string" - }, - { - "id": ["scopes", "Y"], - "kind": "record", - "fields": [ - {"name": "x", "value": {"kind": "reference", "to": ["scopes", "X"]}, "required": true} - ] - } - ] -} diff --git a/tests/samples/scopes.yaml b/tests/samples/scopes.yaml new file mode 100644 index 0000000..d60a1c9 --- /dev/null +++ b/tests/samples/scopes.yaml @@ -0,0 +1,70 @@ +types: +- kind: boolean + id: [scopes, '2', X] +- kind: string + id: [scopes, '1', Z] +- kind: record + fields: + - name: x + value: + kind: reference + to: [scopes, '2', X] + required: true + - name: z + value: + kind: reference + to: [scopes, '1', Z] + required: true + id: [scopes, '2', Y] +- kind: number + repr: f64 + id: [scopes, '3', X] +- kind: record + fields: + - name: x + value: + kind: reference + to: [scopes, '3', X] + required: true + - name: z + value: + kind: reference + to: [scopes, '1', Z] + required: true + id: [scopes, '3', Y] +- kind: string + id: [scopes, '4', X] +- kind: record + fields: + - name: x + value: + kind: reference + to: [scopes, '4', X] + required: true + - name: z + value: + kind: reference + to: [scopes, '1', Z] + required: true + id: [scopes, '4', Y] +- kind: number + repr: f64 + id: [scopes, '1', X] +- kind: record + fields: + - name: x + value: + kind: reference + to: [scopes, '1', X] + required: true + id: [scopes, '1', Y] +- kind: string + id: [scopes, X] +- kind: record + fields: + - name: x + value: + kind: reference + to: [scopes, X] + required: true + id: [scopes, Y] diff --git a/tests/samples/shadowing.json b/tests/samples/shadowing.json deleted file mode 100644 index 6911372..0000000 --- a/tests/samples/shadowing.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "types": [ - { - "id": ["shadowing", "1", "Buffer"], - "kind": "record", - "fields": [] - }, - { - "id": ["shadowing", "1", "Y"], - "kind": "record", - "fields": [ - { - "name": "y", - "value": {"kind": "reference", "to": ["shadowing", "1", "Buffer"]}, - "required": true - } - ] - }, - { - "id": ["shadowing", "X"], - "kind": "record", - "fields": [ - { - "name": "x", - "value": {"kind": "reference", "to": ["Buffer"]}, - "required": true - } - ] - } - ] -} diff --git a/tests/samples/shadowing.yaml b/tests/samples/shadowing.yaml new file mode 100644 index 0000000..22a6de5 --- /dev/null +++ b/tests/samples/shadowing.yaml @@ -0,0 +1,20 @@ +types: +- kind: record + fields: [] + id: [shadowing, '1', Buffer] +- kind: record + fields: + - name: y + value: + kind: reference + to: [shadowing, '1', Buffer] + required: true + id: [shadowing, '1', Y] +- kind: record + fields: + - name: x + value: + kind: reference + to: [Buffer] + required: true + id: [shadowing, X] diff --git a/tests/samples/shape.json b/tests/samples/shape.json deleted file mode 100644 index 2b32184..0000000 --- a/tests/samples/shape.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "types": [ - { - "id": ["shape", "X"], - "kind": "record", - "fields": [ - {"name": "x", "value": {"kind": "string"}, "required": true}, - {"name": "y", "value": {"kind": "boolean"}, "required": true} - ] - }, - { - "id": ["shape", "Y"], - "kind": "record", - "fields": [ - {"name": "x", "value": {"kind": "string"}, "required": false}, - {"name": "y", "value": {"kind": "boolean"}, "required": false} - ] - } - ] -} diff --git a/tests/samples/shape.yaml b/tests/samples/shape.yaml new file mode 100644 index 0000000..7dd73fe --- /dev/null +++ b/tests/samples/shape.yaml @@ -0,0 +1,19 @@ +types: +- kind: record + fields: + - name: x + value: {kind: string} + required: true + - name: y + value: {kind: boolean} + required: true + id: [shape, X] +- kind: record + fields: + - name: x + value: {kind: string} + required: false + - name: y + value: {kind: boolean} + required: false + id: [shape, Y] diff --git a/tests/samples/skipFunctions.json b/tests/samples/skipFunctions.json deleted file mode 100644 index 806d63e..0000000 --- a/tests/samples/skipFunctions.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "types": [ - { - "id": ["skipFunctions", "Type"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "string"}, "required": true}, - {"name": "b", "value": {"kind": "boolean"}, "required": true}, - {"name": "c", "value": {"kind": "string"}, "required": true} - ] - }, - { - "id": ["skipFunctions", "Interface"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "string"}, "required": true}, - {"name": "b", "value": {"kind": "boolean"}, "required": true}, - {"name": "c", "value": {"kind": "string"}, "required": true} - ] - }, - { - "id": ["skipFunctions", "Class"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "string"}, "required": true}, - {"name": "b", "value": {"kind": "boolean"}, "required": true} - ] - } - ] -} diff --git a/tests/samples/skipFunctions.yaml b/tests/samples/skipFunctions.yaml new file mode 100644 index 0000000..0f1ef27 --- /dev/null +++ b/tests/samples/skipFunctions.yaml @@ -0,0 +1,34 @@ +types: +- kind: record + fields: + - name: a + value: {kind: string} + required: true + - name: b + value: {kind: boolean} + required: true + - name: c + value: {kind: string} + required: true + id: [skipFunctions, Type] +- kind: record + fields: + - name: a + value: {kind: string} + required: true + - name: b + value: {kind: boolean} + required: true + - name: c + value: {kind: string} + required: true + id: [skipFunctions, Interface] +- kind: record + fields: + - name: a + value: {kind: string} + required: true + - name: b + value: {kind: boolean} + required: true + id: [skipFunctions, Class] diff --git a/tests/samples/skipStatics.json b/tests/samples/skipStatics.json deleted file mode 100644 index f459575..0000000 --- a/tests/samples/skipStatics.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "types": [{ - "id": ["skipStatics", "X"], - "kind": "record", - "fields": [{ - "name": "xxx", - "value": {"kind": "string"}, - "required": true - }] - }] -} diff --git a/tests/samples/skipStatics.yaml b/tests/samples/skipStatics.yaml new file mode 100644 index 0000000..3a6eab3 --- /dev/null +++ b/tests/samples/skipStatics.yaml @@ -0,0 +1,7 @@ +types: +- kind: record + fields: + - name: xxx + value: {kind: string} + required: true + id: [skipStatics, X] diff --git a/tests/samples/tuples.json b/tests/samples/tuples.json deleted file mode 100644 index a957ac1..0000000 --- a/tests/samples/tuples.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "types": [ - { - "id": ["tuples", "Type"], - "kind": "record", - "fields": [{ - "name": "a", - "value": {"kind": "tuple", "items": [{"kind": "string"}, {"kind": "boolean"}]}, - "required": true - }] - }, - { - "id": ["tuples", "Interface"], - "kind": "record", - "fields": [ - { - "name": "a", - "value": { - "kind": "tuple", - "items": [{"kind": "string"}, {"kind": "literal", "value": null}, {"kind": "boolean"}] - }, - "required": true - }, - { - "name": "b", - "value": { - "kind": "tuple", - "items": [{"kind": "string"}, null, {"kind": "boolean"}] - }, - "required": true - } - ] - }, - { - "id": ["tuples", "Class"], - "kind": "record", - "fields": [{ - "name": "a", - "value": {"kind": "tuple", "items": [{"kind": "boolean"}]}, - "required": true - }] - } - ] -} diff --git a/tests/samples/tuples.yaml b/tests/samples/tuples.yaml new file mode 100644 index 0000000..d49c1fa --- /dev/null +++ b/tests/samples/tuples.yaml @@ -0,0 +1,39 @@ +types: +- kind: record + fields: + - name: a + value: + kind: tuple + items: + - {kind: string} + - {kind: boolean} + required: true + id: [tuples, Type] +- kind: record + fields: + - name: a + value: + kind: tuple + items: + - {kind: string} + - {kind: literal, value: null} + - {kind: boolean} + required: true + - name: b + value: + kind: tuple + items: + - {kind: string} + - null + - {kind: boolean} + required: true + id: [tuples, Interface] +- kind: record + fields: + - name: a + value: + kind: tuple + items: + - {kind: boolean} + required: true + id: [tuples, Class] diff --git a/tests/samples/typeInMethod.json b/tests/samples/typeInMethod.json deleted file mode 100644 index ce943dc..0000000 --- a/tests/samples/typeInMethod.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "types": [ - { - "id": ["typeInMethod", "Test"], - "kind": "record", - "fields": [] - }, - { - "id": ["typeInMethod", "1", "X"], - "kind": "record", - "fields": [{ - "name": "t", - "value": {"kind": "reference", "to": ["typeInMethod", "Test"]}, - "required": true - }] - } - ] -} diff --git a/tests/samples/typeInMethod.yaml b/tests/samples/typeInMethod.yaml new file mode 100644 index 0000000..900b8c7 --- /dev/null +++ b/tests/samples/typeInMethod.yaml @@ -0,0 +1,12 @@ +types: +- kind: record + fields: [] + id: [typeInMethod, Test] +- kind: record + fields: + - name: t + value: + kind: reference + to: [typeInMethod, Test] + required: true + id: [typeInMethod, '1', X] diff --git a/tests/samples/unions.json b/tests/samples/unions.json deleted file mode 100644 index 7b00130..0000000 --- a/tests/samples/unions.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "types": [ - { - "id": ["unions", "Type"], - "kind": "record", - "fields": [ - { - "name": "a", - "value": { - "kind": "union", - "variants": [{"kind": "string"}, {"kind": "boolean"}] - }, - "required": true - } - ] - }, - { - "id": ["unions", "Interface"], - "kind": "record", - "fields": [ - { - "name": "a", - "value": { - "kind": "union", - "variants": [{"kind": "string"}, {"kind": "boolean"}, {"kind": "number", "repr": "f64"}] - }, - "required": true - } - ] - }, - { - "id": ["unions", "Class"], - "kind": "record", - "fields": [ - { - "name": "a", - "value": { - "kind": "union", - "variants": [{"kind": "string"}, {"kind": "boolean"}] - }, - "required": true - } - ] - } - ] -} diff --git a/tests/samples/unions.yaml b/tests/samples/unions.yaml new file mode 100644 index 0000000..0d75428 --- /dev/null +++ b/tests/samples/unions.yaml @@ -0,0 +1,32 @@ +types: +- kind: record + fields: + - name: a + value: + kind: union + variants: + - {kind: string} + - {kind: boolean} + required: true + id: [unions, Type] +- kind: record + fields: + - name: a + value: + kind: union + variants: + - {kind: string} + - {kind: boolean} + - {kind: number, repr: f64} + required: true + id: [unions, Interface] +- kind: record + fields: + - name: a + value: + kind: union + variants: + - {kind: string} + - {kind: boolean} + required: true + id: [unions, Class] diff --git a/tests/samples/unionsAndEnums.json b/tests/samples/unionsAndEnums.json deleted file mode 100644 index 2b15fc6..0000000 --- a/tests/samples/unionsAndEnums.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "types": [ - { - "id": ["unionsAndEnums", "Type"], - "kind": "record", - "fields": [{ - "name": "a", - "value": { - "kind": "union", - "variants": [ - {"kind": "literal", "value": "one"}, - {"kind": "literal", "value": "two"}, - {"kind": "string"} - ] - }, - "required": true - }] - }, - { - "id": ["unionsAndEnums", "Interface"], - "kind": "record", - "fields": [{ - "name": "a", - "value": { - "kind": "union", - "variants": [ - {"kind": "literal", "value": "one"}, - {"kind": "literal", "value": "two"}, - {"kind": "string"} - ] - }, - "required": true - }] - }, - { - "id": ["unionsAndEnums", "Class"], - "kind": "record", - "fields": [{ - "name": "a", - "value": { - "kind": "union", - "variants": [ - {"kind": "literal", "value": "one"}, - {"kind": "literal", "value": "two"}, - {"kind": "string"} - ] - }, - "required": true - }] - } - ] -} diff --git a/tests/samples/unionsAndEnums.yaml b/tests/samples/unionsAndEnums.yaml new file mode 100644 index 0000000..28c33f4 --- /dev/null +++ b/tests/samples/unionsAndEnums.yaml @@ -0,0 +1,34 @@ +types: +- kind: record + fields: + - name: a + value: + kind: union + variants: + - {kind: literal, value: one} + - {kind: literal, value: two} + - {kind: string} + required: true + id: [unionsAndEnums, Type] +- kind: record + fields: + - name: a + value: + kind: union + variants: + - {kind: literal, value: one} + - {kind: literal, value: two} + - {kind: string} + required: true + id: [unionsAndEnums, Interface] +- kind: record + fields: + - name: a + value: + kind: union + variants: + - {kind: literal, value: one} + - {kind: literal, value: two} + - {kind: string} + required: true + id: [unionsAndEnums, Class] diff --git a/tests/samples/unused.json b/tests/samples/unused.json deleted file mode 100644 index e0d4d26..0000000 --- a/tests/samples/unused.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "types": [] -} diff --git a/tests/samples/unused.yaml b/tests/samples/unused.yaml new file mode 100644 index 0000000..77d540f --- /dev/null +++ b/tests/samples/unused.yaml @@ -0,0 +1 @@ +types: [] diff --git a/tests/samples/valueAsType.json b/tests/samples/valueAsType.json deleted file mode 100644 index 9b818ba..0000000 --- a/tests/samples/valueAsType.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "types": [ - { - "id": ["valueAsType", "Type"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "literal", "value": "one"}, "required": true} - ] - }, - { - "id": ["valueAsType", "Interface"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "literal", "value": "one"}, "required": true} - ] - }, - { - "id": ["valueAsType", "Class"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "literal", "value": "one"}, "required": true} - ] - } - ] -} diff --git a/tests/samples/valueAsType.yaml b/tests/samples/valueAsType.yaml new file mode 100644 index 0000000..bbf1b3f --- /dev/null +++ b/tests/samples/valueAsType.yaml @@ -0,0 +1,19 @@ +types: +- kind: record + fields: + - name: a + value: {kind: literal, value: one} + required: true + id: [valueAsType, Type] +- kind: record + fields: + - name: a + value: {kind: literal, value: one} + required: true + id: [valueAsType, Interface] +- kind: record + fields: + - name: a + value: {kind: literal, value: one} + required: true + id: [valueAsType, Class] diff --git a/tests/samples/values.json b/tests/samples/values.json deleted file mode 100644 index 37f2bfe..0000000 --- a/tests/samples/values.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "types": [ - { - "id": ["values", "X"], - "kind": "record", - "fields": [ - {"name": "a", "value": {"kind": "string"}, "required": true}, - {"name": "b", "value": {"kind": "boolean"}, "required": true} - ] - }, - { - "id": ["values", "Y"], - "kind": "union", - "variants": [ - {"kind": "string"}, - {"kind": "boolean"} - ] - } - ] -} diff --git a/tests/samples/values.yaml b/tests/samples/values.yaml new file mode 100644 index 0000000..23be34a --- /dev/null +++ b/tests/samples/values.yaml @@ -0,0 +1,15 @@ +types: +- kind: record + fields: + - name: a + value: {kind: string} + required: true + - name: b + value: {kind: boolean} + required: true + id: [values, X] +- kind: union + variants: + - {kind: string} + - {kind: boolean} + id: [values, Y]