mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 01:30:32 +00:00
Test toString expectations for interop objects
Now that ddc, dart2js, and dart2wasm are consistent on toString outputs for JS objects, we should test to make sure this behavior doesn't regress. Change-Id: I2b1b4819e5a2425ae813dc944a4dea7b2147d5bc Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/322365 Commit-Queue: Sigmund Cherem <sigmund@google.com> Reviewed-by: Sigmund Cherem <sigmund@google.com> Auto-Submit: Srujan Gaddam <srujzs@google.com>
This commit is contained in:
parent
9e761d5a10
commit
293cbd1dc9
|
@ -20,11 +20,13 @@ class JavaScriptClass {
|
|||
}
|
||||
|
||||
void main() {
|
||||
final toStringValue = 'external toString';
|
||||
// Install a class that is accessible through interop.
|
||||
eval('''
|
||||
self.JavaScriptClass = class JavaScriptClass {
|
||||
constructor() {}
|
||||
get instanceGetter() { return 42; }
|
||||
toString() { return '$toStringValue'; }
|
||||
}
|
||||
''');
|
||||
var instanceOfClass = JavaScriptClass();
|
||||
|
@ -34,8 +36,8 @@ self.JavaScriptClass = class JavaScriptClass {
|
|||
testRuntimeType(instanceOfClass);
|
||||
testNoSuchMethod(instanceOfClass);
|
||||
testNoSuchMethodTearoff(instanceOfClass);
|
||||
testToString(instanceOfClass);
|
||||
testToStringTearoff(instanceOfClass);
|
||||
testToString(instanceOfClass, toStringValue);
|
||||
testToStringTearoff(instanceOfClass, toStringValue);
|
||||
testEquals(instanceOfClass, other);
|
||||
|
||||
var emptyObject = eval('Object.create({})');
|
||||
|
@ -43,8 +45,8 @@ self.JavaScriptClass = class JavaScriptClass {
|
|||
testRuntimeType(emptyObject);
|
||||
testNoSuchMethod(emptyObject);
|
||||
testNoSuchMethodTearoff(emptyObject);
|
||||
testToString(emptyObject);
|
||||
testToStringTearoff(emptyObject);
|
||||
testToString(emptyObject, '[object Object]');
|
||||
testToStringTearoff(emptyObject, '[object Object]');
|
||||
testEquals(emptyObject, other);
|
||||
|
||||
var objectWithNoProto = eval('Object.create(null)');
|
||||
|
@ -69,7 +71,7 @@ self.JavaScriptClass = class JavaScriptClass {
|
|||
testRuntimeType(jsNull);
|
||||
testNoSuchMethod(jsNull);
|
||||
testNoSuchMethodTearoff(jsNull);
|
||||
testToString(jsNull);
|
||||
testToStringTearoff(jsNull);
|
||||
testToString(jsNull, 'null');
|
||||
testToStringTearoff(jsNull, 'null');
|
||||
testEquals(jsNull, other);
|
||||
}
|
||||
|
|
|
@ -38,20 +38,22 @@ void testNoSuchMethodTearoff(x) {
|
|||
Expect.contains('testMethod', noSuchMethodResult.toString());
|
||||
}
|
||||
|
||||
void testToString(x) {
|
||||
void testToString(x, String expected) {
|
||||
var toStringResult = confuse(x.toString());
|
||||
Expect.type<String>(toStringResult);
|
||||
Expect.isTrue(toStringResult.isNotEmpty);
|
||||
Expect.equals(toStringResult, expected);
|
||||
Expect.equals(x.toString(), toStringResult);
|
||||
}
|
||||
|
||||
void testToStringTearoff(x) {
|
||||
void testToStringTearoff(x, String expected) {
|
||||
var toStringTearoff = confuse(x.toString);
|
||||
Expect.type<String Function()>(toStringTearoff);
|
||||
Expect.equals(x.toString, toStringTearoff);
|
||||
var toStringResult = toStringTearoff();
|
||||
Expect.type<String>(toStringResult);
|
||||
Expect.isTrue(toStringResult.isNotEmpty);
|
||||
Expect.equals(toStringResult, expected);
|
||||
Expect.equals(x.toString(), toStringResult);
|
||||
}
|
||||
|
||||
|
|
|
@ -24,11 +24,13 @@ extension on JavaScriptClass {
|
|||
}
|
||||
|
||||
void main() {
|
||||
final toStringValue = 'external toString';
|
||||
// Install a class that is accessible through interop.
|
||||
eval('''
|
||||
self.JavaScriptClass = class JavaScriptClass {
|
||||
constructor() {}
|
||||
get instanceGetter() { return 42; }
|
||||
toString() { return '$toStringValue'; }
|
||||
}
|
||||
''');
|
||||
var instanceOfClass = JavaScriptClass();
|
||||
|
@ -38,8 +40,8 @@ self.JavaScriptClass = class JavaScriptClass {
|
|||
testRuntimeType(instanceOfClass);
|
||||
testNoSuchMethod(instanceOfClass);
|
||||
testNoSuchMethodTearoff(instanceOfClass);
|
||||
testToString(instanceOfClass);
|
||||
testToStringTearoff(instanceOfClass);
|
||||
testToString(instanceOfClass, toStringValue);
|
||||
testToStringTearoff(instanceOfClass, toStringValue);
|
||||
testEquals(instanceOfClass, other);
|
||||
|
||||
var emptyObject = eval('Object.create({})');
|
||||
|
@ -47,8 +49,8 @@ self.JavaScriptClass = class JavaScriptClass {
|
|||
testRuntimeType(emptyObject);
|
||||
testNoSuchMethod(emptyObject);
|
||||
testNoSuchMethodTearoff(emptyObject);
|
||||
testToString(emptyObject);
|
||||
testToStringTearoff(emptyObject);
|
||||
testToString(emptyObject, '[object Object]');
|
||||
testToStringTearoff(emptyObject, '[object Object]');
|
||||
testEquals(emptyObject, other);
|
||||
|
||||
var objectWithNoProto = eval('Object.create(null)');
|
||||
|
@ -73,7 +75,7 @@ self.JavaScriptClass = class JavaScriptClass {
|
|||
testRuntimeType(jsNull);
|
||||
testNoSuchMethod(jsNull);
|
||||
testNoSuchMethodTearoff(jsNull);
|
||||
testToString(jsNull);
|
||||
testToStringTearoff(jsNull);
|
||||
testToString(jsNull, 'null');
|
||||
testToStringTearoff(jsNull, 'null');
|
||||
testEquals(jsNull, other);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue