| // Copyright (c) 2017, 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. |
| |
| // @dart = 2.9 |
| |
| import 'dart:async'; |
| import 'dart:html'; |
| |
| import 'package:expect/minitest.dart'; |
| |
| class Mock { |
| noSuchMethod(Invocation i) { |
| if (this is Window) return document; |
| if (this is FileList) return new MockFile(); |
| return null; |
| } |
| } |
| |
| @proxy |
| class MockBodyElement extends Mock implements BodyElement { |
| Node append(Node e) => e; |
| } |
| |
| class _EventListeners { |
| Stream<Event> get onBlur => new Stream.fromIterable([]); |
| } |
| |
| @proxy |
| class MockHtmlDocument extends Mock |
| with _EventListeners |
| implements HtmlDocument { |
| BodyElement get body => new MockBodyElement(); |
| } |
| |
| @proxy |
| class MockWindow extends Mock with _EventListeners implements Window { |
| Stream<Event> get onBeforeUnload => new Stream.fromIterable([]); |
| |
| String name = "MOCK_NAME"; |
| } |
| |
| @proxy |
| class MockLocation extends Mock implements Location { |
| String href = "MOCK_HREF"; |
| } |
| |
| @proxy |
| class MockFileList extends Mock implements FileList {} |
| |
| @proxy |
| class MockFile extends Mock implements File {} |
| |
| main() { |
| test('is', () { |
| var win = new MockWindow(); |
| expect(win is Window, isTrue); |
| }); |
| |
| test('getter', () { |
| var win = new MockWindow(); |
| expect(win.document, equals(document)); |
| }); |
| |
| test('override', () { |
| Window win = new MockWindow(); |
| expect(win.onBeforeUnload != null, isTrue); |
| expect(win.name, equals("MOCK_NAME")); |
| }); |
| |
| test('override', () { |
| var loc1 = new MockLocation(); |
| Location loc2 = loc1; |
| dynamic loc3 = loc1; |
| expect(loc1.href, equals("MOCK_HREF")); |
| loc1.href = "RESET"; |
| expect(loc2.href, equals("RESET")); |
| loc2.href = "RESET2"; |
| expect(loc3.href, equals("RESET2")); |
| }); |
| |
| test('method', () { |
| HtmlDocument doc = new MockHtmlDocument(); |
| expect(doc.body.append(null), equals(null)); |
| }); |
| |
| test('mixin', () { |
| Window win = new MockWindow(); |
| expect(win.onBlur is Stream, isTrue, reason: 'onBlur should be a stream'); |
| HtmlDocument doc = new MockHtmlDocument(); |
| expect(doc.onBlur is Stream, isTrue, reason: 'onBlur should be a stream'); |
| }); |
| |
| test('operator', () { |
| var fileList = new MockFileList(); |
| expect(fileList[1] is File, isTrue); |
| }); |
| } |