|  | // Copyright (c) 2020, 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. | 
|  |  | 
|  | import 'dart:html'; | 
|  |  | 
|  | import 'package:expect/legacy/minitest.dart'; // ignore: deprecated_member_use_from_same_package | 
|  |  | 
|  | main() { | 
|  | var isWindowBase = predicate((x) => x is WindowBase, 'is a WindowBase'); | 
|  | var isWindow = predicate((x) => x is Window, 'is a Window'); | 
|  | var isLocationBase = predicate((x) => x is LocationBase, 'is a LocationBase'); | 
|  | var isLocation = predicate((x) => x is Location, 'is a Location'); | 
|  | var isHistoryBase = predicate((x) => x is HistoryBase, 'is a HistoryBase'); | 
|  | var isHistory = predicate((x) => x is History, 'is a History'); | 
|  |  | 
|  | final dynamic iframe = new IFrameElement(); | 
|  | document.body!.append(iframe); | 
|  |  | 
|  | test('window', () { | 
|  | expect(window, isWindow); | 
|  | expect(window.document, document); | 
|  | }); | 
|  |  | 
|  | test('iframe', () { | 
|  | final frameWindow = iframe.contentWindow; | 
|  | expect(frameWindow, isWindowBase); | 
|  | //TODO(gram) The next test should be written as: | 
|  | //    expect(frameWindow, isNot(isWindow)); | 
|  | // but that will cause problems now until is/is! work | 
|  | // properly in dart2js instead of always returning true. | 
|  | expect(frameWindow is! Window, isTrue); | 
|  | expect(frameWindow.parent, isWindow); | 
|  |  | 
|  | // Ensure that the frame's document is inaccessible via window. | 
|  | expect(() => frameWindow.document, throws); | 
|  | }); | 
|  |  | 
|  | test('contentDocument', () { | 
|  | // Ensure that the frame's document is inaccessible. | 
|  | expect(() => iframe.contentDocument, throws); | 
|  | }); | 
|  |  | 
|  | test('location', () { | 
|  | expect(window.location, isLocation); | 
|  | final frameLocation = iframe.contentWindow.location; | 
|  | expect(frameLocation, isLocationBase); | 
|  | // TODO(gram) Similar to the above, the next test should be: | 
|  | //     expect(frameLocation, isNot(isLocation)); | 
|  | expect(frameLocation is! Location, isTrue); | 
|  |  | 
|  | expect(() => frameLocation.href, throws); | 
|  | expect(() => frameLocation.hash, throws); | 
|  |  | 
|  | final frameParentLocation = iframe.contentWindow.parent.location; | 
|  | expect(frameParentLocation, isLocation); | 
|  | }); | 
|  |  | 
|  | test('history', () { | 
|  | expect(window.history, isHistory); | 
|  | final frameHistory = iframe.contentWindow.history; | 
|  | expect(frameHistory, isHistoryBase); | 
|  | // See earlier comments. | 
|  | //expect(frameHistory, isNot(isHistory)); | 
|  | expect(frameHistory is! History, isTrue); | 
|  |  | 
|  | // Valid methods. | 
|  | frameHistory.forward(); | 
|  |  | 
|  | expect(() => frameHistory.length, throws); | 
|  |  | 
|  | final frameParentHistory = iframe.contentWindow.parent.history; | 
|  | expect(frameParentHistory, isHistory); | 
|  | }); | 
|  | } |