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

Unified Diff: tests/language/arg_param_trailing_comma_test.dart

Issue 2087863003: Add test for trailing commas in parameter lists and argument lists. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 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
« no previous file with comments | « no previous file | tests/language/language.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/language/arg_param_trailing_comma_test.dart
diff --git a/tests/language/arg_param_trailing_comma_test.dart b/tests/language/arg_param_trailing_comma_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..6db0ae6913f22017adeda08d8751e8f241c91685
--- /dev/null
+++ b/tests/language/arg_param_trailing_comma_test.dart
@@ -0,0 +1,260 @@
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Dart test program for testing params.
+
+// Convenience values.
+var c = new C();
+var x = 42;
+var y = 42;
+var z = 42;
+
+// Trailing comma in parameter litss.
+
+// Typedefs.
+typedef fx(x, );
+typedef fy([y,]);
+typedef fxy(x, [y, ]);
+typedef fz({z,});
+typedef fxz(x, {z, });
+
+// As arguments type.
+argfx(void f(x, )) {}
+argfy(void f([y, ])) {}
+argfxy(void f(x, [y, ])) {}
+argfz(void f({z, })) {}
+argfxz(void f(x, {z, })) {}
+
+// Top level functions
+void topx(x,) {}
+void topy([y, ]) {}
+void topxy(x, [y, ]) {}
+void topz({z, }) {}
+void topxz(x, {z, }) {}
+
+void set topsetx(x, ) {}
+
+// After specific parameter formats.
+void afterDefaultValueY([int y = 42, ]) {}
+void afterDefaultValueZ({int z : 42, }) {}
+void afterFunsigX(int f(),) {}
+void afterFunsigY([int f(),]) {}
+void afterFunsigZ({int f(),}) {}
+void afterFunctionSignatre([int f(), ]) {}
+
+class C {
+ C();
+
+ // Constructors.
+ C.x(x, );
+ C.y([y, ]);
+ C.xy(x, [y, ]);
+ C.z({z, });
+ C.xz(x, {z, });
+
+ // Static members
+ static void staticx(x,) {}
+ static void staticy([y, ]) {}
+ static void staticxy(x, [y, ]) {}
+ static void staticz({z, }) {}
+ static void staticxz(x, {z, }) {}
+
+ static void set staticsetx(x, ) {}
+
+ // Instance members
+ void instancex(x,) {}
+ void instancey([y, ]) {}
+ void instancexy(x, [y, ]) {}
+ void instancez({z, }) {}
+ void instancexz(x, {z, }) {}
+
+ void set instancesetx(x, ) {}
+
+ operator +(x, ) => this;
+ operator []=(x, y, ) {}
+}
+
+main(args, ) {
+ // Check that all functions can be called normally
+ topx(x);
+ topy(y);
+ topxy(x, y);
+ topz();
+ topz(z: z);
+ topxz(x);
+ topxz(x, z: z);
+ topsetx = x;
+ afterDefaultValueY();
+ afterDefaultValueY(y);
+ afterDefaultValueZ();
+ afterDefaultValueZ(z: z);
+ new C.x(x);
+ new C.xy(x);
+ new C.xy(x, y);
+ new C.y(y);
+ new C.xz(x);
+ new C.xz(x, z: z);
+ new C.z(z: z);
+ C.staticx(x);
+ C.staticy(y);
+ C.staticxy(x);
+ C.staticxy(x, y);
+ C.staticz();
+ C.staticz(z: z);
+ C.staticxz(x);
+ C.staticxz(x, z: z);
+ C.staticsetx = x;
+ c.instancex(x);
+ c.instancey();
+ c.instancey(y);
+ c.instancexy(x);
+ c.instancexy(x, y);
+ c.instancez();
+ c.instancez(z: z);
+ c.instancexz(x);
+ c.instancexz(x, z: z);
+ c.instancesetx = x;
+ c + x;
+ c[x] = y;
+
+ // Call with ekstra comma (not possible for setters and operators).
hausner 2016/06/22 17:19:41 Dijkstra style comment :-)
Lasse Reichstein Nielsen 2016/06/24 11:50:55 I regret nothing!
+ topx(x, );
+ topy(y, );
+ topxy(x, y, );
+ topxy(x, );
+ topz(z: z, );
+ topxz(x, );
+ topxz(x, z: z, );
+ new C.x(x, );
+ new C.xy(x, y, );
+ new C.xy(x, );
+ new C.y(y, );
+ new C.xz(x, );
+ new C.xz(x, z: z, );
+ new C.z(z: z, );
+ C.staticx(x, );
+ C.staticy(y, );
+ C.staticxy(x, y, );
+ C.staticxy(x, );
+ C.staticz(z: z, );
+ C.staticxz(x, );
+ C.staticxz(x, z: z, );
+ c.instancex(x, );
+ c.instancey(y, );
+ c.instancexy(x, y, );
+ c.instancexy(x, );
+ c.instancez(z: z, );
+ c.instancexz(x, );
+ c.instancexz(x, z: z, );
+
+ // Typedefs work.
+ if (topx is! fx) throw "Bad type: $fx";
+ if (topy is! fy) throw "Bad type: $fy";
+ if (topxy is! fxy) throw "Bad type: $fxy";
+ if (topz is! fz) throw "Bad type: $fz";
+ if (topxz is! fxz) throw "Bad type: $fxz";
+
+ // Parameter types work (checked mode only test).
+ argfx(topx);
+ argfy(topy);
+ argfxy(topxy);
+ argfz(topz);
+ argfxz(topxz);
+
+ // Make sure the Bad class is parsed.
+ new Bad().method();
+}
+
+
+// Invalid syntax
+void topBadEmpty(,) {} /// 01: compile-time error
floitsch 2016/06/22 18:23:38 In theory, you would have a better test, if you on
Lasse Reichstein Nielsen 2016/06/24 11:50:55 True, that would ensure that some other unintended
+void topBadStart(, a) {} /// 02: compile-time error
+void topBadEnd(a,,) {} /// 03: compile-time error
+void topBadMiddle(a,, b) {} /// 04: compile-time error
+void topBadPosEmpty([,]) {} /// 01: compile-time error
+void topBadPosStart([, a]) {} /// 02: compile-time error
+void topBadPosEnd([a,,]) {} /// 03: compile-time error
+void topBadPosMiddle({a,, b}) {} /// 04: compile-time error
+void topBadPosEmpty({,}) {} /// 01: compile-time error
+void topBadPosStart({, a}) {} /// 02: compile-time error
+void topBadPosEnd({a,,}) {} /// 03: compile-time error
+void topBadPosMiddle([a,, b]) {} /// 04: compile-time error
+void set topSetBadEmpty(,) {} /// 05: compile-time error
+void set topSetBadStart(, a) {} /// 06: compile-time error
+void set topSetBadEnd(a,,) {} /// 07: compile-time error
+void set topSetBadMiddle(a,, b) {} /// 08: compile-time error
+class Bad {
+ Bad.empty(,) {} /// 09: compile-time error
+ Bad.start(, a) {} /// 10: compile-time error
+ Bad.end(a,,) {} /// 11: compile-time error
+ Bad.middle(a,, b) {} /// 12: compile-time error
+ static staticBadEmpty(,) {} /// 13: compile-time error
+ static staticBadStart(, a) {} /// 14: compile-time error
+ static staticBadEnd(a,,) {} /// 15: compile-time error
+ static staticBadMiddle(a,, b) {} /// 16: compile-time error
+ static void set staticSetBadEmpty(,) {} /// 17: compile-time error
+ static void set staticSetBadStart(, a) {} /// 18: compile-time error
+ static void set staticSetBadEnd(a,,) {} /// 19: compile-time error
+ static void set staticSetBadMiddle(a,, b) {} /// 20: compile-time error
+ instanceBadEmpty(,) {} /// 21: compile-time error
+ instanceBadStart(, a) {} /// 22: compile-time error
+ instanceBadEnd(a,,) {} /// 23: compile-time error
+ instanceBadMiddle(a,, b) {} /// 24: compile-time error
+ void set instanceSetBadEmpty(,) {} /// 25: compile-time error
+ void set instanceSetBadStart(, a) {} /// 26: compile-time error
+ void set instanceSetBadEnd(a,,) {} /// 27: compile-time error
+ void set instanceSetBadMiddle(a,, b) {} /// 28: compile-time error
+ void operator *(,); /// 29: compile-time error
+ void operator *(, a); /// 30: compile-time error
+ void operator *(a,,); /// 31: compile-time error
+ void operator []=(, a); /// 32: compile-time error
+ void operator []=(a,,); /// 33: compile-time error
+ void operator []=(a,, b); /// 34: compile-time error
+ void operator []=(a,); /// 35: compile-time error
+
+ method() {
+ // invalid calls.
+
+ topx(,); /// 36: compile-time error
+ topy(,); /// 37: compile-time error
+ topz(,); /// 38: compile-time error
+ topx(, x); /// 39: compile-time error
+ topz(, z:z); /// 40: compile-time error
+ topxy(x,, y); /// 41: compile-time error
+ topxz(x,, z:z); /// 42: compile-time error
+ topx(x,,); /// 43: compile-time error
+ topz(z:z,,); /// 44: compile-time error
+
+ new C.x(,); /// 45: compile-time error
+ new C.y(,); /// 46: compile-time error
+ new C.z(,); /// 47: compile-time error
+ new C.x(, x); /// 48: compile-time error
+ new C.z(, z:z); /// 49: compile-time error
+ new C.xy(x,, y); /// 50: compile-time error
+ new C.xz(x,, z:z); /// 51: compile-time error
+ new C.x(x,,); /// 52: compile-time error
+ new C.z(z:z,,); /// 53: compile-time error
+
+ C.staticx(,); /// 54: compile-time error
+ C.staticy(,); /// 55: compile-time error
+ C.staticz(,); /// 56: compile-time error
+ C.staticx(, x); /// 57: compile-time error
+ C.staticz(, z:z); /// 58: compile-time error
+ C.staticxy(x,, y); /// 59: compile-time error
+ C.staticxz(x,, z:z); /// 60: compile-time error
+ C.staticx(x,,); /// 61: compile-time error
+ C.staticz(z:z,,); /// 62: compile-time error
+
+ c.instancex(,); /// 63: compile-time error
+ c.instancey(,); /// 64: compile-time error
+ c.instancez(,); /// 65: compile-time error
+ c.instancex(, x); /// 66: compile-time error
+ c.instancez(, z:z); /// 67: compile-time error
+ c.instancexy(x,, y); /// 68: compile-time error
+ c.instancexz(x,, z:z); /// 69: compile-time error
+ c.instancex(x,,); /// 70: compile-time error
+ c.instancez(z:z,,); /// 71: compile-time error
+
+ c[x,] = y; /// 72: compile-time error
+ }
+}
« no previous file with comments | « no previous file | tests/language/language.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698