| // Copyright (c) 2018, 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. |
| |
| @JS() |
| library mock; |
| |
| import 'package:js/js.dart'; |
| import 'package:expect/minitest.dart'; |
| |
| @JS('Node') |
| class Node {} |
| |
| @JS('HTMLDocument') |
| class Document extends Node { |
| external Element get body; |
| } |
| |
| @JS() |
| external get foo; |
| |
| @JS() |
| external Document get document; |
| |
| @JS('Element') |
| class Element extends Node { |
| external String get tagName; |
| } |
| |
| class MockDocument implements Document { |
| final Element body = new MockElement(); |
| } |
| |
| class MockElement implements Element { |
| final tagName = 'MockBody'; |
| } |
| |
| void main() { |
| test('js', () { |
| var f = foo; |
| expect(f, isNull); |
| |
| var doc = document; |
| expect(doc is Document, isTrue); |
| // Fails in dart2js |
| //expect(doc is! Element, isTrue); |
| |
| expect(doc is Node, isTrue); |
| |
| expect(doc is! MockDocument, isTrue); |
| expect(doc is! MockElement, isTrue); |
| }); |
| |
| test('mock', () { |
| var doc = new MockDocument(); |
| expect(doc is Document, isTrue); |
| // Fails in dart2js |
| // expect(doc is! Element, isTrue); |
| expect(doc is Node, isTrue); |
| |
| var body = doc.body; |
| // Fails in dart2js |
| // expect(body is! Document, isTrue); |
| expect(body is Element, isTrue); |
| expect(body is Node, isTrue); |
| }); |
| } |