Adding regression tests

This commit is contained in:
Anders Hejlsberg 2015-05-13 15:27:40 -07:00
parent 99ba94e577
commit fdc44b246a
10 changed files with 297 additions and 0 deletions

View File

@ -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;

View File

@ -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))

View File

@ -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

View File

@ -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'.

View File

@ -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;

View File

@ -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'.

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -0,0 +1,5 @@
var a27: { prop: number } | { prop: T27 };
type T27 = typeof a27;
var b: T27;
var s: string = b;