blob: 6bd7af378ed4c7fcf3f42b6ec5fd661ac37d473d [file] [log] [blame]
// 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 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 Strings.concatAll(fragments);
}
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)));
}