| // 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); |
| } |