// 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."; } }