| 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 | 
|---|