| Index: client/tests/client/dom/HiddenDom2Test.dart
|
| diff --git a/client/tests/client/dom/HiddenDom2Test.dart b/client/tests/client/dom/HiddenDom2Test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6964270357ee91a2ea5ef78d4fbfb72c344cdc23
|
| --- /dev/null
|
| +++ b/client/tests/client/dom/HiddenDom2Test.dart
|
| @@ -0,0 +1,47 @@
|
| +#library('HiddenDom2Test');
|
| +#import('../../../testing/unittest/unittest.dart');
|
| +#import('dart:html');
|
| +
|
| +// Test that the dart:html API does not leak native jsdom methods:
|
| +// appendChild operation.
|
| +
|
| +main() {
|
| + forLayoutTests();
|
| +
|
| + test('test1', () {
|
| + document.body.elements.add(new Element.html(@'''
|
| +<div id='div1'>
|
| +Hello World!
|
| +</div>'''));
|
| + Element e = document.query('#div1');
|
| + Element e2 = new Element.html(@"<div id='xx'>XX</div>");
|
| + Expect.isTrue(e != null);
|
| +
|
| + checkNoSuchMethod(() { confuse(e).appendChild(e2); });
|
| +
|
| + });
|
| +}
|
| +
|
| +class Decoy {
|
| + void appendChild(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;
|
| + bool threw = false;
|
| + try {
|
| + action();
|
| + } catch (var e) {
|
| + threw = true;
|
| + ex = e;
|
| + }
|
| + if (!threw)
|
| + Expect.fail('Action should have thrown exception');
|
| +
|
| + Expect.isTrue(ex is NoSuchMethodException, 'ex is NoSuchMethodException');
|
| +}
|
|
|