Chromium Code Reviews| Index: dart/tests/corelib/symbol_test.dart |
| diff --git a/dart/tests/corelib/symbol_test.dart b/dart/tests/corelib/symbol_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b3604c4e0e51c518e30baffb15f4a144f8f86a24 |
| --- /dev/null |
| +++ b/dart/tests/corelib/symbol_test.dart |
| @@ -0,0 +1,86 @@ |
| +// Copyright (c) 2013, 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. |
| + |
| +// Basic test of Symbol class. |
| + |
| +main() { |
| + var x; |
| + print(x = const Symbol('fisk')); |
| + |
| + try { |
| + print(const Symbol(0)); /// 01: compile-time error |
|
Ivan Posva
2013/04/12 03:34:39
As long as this is not a language feature, I don't
ahe
2013/04/12 05:53:00
Actually, it is a bug in the VM: it is a compile-t
|
| + } on ArgumentError { |
| + print('Caught ArgumentError'); |
| + } on TypeError { |
| + print('Caught TypeError'); |
| + } |
| + |
| + try { |
| + print(const Symbol('0')); /// 02: compile-time error |
| + } on ArgumentError catch (e) { |
| + print('Caught $e'); |
| + } |
| + |
| + try { |
| + print(const Symbol('_')); /// 03: compile-time error |
| + } on ArgumentError catch (e) { |
| + print('Caught $e'); |
| + } |
| + |
| + try { |
| + var y = 0; |
| + print(new Symbol(y)); |
| + throw 'Expected an ArgumentError or a TypeError'; |
| + } on ArgumentError { |
| + print('Caught ArgumentError'); |
| + } on TypeError { |
| + print('Caught TypeError'); |
| + } |
| + |
| + try { |
| + print(new Symbol('0')); |
| + throw 'Expected an ArgumentError'; |
| + } on ArgumentError catch (e) { |
| + print('Caught $e'); |
| + } |
| + |
| + try { |
| + print(new Symbol('_')); |
| + throw 'Expected an ArgumentError'; |
| + } on ArgumentError catch (e) { |
| + print('Caught $e'); |
| + } |
| + |
| + if (!identical(const Symbol('fisk'), x)) { |
| + throw 'Symbol constant is not canonicalized'; |
| + } |
| + |
| + if (const Symbol('fisk') != x) { |
| + throw 'Symbol constant is not equal to itself'; |
| + } |
| + |
| + if (const Symbol('fisk') != new Symbol('fisk')) { |
| + throw 'Symbol constant is not equal to its non-const equivalent'; |
| + } |
| + |
| + if (new Symbol('fisk') != new Symbol('fisk')) { |
| + throw 'new Symbol is not equal to its equivalent'; |
| + } |
| + |
| + if (new Symbol('fisk') == new Symbol('hest')) { |
| + throw 'unrelated Symbols are equal'; |
| + } |
| + |
| + if (new Symbol('fisk') == new Object()) { |
| + throw 'unrelated objects are equal'; |
| + } |
| + |
| + x.hashCode as int; |
| + |
| + new Symbol('fisk').hashCode as int; |
| + |
| + if (new Symbol('fisk').hashCode != x.hashCode) { |
| + throw "non-const Symbol's hashCode not equal to its const equivalent"; |
| + } |
| +} |