Files
sdk/tests/language/switch_case_test.dart
T
floitsch@google.com 2e04791d8e Follow factory redirections when checking case expressions.
This version does the check in the resolver and uses the constant values and not just the types. As such, it also follows the constructor chain.

R=karlklose@google.com

Review URL: https://codereview.chromium.org//184663004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@33239 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-03 19:22:13 +00:00

47 lines
1.1 KiB
Dart

// Copyright (c) 2014, 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";
class A {
const A();
const factory A.B() = B;
const factory A.C() = C;
const factory A.C2() = D;
}
class B implements A {
const B();
operator ==(o) => true; /// 00: compile-time error
}
class C implements A {
final int x;
const C() : x = 0;
const C.fromD() : x = 1;
}
class D implements C {
const factory D() = C.fromD;
}
main() {
switch (new B()) {
case const A.B(): Expect.fail("bad switch"); break; /// 00: continued
}
switch (new C()) {
case const C(): Expect.fail("bad switch"); break;
case const A.C(): Expect.fail("bad switch"); break;
case const A.C2(): Expect.fail("bad switch"); break;
case const A(): Expect.fail("bad switch"); break; /// 01: compile-time error
}
switch (new A()) {
case const A(): Expect.fail("bad switch"); break;
case const A.B(): Expect.fail("bad switch"); break; /// 02: compile-time error
}
}