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-non-integer-top.html
1 <!DOCTYPE html>
2 <meta charset="utf-8">
3 <title>HTML: window.open `features`: non-integer values for feature `top`</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 windowURL = 'resources/message-opener.html';
16 var featuresPrefix = `width=401,height=204,left=0,`;
17
18 setup (() => {
19   // Before running tests, open a window using features that mimic
20   // what would happen if the feature tested here were set to 0
21   // for comparison later.
22   var featureString = `${featuresPrefix}top=0`;
23   var prefixedMessage = new PrefixedMessageTest();
24   prefixedMessage.onMessage((data, e) => {
25     e.source.close();
26     runWindowTests(data);
27   });
28   var win = window.open(prefixedMessage.url(windowURL), '', featureString);
29 });
30
31 function runWindowTests (baselineDimensions) {
32   // When code point in first position is not an ASCII digit, "+" or "-",
33   // that's an error and the value becomes 0
34   [ 'top=/104',
35     'top=_104',
36     'top=L104'
37   ].forEach(feature => {
38     async_test(t => {
39       var prefixedMessage = new PrefixedMessageTest();
40       var featureString = `${featuresPrefix}${feature}`;
41       prefixedMessage.onMessage(t.step_func_done((data, e) => {
42         e.source.close();
43         assert_equals(data.top, baselineDimensions.top, `"${feature} begins with an invalid character and should be ignored"`);
44       }));
45       var win = window.open(prefixedMessage.url(windowURL), '', featureString);
46     }, `features "${feature}" should NOT set "top=104"`);
47   });
48
49   // Codepoints that are valid ASCII digits should be collected
50   // Non-ASCII digits and subsequent code points are ignored
51   [ 'top=105.5',
52     'top=105.32',
53     'top=105LLl',
54     'top=105^4',
55     'top=105*3',
56     'top=105/5',
57     'top=105  ',
58     'top=105e1',
59     'top=105e-1'
60   ].forEach(feature => {
61     async_test(t => {
62       var featureString = `${featuresPrefix}${feature}`;
63       var prefixedMessage = new PrefixedMessageTest();
64       prefixedMessage.onMessage(t.step_func_done((data, e) => {
65         e.source.close();
66         assert_equals(data.top, 105, `"${feature} value after first non-digit will be ignored"`);
67       }));
68       var win = window.open(prefixedMessage.url(windowURL), '', featureString);
69     }, `features "${feature}" should set "top=105"`);
70   });
71 }
72
73 </script>