1<head>
2<link rel="stylesheet" href="../js/resources/js-test-style.css">
3<script src="../js/resources/js-test-pre.js"></script>
4</head>
5<body onload=runTest()>
6<script>
7 description("This tests API of W3C UserTiming Spec.")
8
9 function testMarkWOMarkName(){
10 try{
11 performance.mark();
12 return 'success? should fail!';
13 }catch(e){
14 return e.name;
15 }
16 }
17
18 function testMeasureWOMeasureName(){
19 try{
20 performance.measure();
21 return 'success? should fail';
22 }catch(e){
23 return e.name;
24 }
25 }
26
27 function testMeasure(measureName, startMark, endMark){
28 if (measureName == undefined)
29 return 'fail';
30 try{
31 if (arguments.length == 1)
32 performance.measure(measureName);
33 if (arguments.length == 2)
34 performance.measure(measureName, startMark);
35 if (arguments.length == 3)
36 performance.measure(measureName, startMark, endMark);
37 return 'success';
38 }catch(e){
39 return e.name;
40 }
41
42 }
43
44 function testMark(markName){
45 try{
46 performance.mark(markName);
47 return 'success';
48 }catch(e){
49 return e.name;
50 }
51
52 }
53
54 function prepareMarks(){
55 performance.mark('');
56 performance.mark(1);
57 performance.mark(2);
58 performance.mark(3);
59 performance.mark(4);
60 performance.mark(5);
61 performance.mark(6);
62 performance.mark('a');
63 performance.mark('bc');
64 performance.mark('def');
65 performance.mark('ghij');
66 performance.mark('M');
67 }
68
69 function prepareMeasures(){
70 testMeasure('', '', 1);
71 testMeasure('x', '1', 2);
72 testMeasure('y', 3, '4');
73 testMeasure('z', 3, 'a');
74 testMeasure('xx', 'a', 'bc');
75 testMeasure('yy', 'a', 'ghij');
76 testMeasure('zz', 'a', 'lmnk'); //this one shall not work
77 testMeasure('onloadEndToNow', 'loadEventEnd');
78 testMeasure('nav1');
79 testMeasure('nav2', 'navigationStart');
80 testMeasure('loadTime', 'navigationStart', 'loadEventEnd');
81 testMeasure('domCompleteToa', 'domComplete', 'a');
82 testMeasure('onloadStartToa', 'loadEventStart', 'a');
83 testMeasure('negativeValue', 3, 'navigationStart');
84 testMeasure('navToLoadStart', 'navigationStart', 'loadEventStart');
85 testMeasure('navToM', 'navigationStart', 'M');
86 testMeasure('loadStartToM', 'loadEventStart', 'M');
87 }
88
89 function checkDictTypeMarksOrMeasures(obj){
90 if (typeof obj != 'object')
91 return false;
92 for(var key in obj){
93 //console.log(key);
94 if (!Array.isArray(obj[key]))
95 return false;
96 if(!obj[key].every(isFinite))
97 return false;
98 }
99 return true;
100
101 }
102
103 function dictTypeMarksOrMeasuresHasItemNum(obj){
104 var num = 0;
105 for(var key in obj){
106 num++;
107 }
108 return num;
109 }
110 function runTest(){
111 // mark
112 shouldBeTrue("testMarkWOMarkName() == 'TypeError'");
113 shouldBeTrue("testMark('navigationStart') == 'SYNTAX_ERR'");
114 shouldBeTrue("testMark('unloadEventStart') == 'SYNTAX_ERR'");
115 shouldBeTrue("testMark('unloadEventEnd') == 'SYNTAX_ERR'");
116 shouldBeTrue("testMark('redirectStart') == 'SYNTAX_ERR'");
117 shouldBeTrue("testMark('redirectEnd') == 'SYNTAX_ERR'");
118 shouldBeTrue("testMark('fetchStart') == 'SYNTAX_ERR'");
119 shouldBeTrue("testMark('domainLookupStart') == 'SYNTAX_ERR'");
120 shouldBeTrue("testMark('domainLookupEnd') == 'SYNTAX_ERR'");
121 shouldBeTrue("testMark('connectStart') == 'SYNTAX_ERR'");
122 shouldBeTrue("testMark('connectEnd') == 'SYNTAX_ERR'");
123 shouldBeTrue("testMark('secureConnectionStart') == 'SYNTAX_ERR'");
124 shouldBeTrue("testMark('requestStart') == 'SYNTAX_ERR'");
125 shouldBeTrue("testMark('responseStart') == 'SYNTAX_ERR'");
126 shouldBeTrue("testMark('responseEnd') == 'SYNTAX_ERR'");
127 shouldBeTrue("testMark('domLoading') == 'SYNTAX_ERR'");
128 shouldBeTrue("testMark('domInteractive') == 'SYNTAX_ERR'");
129 shouldBeTrue("testMark('domContentLoadedEventStart') == 'SYNTAX_ERR'");
130 shouldBeTrue("testMark('domContentLoadedEventEnd') == 'SYNTAX_ERR'");
131 shouldBeTrue("testMark('domComplete') == 'SYNTAX_ERR'");
132 shouldBeTrue("testMark('loadEventStart') == 'SYNTAX_ERR'");
133 shouldBeTrue("testMark('loadEventEnd') == 'SYNTAX_ERR'");
134 shouldBeTrue("testMark('') == 'success'");
135 shouldBeTrue("testMark('abc') == 'success'");
136 shouldBeTrue("testMark(123) == 'success'");
137 performance.clearMarks();
138
139 // getMarks
140 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 0");
141 prepareMarks();
142 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 12");
143
144 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('').length == 1 && performance.getMarks('').every(isFinite) == true");
145 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('1').length == 1 && performance.getMarks('').every(isFinite) == true");
146 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('a').length == 1 && performance.getMarks('').every(isFinite) == true");
147 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('def').length == 1 && performance.getMarks('').every(isFinite) == true");
148 prepareMarks();
149 prepareMarks();
150 prepareMarks();
151 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 12");
152 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('').length == 4 && performance.getMarks('').every(isFinite) == true");
153 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('1').length == 4 && performance.getMarks('').every(isFinite) == true");
154 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('a').length == 4 && performance.getMarks('').every(isFinite) == true");
155 shouldBeTrue("Array.isArray(performance.getMarks('')) && performance.getMarks('def').length == 4 && performance.getMarks('').every(isFinite) == true");
156 shouldBeTrue("Array.isArray(performance.getMarks('klmn')) && performance.getMarks('klmn').length == 0");
157 performance.clearMarks();
158
159 // clearMarks
160 prepareMarks();
161 prepareMarks();
162 prepareMarks();
163 prepareMarks();
164 prepareMarks();
165 prepareMarks();
166 performance.clearMarks('klmn');
167 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 12");
168 performance.clearMarks('ghij');
169 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 11");
170 performance.clearMarks('');
171 performance.clearMarks('1');
172 performance.clearMarks('2');
173 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 8");
174 performance.clearMarks();
175 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMarks()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMarks()) == 0");
176
177 // measure
178 shouldBeTrue("testMeasureWOMeasureName() == 'TypeError'");
179 prepareMarks();
180 shouldBeTrue("testMeasure('', '', 1) == 'success'");
181 shouldBeTrue("testMeasure('') == 'success'");
182 shouldBeTrue("testMeasure('x', 1) == 'success'");
183 shouldBeTrue("testMeasure('y', 3, 'ghij') == 'success'");
184 shouldBeTrue("testMeasure('y', 3, 'navigationStart') == 'success'");
185 shouldBeTrue("testMeasure('y', 3, 'unloadEventStart') == 'success'");
186 shouldBeTrue("testMeasure('y', 3, 'unloadEventEnd') == 'success'");
187 shouldBeTrue("testMeasure('y', 3, 'redirectStart') == 'success'");
188 shouldBeTrue("testMeasure('y', 3, 'redirectEnd') == 'success'");
189 shouldBeTrue("testMeasure('y', 3, 'fetchStart') == 'success'");
190 shouldBeTrue("testMeasure('y', 3, 'domainLookupStart') == 'success'");
191 shouldBeTrue("testMeasure('y', 3, 'domainLookupEnd') == 'success'");
192 shouldBeTrue("testMeasure('y', 3, 'connectStart') == 'success'");
193 shouldBeTrue("testMeasure('y', 3, 'connectEnd') == 'success'");
194 shouldBeTrue("testMeasure('y', 3, 'secureConnectionStart') == 'success'");
195 shouldBeTrue("testMeasure('y', 3, 'requestStart') == 'success'");
196 shouldBeTrue("testMeasure('y', 3, 'responseStart') == 'success'");
197 shouldBeTrue("testMeasure('y', 3, 'responseEnd') == 'success'");
198 shouldBeTrue("testMeasure('y', 3, 'domLoading') == 'success'");
199 shouldBeTrue("testMeasure('y', 3, 'domInteractive') == 'success'");
200 shouldBeTrue("testMeasure('y', 3, 'domContentLoadedEventStart') == 'success'");
201 shouldBeTrue("testMeasure('y', 3, 'domContentLoadedEventEnd') == 'success'");
202 shouldBeTrue("testMeasure('y', 3, 'domComplete') == 'success'");
203 shouldBeTrue("testMeasure('y', 3, 'loadEventStart') == 'success'");
204 shouldBeTrue("testMeasure('y', 3, 'loadEventEnd') == 'success'");
205 shouldBeTrue("testMeasure('z', 8) == 'SYNTAX_ERR'");
206 shouldBeTrue("testMeasure('z', 3, 8) == 'SYNTAX_ERR'");
207 shouldBeTrue("testMeasure('y', 'domInteractive', 8) == 'SYNTAX_ERR'");
208 shouldBeTrue("testMeasure('z', 8, 3) == 'SYNTAX_ERR'");
209 shouldBeTrue("testMeasure('z', 8, 9) == 'SYNTAX_ERR'");
210 shouldBeTrue("testMeasure('z', undefined, 4) == 'SYNTAX_ERR'");
211 shouldBeTrue("testMeasure('z', 4, undefined) == 'SYNTAX_ERR'");
212 shouldBeTrue("testMeasure('z', 3, 'navigationStart') == 'success'");
213 performance.clearMeasures();
214 performance.clearMarks();
215
216 // getMeasures
217 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 0");
218 prepareMarks();
219 prepareMeasures();
220 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16");
221 shouldBeTrue("performance.getMeasures('nav1')[0] <= performance.getMeasures('nav2')[0]");
222 shouldBeTrue("performance.getMeasures('onloadEndToNow')[0] <= performance.getMeasures('nav1')[0]");
223 shouldBeTrue("performance.getMeasures('loadTime')[0] > 0");
224 shouldBeTrue("performance.getMeasures('domCompleteToa').length > 0");
225 shouldBeTrue("performance.getMeasures('onloadStartToa').length > 0");
226 shouldBeTrue("performance.getMeasures('negativeValue')[0] < 0");
227 shouldBeTrue("performance.getMeasures('navToLoadStart')[0] > 0");
228 shouldBeTrue("performance.getMeasures('navToM')[0] > 0");
229 shouldBeTrue("performance.getMeasures('loadStartToM').length > 0");
230 shouldBeTrue("performance.getMeasures('navToM') - performance.getMeasures('loadStartToM') == performance.getMeasures('navToLoadStart')");
231 shouldBeTrue("Array.isArray(performance.getMeasures('')) && performance.getMeasures('').length == 1 && performance.getMeasures('').every(isFinite) == true");
232 shouldBeTrue("Array.isArray(performance.getMeasures('x')) && performance.getMeasures('x').length == 1 && performance.getMeasures('x').every(isFinite) == true");
233 shouldBeTrue("Array.isArray(performance.getMeasures('y')) && performance.getMeasures('y').length == 1 && performance.getMeasures('y').every(isFinite) == true");
234 shouldBeTrue("Array.isArray(performance.getMeasures('zz')) && performance.getMeasures('zz').length == 0");
235 prepareMeasures();
236 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16");
237 shouldBeTrue("Array.isArray(performance.getMeasures('')) && performance.getMeasures('').length == 2 && performance.getMeasures('').every(isFinite) == true");
238 shouldBeTrue("Array.isArray(performance.getMeasures('xx')) && performance.getMeasures('xx').length == 2 && performance.getMeasures('xx').every(isFinite) == true");
239 shouldBeTrue("Array.isArray(performance.getMeasures('yy')) && performance.getMeasures('yy').length == 2 && performance.getMeasures('yy').every(isFinite) == true");
240 shouldBeTrue("Array.isArray(performance.getMeasures('zz')) && performance.getMeasures('zz').length == 0");
241 prepareMarks();
242 prepareMeasures();
243 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16");
244 shouldBeTrue("performance.getMeasures('nav1').length == 3 && performance.getMeasures('nav1')[1] <= performance.getMeasures('nav1')[2]");
245 shouldBeTrue("performance.getMeasures('loadTime').length == 3 && performance.getMeasures('loadTime')[1] == performance.getMeasures('loadTime')[2]");
246 shouldBeTrue("performance.getMeasures('domCompleteToa').length == 3 && performance.getMeasures('domCompleteToa')[1] <= performance.getMeasures('domCompleteToa')[2]");
247 performance.clearMarks();
248 performance.clearMeasures();
249
250 // clearMeasures
251 prepareMarks();
252 prepareMeasures();
253 prepareMarks();
254 prepareMeasures();
255 performance.clearMeasures('nonexist');
256 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 16");
257 performance.clearMeasures('');
258 performance.clearMeasures('x');
259 performance.clearMeasures('xx');
260 performance.clearMeasures('nav1');
261 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 12");
262 performance.clearMeasures();
263 shouldBeTrue("checkDictTypeMarksOrMeasures(performance.getMeasures()) && dictTypeMarksOrMeasuresHasItemNum(performance.getMeasures()) == 0");
264 performance.clearMarks();
265
266 var successfullyParsed = true;
267 wasPostTestScriptParsed = true;
268
269 if (window.jsTestIsAsync) {
270 if (window.layoutTestController)
271 layoutTestController.waitUntilDone();
272 if (window.wasFinishJSTestCalled)
273 finishJSTest();
274 } else
275 finishJSTest();
276 }
277</script>
278</body>