Index: tests/compiler/dart2js_extra/interceptor_named_arguments_test.dart |
diff --git a/tests/compiler/dart2js_extra/interceptor_named_arguments_test.dart b/tests/compiler/dart2js_extra/interceptor_named_arguments_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6911a96c4480f3188616b181a856c399e9b65eb8 |
--- /dev/null |
+++ b/tests/compiler/dart2js_extra/interceptor_named_arguments_test.dart |
@@ -0,0 +1,56 @@ |
+// Copyright (c) 2015, 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. |
+ |
+ |
+// Test that the proper one-shot interceptor is used for different |
+// combinations of named arguments. |
+import "package:expect/expect.dart"; |
+ |
+// Use dart:html to get interceptors into play. |
+import "dart:html"; |
+ |
+// [createFragment] has the same signature as in [Element]. |
+class Other { |
+ createFragment(html, {validator, treeSanitizer}) { |
+ int result = 0; |
+ result += validator == null ? 0 : 2; |
+ result += treeSanitizer == null ? 0 : 1; |
+ return result; |
+ } |
+} |
+ |
+@NoInline() |
+bool wontTell(bool x) => x; |
+ |
+ |
+// Ensure that we use the interceptor only once per context so that we |
+// actually get a one-shot interceptor. This is a little brittle... |
+@NoInline() |
+testA(thing) { |
+ Expect.equals(0, thing.createFragment(null)); |
+} |
+ |
+@NoInline() |
+testB(thing) { |
+ Expect.equals(2, thing.createFragment(null, validator: 1)); |
+} |
+ |
+@NoInline() |
+testC(thing) { |
+ Expect.equals(1, thing.createFragment(null, treeSanitizer: 1)); |
+} |
+ |
+@NoInline() |
+testD(thing) { |
+ Expect.equals(3, thing.createFragment(null, validator: 1, treeSanitizer: 1)); |
+} |
+ |
+main () { |
+ // Ensure we get interceptors into play. |
+ var thing = wontTell(true) ? new Other() : new DivElement(); |
+ testA(thing); |
+ testB(thing); |
+ testC(thing); |
+ testD(thing); |
+} |