Index: tests/language/ref_before_declaration_test.dart |
=================================================================== |
--- tests/language/ref_before_declaration_test.dart (revision 0) |
+++ tests/language/ref_before_declaration_test.dart (working copy) |
@@ -0,0 +1,81 @@ |
+// Copyright (c) 2013, 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. |
+ |
+// Test compile-time errors for illegal variable declarations if the name |
+// has been referenced before the variable is declared. |
+ |
+import 'dart:math' as math; |
+ |
+use(value) => value; |
+ |
+var x = 0; |
+final y = 0; |
+ |
+class C { |
+ var f; |
+ C() : f = 'How do you spell PTSD?'; |
+ |
+ void test1() { |
+ use(f); // Refers to instance field f. |
+ var f = 'A shut mouth gathers no foot.'; /// 00: compile-time error |
+ } |
+ |
+ void test2() { |
+ void localFunc() { |
+ use(f); // Refers to instance field f. |
+ } |
+ |
+ var f = 'When chemists die, they barium.'; /// 01: compile-time error |
+ if (true) { |
+ var f = 1; // ok, shadows outer f and instance field f. |
+ } |
+ } |
+ |
+ void test3() { |
+ if (true) { |
+ use(x); // Refers to top-level x. |
+ use(y); // Refers to top-level y. |
+ } |
+ final x = "I have not yet begun to procrastinate."; /// 02: compile-time error |
+ const y = "Honk if you like peace and quiet!"; /// 03: compile-time error |
+ } |
+ |
+ test() { |
+ test1(); |
+ test2(); |
+ test3(); |
+ } |
+} |
+ |
+void testTypeRef() { |
+ String s = 'Can vegetarians eat animal crackers?'; |
+ var String = "I distinctly remember forgetting that."; /// 04: compile-time error |
+} |
+ |
+void testLibPrefix() { |
+ var pie = math.PI; |
+ final math = 0; /// 05: compile-time error |
+} |
+ |
+ |
+void noErrorsExpected() { |
+ use(x); |
+ for (var x = 0; x < 10; x++) use(x); |
+ for (var i = 0; i < 10; i++) var x = 0; |
+ if (true) var x = 0; |
+ while (false) var x = 0; |
+ try { throw "ball"; } catch (x) { use(x); } |
+ switch (x) { |
+ case 0: var x = 'Does fuzzy logic tickle?'; |
+ } |
+ var int = 007; |
+} |
+ |
+void main() { |
+ var c = new C(); |
+ c.test(); |
+ testTypeRef(); |
+ testLibPrefix(); |
+ noErrorsExpected(); |
+} |