Index: test/codegen/lib/html/window_nosuchmethod_test.dart |
diff --git a/test/codegen/lib/html/window_nosuchmethod_test.dart b/test/codegen/lib/html/window_nosuchmethod_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..93cb592e0746d0523b467521d48fee0a2d26a654 |
--- /dev/null |
+++ b/test/codegen/lib/html/window_nosuchmethod_test.dart |
@@ -0,0 +1,55 @@ |
+// Copyright (c) 2012, 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. |
+ |
+library WindowNSMETest; |
+import "package:expect/expect.dart"; |
+import 'package:unittest/unittest.dart'; |
+import 'package:unittest/html_config.dart'; |
+import 'dart:html' as dom; |
+ |
+// Not defined in dom.Window. |
+foo(x) => x; |
+ |
+class Unused { |
+ foo(x) => 'not $x'; |
+} |
+ |
+int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); |
+ |
+main() { |
+ useHtmlConfiguration(); |
+ var things = [new Unused(), dom.window]; |
+ |
+ test('windowNonMethod', () { |
+ var win = things[inscrutable(1)]; |
+ final message = foo("Hello World"); |
+ try { |
+ String x = win.foo(message); |
+ expect(false, isTrue, reason: 'Should not reach here: $x'); |
+ } on NoSuchMethodError catch (e) { |
+ // Expected exception. |
+ } on Exception catch (e) { |
+ expect(false, isTrue, reason: 'Wrong exception: $e'); |
+ } |
+ }); |
+ |
+ test('foo', () { |
+ var win = things[inscrutable(0)]; |
+ String x = win.foo('bar'); |
+ expect(x, 'not bar'); |
+ }); |
+ |
+ // Use dom.window direclty in case the compiler does type inference. |
+ test('windowNonMethod2', () { |
+ final message = foo("Hello World"); |
+ try { |
+ String x = dom.window.foo(message); |
+ expect(false, isTrue, reason: 'Should not reach here: $x'); |
+ } on NoSuchMethodError catch (e) { |
+ // Expected exception. |
+ } on Exception catch (e) { |
+ expect(false, isTrue, reason: 'Wrong exception: $e'); |
+ } |
+ }); |
+} |