| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import "package:expect/expect.dart"; | 5 import "package:expect/expect.dart"; |
| 6 | 6 |
| 7 // Tests that we can call functions through getters. | 7 // Tests that we can call functions through getters. |
| 8 | 8 |
| 9 const TOP_LEVEL_CONST = 1; | 9 const TOP_LEVEL_CONST = 1; |
| 10 const TOP_LEVEL_CONST_REF = TOP_LEVEL_CONST; | 10 const TOP_LEVEL_CONST_REF = TOP_LEVEL_CONST; |
| 11 const TOP_LEVEL_NULL = null; | 11 const TOP_LEVEL_NULL = null; |
| 12 | 12 |
| 13 var topLevel; | 13 var topLevel; |
| 14 | 14 |
| 15 class CallThroughGetterTest { | 15 class CallThroughGetterTest { |
| 16 | |
| 17 static void testMain() { | 16 static void testMain() { |
| 18 testTopLevel(); | 17 testTopLevel(); |
| 19 testField(); | 18 testField(); |
| 20 testGetter(); | 19 testGetter(); |
| 21 testMethod(); | 20 testMethod(); |
| 22 testEvaluationOrder(); | 21 testEvaluationOrder(); |
| 23 } | 22 } |
| 24 | 23 |
| 25 static void testTopLevel() { | 24 static void testTopLevel() { |
| 26 topLevel = () { | 25 topLevel = () { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 42 A a = new A(); | 41 A a = new A(); |
| 43 a.field = () => 42; | 42 a.field = () => 42; |
| 44 Expect.equals(42, a.field()); | 43 Expect.equals(42, a.field()); |
| 45 Expect.equals(42, (a.field)()); | 44 Expect.equals(42, (a.field)()); |
| 46 | 45 |
| 47 a.field = () => 87; | 46 a.field = () => 87; |
| 48 Expect.equals(87, a.field()); | 47 Expect.equals(87, a.field()); |
| 49 Expect.equals(87, (a.field)()); | 48 Expect.equals(87, (a.field)()); |
| 50 | 49 |
| 51 a.field = 99; | 50 a.field = 99; |
| 52 expectThrowsNoSuchMethod(() { a.field(); }); | 51 expectThrowsNoSuchMethod(() { |
| 53 expectThrowsNoSuchMethod(() { (a.field)(); }); | 52 a.field(); |
| 53 }); |
| 54 expectThrowsNoSuchMethod(() { |
| 55 (a.field)(); |
| 56 }); |
| 54 } | 57 } |
| 55 | 58 |
| 56 static void testGetter() { | 59 static void testGetter() { |
| 57 A a = new A(); | 60 A a = new A(); |
| 58 a.field = () => 42; | 61 a.field = () => 42; |
| 59 Expect.equals(42, a.getter()); | 62 Expect.equals(42, a.getter()); |
| 60 Expect.equals(42, (a.getter)()); | 63 Expect.equals(42, (a.getter)()); |
| 61 | 64 |
| 62 a.field = () => 87; | 65 a.field = () => 87; |
| 63 Expect.equals(87, a.getter()); | 66 Expect.equals(87, a.getter()); |
| 64 Expect.equals(87, (a.getter)()); | 67 Expect.equals(87, (a.getter)()); |
| 65 | 68 |
| 66 a.field = 99; | 69 a.field = 99; |
| 67 expectThrowsNoSuchMethod(() { a.getter(); }); | 70 expectThrowsNoSuchMethod(() { |
| 68 expectThrowsNoSuchMethod(() { (a.getter)(); }); | 71 a.getter(); |
| 72 }); |
| 73 expectThrowsNoSuchMethod(() { |
| 74 (a.getter)(); |
| 75 }); |
| 69 } | 76 } |
| 70 | 77 |
| 71 static void testMethod() { | 78 static void testMethod() { |
| 72 A a = new A(); | 79 A a = new A(); |
| 73 a.field = () => 42; | 80 a.field = () => 42; |
| 74 Expect.equals(true, a.method() is Function); | 81 Expect.equals(true, a.method() is Function); |
| 75 Expect.equals(42, a.method()()); | 82 Expect.equals(42, a.method()()); |
| 76 | 83 |
| 77 a.field = () => 87; | 84 a.field = () => 87; |
| 78 Expect.equals(true, a.method() is Function); | 85 Expect.equals(true, a.method() is Function); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 Expect.fail("Wrong exception. Expected: NoSuchMethodError" | 122 Expect.fail("Wrong exception. Expected: NoSuchMethodError" |
| 116 " got: ${exception}"); | 123 " got: ${exception}"); |
| 117 } | 124 } |
| 118 } | 125 } |
| 119 | 126 |
| 120 static catchException(fn) { | 127 static catchException(fn) { |
| 121 bool caught = false; | 128 bool caught = false; |
| 122 var result = null; | 129 var result = null; |
| 123 try { | 130 try { |
| 124 fn(); | 131 fn(); |
| 125 Expect.equals(true, false); // Shouldn't reach this. | 132 Expect.equals(true, false); // Shouldn't reach this. |
| 126 } catch (e) { | 133 } catch (e) { |
| 127 caught = true; | 134 caught = true; |
| 128 result = e; | 135 result = e; |
| 129 } | 136 } |
| 130 Expect.equals(true, caught); | 137 Expect.equals(true, caught); |
| 131 return result; | 138 return result; |
| 132 } | 139 } |
| 133 | |
| 134 } | 140 } |
| 135 | 141 |
| 142 class A { |
| 143 A() {} |
| 144 var field; |
| 145 get getter { |
| 146 return field; |
| 147 } |
| 136 | 148 |
| 137 class A { | 149 method() { |
| 138 | 150 return field; |
| 139 A() { } | 151 } |
| 140 var field; | |
| 141 get getter { return field; } | |
| 142 method() { return field; } | |
| 143 | |
| 144 } | 152 } |
| 145 | 153 |
| 154 class B { |
| 155 B() : _order = new StringBuffer("") {} |
| 146 | 156 |
| 147 class B { | 157 get g0 { |
| 158 _mark('g'); |
| 159 return () { |
| 160 return _mark('f'); |
| 161 }; |
| 162 } |
| 148 | 163 |
| 149 B() : _order = new StringBuffer("") { } | 164 get g1 { |
| 165 _mark('g'); |
| 166 return (x) { |
| 167 return _mark('f'); |
| 168 }; |
| 169 } |
| 150 | 170 |
| 151 get g0 { _mark('g'); return () { return _mark('f'); }; } | 171 get g2 { |
| 152 get g1 { _mark('g'); return (x) { return _mark('f'); }; } | 172 _mark('g'); |
| 153 get g2 { _mark('g'); return (x, y) { return _mark('f'); }; } | 173 return (x, y) { |
| 154 get g3 { _mark('g'); return (x, y, z) { return _mark('f'); }; } | 174 return _mark('f'); |
| 175 }; |
| 176 } |
| 155 | 177 |
| 156 get x { _mark('x'); return 0; } | 178 get g3 { |
| 157 get y { _mark('y'); return 1; } | 179 _mark('g'); |
| 158 get z { _mark('z'); return 2; } | 180 return (x, y, z) { |
| 181 return _mark('f'); |
| 182 }; |
| 183 } |
| 159 | 184 |
| 160 _mark(m) { _order.write(m); return _order.toString(); } | 185 get x { |
| 186 _mark('x'); |
| 187 return 0; |
| 188 } |
| 189 |
| 190 get y { |
| 191 _mark('y'); |
| 192 return 1; |
| 193 } |
| 194 |
| 195 get z { |
| 196 _mark('z'); |
| 197 return 2; |
| 198 } |
| 199 |
| 200 _mark(m) { |
| 201 _order.write(m); |
| 202 return _order.toString(); |
| 203 } |
| 204 |
| 161 StringBuffer _order; | 205 StringBuffer _order; |
| 162 | |
| 163 } | 206 } |
| 164 | 207 |
| 165 main() { | 208 main() { |
| 166 CallThroughGetterTest.testMain(); | 209 CallThroughGetterTest.testMain(); |
| 167 } | 210 } |
| OLD | NEW |