Re-sync html/browsers/the-window-object web-platform-tests from upstream
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / html / browsers / the-window-object / apis-for-creating-and-navigating-browsing-contexts-by-name / open-features-negative-width-height.html
1 <!DOCTYPE html>
2 <meta charset="utf-8">
3 <title>HTML: window.open `features`: negative values for `width`, `height`</title>
4 <meta name=timeout content=long>
5 <link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
6
7 <!--  user agents are not required to support open features other than `noopener`
8      and on some platforms position and size features don't make sense  -->
9 <meta name="flags" content="may" />
10
11 <script src="/resources/testharness.js"></script>
12 <script src="/resources/testharnessreport.js"></script>
13 <script src="/common/PrefixedPostMessage.js"></script>
14 <script>
15 var featuresPrefix = `top=0,left=0,`;
16 var windowURL = 'resources/message-opener.html';
17
18 // https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
19
20 setup (() => {
21   // Before running tests, open a window using features that mimic
22   // what would happen if the features tested here were set to invalid
23   // values in later tests.
24   // In cases where the value for `width` or `height` is
25   // is less than the browser's minimum allowed value for that dimension,
26   // but NOT 0, the value affected will become the browser's minimum allowed value.
27
28   // This should result in a minimally-sized window for later comparison
29   var featureString = `${featuresPrefix}width=1,height=1`;
30   var prefixedMessage = new PrefixedMessageTest();
31   prefixedMessage.onMessage((data, e) => {
32     e.source.close();
33     runWindowTests(data);
34   });
35   var win = window.open(prefixedMessage.url(windowURL), '', featureString);
36 });
37
38 function runWindowTests (baselineDimensions) {
39
40   // Negative values for `width` should result in a window with minimum
41   // valid allowed width
42   [ 'width=-404',
43     'width=-404.5',
44     'width=-404e1'
45   ].forEach(feature => {
46     async_test(t => {
47       var prefixedMessage = new PrefixedMessageTest();
48       var featureString = `${featuresPrefix}height=405,${feature}`;
49       prefixedMessage.onMessage(t.step_func_done((data, e) => {
50         e.source.close();
51         assert_equals(data.width, baselineDimensions.width, `"${feature} is negative and should result in a minimally-wide window"`);
52       }));
53       var win = window.open(prefixedMessage.url(windowURL), '', featureString);
54     }, `features "${feature}" should NOT set "width=404"`);
55   });
56
57   // Negative values for `height` should result in a window with minimum
58   // valid allowed height
59   [ 'height=-404',
60     'height=-404.5',
61     'height=-404e1'
62   ].forEach(feature => {
63     async_test(t => {
64       var prefixedMessage = new PrefixedMessageTest();
65       var featureString = `${featuresPrefix}width=404,${feature}`;
66       prefixedMessage.onMessage(t.step_func_done((data, e) => {
67         e.source.close();
68         assert_equals(data.height, baselineDimensions.height, `"${feature} is negative and should result in a minimal-height window"`);
69       }));
70       var win = window.open(prefixedMessage.url(windowURL), '', featureString);
71     }, `features "${feature}" should NOT set "height=404"`);
72   });
73 }
74
75 </script>