[css-logical] Reject unitless length quirk in 'inset' shorthand
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / quirks / unitless-length / support / common.js
1 setup({explicit_done:true});
2 onload = function() {
3     setupIframe();
4
5     var tests = [
6     {input:"1", q:"1px"},
7     {input:"+1", q:"1px"},
8     {input:"-1", q:"-1px"},
9     {input:"1.5", q:"1.5px"},
10     {input:"+1.5", q:"1.5px"},
11     {input:"-1.5", q:"-1.5px"},
12     {input:"\\31 "},
13     {input:"+\\31 "},
14     {input:"-\\31 "},
15     {input:"\\31 .5"},
16     {input:"+\\31 .5"},
17     {input:"-\\31 .5"},
18     {input:"1\\31 "},
19     {input:"+1\\31 "},
20     {input:"-1\\31 "},
21     {input:"1\\31 .5"},
22     {input:"+1\\31 .5"},
23     {input:"-1\\31 .5"},
24     {input:"a"},
25     {input:"A"},
26     {input:"1a"},
27     {input:"+1a"},
28     {input:"-1a"},
29     {input:"+1A"},
30     {input:"-1A"},
31     {input:"+a"},
32     {input:"-a"},
33     {input:"+A"},
34     {input:"-A"},
35     {input:"@a"},
36     {input:"@1"},
37     {input:"@1a"},
38     {input:'"a"'},
39     {input:'"1"'},
40     {input:'"1a"'},
41     {input:"url(1)"},
42     {input:"url('1')"},
43     {input:"#1"},
44     {input:"#01"},
45     {input:"#001"},
46     {input:"#0001"},
47     {input:"#00001"},
48     {input:"#000001"},
49     {input:"+/**/1"},
50     {input:"-/**/1"},
51     {input:"calc(1)"},
52     {input:"calc(2 * 2px)", q:"4px", s:"4px"},
53     {input:"1px 2", q:"1px 2px", shorthand:true},
54     {input:"1 2px", q:"1px 2px", shorthand:true},
55     {input:"1px calc(2)", shorthand:true},
56     {input:"calc(1) 2px", shorthand:true},
57     {input:"1 +2", q:"1px 2px", shorthand:true},
58     {input:"1 -2", q:"1px -2px", shorthand:true},
59     ];
60
61     var props = [
62     {prop:'background-position', check:'background-position', check_also:[]},
63     {prop:'border-spacing', check:'border-spacing', check_also:[]},
64     {prop:'border-top-width', check:'border-top-width'},
65     {prop:'border-right-width', check:'border-right-width'},
66     {prop:'border-bottom-width', check:'border-bottom-width'},
67     {prop:'border-left-width', check:'border-left-width'},
68     {prop:'border-width', check:'border-top-width', check_also:['border-right-width', 'border-bottom-width', 'border-left-width']},
69     {prop:'bottom', check:'bottom'},
70     {prop:'clip', check:'clip'},
71     {prop:'font-size', check:'font-size'},
72     {prop:'height', check:'height'},
73     {prop:'left', check:'left'},
74     {prop:'letter-spacing', check:'letter-spacing'},
75     {prop:'margin-right', check:'margin-right'},
76     {prop:'margin-left', check:'margin-left'},
77     {prop:'margin-top', check:'margin-top'},
78     {prop:'margin-bottom', check:'margin-bottom'},
79     {prop:'margin', check:'margin-top', check_also:['margin-right', 'margin-bottom', 'margin-left']},
80     {prop:'max-height', check:'max-height'},
81     {prop:'max-width', check:'max-width'},
82     {prop:'min-height', check:'min-height'},
83     {prop:'min-width', check:'min-width'},
84     {prop:'padding-top', check:'padding-top'},
85     {prop:'padding-right', check:'padding-right'},
86     {prop:'padding-bottom', check:'padding-bottom'},
87     {prop:'padding-left', check:'padding-left'},
88     {prop:'padding', check:'padding-top', check_also:['padding-right', 'padding-bottom', 'padding-left']},
89     {prop:'right', check:'right'},
90     {prop:'text-indent', check:'text-indent'},
91     {prop:'top', check:'top'},
92     {prop:'vertical-align', check:'vertical-align'},
93     {prop:'width', check:'width'},
94     {prop:'word-spacing', check:'word-spacing'},
95     ];
96     var style_template = '#test{border-style:solid;position:relative;{prop}:{test};}' +
97                          '#ref{border-style:solid;position:relative;{prop}:{ref};}';
98
99     tests.forEach(function(t) {
100         for (var i in props) {
101             if (t.shorthand && !(props[i].check_also)) {
102                 continue;
103             }
104             test(function() {
105                 win.style.textContent = style_template.replace('{test}', t.input)
106                             .replace('{ref}', quirks ? t.q : t.s).replace(/\{prop\}/g, props[i].prop)
107                             .replace(/clip:[^;]+/g, function(match) {
108                                 return 'clip:rect(auto, auto, auto, ' + match.substr(5) + ')';
109                             });
110                 assert_equals(win.getComputedStyle(win.test).getPropertyValue(props[i].check),
111                               win.getComputedStyle(win.ref).getPropertyValue(props[i].check),
112                               props[i].prop);
113                 if (t.shorthand && props[i].check_also) {
114                     for (var j in props[i].check_also) {
115                         assert_equals(win.getComputedStyle(win.test).getPropertyValue(props[i].check_also[j]),
116                                       win.getComputedStyle(win.ref).getPropertyValue(props[i].check_also[j]),
117                                       props[i].prop + ', checking ' + props[i].check_also[j]);
118                     }
119                 }
120             }, props[i].prop + ": " + t.input);
121
122         }
123     });
124
125     if (quirks) {
126         var other_tests = [
127         {input:'background:1 1', prop:'background-position'},
128         {input:'border-top:red solid 1', prop:'border-top-width'},
129         {input:'border-right:red solid 1', prop:'border-right-width'},
130         {input:'border-bottom:red solid 1', prop:'border-bottom-width'},
131         {input:'border-left:red solid 1', prop:'border-left-width'},
132         {input:'border:red solid 1', prop:'border-top-width'},
133         {input:'font:normal normal normal 40 sans-serif', prop:'font-size'},
134         {input:'outline:red solid 1', prop:'outline-width'},
135         {input:'outline-width:1', prop:'outline-width'},
136         ];
137
138         var other_template = "#test{position:relative;outline-style:solid;{test}}" +
139                              "#ref{outline-style:solid}";
140
141         other_tests.forEach(function(t) {
142             test(function() {
143                 win.style.textContent = other_template.replace('{test}', t.input);
144                 assert_equals(win.getComputedStyle(win.test).getPropertyValue(t.prop),
145                               win.getComputedStyle(win.ref).getPropertyValue(t.prop),
146                               'quirk was supported');
147             }, 'Excluded property '+t.input);
148         });
149     }
150
151     done();
152 }