// 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. import "package:expect/expect.dart"; // Test to stress Frog's named parameter scheme. main() { testDollar(); testPsycho(); } class TestClass { method({a, b, a$b, a$$b}) => [a, b, a$b, a$$b]; psycho({$, $$, $$$, $$$$}) => [$, $$, $$$, $$$$]; } globalMethod({a, b, a$b, a$$b}) => [a, b, a$b, a$$b]; format(thing) { if (thing == null) return '-'; if (thing is List) { var fragments = ['[']; var sep; for (final item in thing) { if (sep != null) fragments.add(sep); sep = ', '; fragments.add(format(item)); } fragments.add(']'); return fragments.join(); } return thing.toString(); } // Hopefully inscrutable to static analysis. makeTestClass(n) => [new TestClass(), new Decoy(), 'string'][n % 3]; class Decoy { method([a$b, b, a]) { throw new UnimplementedError(); } psycho([$$$, $$, $]) { throw new UnimplementedError(); } } testDollar() { Expect.equals('[]', format([])); Expect.equals('[-, -, -, -]', format(globalMethod())); Expect.equals('[1, 2, -, -]', format(globalMethod(a: 1, b: 2))); Expect.equals('[1, 2, -, -]', format(globalMethod(b: 2, a: 1))); Expect.equals('[-, -, 3, -]', format(globalMethod(a$b: 3))); Expect.equals('[-, -, -, 4]', format(globalMethod(a$$b: 4))); TestClass t = new TestClass(); // Statically typed. Expect.equals('[-, -, -, -]', format(t.method())); Expect.equals('[1, 2, -, -]', format(t.method(a: 1, b: 2))); Expect.equals('[1, 2, -, -]', format(t.method(b: 2, a: 1))); Expect.equals('[-, -, 3, -]', format(t.method(a$b: 3))); Expect.equals('[-, -, -, 4]', format(t.method(a$$b: 4))); var obj = makeTestClass(0); Expect.equals('[-, -, -, -]', format(obj.method())); Expect.equals('[1, 2, -, -]', format(obj.method(a: 1, b: 2))); Expect.equals('[1, 2, -, -]', format(obj.method(b: 2, a: 1))); Expect.equals('[-, -, 3, -]', format(obj.method(a$b: 3))); Expect.equals('[-, -, -, 4]', format(obj.method(a$$b: 4))); } testPsycho() { TestClass t = new TestClass(); // Statically typed. Expect.equals('[1, 2, 3, -]', format(t.psycho($: 1, $$: 2, $$$: 3))); Expect.equals('[1, 2, 3, -]', format(t.psycho($$$: 3, $$: 2, $: 1))); Expect.equals('[1, 2, -, -]', format(t.psycho($: 1, $$: 2))); Expect.equals('[-, -, -, 4]', format(t.psycho($$$$: 4))); var obj = makeTestClass(0); Expect.equals('[1, 2, -, -]', format(obj.psycho($: 1, $$: 2))); Expect.equals('[-, -, -, 4]', format(obj.psycho($$$$: 4))); Expect.equals('[1, 2, 3, -]', format(obj.psycho($: 1, $$: 2, $$$: 3))); Expect.equals('[1, 2, 3, -]', format(obj.psycho($$$: 3, $$: 2, $: 1))); }