| // Copyright (c) 2023, 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 'dart:_interceptors'; | |
| import 'package:js/js.dart'; | |
| import 'package:expect/expect.dart'; | |
| @JS() | |
| external JavaScriptBigInt bigInt; | |
| @JS('bigInt') | |
| external dynamic bigIntDynamic; | |
| @JS('BigInt') | |
| external JavaScriptBigInt makeBigInt(String value); | |
| @JS() | |
| main() { | |
| const s = '9876543210000000000000123456789'; | |
| bigInt = makeBigInt(s); | |
| /* toString */ | |
| Expect.equals(s, bigInt.toString()); | |
| Expect.equals(s, bigIntDynamic.toString()); | |
| // String interpolation | |
| Expect.equals(s, '$bigInt'); | |
| Expect.equals(s, '$bigIntDynamic'); | |
| // toString tear-offs | |
| var toStringTearoff = bigInt.toString; | |
| Expect.type<String Function()>(toStringTearoff); | |
| Expect.equals(bigInt.toString, toStringTearoff); | |
| Expect.equals(bigInt.toString(), toStringTearoff()); | |
| toStringTearoff = bigIntDynamic.toString; | |
| Expect.type<String Function()>(toStringTearoff); | |
| Expect.equals(bigInt.toString, toStringTearoff); | |
| Expect.equals(bigInt.toString(), toStringTearoff()); | |
| /* hashCode */ | |
| // This value is allowed to change, but for lack of a better existing option, | |
| // we return 0. | |
| Expect.equals(0, bigInt.hashCode); | |
| Expect.equals(0, bigIntDynamic.hashCode); | |
| /* == */ | |
| // Prefer `==` over `Expect.equals` so we can check dynamic vs non-dynamic | |
| // calls. | |
| Expect.isTrue(bigInt == bigInt); | |
| Expect.isTrue(bigIntDynamic == bigInt); | |
| final differentBigInt = makeBigInt('1234567890000000000000987654321'); | |
| Expect.isFalse(bigInt == differentBigInt); | |
| Expect.isFalse(bigIntDynamic == differentBigInt); | |
| /* noSuchMethod */ | |
| final methodName = 'testMethod'; | |
| final invocation = Invocation.method(Symbol(methodName), null); | |
| void testNoSuchMethodResult(noSuchMethodResult) { | |
| Expect.type<NoSuchMethodError>(noSuchMethodResult); | |
| Expect.contains(methodName, noSuchMethodResult.toString()); | |
| } | |
| testNoSuchMethodResult(Expect.throws(() => bigInt.noSuchMethod(invocation))); | |
| testNoSuchMethodResult( | |
| Expect.throws(() => bigIntDynamic.noSuchMethod(invocation)), | |
| ); | |
| var noSuchMethodTearoff = bigInt.noSuchMethod; | |
| Expect.type<dynamic Function(Invocation)>(noSuchMethodTearoff); | |
| Expect.equals(bigInt.noSuchMethod, noSuchMethodTearoff); | |
| testNoSuchMethodResult(Expect.throws(() => noSuchMethodTearoff(invocation))); | |
| noSuchMethodTearoff = bigIntDynamic.noSuchMethod; | |
| Expect.type<dynamic Function(Invocation)>(noSuchMethodTearoff); | |
| Expect.equals(bigIntDynamic.noSuchMethod, noSuchMethodTearoff); | |
| testNoSuchMethodResult( | |
| Expect.throws( | |
| () => noSuchMethodTearoff(Invocation.method(Symbol(methodName), null)), | |
| ), | |
| ); | |
| /* runtimeType */ | |
| var runtimeTypeResult = bigInt.runtimeType; | |
| Expect.type<Type>(runtimeTypeResult); | |
| Expect.equals(bigInt.runtimeType, runtimeTypeResult); | |
| runtimeTypeResult = bigIntDynamic.runtimeType; | |
| Expect.type<Type>(runtimeTypeResult); | |
| Expect.equals(bigIntDynamic.runtimeType, runtimeTypeResult); | |
| } |