Chromium Code Reviews| Index: test/mjsunit/harmony/typesystem/typegen.js |
| diff --git a/test/mjsunit/harmony/typesystem/typegen.js b/test/mjsunit/harmony/typesystem/typegen.js |
| index d61c7071d1b3a1a617487d29ef84e953fbc18557..0593537bf33a1eb4051f9fac18252c780d0faa93 100644 |
| --- a/test/mjsunit/harmony/typesystem/typegen.js |
| +++ b/test/mjsunit/harmony/typesystem/typegen.js |
| @@ -31,6 +31,7 @@ function ValidPrimaryTypes(size, proper=false) { |
| t => "(" + t + "[])[]", |
| ]), |
| new TestGen(1, ValidTupleTypes, [t => t]), |
| + new TestGen(1, ValidObjectTypes, [t => t]), |
| proper && "number", |
| proper && "boolean", |
| proper && "string", |
| @@ -61,6 +62,7 @@ function InvalidPrimaryTypes(size, proper=false) { |
| t => "(" + t + "[])[]", |
| ]), |
| new TestGen(1, InvalidTupleTypes, [t => t]), |
| + new TestGen(1, InvalidObjectTypes, [t => t]), |
| // Line terminator in arrays. |
| new TestGen(1, ValidTypes, [ |
| t => "(" + t + "\n[])" |
| @@ -154,18 +156,29 @@ function ValidFunctionTypes(size, constr) { |
| t => c + "(a:" + t + ", b:" + t + ", c, ...d) => " + t, |
| t => c + "(a:" + t + ", b:" + t + ", c, ...d: string[]) => " + t |
| ]), |
| - // Parametric function types |
| + // Parametric function types. |
| "<A> (x: A) => A", |
| "<A extends string> (x: A) => A", |
| "<A, B> (x: A, y: B) => A", |
| "<A, B extends number[], C> (x: A, y: B) => C", |
| "<A, B, C, D> (x: A, y: B, z: C[], d: (e: D) => D) => A", |
| - // String literal types |
| + // String literal types. |
| "(cmd: 'add', x: number, y: number) => number", |
| '(cmd: "sum", a: number[]) => number', |
| "(x: number, cmd: 'one', ...rest) => any", |
| "(x: string, y: number, cmd: 'two', ...rest) => any", |
| - "(x: number, cmd?: 'two', ...rest) => string" |
| + "(x: number, cmd?: 'two', ...rest) => string", |
| + // With binding patterns. |
| + "([]: number[]) => boolean", |
| + "([x, y]: number[]) => boolean", |
| + "([x, ...rest]: number[]) => boolean", |
| + "([,x, y]: number[]) => boolean", |
| + "([x, y,]: number[]) => boolean", |
| + "([x, y,,]: number[]) => boolean", |
| + "([x, [a, b, c], z]: [number, any[], string]) => boolean", |
| + "({x: a, y: b}: {x: number, y: string}) => boolean", |
| + "({x: a, y: [b, c, ...rest]}: {x: number, y: string[]}) => boolean", |
| + "({x: {a, b}, y: c}: {x: {a, b}, y: string}) => boolean" |
| ]); |
| } |
| @@ -183,10 +196,12 @@ function InvalidFunctionTypes(size, constr) { |
| t => c + "(a:" + t + ", b:" + t + ", c, ...d) => " + t, |
| t => c + "(a:" + t + ", b:" + t + ", c, ...d: string[]) => " + t, |
| ]), |
| - // Parametric function types |
| + // Parametric function types. |
| "<A> A[]", |
| "<> (x: number) => number", |
| - "<A extends ()> (x: A) => A" |
| + "<A extends ()> (x: A) => A", |
| + // With illegal binding patterns. |
| + "({x: {a; b}, y: c}: {x: {a; b}, y: string}) => boolean" |
| ]); |
| } |
| @@ -224,6 +239,96 @@ function InvalidTupleTypes(size) { |
| } |
| +// Object types. |
| + |
| +function ValidObjectTypes(size) { |
| + return Generate(size, [ |
| + // Empty object type. |
| + "{}", |
| + // Property signatures. |
| + "{a}", |
| + "{a, b}", |
| + "{a, b?}", |
| + "{a?, b}", |
| + new TestGen(1, ValidTypes, [ |
| + t => "{a: " + t + "}", |
| + t => "{a: " + t + ", b: " + t + "}", |
| + t => "{a?: " + t + "}", |
| + t => "{a: " + t + ", b?: " + t + "}", |
| + ]), |
| + // Method signatures. |
| + "{f()}", |
| + "{f?()}", |
| + "{f(a)}", |
| + "{f?(a)}", |
| + "{f(a, b)}", |
| + "{f?(a, b)}", |
| + new TestGen(1, ValidTypes, [ |
| + t => "{f() : " + t + "}", |
| + t => "{f?() : " + t + "}", |
| + t => "{f(a: " + t + ")}", |
| + t => "{f?(a: " + t + ")}", |
| + t => "{f(a: " + t + ") : " + t + "}", |
| + t => "{f?(a: " + t + ") : " + t + "}", |
| + t => "{f<A extends " + t + ">(a: " + t + ")}", |
|
rossberg
2016/04/07 15:09:02
How about cases without extends, or with more than
nickie
2016/04/08 09:50:57
Done.
|
| + t => "{f?<A extends " + t + ">(a: " + t + ")}", |
| + t => "{f<A extends " + t + ">(a: " + t + ") : " + t + "}", |
| + t => "{f?<A extends " + t + ">(a: " + t + ") : " + t + "}" |
| + ]), |
| + // Call signatures. |
| + "{()}", |
| + "{(a)}", |
| + "{(a, b)}", |
| + new TestGen(1, ValidTypes, [ |
| + t => "{() : " + t + "}", |
| + t => "{(a: " + t + ")}", |
| + t => "{(a: " + t + ") : " + t + "}", |
| + t => "{<A extends " + t + ">(a: " + t + ")}", |
| + t => "{<A extends " + t + ">(a: " + t + ") : " + t + "}" |
| + ]), |
| + // Constructor signatures. |
| + "{new ()}", |
| + "{new (a)}", |
| + "{new (a, b)}", |
| + new TestGen(1, ValidTypes, [ |
| + t => "{new () : " + t + "}", |
| + t => "{new (a: " + t + ")}", |
| + t => "{new (a: " + t + ") : " + t + "}", |
| + t => "{new <A extends " + t + ">(a: " + t + ")}", |
| + t => "{new <A extends " + t + ">(a: " + t + ") : " + t + "}" |
| + ]), |
| + // Index signatures. |
| + "{[a: number]}", |
| + "{[a: string]}", |
| + new TestGen(1, ValidTypes, [ |
| + t => "{[a: number] : " + t + "}", |
| + t => "{[a: string] : " + t + "}" |
| + ]) |
| + ]); |
| +} |
| + |
| +function InvalidObjectTypes(size) { |
| + return Generate(size, [ |
| + // Illegal types in legal places. |
| + new TestGen(1, InvalidTypes, [ |
| + t => "{a: " + t + "}", |
| + t => "{a: " + t + ", b?: " + t + "}", |
| + t => "{f() : " + t + "}", |
| + t => "{f(a: " + t + ")}", |
| + t => "{f<A extends " + t + ">()}", |
| + t => "{(a: " + t + ")}", |
| + t => "{new () : " + t + "}" |
| + ]), |
| + // Valid binding patterns that are not tuple types. |
| + "{a: []}", |
| + "{a: [...rest]}", |
| + // Invalid index signatures. |
| + "{[a: any]}", |
| + "{[a: any] : number}" |
| + ]); |
| +} |
| + |
| + |
| // All types: simple, type references, type parametric, type queries |
| // and tuples. |