| Index: test/codegen/corelib/expando_test.dart
|
| diff --git a/test/codegen/corelib/expando_test.dart b/test/codegen/corelib/expando_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a7fb1c43b5e6d247574db77a81e4678feac850cd
|
| --- /dev/null
|
| +++ b/test/codegen/corelib/expando_test.dart
|
| @@ -0,0 +1,109 @@
|
| +// Copyright (c) 2012, 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";
|
| +
|
| +class ExpandoTest {
|
| + static Expando<int> visits;
|
| +
|
| + static testMain() {
|
| + visits = new Expando<int>('visits');
|
| + var legal = [ new Object(),
|
| + new List(), [1,2,3], const [1,2,3],
|
| + new Map(), {'x':1,'y':2}, const {'x':1,'y':2},
|
| + new Expando(), new Expando('horse') ];
|
| + for (var object in legal) {
|
| + testNamedExpando(object);
|
| + testUnnamedExpando(object);
|
| + }
|
| + for (var object in legal) {
|
| + Expect.equals(2, visits[object], "$object");
|
| + }
|
| + testIllegal();
|
| + testIdentity();
|
| + }
|
| +
|
| + static visit(object) {
|
| + int count = visits[object];
|
| + count = (count == null) ? 1 : count + 1;
|
| + visits[object] = count;
|
| + }
|
| +
|
| + static testNamedExpando(object) {
|
| + Expando<int> expando = new Expando<int>('myexpando');
|
| + Expect.equals('myexpando', expando.name);
|
| + Expect.isTrue(expando.toString().startsWith('Expando:myexpando'));
|
| + testExpando(expando, object);
|
| + }
|
| +
|
| + static testUnnamedExpando(object) {
|
| + Expando<int> expando = new Expando<int>();
|
| + Expect.isNull(expando.name);
|
| + Expect.isTrue(expando.toString().startsWith('Expando:'));
|
| + testExpando(expando, object);
|
| + }
|
| +
|
| + static testExpando(Expando<int> expando, object) {
|
| + visit(object);
|
| +
|
| + Expect.isNull(expando[object]);
|
| + expando[object] = 42;
|
| + Expect.equals(42, expando[object]);
|
| + expando[object] = null;
|
| + Expect.isNull(expando[object]);
|
| +
|
| + Expando<int> alternative = new Expando('myexpando');
|
| + Expect.isNull(alternative[object]);
|
| + alternative[object] = 87;
|
| + Expect.isNull(expando[object]);
|
| + expando[object] = 99;
|
| + Expect.equals(99, expando[object]);
|
| + Expect.equals(87, alternative[object]);
|
| + }
|
| +
|
| + static testIllegal() {
|
| + Expando<int> expando = new Expando<int>();
|
| + Expect.throws(() => expando[null], (exception)
|
| + => exception is ArgumentError, "null");
|
| + Expect.throws(() => expando['string'], (exception)
|
| + => exception is ArgumentError, "'string'");
|
| + Expect.throws(() => expando['string'], (exception)
|
| + => exception is ArgumentError, "'string'");
|
| + Expect.throws(() => expando[42], (exception)
|
| + => exception is ArgumentError, "42");
|
| + Expect.throws(() => expando[42.87], (exception)
|
| + => exception is ArgumentError, "42.87");
|
| + Expect.throws(() => expando[true], (exception)
|
| + => exception is ArgumentError, "true");
|
| + Expect.throws(() => expando[false], (exception)
|
| + => exception is ArgumentError, "false");
|
| + }
|
| +
|
| + static testIdentity() {
|
| + // Expando only depends on identity of object.
|
| + Expando<int> expando = new Expando<int>();
|
| + var m1 = new Mutable(1);
|
| + var m2 = new Mutable(7);
|
| + var m3 = new Mutable(13);
|
| + expando[m1] = 42;
|
| + Expect.equals(42, expando[m1]);
|
| + m1.id = 37;
|
| + Expect.equals(42, expando[m1]);
|
| + expando[m2] = 37;
|
| + expando[m3] = 10;
|
| + m3.id = 1;
|
| + Expect.equals(42, expando[m1]);
|
| + Expect.equals(37, expando[m2]);
|
| + Expect.equals(10, expando[m3]);
|
| + }
|
| +}
|
| +
|
| +main() => ExpandoTest.testMain();
|
| +
|
| +class Mutable {
|
| + int id;
|
| + Mutable(this.id);
|
| + int get hashCode => id;
|
| + bool operator==(other) => other is Mutable && other.id == id;
|
| +}
|
|
|