|  | // Copyright (c) 2011, 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 that a getter is evaluated after the arguments, when a getter is | 
|  | // for invoking a method. See chapter 'Method Invocation' in specification. | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  |  | 
|  | var counter = 0; | 
|  |  | 
|  | class Test1 { | 
|  | get a { | 
|  | Expect.equals(1, counter); | 
|  | counter++; | 
|  | return (c) {}; | 
|  | } | 
|  |  | 
|  | b() { | 
|  | Expect.equals(0, counter); | 
|  | counter++; | 
|  | return 1; | 
|  | } | 
|  | } | 
|  |  | 
|  | class Test2 { | 
|  | static get a { | 
|  | Expect.equals(0, counter); | 
|  | counter++; | 
|  | return (c) {}; | 
|  | } | 
|  |  | 
|  | static b() { | 
|  | Expect.equals(1, counter); | 
|  | counter++; | 
|  | return 1; | 
|  | } | 
|  | } | 
|  |  | 
|  | get a { | 
|  | Expect.equals(0, counter); | 
|  | counter++; | 
|  | return (c) {}; | 
|  | } | 
|  |  | 
|  | b() { | 
|  | Expect.equals(1, counter); | 
|  | counter++; | 
|  | return 1; | 
|  | } | 
|  |  | 
|  | main() { | 
|  | var failures = []; | 
|  | try { | 
|  | // Check instance getters. | 
|  | counter = 0; | 
|  | var o = new Test1(); | 
|  | o.a(o.b()); | 
|  | Expect.equals(2, counter); | 
|  | } catch (exc, stack) { | 
|  | failures.add(exc); | 
|  | failures.add(stack); | 
|  | } | 
|  | try { | 
|  | // Check static getters. | 
|  | counter = 0; | 
|  | Test2.a(Test2.b()); | 
|  | Expect.equals(2, counter); | 
|  | } catch (exc, stack) { | 
|  | failures.add(exc); | 
|  | failures.add(stack); | 
|  | } | 
|  | try { | 
|  | // Check top-level getters. | 
|  | counter = 0; | 
|  | a(b()); | 
|  | Expect.equals(2, counter); | 
|  | } catch (exc, stack) { | 
|  | failures.add(exc); | 
|  | failures.add(stack); | 
|  | } | 
|  | // If any of the tests failed print out the details and fail the test. | 
|  | if (failures.length != 0) { | 
|  | for (var msg in failures) { | 
|  | print(msg.toString()); | 
|  | } | 
|  | throw "${failures.length ~/ 2} tests failed."; | 
|  | } | 
|  | } |