Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / w3c / web-platform-tests / custom-elements / testcommon.js
1 /*\r
2 Distributed under both the W3C Test Suite License [1] and the W3C\r
3 3-clause BSD License [2]. To contribute to a W3C Test Suite, see the\r
4 policies and contribution forms [3].\r
5 \r
6 [1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license\r
7 [2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license\r
8 [3] http://www.w3.org/2004/10/27-testcases\r
9  */\r
10 \r
11 "use strict";\r
12 \r
13 var HTML5_ELEMENTS = [ 'a', 'abbr', 'address', 'area', 'article', 'aside',\r
14         'audio', 'b', 'base', 'bdi', 'bdo', 'blockquote', 'body', 'br',\r
15         'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup',\r
16         'command', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div',\r
17         'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure',\r
18         'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header',\r
19         'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd',\r
20         'keygen', 'label', 'legend', 'li', 'link', 'map', 'mark', 'menu',\r
21         'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup',\r
22         'option', 'output', 'p', 'param', 'pre', 'progress', 'q', 'rp', 'rt',\r
23         'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source',\r
24         'span', 'strong', 'style', 'sub', 'table', 'tbody', 'td', 'textarea',\r
25         'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul',\r
26         'var', 'video', 'wbr' ];\r
27 \r
28 var EXTENDER_CHARS = [ 0x00B7, 0x02D0, 0x02D1, 0x0387, 0x0640, 0x0E46, 0x0EC6,\r
29         0x3005, 0x3031, 0x3032, 0x3033, 0x3034, 0x3035, 0x309D, 0x309E, 0x30FC,\r
30         0x30FD, 0x30FE ];\r
31 \r
32 var COMBINING_CHARS = [ 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306,\r
33         0x0307, 0x0308, 0x0309, 0x030A, 0x030B, 0x030C, 0x030D, 0x030E, 0x030F,\r
34         0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, 0x0318,\r
35         0x0319, 0x031A, 0x031B, 0x031C, 0x031D, 0x031E, 0x031F, 0x0320, 0x0321,\r
36         0x0322, 0x0323, 0x0324, 0x0325, 0x0326, 0x0327, 0x0328, 0x0329, 0x032A,\r
37         0x032B, 0x032C, 0x032D, 0x032E, 0x032F, 0x0330, 0x0331, 0x0332, 0x0333,\r
38         0x0334, 0x0335, 0x0336, 0x0337, 0x0338, 0x0339, 0x033A, 0x033B, 0x033C,\r
39         0x033D, 0x033E, 0x033F, 0x0340, 0x0341, 0x0342, 0x0343, 0x0344, 0x0345,\r
40         0x0360, 0x0361, 0x0483, 0x0484, 0x0485, 0x0486, 0x0591, 0x0592, 0x0593,\r
41         0x0594, 0x0595, 0x0596, 0x0597, 0x0598, 0x0599, 0x05A0, 0x05A1, 0x05A3,\r
42         0x05A4, 0x05A5, 0x05A6, 0x05A7, 0x05A8, 0x05A9, 0x05AA, 0x05AB, 0x05AC,\r
43         0x05AD, 0x05AE, 0x05AF, 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5,\r
44         0x05B6, 0x05B7, 0x05B8, 0x05B9, 0x05BB, 0x05BC, 0x05BD, 0x05BF, 0x05C1,\r
45         0x05C2, 0x05C4, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x0651,\r
46         0x0652, 0x0670, 0x06D6, 0x06D7, 0x06D8, 0x06D9, 0x06DA, 0x06DB, 0x06DC,\r
47         0x06DD, 0x06DE, 0x06DF, 0x06E0, 0x06E1, 0x06E2, 0x06E3, 0x06E4, 0x06E7,\r
48         0x06E8, 0x06EA, 0x06EB, 0x06EC, 0x06ED, 0x0901, 0x0902, 0x0903, 0x093C,\r
49         0x093E, 0x093F, 0x0940, 0x0941, 0x0942, 0x0943, 0x0944, 0x0945, 0x0946,\r
50         0x0947, 0x0948, 0x0949, 0x094A, 0x094B, 0x094C, 0x094D, 0x0951, 0x0952,\r
51         0x0953, 0x0954, 0x0962, 0x0963, 0x0981, 0x0982, 0x0983, 0x09BC, 0x09BE,\r
52         0x09BF, 0x09C0, 0x09C1, 0x09C2, 0x09C3, 0x09C4, 0x09C7, 0x09C8, 0x09CB,\r
53         0x09CC, 0x09CD, 0x09D7, 0x09E2, 0x09E3, 0x0A02, 0x0A3C, 0x0A3E, 0x0A3F,\r
54         0x0A40, 0x0A41, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4C, 0x0A4D, 0x0A70,\r
55         0x0A71, 0x0A81, 0x0A82, 0x0A83, 0x0ABC, 0x0ABE, 0x0ABF, 0x0AC0, 0x0AC1,\r
56         0x0AC2, 0x0AC3, 0x0AC4, 0x0AC5, 0x0AC7, 0x0AC8, 0x0AC9, 0x0ACB, 0x0ACC,\r
57         0x0ACD, 0x0B01, 0x0B02, 0x0B03, 0x0B3C, 0x0B3E, 0x0B3F, 0x0B40, 0x0B41,\r
58         0x0B42, 0x0B43, 0x0B47, 0x0B48, 0x0B4B, 0x0B4C, 0x0B4D, 0x0B56, 0x0B57,\r
59         0x0B82, 0x0B83, 0x0BBE, 0x0BBF, 0x0BC0, 0x0BC1, 0x0BC2, 0x0BC6, 0x0BC7,\r
60         0x0BC8, 0x0BCA, 0x0BCB, 0x0BCC, 0x0BCD, 0x0BD7, 0x0C01, 0x0C02, 0x0C03,\r
61         0x0C3E, 0x0C3F, 0x0C40, 0x0C41, 0x0C42, 0x0C43, 0x0C44, 0x0C46, 0x0C47,\r
62         0x0C48, 0x0C4A, 0x0C4B, 0x0C4C, 0x0C4D, 0x0C55, 0x0C56, 0x0C82, 0x0C83,\r
63         0x0CBE, 0x0CBF, 0x0CC0, 0x0CC1, 0x0CC2, 0x0CC3, 0x0CC4, 0x0CC6, 0x0CC7,\r
64         0x0CC8, 0x0CCA, 0x0CCB, 0x0CCC, 0x0CCD, 0x0CD5, 0x0CD6, 0x0D02, 0x0D03,\r
65         0x0D3E, 0x0D3F, 0x0D40, 0x0D41, 0x0D42, 0x0D43, 0x0D46, 0x0D47, 0x0D48,\r
66         0x0D4A, 0x0D4B, 0x0D4C, 0x0D4D, 0x0D57, 0x0E31, 0x0E34, 0x0E35, 0x0E36,\r
67         0x0E37, 0x0E38, 0x0E39, 0x0E3A, 0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B,\r
68         0x0E4C, 0x0E4D, 0x0E4E, 0x0EB1, 0x0EB4, 0x0EB5, 0x0EB6, 0x0EB7, 0x0EB8,\r
69         0x0EB9, 0x0EBB, 0x0EBC, 0x0EC8, 0x0EC9, 0x0ECA, 0x0ECB, 0x0ECC, 0x0ECD,\r
70         0x0F18, 0x0F19, 0x0F35, 0x0F37, 0x0F39, 0x0F3E, 0x0F3F, 0x0F71, 0x0F72,\r
71         0x0F73, 0x0F74, 0x0F75, 0x0F76, 0x0F77, 0x0F78, 0x0F79, 0x0F7A, 0x0F7B,\r
72         0x0F7C, 0x0F7D, 0x0F7E, 0x0F7F, 0x0F80, 0x0F81, 0x0F82, 0x0F83, 0x0F84,\r
73         0x0F86, 0x0F87, 0x0F88, 0x0F89, 0x0F8A, 0x0F8B, 0x0F90, 0x0F91, 0x0F92,\r
74         0x0F93, 0x0F94, 0x0F95, 0x0F97, 0x0F99, 0x0F9A, 0x0F9B, 0x0F9C, 0x0F9D,\r
75         0x0F9E, 0x0F9F, 0x0FA0, 0x0FA1, 0x0FA2, 0x0FA3, 0x0FA4, 0x0FA5, 0x0FA6,\r
76         0x0FA7, 0x0FA8, 0x0FA9, 0x0FAA, 0x0FAB, 0x0FAC, 0x0FAD, 0x0FB1, 0x0FB2,\r
77         0x0FB3, 0x0FB4, 0x0FB5, 0x0FB6, 0x0FB7, 0x0FB9, 0x20D0, 0x20D1, 0x20D2,\r
78         0x20D3, 0x20D4, 0x20D5, 0x20D6, 0x20D7, 0x20D8, 0x20D9, 0x20DA, 0x20DB,\r
79         0x20DC, 0x20E1, 0x302A, 0x302B, 0x302C, 0x302D, 0x302E, 0x302F, 0x3099,\r
80         0x309A ];\r
81 \r
82 var BASE_CHARS_SINGLE = [ 0x0386, 0x038C, 0x03DA, 0x03DC, 0x03DE, 0x03E0,\r
83         0x0559, 0x06D5, 0x093D, 0x09B2, 0x0A5E, 0x0A8D, 0x0ABD, 0x0AE0, 0x0B3D,\r
84         0x0B9C, 0x0CDE, 0x0E30, 0x0E84, 0x0E8A, 0x0E8D, 0x0EA5, 0x0EA7, 0x0EB0,\r
85         0x0EBD, 0x1100, 0x1109, 0x113C, 0x113E, 0x1140, 0x114C, 0x114E, 0x1150,\r
86         0x1159, 0x1163, 0x1165, 0x1167, 0x1169, 0x1175, 0x119E, 0x11A8, 0x11AB,\r
87         0x11BA, 0x11EB, 0x11F0, 0x11F9, 0x1F59, 0x1F5B, 0x1F5D, 0x1FBE, 0x2126,\r
88         0x212E ];\r
89 \r
90 var BASE_CHARS_RANGES = [ 0x0041, 0x005A, 0x0061, 0x007A, 0x00C0, 0x00D6,\r
91         0x00D8, 0x00F6, 0x00F8, 0x00FF, 0x0100, 0x0131, 0x0134, 0x013E, 0x0141,\r
92         0x0148, 0x014A, 0x017E, 0x0180, 0x01C3, 0x01CD, 0x01F0, 0x01F4, 0x01F5,\r
93         0x01FA, 0x0217, 0x0250, 0x02A8, 0x02BB, 0x02C1, 0x0388, 0x038A, 0x038E,\r
94         0x03A1, 0x03A3, 0x03CE, 0x03D0, 0x03D6, 0x03E2, 0x03F3, 0x0401, 0x040C,\r
95         0x040E, 0x044F, 0x0451, 0x045C, 0x045E, 0x0481, 0x0490, 0x04C4, 0x04C7,\r
96         0x04C8, 0x04CB, 0x04CC, 0x04D0, 0x04EB, 0x04EE, 0x04F5, 0x04F8, 0x04F9,\r
97         0x0531, 0x0556, 0x0561, 0x0586, 0x05D0, 0x05EA, 0x05F0, 0x05F2, 0x0621,\r
98         0x063A, 0x0641, 0x064A, 0x0671, 0x06B7, 0x06BA, 0x06BE, 0x06C0, 0x06CE,\r
99         0x06D0, 0x06D3, 0x06E5, 0x06E6, 0x0905, 0x0939, 0x0958, 0x0961, 0x0985,\r
100         0x098C, 0x098F, 0x0990, 0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B6, 0x09B9,\r
101         0x09DC, 0x09DD, 0x09DF, 0x09E1, 0x09F0, 0x09F1, 0x0A05, 0x0A0A, 0x0A0F,\r
102         0x0A10, 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36,\r
103         0x0A38, 0x0A39, 0x0A59, 0x0A5C, 0x0A72, 0x0A74, 0x0A85, 0x0A8B, 0x0A8F,\r
104         0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9,\r
105         0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32,\r
106         0x0B33, 0x0B36, 0x0B39, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B61, 0x0B85, 0x0B8A,\r
107         0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9E, 0x0B9F, 0x0BA3,\r
108         0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB5, 0x0BB7, 0x0BB9, 0x0C05, 0x0C0C,\r
109         0x0C0E, 0x0C10, 0x0C12, 0x0C28, 0x0C2A, 0x0C33, 0x0C35, 0x0C39, 0x0C60,\r
110         0x0C61, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3,\r
111         0x0CB5, 0x0CB9, 0x0CE0, 0x0CE1, 0x0D05, 0x0D0C, 0x0D0E, 0x0D10, 0x0D12,\r
112         0x0D28, 0x0D2A, 0x0D39, 0x0D60, 0x0D61, 0x0E01, 0x0E2E, 0x0E32, 0x0E33,\r
113         0x0E40, 0x0E45, 0x0E81, 0x0E82, 0x0E87, 0x0E88, 0x0E94, 0x0E97, 0x0E99,\r
114         0x0E9F, 0x0EA1, 0x0EA3, 0x0EAA, 0x0EAB, 0x0EAD, 0x0EAE, 0x0EB2, 0x0EB3,\r
115         0x0EC0, 0x0EC4, 0x0F40, 0x0F47, 0x0F49, 0x0F69, 0x10A0, 0x10C5, 0x10D0,\r
116         0x10F6, 0x1102, 0x1103, 0x1105, 0x1107, 0x110B, 0x110C, 0x110E, 0x1112,\r
117         0x1154, 0x1155, 0x115F, 0x1161, 0x116D, 0x116E, 0x1172, 0x1173, 0x11AE,\r
118         0x11AF, 0x11B7, 0x11B8, 0x11BC, 0x11C2, 0x1E00, 0x1E9B, 0x1EA0, 0x1EF9,\r
119         0x1F00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D, 0x1F50,\r
120         0x1F57, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC, 0x1FC2, 0x1FC4,\r
121         0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB, 0x1FE0, 0x1FEC, 0x1FF2,\r
122         0x1FF4, 0x1FF6, 0x1FFC, 0x212A, 0x212B, 0x2180, 0x2182, 0x3041, 0x3094,\r
123         0x30A1, 0x30FA, 0x3105, 0x312C, 0xAC00, 0xD7A3 ];\r
124 \r
125 var IDEOGRAPHIC_CHARS_SINGLE = [ 0x3007 ];\r
126 \r
127 var IDEOGRAPHIC_CHARS_RANGES = [ 0x3021, 0x3029, 0x4E00, 0x9FA5 ];\r
128 \r
129 var DIGIT_CHARS_RANGES = [ 0x0030, 0x0039, 0x0660, 0x0669, 0x06F0, 0x06F9,\r
130         0x0966, 0x096F, 0x09E6, 0x09EF, 0x0A66, 0x0A6F, 0x0AE6, 0x0AEF, 0x0B66,\r
131         0x0B6F, 0x0BE7, 0x0BEF, 0x0C66, 0x0C6F, 0x0CE6, 0x0CEF, 0x0D66, 0x0D6F,\r
132         0x0E50, 0x0E59, 0x0ED0, 0x0ED9, 0x0F20, 0x0F29 ];\r
133 \r
134 function CharsArray(array) {\r
135     this.array = array;\r
136 }\r
137 \r
138 CharsArray.prototype.testEach = function(namingFunction, checkFunction) {\r
139     if (this.array != null) {\r
140         this.array.forEach(function(value) {\r
141             checkFunction(namingFunction(getCharCode(value)));\r
142         });\r
143     }\r
144 };\r
145 \r
146 function CharRangesArray(array) {\r
147     this.array = array;\r
148 }\r
149 \r
150 CharRangesArray.prototype.testEach = function(namingFunction, checkFunction) {\r
151     if (this.array != null) {\r
152         for (var i = 0; i < this.array.length; i += 2) {\r
153             var rangeStart = getCharCode(this.array[i]);\r
154             var rangeEnd = getCharCode(this.array[i+1]);\r
155             for (var c = rangeStart; c <= rangeEnd; c++) {\r
156                 checkFunction(namingFunction(c));\r
157                 testCharCode(c, namingFunction, checkFunction);\r
158             }\r
159         }\r
160     }\r
161 };\r
162 \r
163 function testCharCode(charCode, namingFunction, checkFunction) {\r
164     checkFunction(namingFunction(charCode));\r
165 }\r
166 \r
167 var extenderChars = new CharsArray(EXTENDER_CHARS);\r
168 var combiningChars = new CharsArray(COMBINING_CHARS);\r
169 var baseCharsSingle = new CharsArray(BASE_CHARS_SINGLE);\r
170 var baseCharsRanges = new CharRangesArray(BASE_CHARS_RANGES);\r
171 var ideographicCharsSingle = new CharsArray(IDEOGRAPHIC_CHARS_SINGLE);\r
172 var ideographicCharsRanges = new CharRangesArray(IDEOGRAPHIC_CHARS_RANGES);\r
173 var digitCharsRanges = new CharRangesArray(DIGIT_CHARS_RANGES);\r
174 \r
175 function newHTMLDocument() {\r
176     return document.implementation.createHTMLDocument('Test Document');\r
177 }\r
178 \r
179 // Helper function, which verifies that given custom element name is valid\r
180 function checkValidName(name) {\r
181     var doc = newHTMLDocument();\r
182     try {\r
183         doc.registerElement(name);\r
184     } catch (e) {\r
185         assert_unreached('The custom element name \'' + name +\r
186             '\' should be registered without errors');\r
187     }\r
188 }\r
189 \r
190 // Helper function, which verifies that given custom element name is invalid\r
191 function checkInvalidName(name) {\r
192     var doc = newHTMLDocument();\r
193     assert_throws('SyntaxError', function() {\r
194             doc.registerElement(name);\r
195         }, 'Registering invalid custom element name \'' + name + '\' should fail');\r
196 }\r
197 \r
198 // Helper function to extract character code from given object\r
199 // expected input: either charater code or one character long string.\r
200 function getCharCode(c) {\r
201     if (typeof(c) === 'string') {\r
202         assert_equals(1, c.length, 'Error in test: input string should be one character long');\r
203         c = c.charCodeAt(0);\r
204     }\r
205     assert_equals('number', typeof(c), 'Error in test: unexpected type for charater code');\r
206     return c;\r
207 }\r
208 \r
209 var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\r
210 \r
211 function newHTMLDocument() {\r
212     return document.implementation.createHTMLDocument('Test Document');\r
213 }\r
214 \r
215 // Creates new iframe and loads given url into it.\r
216 // Returns reference to created iframe.\r
217 function newIFrame(url) {\r
218     assert_not_equals(url, null, 'argument url should not be null');\r
219     var iframe = document.createElement('iframe');\r
220     iframe.src = url;\r
221     document.body.appendChild(iframe);\r
222     return iframe;\r
223 }\r
224 \r
225 // Creates new iframe and loads given url into it.\r
226 // Function f is bound to the iframe's onload event.\r
227 // Function f receives iframe's contentDocument as argument.\r
228 // The iframe is disposed after function f is executed.\r
229 function testInIFrame(url, f, testName, testProps) {\r
230     var t = async_test(testName, testProps);\r
231     t.step(function() {\r
232         var iframe = newIFrame(url);\r
233         iframe.onload = t.step_func(function() {\r
234             try {\r
235                 f(iframe.contentDocument);\r
236                 t.done();\r
237             } finally {\r
238                 iframe.parentNode.removeChild(iframe);\r
239             }\r
240         });\r
241     });\r
242 }\r