f79ed9301b
Now that dart2js only takes migrated files as input, all tests should use the current language version. Change-Id: I6c84850f5786aeac04154b67bd7a3c19083c8bba Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/345344 Reviewed-by: Nate Biggs <natebiggs@google.com> Commit-Queue: Mayank Patke <fishythefish@google.com>
142 lines
2.5 KiB
Dart
142 lines
2.5 KiB
Dart
// Copyright (c) 2012, 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.
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
switcher(val) {
|
|
var x = 0;
|
|
switch (val) {
|
|
case 1:
|
|
x = 100;
|
|
break;
|
|
case 2:
|
|
x = 200;
|
|
break;
|
|
case 3:
|
|
x = 300;
|
|
break;
|
|
default:
|
|
return 400;
|
|
break; // Intentional dead code (regression test for crash).
|
|
}
|
|
return x;
|
|
}
|
|
|
|
// Check unambiguated grammar allowing multiple labels per case/default.
|
|
switcher2(val) {
|
|
var x = 0;
|
|
switch (val) {
|
|
foo:
|
|
bar:
|
|
case 1:
|
|
baz:
|
|
case 2:
|
|
fez:
|
|
{
|
|
x = 100;
|
|
break fez;
|
|
}
|
|
break;
|
|
hest:
|
|
fisk:
|
|
case 3:
|
|
case 4:
|
|
svin:
|
|
default:
|
|
barber:
|
|
{
|
|
if (val > 2) {
|
|
x = 200;
|
|
break;
|
|
} else {
|
|
// Enable when continue to switch-case is implemented.
|
|
continue hest;
|
|
}
|
|
}
|
|
}
|
|
return x;
|
|
}
|
|
|
|
var x = 0;
|
|
|
|
@pragma('dart2js:noInline')
|
|
switcher3(val) {
|
|
switch (val) {
|
|
case 1:
|
|
default:
|
|
incrementX();
|
|
}
|
|
}
|
|
|
|
switcher4(val) {
|
|
switch (val) {
|
|
case 1:
|
|
return 100;
|
|
case 2: _throw();
|
|
case 3:
|
|
_throw();
|
|
break;
|
|
default:
|
|
return 300;
|
|
}
|
|
}
|
|
|
|
_throw() {
|
|
throw 'exception';
|
|
}
|
|
|
|
// Tests that we generate a break after the last case if it isn't default.
|
|
switcher5(val) {
|
|
var x = 0;
|
|
switch(val) {
|
|
case 1:
|
|
return 100;
|
|
case 2:
|
|
return 200;
|
|
case 3:
|
|
x = 300;
|
|
}
|
|
return x;
|
|
}
|
|
|
|
incrementX() {
|
|
x++;
|
|
}
|
|
|
|
badswitches(val) {
|
|
// Test some badly formed switch bodies.
|
|
// 01 - a label/statement without a following case/default.
|
|
// 02 - a label without a following case/default or statement.
|
|
switch (val) {
|
|
foo: break; // //# 01: compile-time error
|
|
case 2: // //# 02: compile-time error
|
|
foo: // //# 02: continued
|
|
}
|
|
}
|
|
|
|
main() {
|
|
Expect.equals(100, switcher(1));
|
|
Expect.equals(200, switcher(2));
|
|
Expect.equals(300, switcher(3));
|
|
Expect.equals(400, switcher(4));
|
|
|
|
Expect.equals(100, switcher2(1));
|
|
Expect.equals(100, switcher2(2));
|
|
Expect.equals(200, switcher2(3));
|
|
Expect.equals(200, switcher2(4));
|
|
Expect.equals(200, switcher2(5));
|
|
|
|
|
|
switcher3(1);
|
|
Expect.equals(1, x);
|
|
|
|
Expect.equals(100, switcher4(1));
|
|
|
|
Expect.equals(100, switcher5(1));
|
|
Expect.equals(200, switcher5(2));
|
|
Expect.equals(300, switcher5(3));
|
|
|
|
badswitches(42);
|
|
}
|