From fdc44b246a2ed4a307e6f40c098ebf75d0bcce05 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Wed, 13 May 2015 15:27:40 -0700 Subject: [PATCH] Adding regression tests --- ...unionTypeWithRecursiveSubtypeReduction1.js | 44 +++++++++++++++++ ...TypeWithRecursiveSubtypeReduction1.symbols | 45 +++++++++++++++++ ...onTypeWithRecursiveSubtypeReduction1.types | 45 +++++++++++++++++ ...eWithRecursiveSubtypeReduction2.errors.txt | 46 ++++++++++++++++++ ...unionTypeWithRecursiveSubtypeReduction2.js | 48 +++++++++++++++++++ ...eWithRecursiveSubtypeReduction3.errors.txt | 14 ++++++ ...unionTypeWithRecursiveSubtypeReduction3.js | 12 +++++ ...unionTypeWithRecursiveSubtypeReduction1.ts | 18 +++++++ ...unionTypeWithRecursiveSubtypeReduction2.ts | 20 ++++++++ ...unionTypeWithRecursiveSubtypeReduction3.ts | 5 ++ 10 files changed, 297 insertions(+) create mode 100644 tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.js create mode 100644 tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.symbols create mode 100644 tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.types create mode 100644 tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction2.errors.txt create mode 100644 tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction2.js create mode 100644 tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction3.errors.txt create mode 100644 tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction3.js create mode 100644 tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction1.ts create mode 100644 tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction2.ts create mode 100644 tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction3.ts diff --git a/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.js b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.js new file mode 100644 index 00000000000..f8a5cd96b48 --- /dev/null +++ b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.js @@ -0,0 +1,44 @@ +//// [unionTypeWithRecursiveSubtypeReduction1.ts] +class Module { + public members: Class[]; +} + +class Namespace { + public members: (Class | Property)[]; +} + +class Class { + public parent: Namespace; +} + +class Property { + public parent: Module | Class; +} + +var t: Class | Property; +t.parent; + + +//// [unionTypeWithRecursiveSubtypeReduction1.js] +var Module = (function () { + function Module() { + } + return Module; +})(); +var Namespace = (function () { + function Namespace() { + } + return Namespace; +})(); +var Class = (function () { + function Class() { + } + return Class; +})(); +var Property = (function () { + function Property() { + } + return Property; +})(); +var t; +t.parent; diff --git a/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.symbols b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.symbols new file mode 100644 index 00000000000..24ba3b8a8cd --- /dev/null +++ b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.symbols @@ -0,0 +1,45 @@ +=== tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction1.ts === +class Module { +>Module : Symbol(Module, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 0, 0)) + + public members: Class[]; +>members : Symbol(members, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 0, 14)) +>Class : Symbol(Class, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 6, 1)) +} + +class Namespace { +>Namespace : Symbol(Namespace, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 2, 1)) + + public members: (Class | Property)[]; +>members : Symbol(members, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 4, 17)) +>Class : Symbol(Class, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 6, 1)) +>Property : Symbol(Property, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 10, 1)) +} + +class Class { +>Class : Symbol(Class, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 6, 1)) + + public parent: Namespace; +>parent : Symbol(parent, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 8, 13)) +>Namespace : Symbol(Namespace, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 2, 1)) +} + +class Property { +>Property : Symbol(Property, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 10, 1)) + + public parent: Module | Class; +>parent : Symbol(parent, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 12, 16)) +>Module : Symbol(Module, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 0, 0)) +>Class : Symbol(Class, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 6, 1)) +} + +var t: Class | Property; +>t : Symbol(t, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 16, 3)) +>Class : Symbol(Class, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 6, 1)) +>Property : Symbol(Property, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 10, 1)) + +t.parent; +>t.parent : Symbol(parent, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 8, 13), Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 12, 16)) +>t : Symbol(t, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 16, 3)) +>parent : Symbol(parent, Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 8, 13), Decl(unionTypeWithRecursiveSubtypeReduction1.ts, 12, 16)) + diff --git a/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.types b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.types new file mode 100644 index 00000000000..c6fa610e68a --- /dev/null +++ b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction1.types @@ -0,0 +1,45 @@ +=== tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction1.ts === +class Module { +>Module : Module + + public members: Class[]; +>members : Class[] +>Class : Class +} + +class Namespace { +>Namespace : Namespace + + public members: (Class | Property)[]; +>members : (Class | Property)[] +>Class : Class +>Property : Property +} + +class Class { +>Class : Class + + public parent: Namespace; +>parent : Namespace +>Namespace : Namespace +} + +class Property { +>Property : Property + + public parent: Module | Class; +>parent : Module | Class +>Module : Module +>Class : Class +} + +var t: Class | Property; +>t : Class | Property +>Class : Class +>Property : Property + +t.parent; +>t.parent : Class | Namespace +>t : Class | Property +>parent : Class | Namespace + diff --git a/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction2.errors.txt b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction2.errors.txt new file mode 100644 index 00000000000..d481b88810c --- /dev/null +++ b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction2.errors.txt @@ -0,0 +1,46 @@ +tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction2.ts(19,1): error TS2322: Type 'Property' is not assignable to type 'Class'. + Types of property 'parent' are incompatible. + Type 'Module | Class' is not assignable to type 'Namespace'. + Type 'Class' is not assignable to type 'Namespace'. + Property 'members' is missing in type 'Class'. +tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction2.ts(20,1): error TS2322: Type 'Class' is not assignable to type 'Property'. + Types of property 'parent' are incompatible. + Type 'Namespace' is not assignable to type 'Module | Class'. + Type 'Namespace' is not assignable to type 'Class'. + Property 'parent' is missing in type 'Namespace'. + + +==== tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction2.ts (2 errors) ==== + class Module { + public members: Class[]; + } + + class Namespace { + public members: (Class | Property)[]; + } + + class Class { + public parent: Namespace; + } + + class Property { + public parent: Module | Class; + } + + var c: Class; + var p: Property; + c = p; + ~ +!!! error TS2322: Type 'Property' is not assignable to type 'Class'. +!!! error TS2322: Types of property 'parent' are incompatible. +!!! error TS2322: Type 'Module | Class' is not assignable to type 'Namespace'. +!!! error TS2322: Type 'Class' is not assignable to type 'Namespace'. +!!! error TS2322: Property 'members' is missing in type 'Class'. + p = c; + ~ +!!! error TS2322: Type 'Class' is not assignable to type 'Property'. +!!! error TS2322: Types of property 'parent' are incompatible. +!!! error TS2322: Type 'Namespace' is not assignable to type 'Module | Class'. +!!! error TS2322: Type 'Namespace' is not assignable to type 'Class'. +!!! error TS2322: Property 'parent' is missing in type 'Namespace'. + \ No newline at end of file diff --git a/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction2.js b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction2.js new file mode 100644 index 00000000000..69411b1ffcb --- /dev/null +++ b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction2.js @@ -0,0 +1,48 @@ +//// [unionTypeWithRecursiveSubtypeReduction2.ts] +class Module { + public members: Class[]; +} + +class Namespace { + public members: (Class | Property)[]; +} + +class Class { + public parent: Namespace; +} + +class Property { + public parent: Module | Class; +} + +var c: Class; +var p: Property; +c = p; +p = c; + + +//// [unionTypeWithRecursiveSubtypeReduction2.js] +var Module = (function () { + function Module() { + } + return Module; +})(); +var Namespace = (function () { + function Namespace() { + } + return Namespace; +})(); +var Class = (function () { + function Class() { + } + return Class; +})(); +var Property = (function () { + function Property() { + } + return Property; +})(); +var c; +var p; +c = p; +p = c; diff --git a/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction3.errors.txt b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction3.errors.txt new file mode 100644 index 00000000000..279119e679a --- /dev/null +++ b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction3.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction3.ts(5,5): error TS2322: Type '{ prop: number; } | { prop: { prop: number; } | any; }' is not assignable to type 'string'. + Type '{ prop: number; }' is not assignable to type 'string'. + + +==== tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction3.ts (1 errors) ==== + var a27: { prop: number } | { prop: T27 }; + type T27 = typeof a27; + + var b: T27; + var s: string = b; + ~ +!!! error TS2322: Type '{ prop: number; } | { prop: { prop: number; } | any; }' is not assignable to type 'string'. +!!! error TS2322: Type '{ prop: number; }' is not assignable to type 'string'. + \ No newline at end of file diff --git a/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction3.js b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction3.js new file mode 100644 index 00000000000..7c336015059 --- /dev/null +++ b/tests/baselines/reference/unionTypeWithRecursiveSubtypeReduction3.js @@ -0,0 +1,12 @@ +//// [unionTypeWithRecursiveSubtypeReduction3.ts] +var a27: { prop: number } | { prop: T27 }; +type T27 = typeof a27; + +var b: T27; +var s: string = b; + + +//// [unionTypeWithRecursiveSubtypeReduction3.js] +var a27; +var b; +var s = b; diff --git a/tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction1.ts b/tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction1.ts new file mode 100644 index 00000000000..acdb91c9935 --- /dev/null +++ b/tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction1.ts @@ -0,0 +1,18 @@ +class Module { + public members: Class[]; +} + +class Namespace { + public members: (Class | Property)[]; +} + +class Class { + public parent: Namespace; +} + +class Property { + public parent: Module | Class; +} + +var t: Class | Property; +t.parent; diff --git a/tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction2.ts b/tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction2.ts new file mode 100644 index 00000000000..cddcf4d4566 --- /dev/null +++ b/tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction2.ts @@ -0,0 +1,20 @@ +class Module { + public members: Class[]; +} + +class Namespace { + public members: (Class | Property)[]; +} + +class Class { + public parent: Namespace; +} + +class Property { + public parent: Module | Class; +} + +var c: Class; +var p: Property; +c = p; +p = c; diff --git a/tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction3.ts b/tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction3.ts new file mode 100644 index 00000000000..4bac9ca1b9c --- /dev/null +++ b/tests/cases/compiler/unionTypeWithRecursiveSubtypeReduction3.ts @@ -0,0 +1,5 @@ +var a27: { prop: number } | { prop: T27 }; +type T27 = typeof a27; + +var b: T27; +var s: string = b;