232 lines
7.7 KiB
Text
232 lines
7.7 KiB
Text
=== tests/cases/conformance/enums/enumBasics.ts ===
|
|
// Enum without initializers have first member = 0 and successive members = N + 1
|
|
enum E1 {
|
|
>E1 : E1, Symbol(E1, Decl(enumBasics.ts, 0, 0))
|
|
|
|
A,
|
|
>A : E1, Symbol(E1.A, Decl(enumBasics.ts, 1, 9))
|
|
|
|
B,
|
|
>B : E1, Symbol(E1.B, Decl(enumBasics.ts, 2, 6))
|
|
|
|
C
|
|
>C : E1, Symbol(E1.C, Decl(enumBasics.ts, 3, 6))
|
|
}
|
|
|
|
// Enum type is a subtype of Number
|
|
var x: number = E1.A;
|
|
>x : number, Symbol(x, Decl(enumBasics.ts, 8, 3))
|
|
>E1.A : E1, Symbol(E1.A, Decl(enumBasics.ts, 1, 9))
|
|
>E1 : typeof E1, Symbol(E1, Decl(enumBasics.ts, 0, 0))
|
|
>A : E1, Symbol(E1.A, Decl(enumBasics.ts, 1, 9))
|
|
|
|
// Enum object type is anonymous with properties of the enum type and numeric indexer
|
|
var e = E1;
|
|
>e : typeof E1, Symbol(e, Decl(enumBasics.ts, 11, 3), Decl(enumBasics.ts, 12, 3), Decl(enumBasics.ts, 18, 3))
|
|
>E1 : typeof E1, Symbol(E1, Decl(enumBasics.ts, 0, 0))
|
|
|
|
var e: {
|
|
>e : typeof E1, Symbol(e, Decl(enumBasics.ts, 11, 3), Decl(enumBasics.ts, 12, 3), Decl(enumBasics.ts, 18, 3))
|
|
|
|
A: E1;
|
|
>A : E1, Symbol(A, Decl(enumBasics.ts, 12, 8))
|
|
>E1 : E1, Symbol(E1, Decl(enumBasics.ts, 0, 0))
|
|
|
|
B: E1;
|
|
>B : E1, Symbol(B, Decl(enumBasics.ts, 13, 10))
|
|
>E1 : E1, Symbol(E1, Decl(enumBasics.ts, 0, 0))
|
|
|
|
C: E1;
|
|
>C : E1, Symbol(C, Decl(enumBasics.ts, 14, 10))
|
|
>E1 : E1, Symbol(E1, Decl(enumBasics.ts, 0, 0))
|
|
|
|
[n: number]: string;
|
|
>n : number, Symbol(n, Decl(enumBasics.ts, 16, 5))
|
|
|
|
};
|
|
var e: typeof E1;
|
|
>e : typeof E1, Symbol(e, Decl(enumBasics.ts, 11, 3), Decl(enumBasics.ts, 12, 3), Decl(enumBasics.ts, 18, 3))
|
|
>E1 : typeof E1, Symbol(E1, Decl(enumBasics.ts, 0, 0))
|
|
|
|
// Reverse mapping of enum returns string name of property
|
|
var s = E1[e.A];
|
|
>s : string, Symbol(s, Decl(enumBasics.ts, 21, 3), Decl(enumBasics.ts, 22, 3))
|
|
>E1[e.A] : string
|
|
>E1 : typeof E1, Symbol(E1, Decl(enumBasics.ts, 0, 0))
|
|
>e.A : E1, Symbol(E1.A, Decl(enumBasics.ts, 1, 9))
|
|
>e : typeof E1, Symbol(e, Decl(enumBasics.ts, 11, 3), Decl(enumBasics.ts, 12, 3), Decl(enumBasics.ts, 18, 3))
|
|
>A : E1, Symbol(E1.A, Decl(enumBasics.ts, 1, 9))
|
|
|
|
var s: string;
|
|
>s : string, Symbol(s, Decl(enumBasics.ts, 21, 3), Decl(enumBasics.ts, 22, 3))
|
|
|
|
|
|
// Enum with only constant members
|
|
enum E2 {
|
|
>E2 : E2, Symbol(E2, Decl(enumBasics.ts, 22, 14))
|
|
|
|
A = 1, B = 2, C = 3
|
|
>A : E2, Symbol(E2.A, Decl(enumBasics.ts, 26, 9))
|
|
>1 : number
|
|
>B : E2, Symbol(E2.B, Decl(enumBasics.ts, 27, 10))
|
|
>2 : number
|
|
>C : E2, Symbol(E2.C, Decl(enumBasics.ts, 27, 17))
|
|
>3 : number
|
|
}
|
|
|
|
// Enum with only computed members
|
|
enum E3 {
|
|
>E3 : E3, Symbol(E3, Decl(enumBasics.ts, 28, 1))
|
|
|
|
X = 'foo'.length, Y = 4 + 3, Z = +'foo'
|
|
>X : E3, Symbol(E3.X, Decl(enumBasics.ts, 31, 9))
|
|
>'foo'.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19))
|
|
>'foo' : string
|
|
>length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19))
|
|
>Y : E3, Symbol(E3.Y, Decl(enumBasics.ts, 32, 21))
|
|
>4 + 3 : number
|
|
>4 : number
|
|
>3 : number
|
|
>Z : E3, Symbol(E3.Z, Decl(enumBasics.ts, 32, 32))
|
|
>+'foo' : number
|
|
>'foo' : string
|
|
}
|
|
|
|
// Enum with constant members followed by computed members
|
|
enum E4 {
|
|
>E4 : E4, Symbol(E4, Decl(enumBasics.ts, 33, 1))
|
|
|
|
X = 0, Y, Z = 'foo'.length
|
|
>X : E4, Symbol(E4.X, Decl(enumBasics.ts, 36, 9))
|
|
>0 : number
|
|
>Y : E4, Symbol(E4.Y, Decl(enumBasics.ts, 37, 10))
|
|
>Z : E4, Symbol(E4.Z, Decl(enumBasics.ts, 37, 13))
|
|
>'foo'.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19))
|
|
>'foo' : string
|
|
>length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19))
|
|
}
|
|
|
|
// Enum with > 2 constant members with no initializer for first member, non zero initializer for second element
|
|
enum E5 {
|
|
>E5 : E5, Symbol(E5, Decl(enumBasics.ts, 38, 1))
|
|
|
|
A,
|
|
>A : E5, Symbol(E5.A, Decl(enumBasics.ts, 41, 9))
|
|
|
|
B = 3,
|
|
>B : E5, Symbol(E5.B, Decl(enumBasics.ts, 42, 6))
|
|
>3 : number
|
|
|
|
C // 4
|
|
>C : E5, Symbol(E5.C, Decl(enumBasics.ts, 43, 10))
|
|
}
|
|
|
|
enum E6 {
|
|
>E6 : E6, Symbol(E6, Decl(enumBasics.ts, 45, 1))
|
|
|
|
A,
|
|
>A : E6, Symbol(E6.A, Decl(enumBasics.ts, 47, 9))
|
|
|
|
B = 0,
|
|
>B : E6, Symbol(E6.B, Decl(enumBasics.ts, 48, 6))
|
|
>0 : number
|
|
|
|
C // 1
|
|
>C : E6, Symbol(E6.C, Decl(enumBasics.ts, 49, 10))
|
|
}
|
|
|
|
// Enum with computed member initializer of type 'any'
|
|
enum E7 {
|
|
>E7 : E7, Symbol(E7, Decl(enumBasics.ts, 51, 1))
|
|
|
|
A = 'foo'['foo']
|
|
>A : E7, Symbol(E7.A, Decl(enumBasics.ts, 54, 9))
|
|
>'foo'['foo'] : any
|
|
>'foo' : string
|
|
>'foo' : string
|
|
}
|
|
|
|
// Enum with computed member initializer of type number
|
|
enum E8 {
|
|
>E8 : E8, Symbol(E8, Decl(enumBasics.ts, 56, 1))
|
|
|
|
B = 'foo'['foo']
|
|
>B : E8, Symbol(E8.B, Decl(enumBasics.ts, 59, 9))
|
|
>'foo'['foo'] : any
|
|
>'foo' : string
|
|
>'foo' : string
|
|
}
|
|
|
|
//Enum with computed member intializer of same enum type
|
|
enum E9 {
|
|
>E9 : E9, Symbol(E9, Decl(enumBasics.ts, 61, 1))
|
|
|
|
A,
|
|
>A : E9, Symbol(E9.A, Decl(enumBasics.ts, 64, 9))
|
|
|
|
B = A
|
|
>B : E9, Symbol(E9.B, Decl(enumBasics.ts, 65, 6))
|
|
>A : E9, Symbol(E9.A, Decl(enumBasics.ts, 64, 9))
|
|
}
|
|
|
|
// (refer to .js to validate)
|
|
// Enum constant members are propagated
|
|
var doNotPropagate = [
|
|
>doNotPropagate : (E3 | E4 | E7 | E8)[], Symbol(doNotPropagate, Decl(enumBasics.ts, 71, 3))
|
|
>[ E8.B, E7.A, E4.Z, E3.X, E3.Y, E3.Z] : (E3 | E4 | E7 | E8)[]
|
|
|
|
E8.B, E7.A, E4.Z, E3.X, E3.Y, E3.Z
|
|
>E8.B : E8, Symbol(E8.B, Decl(enumBasics.ts, 59, 9))
|
|
>E8 : typeof E8, Symbol(E8, Decl(enumBasics.ts, 56, 1))
|
|
>B : E8, Symbol(E8.B, Decl(enumBasics.ts, 59, 9))
|
|
>E7.A : E7, Symbol(E7.A, Decl(enumBasics.ts, 54, 9))
|
|
>E7 : typeof E7, Symbol(E7, Decl(enumBasics.ts, 51, 1))
|
|
>A : E7, Symbol(E7.A, Decl(enumBasics.ts, 54, 9))
|
|
>E4.Z : E4, Symbol(E4.Z, Decl(enumBasics.ts, 37, 13))
|
|
>E4 : typeof E4, Symbol(E4, Decl(enumBasics.ts, 33, 1))
|
|
>Z : E4, Symbol(E4.Z, Decl(enumBasics.ts, 37, 13))
|
|
>E3.X : E3, Symbol(E3.X, Decl(enumBasics.ts, 31, 9))
|
|
>E3 : typeof E3, Symbol(E3, Decl(enumBasics.ts, 28, 1))
|
|
>X : E3, Symbol(E3.X, Decl(enumBasics.ts, 31, 9))
|
|
>E3.Y : E3, Symbol(E3.Y, Decl(enumBasics.ts, 32, 21))
|
|
>E3 : typeof E3, Symbol(E3, Decl(enumBasics.ts, 28, 1))
|
|
>Y : E3, Symbol(E3.Y, Decl(enumBasics.ts, 32, 21))
|
|
>E3.Z : E3, Symbol(E3.Z, Decl(enumBasics.ts, 32, 32))
|
|
>E3 : typeof E3, Symbol(E3, Decl(enumBasics.ts, 28, 1))
|
|
>Z : E3, Symbol(E3.Z, Decl(enumBasics.ts, 32, 32))
|
|
|
|
];
|
|
// Enum computed members are not propagated
|
|
var doPropagate = [
|
|
>doPropagate : (E5 | E6 | E9)[], Symbol(doPropagate, Decl(enumBasics.ts, 75, 3))
|
|
>[ E9.A, E9.B, E6.B, E6.C, E6.A, E5.A, E5.B, E5.C] : (E5 | E6 | E9)[]
|
|
|
|
E9.A, E9.B, E6.B, E6.C, E6.A, E5.A, E5.B, E5.C
|
|
>E9.A : E9, Symbol(E9.A, Decl(enumBasics.ts, 64, 9))
|
|
>E9 : typeof E9, Symbol(E9, Decl(enumBasics.ts, 61, 1))
|
|
>A : E9, Symbol(E9.A, Decl(enumBasics.ts, 64, 9))
|
|
>E9.B : E9, Symbol(E9.B, Decl(enumBasics.ts, 65, 6))
|
|
>E9 : typeof E9, Symbol(E9, Decl(enumBasics.ts, 61, 1))
|
|
>B : E9, Symbol(E9.B, Decl(enumBasics.ts, 65, 6))
|
|
>E6.B : E6, Symbol(E6.B, Decl(enumBasics.ts, 48, 6))
|
|
>E6 : typeof E6, Symbol(E6, Decl(enumBasics.ts, 45, 1))
|
|
>B : E6, Symbol(E6.B, Decl(enumBasics.ts, 48, 6))
|
|
>E6.C : E6, Symbol(E6.C, Decl(enumBasics.ts, 49, 10))
|
|
>E6 : typeof E6, Symbol(E6, Decl(enumBasics.ts, 45, 1))
|
|
>C : E6, Symbol(E6.C, Decl(enumBasics.ts, 49, 10))
|
|
>E6.A : E6, Symbol(E6.A, Decl(enumBasics.ts, 47, 9))
|
|
>E6 : typeof E6, Symbol(E6, Decl(enumBasics.ts, 45, 1))
|
|
>A : E6, Symbol(E6.A, Decl(enumBasics.ts, 47, 9))
|
|
>E5.A : E5, Symbol(E5.A, Decl(enumBasics.ts, 41, 9))
|
|
>E5 : typeof E5, Symbol(E5, Decl(enumBasics.ts, 38, 1))
|
|
>A : E5, Symbol(E5.A, Decl(enumBasics.ts, 41, 9))
|
|
>E5.B : E5, Symbol(E5.B, Decl(enumBasics.ts, 42, 6))
|
|
>E5 : typeof E5, Symbol(E5, Decl(enumBasics.ts, 38, 1))
|
|
>B : E5, Symbol(E5.B, Decl(enumBasics.ts, 42, 6))
|
|
>E5.C : E5, Symbol(E5.C, Decl(enumBasics.ts, 43, 10))
|
|
>E5 : typeof E5, Symbol(E5, Decl(enumBasics.ts, 38, 1))
|
|
>C : E5, Symbol(E5.C, Decl(enumBasics.ts, 43, 10))
|
|
|
|
];
|
|
|
|
|