mirror of
https://github.com/dart-lang/sdk
synced 2024-10-04 16:44:59 +00:00
[pkg:js] Refactor export and mock tests to use Strings
Allows for tests to pass with dart2wasm. This CL also adds these tests to the test_matrix.json. Change-Id: I970ef26b0fb377095c3889e6f52bef256d618850 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/264604 Reviewed-by: Joshua Litt <joshualitt@google.com> Reviewed-by: Kevin Moore <kevmoo@google.com>
This commit is contained in:
parent
6efce3b407
commit
c14c0fdda3
|
@ -15,21 +15,22 @@ import 'package:js/js_util.dart';
|
|||
class Methods {}
|
||||
|
||||
extension on Methods {
|
||||
external int add(int a, int b);
|
||||
external String concat(String foo, String bar);
|
||||
// Sanity-check that non-externals are unaffected.
|
||||
int nonExternal() => 0;
|
||||
String nonExternal() => 'nonExternal';
|
||||
@JS('_rename')
|
||||
external int rename();
|
||||
external int optionalAdd(int a, int b, [int c = 0, int? d]);
|
||||
external String rename();
|
||||
external String optionalConcat(String foo, String bar,
|
||||
[String boo = '', String? baz]);
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class MethodsDart {
|
||||
int add(int a, int b) => a + b;
|
||||
int nonExternal() => 1;
|
||||
int _rename() => 1;
|
||||
int optionalAdd(int a, int b, [int? c, int? d]) =>
|
||||
a + b + (c ?? 0) + (d ?? 0);
|
||||
String concat(String foo, String bar) => foo + bar;
|
||||
String nonExternal() => 'initialized';
|
||||
String _rename() => 'initialized';
|
||||
String optionalConcat(String foo, String bar, [String? boo, String? baz]) =>
|
||||
foo + bar + (boo ?? '') + (baz ?? '');
|
||||
}
|
||||
|
||||
@JS()
|
||||
|
@ -37,20 +38,20 @@ class MethodsDart {
|
|||
class Fields {}
|
||||
|
||||
extension on Fields {
|
||||
external int field;
|
||||
external final int finalField;
|
||||
external String field;
|
||||
external final String finalField;
|
||||
@JS('_renamedField')
|
||||
external int renamedField;
|
||||
external String renamedField;
|
||||
@JS('_renamedFinalField')
|
||||
external final int renamedFinalField;
|
||||
external final String renamedFinalField;
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class FieldsDart {
|
||||
int field = 1;
|
||||
int finalField = 1;
|
||||
int _renamedField = 1;
|
||||
final int _renamedFinalField = 1;
|
||||
String field = 'initialized';
|
||||
String finalField = 'initialized';
|
||||
String _renamedField = 'initialized';
|
||||
final String _renamedFinalField = 'initialized';
|
||||
}
|
||||
|
||||
@JS()
|
||||
|
@ -58,83 +59,83 @@ class FieldsDart {
|
|||
class GetSet {}
|
||||
|
||||
extension on GetSet {
|
||||
external int get getSet;
|
||||
external set getSet(int val);
|
||||
external String get getSet;
|
||||
external set getSet(String val);
|
||||
@JS('_renamedGetSet')
|
||||
external int get renamedGetSet;
|
||||
external String get renamedGetSet;
|
||||
@JS('_renamedGetSet')
|
||||
external set renamedGetSet(int val);
|
||||
external set renamedGetSet(String val);
|
||||
@JS('_sameNameDifferentRenameGet')
|
||||
external int get sameNameDifferentRename;
|
||||
external String get sameNameDifferentRename;
|
||||
@JS('_sameNameDifferentRenameSet')
|
||||
external set sameNameDifferentRename(int val);
|
||||
external set sameNameDifferentRename(String val);
|
||||
@JS('_differentNameSameRename')
|
||||
external int get differentNameSameRenameGet;
|
||||
external String get differentNameSameRenameGet;
|
||||
@JS('_differentNameSameRename')
|
||||
external set differentNameSameRenameSet(int val);
|
||||
external set differentNameSameRenameSet(String val);
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class GetSetDart {
|
||||
int getSet = 1;
|
||||
int _renamedGetSet = 1;
|
||||
int _sameNameDifferentRenameGet = 1;
|
||||
int _sameNameDifferentRenameSet = 1;
|
||||
int _differentNameSameRename = 1;
|
||||
String getSet = 'initialized';
|
||||
String _renamedGetSet = 'initialized';
|
||||
String _sameNameDifferentRenameGet = 'initialized';
|
||||
String _sameNameDifferentRenameSet = 'initialized';
|
||||
String _differentNameSameRename = 'initialized';
|
||||
}
|
||||
|
||||
void test([Object? proto]) {
|
||||
var jsMethods =
|
||||
createStaticInteropMock<Methods, MethodsDart>(MethodsDart(), proto);
|
||||
expect(jsMethods.add(1, 1), 2);
|
||||
expect(jsMethods.nonExternal(), 0);
|
||||
expect(jsMethods.rename(), 1);
|
||||
expect(jsMethods.optionalAdd(1, 1), 2);
|
||||
expect(jsMethods.optionalAdd(1, 1, 1), 3);
|
||||
expect(jsMethods.optionalAdd(1, 1, 1, 1), 4);
|
||||
expect(jsMethods.concat('a', 'b'), 'ab');
|
||||
expect(jsMethods.nonExternal(), 'nonExternal');
|
||||
expect(jsMethods.rename(), 'initialized');
|
||||
expect(jsMethods.optionalConcat('a', 'b'), 'ab');
|
||||
expect(jsMethods.optionalConcat('a', 'b', 'c'), 'abc');
|
||||
expect(jsMethods.optionalConcat('a', 'b', 'c', 'd'), 'abcd');
|
||||
var dartFields = FieldsDart();
|
||||
var jsFields = createStaticInteropMock<Fields, FieldsDart>(dartFields, proto);
|
||||
expect(jsFields.field, 1);
|
||||
expect(jsFields.finalField, 1);
|
||||
expect(jsFields.renamedField, 1);
|
||||
expect(jsFields.renamedFinalField, 1);
|
||||
expect(jsFields.field, 'initialized');
|
||||
expect(jsFields.finalField, 'initialized');
|
||||
expect(jsFields.renamedField, 'initialized');
|
||||
expect(jsFields.renamedFinalField, 'initialized');
|
||||
// Modify the JS mock and check for updates in the Dart mock.
|
||||
jsFields.field = 2;
|
||||
jsFields.renamedField = 2;
|
||||
expect(dartFields.field, 2);
|
||||
expect(dartFields._renamedField, 2);
|
||||
jsFields.field = 'jsModified';
|
||||
jsFields.renamedField = 'jsModified';
|
||||
expect(dartFields.field, 'jsModified');
|
||||
expect(dartFields._renamedField, 'jsModified');
|
||||
// Modify the Dart mock and check for updates in the JS mock.
|
||||
dartFields.field = 3;
|
||||
dartFields.finalField = 3;
|
||||
dartFields._renamedField = 3;
|
||||
expect(jsFields.field, 3);
|
||||
expect(jsFields.finalField, 3);
|
||||
expect(jsFields.renamedField, 3);
|
||||
dartFields.field = 'dartModified';
|
||||
dartFields.finalField = 'dartModified';
|
||||
dartFields._renamedField = 'dartModified';
|
||||
expect(jsFields.field, 'dartModified');
|
||||
expect(jsFields.finalField, 'dartModified');
|
||||
expect(jsFields.renamedField, 'dartModified');
|
||||
var dartGetSet = GetSetDart();
|
||||
var jsGetSet = createStaticInteropMock<GetSet, GetSetDart>(dartGetSet, proto);
|
||||
expect(jsGetSet.getSet, 1);
|
||||
expect(jsGetSet.renamedGetSet, 1);
|
||||
expect(jsGetSet.sameNameDifferentRename, 1);
|
||||
expect(jsGetSet.differentNameSameRenameGet, 1);
|
||||
expect(jsGetSet.getSet, 'initialized');
|
||||
expect(jsGetSet.renamedGetSet, 'initialized');
|
||||
expect(jsGetSet.sameNameDifferentRename, 'initialized');
|
||||
expect(jsGetSet.differentNameSameRenameGet, 'initialized');
|
||||
// Modify the JS mock and check for updates in the Dart mock.
|
||||
jsGetSet.getSet = 2;
|
||||
jsGetSet.renamedGetSet = 2;
|
||||
jsGetSet.sameNameDifferentRename = 2;
|
||||
jsGetSet.differentNameSameRenameSet = 2;
|
||||
expect(dartGetSet.getSet, 2);
|
||||
expect(dartGetSet._renamedGetSet, 2);
|
||||
expect(dartGetSet._sameNameDifferentRenameGet, 1);
|
||||
expect(dartGetSet._sameNameDifferentRenameSet, 2);
|
||||
expect(dartGetSet._differentNameSameRename, 2);
|
||||
jsGetSet.getSet = 'jsModified';
|
||||
jsGetSet.renamedGetSet = 'jsModified';
|
||||
jsGetSet.sameNameDifferentRename = 'jsModified';
|
||||
jsGetSet.differentNameSameRenameSet = 'jsModified';
|
||||
expect(dartGetSet.getSet, 'jsModified');
|
||||
expect(dartGetSet._renamedGetSet, 'jsModified');
|
||||
expect(dartGetSet._sameNameDifferentRenameGet, 'initialized');
|
||||
expect(dartGetSet._sameNameDifferentRenameSet, 'jsModified');
|
||||
expect(dartGetSet._differentNameSameRename, 'jsModified');
|
||||
// Modify the Dart mock and check for updates in the JS mock.
|
||||
dartGetSet.getSet = 3;
|
||||
dartGetSet._renamedGetSet = 3;
|
||||
dartGetSet.getSet = 'dartModified';
|
||||
dartGetSet._renamedGetSet = 'dartModified';
|
||||
// Use different values to disambiguate.
|
||||
dartGetSet._sameNameDifferentRenameGet = 3;
|
||||
dartGetSet._sameNameDifferentRenameSet = 4;
|
||||
dartGetSet._differentNameSameRename = 3;
|
||||
expect(jsGetSet.getSet, 3);
|
||||
expect(jsGetSet.renamedGetSet, 3);
|
||||
expect(jsGetSet.sameNameDifferentRename, 3);
|
||||
expect(jsGetSet.differentNameSameRenameGet, 3);
|
||||
dartGetSet._sameNameDifferentRenameGet = 'dartModifiedGet';
|
||||
dartGetSet._sameNameDifferentRenameSet = 'dartModifiedSet';
|
||||
dartGetSet._differentNameSameRename = 'dartModified';
|
||||
expect(jsGetSet.getSet, 'dartModified');
|
||||
expect(jsGetSet.renamedGetSet, 'dartModified');
|
||||
expect(jsGetSet.sameNameDifferentRename, 'dartModifiedGet');
|
||||
expect(jsGetSet.differentNameSameRenameGet, 'dartModified');
|
||||
}
|
||||
|
|
|
@ -14,11 +14,11 @@ import 'package:js/js_util.dart';
|
|||
class Extends {}
|
||||
|
||||
extension on Extends {
|
||||
external int extendsMethod(int val);
|
||||
external int extendsField;
|
||||
external final int extendsFinalField;
|
||||
external int get extendsGetSet;
|
||||
external set extendsGetSet(int val);
|
||||
external String extendsMethod(String val);
|
||||
external String extendsField;
|
||||
external final String extendsFinalField;
|
||||
external String get extendsGetSet;
|
||||
external set extendsGetSet(String val);
|
||||
}
|
||||
|
||||
@JS()
|
||||
|
@ -26,13 +26,13 @@ extension on Extends {
|
|||
class Implements {}
|
||||
|
||||
extension on Implements {
|
||||
external int implementsMethod(int val);
|
||||
external int implementsField;
|
||||
external final int implementsFinalField;
|
||||
external String implementsMethod(String val);
|
||||
external String implementsField;
|
||||
external final String implementsFinalField;
|
||||
@JS('implementsGetSet')
|
||||
external int get implementsGetter;
|
||||
external String get implementsGetter;
|
||||
@JS('implementsGetSet')
|
||||
external set implementsSetter(int val);
|
||||
external set implementsSetter(String val);
|
||||
}
|
||||
|
||||
@JS()
|
||||
|
@ -40,87 +40,87 @@ extension on Implements {
|
|||
class Inheritance extends Extends implements Implements {}
|
||||
|
||||
extension on Inheritance {
|
||||
external int method(int val);
|
||||
external int field;
|
||||
external final int finalField;
|
||||
external int get getSet;
|
||||
external set getSet(int val);
|
||||
external String method(String val);
|
||||
external String field;
|
||||
external final String finalField;
|
||||
external String get getSet;
|
||||
external set getSet(String val);
|
||||
}
|
||||
|
||||
extension on Inheritance {
|
||||
external int method2(int val);
|
||||
external int field2;
|
||||
external final int finalField2;
|
||||
external int get getSet2;
|
||||
external set getSet2(int val);
|
||||
external String method2(String val);
|
||||
external String field2;
|
||||
external final String finalField2;
|
||||
external String get getSet2;
|
||||
external set getSet2(String val);
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class ExtendsDart {
|
||||
int extendsMethod(int val) => val;
|
||||
int extendsField = 0;
|
||||
final int extendsFinalField = 0;
|
||||
int extendsGetSet = 0;
|
||||
String extendsMethod(String val) => val;
|
||||
String extendsField = 'extends';
|
||||
final String extendsFinalField = 'extends';
|
||||
String extendsGetSet = 'extends';
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class ImplementsMixin {
|
||||
int implementsMethod(int val) => val;
|
||||
int implementsField = 1;
|
||||
final int implementsFinalField = 1;
|
||||
int implementsGetSet = 1;
|
||||
String implementsMethod(String val) => val;
|
||||
String implementsField = 'implements';
|
||||
final String implementsFinalField = 'implements';
|
||||
String implementsGetSet = 'implements';
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class InheritanceDart extends ExtendsDart with ImplementsMixin {
|
||||
int method(int val) => val;
|
||||
int field = 2;
|
||||
final int finalField = 2;
|
||||
int getSet = 2;
|
||||
int method2(int val) => val;
|
||||
int field2 = 2;
|
||||
final int finalField2 = 2;
|
||||
int getSet2 = 2;
|
||||
String method(String val) => val;
|
||||
String field = 'derived';
|
||||
final String finalField = 'derived';
|
||||
String getSet = 'derived';
|
||||
String method2(String val) => val;
|
||||
String field2 = 'derived';
|
||||
final String finalField2 = 'derived';
|
||||
String getSet2 = 'derived';
|
||||
}
|
||||
|
||||
void main() {
|
||||
var dartMock = InheritanceDart();
|
||||
var jsMock = createStaticInteropMock<Inheritance, InheritanceDart>(dartMock);
|
||||
|
||||
expect(jsMock.extendsMethod(0), 0);
|
||||
expect(jsMock.extendsField, 0);
|
||||
jsMock.extendsField = 1;
|
||||
expect(jsMock.extendsField, 1);
|
||||
expect(jsMock.extendsFinalField, 0);
|
||||
expect(jsMock.extendsGetSet, 0);
|
||||
expect(jsMock.extendsMethod('extends'), 'extends');
|
||||
expect(jsMock.extendsField, 'extends');
|
||||
jsMock.extendsField = 'modified';
|
||||
expect(jsMock.extendsField, 'modified');
|
||||
expect(jsMock.extendsFinalField, 'extends');
|
||||
expect(jsMock.extendsGetSet, 'extends');
|
||||
// Dart mock uses a field for this getter and setter, so it should change.
|
||||
jsMock.extendsGetSet = 1;
|
||||
expect(jsMock.extendsGetSet, 1);
|
||||
jsMock.extendsGetSet = 'modified';
|
||||
expect(jsMock.extendsGetSet, 'modified');
|
||||
|
||||
expect(jsMock.implementsMethod(1), 1);
|
||||
expect(jsMock.implementsField, 1);
|
||||
jsMock.implementsField = 2;
|
||||
expect(jsMock.implementsField, 2);
|
||||
expect(jsMock.implementsFinalField, 1);
|
||||
expect(jsMock.implementsGetter, 1);
|
||||
jsMock.implementsSetter = 2;
|
||||
expect(jsMock.implementsGetter, 2);
|
||||
expect(jsMock.implementsMethod('implements'), 'implements');
|
||||
expect(jsMock.implementsField, 'implements');
|
||||
jsMock.implementsField = 'modified';
|
||||
expect(jsMock.implementsField, 'modified');
|
||||
expect(jsMock.implementsFinalField, 'implements');
|
||||
expect(jsMock.implementsGetter, 'implements');
|
||||
jsMock.implementsSetter = 'modified';
|
||||
expect(jsMock.implementsGetter, 'modified');
|
||||
|
||||
expect(jsMock.method(2), 2);
|
||||
expect(jsMock.field, 2);
|
||||
jsMock.field = 3;
|
||||
expect(jsMock.field, 3);
|
||||
expect(jsMock.finalField, 2);
|
||||
expect(jsMock.getSet, 2);
|
||||
jsMock.getSet = 3;
|
||||
expect(jsMock.getSet, 3);
|
||||
expect(jsMock.method('derived'), 'derived');
|
||||
expect(jsMock.field, 'derived');
|
||||
jsMock.field = 'modified';
|
||||
expect(jsMock.field, 'modified');
|
||||
expect(jsMock.finalField, 'derived');
|
||||
expect(jsMock.getSet, 'derived');
|
||||
jsMock.getSet = 'modified';
|
||||
expect(jsMock.getSet, 'modified');
|
||||
|
||||
expect(jsMock.method2(2), 2);
|
||||
expect(jsMock.field2, 2);
|
||||
jsMock.field2 = 3;
|
||||
expect(jsMock.field2, 3);
|
||||
expect(jsMock.finalField2, 2);
|
||||
expect(jsMock.getSet2, 2);
|
||||
jsMock.getSet2 = 3;
|
||||
expect(jsMock.getSet2, 3);
|
||||
expect(jsMock.method2('derived'), 'derived');
|
||||
expect(jsMock.field2, 'derived');
|
||||
jsMock.field2 = 'modified';
|
||||
expect(jsMock.field2, 'modified');
|
||||
expect(jsMock.finalField2, 'derived');
|
||||
expect(jsMock.getSet2, 'derived');
|
||||
jsMock.getSet2 = 'modified';
|
||||
expect(jsMock.getSet2, 'modified');
|
||||
}
|
||||
|
|
|
@ -17,20 +17,20 @@ extension on StaticInterop {
|
|||
// We use nullable types here as mockito requires some additional complexity
|
||||
// or code generation to safely mock non-nullables.
|
||||
// https://github.com/dart-lang/mockito/blob/master/NULL_SAFETY_README.md
|
||||
external int? method(int? val);
|
||||
external int? field;
|
||||
external final int? finalField;
|
||||
external int? get getSet;
|
||||
external set getSet(int? val);
|
||||
external String? method(String? val);
|
||||
external String? field;
|
||||
external final String? finalField;
|
||||
external String? get getSet;
|
||||
external set getSet(String? val);
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class Dart {
|
||||
int? method(int? val) => throw '';
|
||||
int? field = throw '';
|
||||
final int? finalField = throw '';
|
||||
int? get getSet => throw '';
|
||||
set getSet(int? val) => throw '';
|
||||
String? method(String? val) => throw '';
|
||||
String? field = throw '';
|
||||
final String? finalField = throw '';
|
||||
String? get getSet => throw '';
|
||||
set getSet(String? val) => throw '';
|
||||
}
|
||||
|
||||
// Have the mock class implement the class interface you defined to mock the
|
||||
|
@ -42,14 +42,14 @@ void main() {
|
|||
// Write expectations on the Dart Mock object, not the JS mock object.
|
||||
var dartMock = DartMock();
|
||||
var jsMock = createStaticInteropMock<StaticInterop, DartMock>(dartMock);
|
||||
when(dartMock.method(0)).thenReturn(1);
|
||||
when(dartMock.field).thenReturn(1);
|
||||
when(dartMock.finalField).thenReturn(1);
|
||||
when(dartMock.getSet).thenReturn(1);
|
||||
expect(jsMock.method(0), 1);
|
||||
expect(jsMock.field, 1);
|
||||
expect(jsMock.finalField, 1);
|
||||
expect(jsMock.getSet, 1);
|
||||
jsMock.getSet = 1;
|
||||
verify(dartMock.getSet = 1);
|
||||
when(dartMock.method('value')).thenReturn('mockValue');
|
||||
when(dartMock.field).thenReturn('mockValue');
|
||||
when(dartMock.finalField).thenReturn('mockValue');
|
||||
when(dartMock.getSet).thenReturn('mockValue');
|
||||
expect(jsMock.method('value'), 'mockValue');
|
||||
expect(jsMock.field, 'mockValue');
|
||||
expect(jsMock.finalField, 'mockValue');
|
||||
expect(jsMock.getSet, 'mockValue');
|
||||
jsMock.getSet = 'mockValue';
|
||||
verify(dartMock.getSet = 'mockValue');
|
||||
}
|
||||
|
|
|
@ -15,21 +15,22 @@ import 'package:js/js_util.dart';
|
|||
class Methods {}
|
||||
|
||||
extension on Methods {
|
||||
external int add(int a, int b);
|
||||
external String concat(String foo, String bar);
|
||||
// Sanity-check that non-externals are unaffected.
|
||||
int nonExternal() => 0;
|
||||
String nonExternal() => 'nonExternal';
|
||||
@JS('_rename')
|
||||
external int rename();
|
||||
external int optionalAdd(int a, int b, [int c = 0, int? d]);
|
||||
external String rename();
|
||||
external String optionalConcat(String foo, String bar,
|
||||
[String boo = '', String? baz]);
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class MethodsDart {
|
||||
int add(int a, int b) => a + b;
|
||||
int nonExternal() => 1;
|
||||
int _rename() => 1;
|
||||
int optionalAdd(int a, int b, [int? c, int? d]) =>
|
||||
a + b + (c ?? 0) + (d ?? 0);
|
||||
String concat(String foo, String bar) => foo + bar;
|
||||
String nonExternal() => 'initialized';
|
||||
String _rename() => 'initialized';
|
||||
String optionalConcat(String foo, String bar, [String? boo, String? baz]) =>
|
||||
foo + bar + (boo ?? '') + (baz ?? '');
|
||||
}
|
||||
|
||||
@JS()
|
||||
|
@ -37,20 +38,20 @@ class MethodsDart {
|
|||
class Fields {}
|
||||
|
||||
extension on Fields {
|
||||
external int field;
|
||||
external final int finalField;
|
||||
external String field;
|
||||
external final String finalField;
|
||||
@JS('_renamedField')
|
||||
external int renamedField;
|
||||
external String renamedField;
|
||||
@JS('_renamedFinalField')
|
||||
external final int renamedFinalField;
|
||||
external final String renamedFinalField;
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class FieldsDart {
|
||||
int field = 1;
|
||||
int finalField = 1;
|
||||
int _renamedField = 1;
|
||||
final int _renamedFinalField = 1;
|
||||
String field = 'initialized';
|
||||
String finalField = 'initialized';
|
||||
String _renamedField = 'initialized';
|
||||
final String _renamedFinalField = 'initialized';
|
||||
}
|
||||
|
||||
@JS()
|
||||
|
@ -58,83 +59,83 @@ class FieldsDart {
|
|||
class GetSet {}
|
||||
|
||||
extension on GetSet {
|
||||
external int get getSet;
|
||||
external set getSet(int val);
|
||||
external String get getSet;
|
||||
external set getSet(String val);
|
||||
@JS('_renamedGetSet')
|
||||
external int get renamedGetSet;
|
||||
external String get renamedGetSet;
|
||||
@JS('_renamedGetSet')
|
||||
external set renamedGetSet(int val);
|
||||
external set renamedGetSet(String val);
|
||||
@JS('_sameNameDifferentRenameGet')
|
||||
external int get sameNameDifferentRename;
|
||||
external String get sameNameDifferentRename;
|
||||
@JS('_sameNameDifferentRenameSet')
|
||||
external set sameNameDifferentRename(int val);
|
||||
external set sameNameDifferentRename(String val);
|
||||
@JS('_differentNameSameRename')
|
||||
external int get differentNameSameRenameGet;
|
||||
external String get differentNameSameRenameGet;
|
||||
@JS('_differentNameSameRename')
|
||||
external set differentNameSameRenameSet(int val);
|
||||
external set differentNameSameRenameSet(String val);
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class GetSetDart {
|
||||
int getSet = 1;
|
||||
int _renamedGetSet = 1;
|
||||
int _sameNameDifferentRenameGet = 1;
|
||||
int _sameNameDifferentRenameSet = 1;
|
||||
int _differentNameSameRename = 1;
|
||||
String getSet = 'initialized';
|
||||
String _renamedGetSet = 'initialized';
|
||||
String _sameNameDifferentRenameGet = 'initialized';
|
||||
String _sameNameDifferentRenameSet = 'initialized';
|
||||
String _differentNameSameRename = 'initialized';
|
||||
}
|
||||
|
||||
void test([Object? proto]) {
|
||||
var jsMethods =
|
||||
createStaticInteropMock<Methods, MethodsDart>(MethodsDart(), proto);
|
||||
expect(jsMethods.add(1, 1), 2);
|
||||
expect(jsMethods.nonExternal(), 0);
|
||||
expect(jsMethods.rename(), 1);
|
||||
expect(jsMethods.optionalAdd(1, 1), 2);
|
||||
expect(jsMethods.optionalAdd(1, 1, 1), 3);
|
||||
expect(jsMethods.optionalAdd(1, 1, 1, 1), 4);
|
||||
expect(jsMethods.concat('a', 'b'), 'ab');
|
||||
expect(jsMethods.nonExternal(), 'nonExternal');
|
||||
expect(jsMethods.rename(), 'initialized');
|
||||
expect(jsMethods.optionalConcat('a', 'b'), 'ab');
|
||||
expect(jsMethods.optionalConcat('a', 'b', 'c'), 'abc');
|
||||
expect(jsMethods.optionalConcat('a', 'b', 'c', 'd'), 'abcd');
|
||||
var dartFields = FieldsDart();
|
||||
var jsFields = createStaticInteropMock<Fields, FieldsDart>(dartFields, proto);
|
||||
expect(jsFields.field, 1);
|
||||
expect(jsFields.finalField, 1);
|
||||
expect(jsFields.renamedField, 1);
|
||||
expect(jsFields.renamedFinalField, 1);
|
||||
expect(jsFields.field, 'initialized');
|
||||
expect(jsFields.finalField, 'initialized');
|
||||
expect(jsFields.renamedField, 'initialized');
|
||||
expect(jsFields.renamedFinalField, 'initialized');
|
||||
// Modify the JS mock and check for updates in the Dart mock.
|
||||
jsFields.field = 2;
|
||||
jsFields.renamedField = 2;
|
||||
expect(dartFields.field, 2);
|
||||
expect(dartFields._renamedField, 2);
|
||||
jsFields.field = 'jsModified';
|
||||
jsFields.renamedField = 'jsModified';
|
||||
expect(dartFields.field, 'jsModified');
|
||||
expect(dartFields._renamedField, 'jsModified');
|
||||
// Modify the Dart mock and check for updates in the JS mock.
|
||||
dartFields.field = 3;
|
||||
dartFields.finalField = 3;
|
||||
dartFields._renamedField = 3;
|
||||
expect(jsFields.field, 3);
|
||||
expect(jsFields.finalField, 3);
|
||||
expect(jsFields.renamedField, 3);
|
||||
dartFields.field = 'dartModified';
|
||||
dartFields.finalField = 'dartModified';
|
||||
dartFields._renamedField = 'dartModified';
|
||||
expect(jsFields.field, 'dartModified');
|
||||
expect(jsFields.finalField, 'dartModified');
|
||||
expect(jsFields.renamedField, 'dartModified');
|
||||
var dartGetSet = GetSetDart();
|
||||
var jsGetSet = createStaticInteropMock<GetSet, GetSetDart>(dartGetSet, proto);
|
||||
expect(jsGetSet.getSet, 1);
|
||||
expect(jsGetSet.renamedGetSet, 1);
|
||||
expect(jsGetSet.sameNameDifferentRename, 1);
|
||||
expect(jsGetSet.differentNameSameRenameGet, 1);
|
||||
expect(jsGetSet.getSet, 'initialized');
|
||||
expect(jsGetSet.renamedGetSet, 'initialized');
|
||||
expect(jsGetSet.sameNameDifferentRename, 'initialized');
|
||||
expect(jsGetSet.differentNameSameRenameGet, 'initialized');
|
||||
// Modify the JS mock and check for updates in the Dart mock.
|
||||
jsGetSet.getSet = 2;
|
||||
jsGetSet.renamedGetSet = 2;
|
||||
jsGetSet.sameNameDifferentRename = 2;
|
||||
jsGetSet.differentNameSameRenameSet = 2;
|
||||
expect(dartGetSet.getSet, 2);
|
||||
expect(dartGetSet._renamedGetSet, 2);
|
||||
expect(dartGetSet._sameNameDifferentRenameGet, 1);
|
||||
expect(dartGetSet._sameNameDifferentRenameSet, 2);
|
||||
expect(dartGetSet._differentNameSameRename, 2);
|
||||
jsGetSet.getSet = 'jsModified';
|
||||
jsGetSet.renamedGetSet = 'jsModified';
|
||||
jsGetSet.sameNameDifferentRename = 'jsModified';
|
||||
jsGetSet.differentNameSameRenameSet = 'jsModified';
|
||||
expect(dartGetSet.getSet, 'jsModified');
|
||||
expect(dartGetSet._renamedGetSet, 'jsModified');
|
||||
expect(dartGetSet._sameNameDifferentRenameGet, 'initialized');
|
||||
expect(dartGetSet._sameNameDifferentRenameSet, 'jsModified');
|
||||
expect(dartGetSet._differentNameSameRename, 'jsModified');
|
||||
// Modify the Dart mock and check for updates in the JS mock.
|
||||
dartGetSet.getSet = 3;
|
||||
dartGetSet._renamedGetSet = 3;
|
||||
dartGetSet.getSet = 'dartModified';
|
||||
dartGetSet._renamedGetSet = 'dartModified';
|
||||
// Use different values to disambiguate.
|
||||
dartGetSet._sameNameDifferentRenameGet = 3;
|
||||
dartGetSet._sameNameDifferentRenameSet = 4;
|
||||
dartGetSet._differentNameSameRename = 3;
|
||||
expect(jsGetSet.getSet, 3);
|
||||
expect(jsGetSet.renamedGetSet, 3);
|
||||
expect(jsGetSet.sameNameDifferentRename, 3);
|
||||
expect(jsGetSet.differentNameSameRenameGet, 3);
|
||||
dartGetSet._sameNameDifferentRenameGet = 'dartModifiedGet';
|
||||
dartGetSet._sameNameDifferentRenameSet = 'dartModifiedSet';
|
||||
dartGetSet._differentNameSameRename = 'dartModified';
|
||||
expect(jsGetSet.getSet, 'dartModified');
|
||||
expect(jsGetSet.renamedGetSet, 'dartModified');
|
||||
expect(jsGetSet.sameNameDifferentRename, 'dartModifiedGet');
|
||||
expect(jsGetSet.differentNameSameRenameGet, 'dartModified');
|
||||
}
|
||||
|
|
|
@ -14,11 +14,11 @@ import 'package:js/js_util.dart';
|
|||
class Extends {}
|
||||
|
||||
extension on Extends {
|
||||
external int extendsMethod(int val);
|
||||
external int extendsField;
|
||||
external final int extendsFinalField;
|
||||
external int get extendsGetSet;
|
||||
external set extendsGetSet(int val);
|
||||
external String extendsMethod(String val);
|
||||
external String extendsField;
|
||||
external final String extendsFinalField;
|
||||
external String get extendsGetSet;
|
||||
external set extendsGetSet(String val);
|
||||
}
|
||||
|
||||
@JS()
|
||||
|
@ -26,13 +26,13 @@ extension on Extends {
|
|||
class Implements {}
|
||||
|
||||
extension on Implements {
|
||||
external int implementsMethod(int val);
|
||||
external int implementsField;
|
||||
external final int implementsFinalField;
|
||||
external String implementsMethod(String val);
|
||||
external String implementsField;
|
||||
external final String implementsFinalField;
|
||||
@JS('implementsGetSet')
|
||||
external int get implementsGetter;
|
||||
external String get implementsGetter;
|
||||
@JS('implementsGetSet')
|
||||
external set implementsSetter(int val);
|
||||
external set implementsSetter(String val);
|
||||
}
|
||||
|
||||
@JS()
|
||||
|
@ -40,87 +40,87 @@ extension on Implements {
|
|||
class Inheritance extends Extends implements Implements {}
|
||||
|
||||
extension on Inheritance {
|
||||
external int method(int val);
|
||||
external int field;
|
||||
external final int finalField;
|
||||
external int get getSet;
|
||||
external set getSet(int val);
|
||||
external String method(String val);
|
||||
external String field;
|
||||
external final String finalField;
|
||||
external String get getSet;
|
||||
external set getSet(String val);
|
||||
}
|
||||
|
||||
extension on Inheritance {
|
||||
external int method2(int val);
|
||||
external int field2;
|
||||
external final int finalField2;
|
||||
external int get getSet2;
|
||||
external set getSet2(int val);
|
||||
external String method2(String val);
|
||||
external String field2;
|
||||
external final String finalField2;
|
||||
external String get getSet2;
|
||||
external set getSet2(String val);
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class ExtendsDart {
|
||||
int extendsMethod(int val) => val;
|
||||
int extendsField = 0;
|
||||
final int extendsFinalField = 0;
|
||||
int extendsGetSet = 0;
|
||||
String extendsMethod(String val) => val;
|
||||
String extendsField = 'extends';
|
||||
final String extendsFinalField = 'extends';
|
||||
String extendsGetSet = 'extends';
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class ImplementsMixin {
|
||||
int implementsMethod(int val) => val;
|
||||
int implementsField = 1;
|
||||
final int implementsFinalField = 1;
|
||||
int implementsGetSet = 1;
|
||||
String implementsMethod(String val) => val;
|
||||
String implementsField = 'implements';
|
||||
final String implementsFinalField = 'implements';
|
||||
String implementsGetSet = 'implements';
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class InheritanceDart extends ExtendsDart with ImplementsMixin {
|
||||
int method(int val) => val;
|
||||
int field = 2;
|
||||
final int finalField = 2;
|
||||
int getSet = 2;
|
||||
int method2(int val) => val;
|
||||
int field2 = 2;
|
||||
final int finalField2 = 2;
|
||||
int getSet2 = 2;
|
||||
String method(String val) => val;
|
||||
String field = 'derived';
|
||||
final String finalField = 'derived';
|
||||
String getSet = 'derived';
|
||||
String method2(String val) => val;
|
||||
String field2 = 'derived';
|
||||
final String finalField2 = 'derived';
|
||||
String getSet2 = 'derived';
|
||||
}
|
||||
|
||||
void main() {
|
||||
var dartMock = InheritanceDart();
|
||||
var jsMock = createStaticInteropMock<Inheritance, InheritanceDart>(dartMock);
|
||||
|
||||
expect(jsMock.extendsMethod(0), 0);
|
||||
expect(jsMock.extendsField, 0);
|
||||
jsMock.extendsField = 1;
|
||||
expect(jsMock.extendsField, 1);
|
||||
expect(jsMock.extendsFinalField, 0);
|
||||
expect(jsMock.extendsGetSet, 0);
|
||||
expect(jsMock.extendsMethod('extends'), 'extends');
|
||||
expect(jsMock.extendsField, 'extends');
|
||||
jsMock.extendsField = 'modified';
|
||||
expect(jsMock.extendsField, 'modified');
|
||||
expect(jsMock.extendsFinalField, 'extends');
|
||||
expect(jsMock.extendsGetSet, 'extends');
|
||||
// Dart mock uses a field for this getter and setter, so it should change.
|
||||
jsMock.extendsGetSet = 1;
|
||||
expect(jsMock.extendsGetSet, 1);
|
||||
jsMock.extendsGetSet = 'modified';
|
||||
expect(jsMock.extendsGetSet, 'modified');
|
||||
|
||||
expect(jsMock.implementsMethod(1), 1);
|
||||
expect(jsMock.implementsField, 1);
|
||||
jsMock.implementsField = 2;
|
||||
expect(jsMock.implementsField, 2);
|
||||
expect(jsMock.implementsFinalField, 1);
|
||||
expect(jsMock.implementsGetter, 1);
|
||||
jsMock.implementsSetter = 2;
|
||||
expect(jsMock.implementsGetter, 2);
|
||||
expect(jsMock.implementsMethod('implements'), 'implements');
|
||||
expect(jsMock.implementsField, 'implements');
|
||||
jsMock.implementsField = 'modified';
|
||||
expect(jsMock.implementsField, 'modified');
|
||||
expect(jsMock.implementsFinalField, 'implements');
|
||||
expect(jsMock.implementsGetter, 'implements');
|
||||
jsMock.implementsSetter = 'modified';
|
||||
expect(jsMock.implementsGetter, 'modified');
|
||||
|
||||
expect(jsMock.method(2), 2);
|
||||
expect(jsMock.field, 2);
|
||||
jsMock.field = 3;
|
||||
expect(jsMock.field, 3);
|
||||
expect(jsMock.finalField, 2);
|
||||
expect(jsMock.getSet, 2);
|
||||
jsMock.getSet = 3;
|
||||
expect(jsMock.getSet, 3);
|
||||
expect(jsMock.method('derived'), 'derived');
|
||||
expect(jsMock.field, 'derived');
|
||||
jsMock.field = 'modified';
|
||||
expect(jsMock.field, 'modified');
|
||||
expect(jsMock.finalField, 'derived');
|
||||
expect(jsMock.getSet, 'derived');
|
||||
jsMock.getSet = 'modified';
|
||||
expect(jsMock.getSet, 'modified');
|
||||
|
||||
expect(jsMock.method2(2), 2);
|
||||
expect(jsMock.field2, 2);
|
||||
jsMock.field2 = 3;
|
||||
expect(jsMock.field2, 3);
|
||||
expect(jsMock.finalField2, 2);
|
||||
expect(jsMock.getSet2, 2);
|
||||
jsMock.getSet2 = 3;
|
||||
expect(jsMock.getSet2, 3);
|
||||
expect(jsMock.method2('derived'), 'derived');
|
||||
expect(jsMock.field2, 'derived');
|
||||
jsMock.field2 = 'modified';
|
||||
expect(jsMock.field2, 'modified');
|
||||
expect(jsMock.finalField2, 'derived');
|
||||
expect(jsMock.getSet2, 'derived');
|
||||
jsMock.getSet2 = 'modified';
|
||||
expect(jsMock.getSet2, 'modified');
|
||||
}
|
||||
|
|
|
@ -17,20 +17,20 @@ extension on StaticInterop {
|
|||
// We use nullable types here as mockito requires some additional complexity
|
||||
// or code generation to safely mock non-nullables.
|
||||
// https://github.com/dart-lang/mockito/blob/master/NULL_SAFETY_README.md
|
||||
external int? method(int? val);
|
||||
external int? field;
|
||||
external final int? finalField;
|
||||
external int? get getSet;
|
||||
external set getSet(int? val);
|
||||
external String? method(String? val);
|
||||
external String? field;
|
||||
external final String? finalField;
|
||||
external String? get getSet;
|
||||
external set getSet(String? val);
|
||||
}
|
||||
|
||||
@JSExport()
|
||||
class Dart {
|
||||
int? method(int? val) => throw '';
|
||||
int? field = throw '';
|
||||
final int? finalField = throw '';
|
||||
int? get getSet => throw '';
|
||||
set getSet(int? val) => throw '';
|
||||
String? method(String? val) => throw '';
|
||||
String? field = throw '';
|
||||
final String? finalField = throw '';
|
||||
String? get getSet => throw '';
|
||||
set getSet(String? val) => throw '';
|
||||
}
|
||||
|
||||
// Have the mock class implement the class interface you defined to mock the
|
||||
|
@ -42,14 +42,14 @@ void main() {
|
|||
// Write expectations on the Dart Mock object, not the JS mock object.
|
||||
var dartMock = DartMock();
|
||||
var jsMock = createStaticInteropMock<StaticInterop, DartMock>(dartMock);
|
||||
when(dartMock.method(0)).thenReturn(1);
|
||||
when(dartMock.field).thenReturn(1);
|
||||
when(dartMock.finalField).thenReturn(1);
|
||||
when(dartMock.getSet).thenReturn(1);
|
||||
expect(jsMock.method(0), 1);
|
||||
expect(jsMock.field, 1);
|
||||
expect(jsMock.finalField, 1);
|
||||
expect(jsMock.getSet, 1);
|
||||
jsMock.getSet = 1;
|
||||
verify(dartMock.getSet = 1);
|
||||
when(dartMock.method('value')).thenReturn('mockValue');
|
||||
when(dartMock.field).thenReturn('mockValue');
|
||||
when(dartMock.finalField).thenReturn('mockValue');
|
||||
when(dartMock.getSet).thenReturn('mockValue');
|
||||
expect(jsMock.method('value'), 'mockValue');
|
||||
expect(jsMock.field, 'mockValue');
|
||||
expect(jsMock.finalField, 'mockValue');
|
||||
expect(jsMock.getSet, 'mockValue');
|
||||
jsMock.getSet = 'mockValue';
|
||||
verify(dartMock.getSet = 'mockValue');
|
||||
}
|
||||
|
|
|
@ -3141,7 +3141,7 @@
|
|||
"language",
|
||||
"corelib",
|
||||
"web/wasm",
|
||||
"lib/lib/(async|collection|convert|js/static_interop_test|math|typed_data)/",
|
||||
"lib/lib/(async|collection|convert|js/export|js/static_interop_test|math|typed_data)/",
|
||||
"co19/co19/(src/)?(Language|LanguageFeatures|LibTest/(async|collection|convert|core|math|typed_data))/"
|
||||
],
|
||||
"shards": 10,
|
||||
|
|
Loading…
Reference in a new issue