| // 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. |
| |
| // @dart = 2.9 |
| |
| // Test of Symbol class for operators.. |
| |
| dynamic $ = new Symbolize(); |
| |
| main() { |
| testSymbol(#+, $ + $, "+"); |
| testSymbol(#-, $ - $, "-"); |
| testSymbol(#*, $ * $, "*"); |
| testSymbol(#/, $ / $, "/"); |
| testSymbol(#~/, $ ~/ $, "~/"); |
| testSymbol(#%, $ % $, "%"); |
| testSymbol(#<<, $ << $, "<<"); |
| testSymbol(#>>, $ >> $, ">>"); |
| testSymbol(#~, ~$, "~"); |
| testSymbol(#|, $ | $, "|"); |
| testSymbol(#&, $ & $, "&"); |
| testSymbol(#^, $ ^ $, "^"); |
| testSymbol(#<, $ < $, "<"); |
| testSymbol(#<=, $ <= $, "<="); |
| testSymbol(#>, $ > $, ">"); |
| testSymbol(#>=, $ >= $, ">="); |
| testSymbol(#==, new Symbol("=="), "=="); // Can't hit noSuchMethod. |
| testSymbol(#[], $[$], "[]"); |
| testSymbol(#[]=, ($[$] = $).lastMember, "[]="); |
| testSymbol(Symbol.unaryMinus, -$, "unary-"); |
| |
| testSymbolThrows(">>>"); // //# 03: ok |
| testSymbolThrows("!"); // //# 03: continued |
| testSymbolThrows("&&"); // //# 03: continued |
| testSymbolThrows("||"); // //# 03: continued |
| testSymbolThrows("?"); // //# 03: continued |
| testSymbolThrows("?:"); // //# 03: continued |
| testSymbolThrows("#"); // //# 03: continued |
| testSymbolThrows("//"); // //# 03: continued |
| } |
| |
| void testSymbol(Symbol constSymbol, var mirrorSymbol, String name) { |
| Symbol dynamicSymbol = new Symbol(name); |
| if (constSymbol != mirrorSymbol) { |
| throw "Not equal #$name, \$$name: $constSymbol, $mirrorSymbol"; |
| } |
| if (constSymbol != dynamicSymbol) { |
| throw "Not equal #$name, new Symbol('$name'): $constSymbol, $dynamicSymbol"; |
| } |
| if (mirrorSymbol != dynamicSymbol) { |
| throw "Not equal \$$name, new Symbol('$name'): " |
| "$mirrorSymbol, $dynamicSymbol"; |
| } |
| if (constSymbol.hashCode != mirrorSymbol.hashCode) { |
| throw "HashCode not equal #$name, \$$name: $constSymbol, $mirrorSymbol"; |
| } |
| if (constSymbol.hashCode != dynamicSymbol.hashCode) { |
| throw "HashCode not equal #$name, new Symbol('$name'): " |
| "$constSymbol, $dynamicSymbol"; |
| } |
| if (mirrorSymbol.hashCode != dynamicSymbol.hashCode) { |
| throw "HashCode not equal \$$name, new Symbol('$name'): " |
| "$mirrorSymbol, $dynamicSymbol"; |
| } |
| } |
| |
| void testSymbolThrows(name) { |
| bool fails = false; |
| try { |
| new Symbol(name); |
| } catch (e) { |
| fails = true; |
| } |
| if (!fails) { |
| throw "Didn't throw: $name"; |
| } |
| } |
| |
| class Symbolize { |
| Symbol lastMember; |
| noSuchMethod(m) => lastMember = m.memberName; |
| } |