From bf3941da471f52be85dda83af1ef305aaea3752c Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Thu, 8 Sep 2016 14:43:17 -0700 Subject: [PATCH] Test that enum literal is assignable to an enum in a union --- .../enumLiteralAssignableToEnumInsideUnion.js | 32 ++++++++++++++++++ ...LiteralAssignableToEnumInsideUnion.symbols | 33 +++++++++++++++++++ ...umLiteralAssignableToEnumInsideUnion.types | 33 +++++++++++++++++++ .../enumLiteralAssignableToEnumInsideUnion.ts | 11 +++++++ 4 files changed, 109 insertions(+) create mode 100644 tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.js create mode 100644 tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.symbols create mode 100644 tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.types create mode 100644 tests/cases/compiler/enumLiteralAssignableToEnumInsideUnion.ts diff --git a/tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.js b/tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.js new file mode 100644 index 00000000000..607269e06e3 --- /dev/null +++ b/tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.js @@ -0,0 +1,32 @@ +//// [enumLiteralAssignableToEnumInsideUnion.ts] +module X { + export enum Foo { + A, B + } +} +module Y { + export enum Foo { + A, B + } +} +const y: X.Foo | boolean = Y.Foo.A; + + +//// [enumLiteralAssignableToEnumInsideUnion.js] +var X; +(function (X) { + (function (Foo) { + Foo[Foo["A"] = 0] = "A"; + Foo[Foo["B"] = 1] = "B"; + })(X.Foo || (X.Foo = {})); + var Foo = X.Foo; +})(X || (X = {})); +var Y; +(function (Y) { + (function (Foo) { + Foo[Foo["A"] = 0] = "A"; + Foo[Foo["B"] = 1] = "B"; + })(Y.Foo || (Y.Foo = {})); + var Foo = Y.Foo; +})(Y || (Y = {})); +var y = Y.Foo.A; diff --git a/tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.symbols b/tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.symbols new file mode 100644 index 00000000000..979bd516682 --- /dev/null +++ b/tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.symbols @@ -0,0 +1,33 @@ +=== tests/cases/compiler/enumLiteralAssignableToEnumInsideUnion.ts === +module X { +>X : Symbol(X, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 0, 0)) + + export enum Foo { +>Foo : Symbol(Foo, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 0, 10)) + + A, B +>A : Symbol(Foo.A, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 1, 21)) +>B : Symbol(Foo.B, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 2, 10)) + } +} +module Y { +>Y : Symbol(Y, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 4, 1)) + + export enum Foo { +>Foo : Symbol(Foo, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 5, 10)) + + A, B +>A : Symbol(Foo.A, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 6, 21)) +>B : Symbol(Foo.B, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 7, 10)) + } +} +const y: X.Foo | boolean = Y.Foo.A; +>y : Symbol(y, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 10, 5)) +>X : Symbol(X, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 0, 0)) +>Foo : Symbol(X.Foo, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 0, 10)) +>Y.Foo.A : Symbol(Y.Foo.A, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 6, 21)) +>Y.Foo : Symbol(Y.Foo, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 5, 10)) +>Y : Symbol(Y, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 4, 1)) +>Foo : Symbol(Y.Foo, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 5, 10)) +>A : Symbol(Y.Foo.A, Decl(enumLiteralAssignableToEnumInsideUnion.ts, 6, 21)) + diff --git a/tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.types b/tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.types new file mode 100644 index 00000000000..de57b5e92bc --- /dev/null +++ b/tests/baselines/reference/enumLiteralAssignableToEnumInsideUnion.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/enumLiteralAssignableToEnumInsideUnion.ts === +module X { +>X : typeof X + + export enum Foo { +>Foo : Foo + + A, B +>A : Foo +>B : Foo + } +} +module Y { +>Y : typeof Y + + export enum Foo { +>Foo : Foo + + A, B +>A : Foo +>B : Foo + } +} +const y: X.Foo | boolean = Y.Foo.A; +>y : boolean | X.Foo +>X : any +>Foo : X.Foo +>Y.Foo.A : Y.Foo +>Y.Foo : typeof Y.Foo +>Y : typeof Y +>Foo : typeof Y.Foo +>A : Y.Foo + diff --git a/tests/cases/compiler/enumLiteralAssignableToEnumInsideUnion.ts b/tests/cases/compiler/enumLiteralAssignableToEnumInsideUnion.ts new file mode 100644 index 00000000000..0c10155e48d --- /dev/null +++ b/tests/cases/compiler/enumLiteralAssignableToEnumInsideUnion.ts @@ -0,0 +1,11 @@ +module X { + export enum Foo { + A, B + } +} +module Y { + export enum Foo { + A, B + } +} +const y: X.Foo | boolean = Y.Foo.A;