From fc560bab9efcf284f5bd0c5ac69acb736c4ab999 Mon Sep 17 00:00:00 2001 From: Riley Porter Date: Tue, 30 Nov 2021 04:45:04 +0000 Subject: [PATCH] [package:js] Test optional default value arguments in extensions Change-Id: Ia28d53bfca87dab143701ce0099a16580fdc14b3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/221560 Reviewed-by: Srujan Gaddam Commit-Queue: Riley Porter --- .../js/external_extension_members_test.dart | 23 +++++++++++++++++++ .../js/external_extension_members_test.dart | 23 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/tests/lib/js/external_extension_members_test.dart b/tests/lib/js/external_extension_members_test.dart index 823861cf535..7f98c7d7671 100644 --- a/tests/lib/js/external_extension_members_test.dart +++ b/tests/lib/js/external_extension_members_test.dart @@ -35,6 +35,7 @@ extension FooExt on Foo { external set annotatedSetter(_); external num getField(); + external void setField10([optionalArgument = 10]); @JS('toString') external String extToString(); external dynamic getFirstEl(list); @@ -72,6 +73,10 @@ void main() { return this.field; } + Foo.prototype.setField10 = function(optionalArgument) { + this.field = optionalArgument; + } + Foo.prototype.getFirstEl = function(list) { return list[0]; } @@ -128,6 +133,24 @@ void main() { expect(foo.otherSumFn(10, 5), equals(15)); }); + // TODO(41375): Remove if JS interop default value arguments are disallowed. + test('optional arguments', () { + var foo = Foo(42); + expect(foo.field, equals(42)); + + foo.setField10(); + expect(foo.field, equals(10)); + foo.setField10(6); + expect(foo.field, equals(6)); + + // Test using tearoffs + var setF = foo.setField10; + setF(); + expect(foo.field, equals(10)); + setF(6); + expect(foo.field, equals(6)); + }); + test('module class', () { var bar = Bar(5); expect(js_util.getProperty(bar, 'fieldAnnotation'), equals(5)); diff --git a/tests/lib_2/js/external_extension_members_test.dart b/tests/lib_2/js/external_extension_members_test.dart index b1b0cfe374e..34cc5095b30 100644 --- a/tests/lib_2/js/external_extension_members_test.dart +++ b/tests/lib_2/js/external_extension_members_test.dart @@ -32,6 +32,7 @@ extension FooExt on Foo { external set annotatedSetter(_); external num getField(); + external void setField10([optionalArgument = 10]); @JS('toString') external String extToString(); external dynamic getFirstEl(list); @@ -71,6 +72,10 @@ void main() { return this.field; } + Foo.prototype.setField10 = function(optionalArgument) { + this.field = optionalArgument; + } + Foo.prototype.getFirstEl = function(list) { return list[0]; } @@ -110,6 +115,24 @@ void main() { expect(foo.otherSumFn(10, 5), equals(15)); }); + // TODO(41375): Remove if JS interop default value arguments are disallowed. + test('optional arguments', () { + var foo = Foo(42); + expect(foo.getField(), equals(42)); + + foo.setField10(); + expect(foo.getField(), equals(10)); + foo.setField10(6); + expect(foo.getField(), equals(6)); + + // Test using tearoffs + var setF = foo.setField10; + setF(); + expect(foo.getField(), equals(10)); + setF(6); + expect(foo.getField(), equals(6)); + }); + test('module class', () { var bar = Bar(5); expect(js_util.getProperty(bar, 'fieldAnnotation'), equals(5));