Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1242)

Unified Diff: test/mjsunit/harmony/typesystem/typegen.js

Issue 1817093002: Add parsing for object types (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@types-1810943002-tuple
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.
« test/cctest/test-parsing.cc ('K') | « test/mjsunit/harmony/typesystem/object-types.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698