Index: test/codegen/lib/html/cross_frame_test.dart |
diff --git a/test/codegen/lib/html/cross_frame_test.dart b/test/codegen/lib/html/cross_frame_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b5a37f6c3672fe709cb3a513024b4742c77a15ea |
--- /dev/null |
+++ b/test/codegen/lib/html/cross_frame_test.dart |
@@ -0,0 +1,75 @@ |
+library CrossFrameTest; |
+import 'package:unittest/unittest.dart'; |
+import 'package:unittest/html_config.dart'; |
+import 'dart:html'; |
+ |
+main() { |
+ useHtmlConfiguration(); |
+ |
+ 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 iframe = new Element.tag('iframe'); |
+ 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); |
+ }); |
+} |