| Index: test/codegen/lib/html/hidden_dom_1_test.dart
|
| diff --git a/test/codegen/lib/html/hidden_dom_1_test.dart b/test/codegen/lib/html/hidden_dom_1_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..120136b5a3da6069887ad8d67cd68acb304979d3
|
| --- /dev/null
|
| +++ b/test/codegen/lib/html/hidden_dom_1_test.dart
|
| @@ -0,0 +1,45 @@
|
| +library HiddenDom1Test;
|
| +import 'package:unittest/unittest.dart';
|
| +import 'package:unittest/html_config.dart';
|
| +import 'dart:html';
|
| +
|
| +// Test that the dart:html API does not leak native jsdom methods:
|
| +// onfocus setter.
|
| +
|
| +main() {
|
| + useHtmlConfiguration();
|
| +
|
| + test('test1', () {
|
| + document.body.children.add(new Element.html(r'''
|
| +<div id='div1'>
|
| +Hello World!
|
| +</div>'''));
|
| + Element e = document.query('#div1');
|
| + expect(e, isNotNull);
|
| +
|
| + checkNoSuchMethod(() { confuse(e).onfocus = null; });
|
| + });
|
| +
|
| +}
|
| +
|
| +class Decoy {
|
| + void set onfocus(x) { throw 'dead code'; }
|
| +}
|
| +
|
| +confuse(x) => opaqueTrue() ? x : (opaqueTrue() ? new Object() : new Decoy());
|
| +
|
| +/** Returns [:true:], but in a way that confuses the compiler. */
|
| +opaqueTrue() => true; // Expand as needed.
|
| +
|
| +checkNoSuchMethod(action()) {
|
| + var ex = null;
|
| + try {
|
| + action();
|
| + } catch (e) {
|
| + ex = e;
|
| + }
|
| + if (ex == null)
|
| + expect(false, isTrue, reason: 'Action should have thrown exception');
|
| +
|
| + expect(ex, isNoSuchMethodError);
|
| +}
|
|
|