Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / media / media-fragments / media-fragments.js
blobd3c030215e3df7d560808a184c3896e8ce1332b4
2     var currentTest = null;
3     var fragmentEndTime;
4     var testData = 
5     {
6         // http://www.w3.org/2008/WebVideo/Fragments/TC/ua-test-cases
8         TC0001 : { start: null, end: null, valid: false, description: "#t=,", fragment: "t=,", comment: "Syntax error, not allowed according to the ABNF. The media fragment is ignored."},
9         TC0002 : { start: null, end: null, valid: false, description: "#t=a,a and a >= 0", fragment: "t=3,3", comment: "Invalid semantics: start must be smaller than end. The media fragment is ignored."},
10         TC0003 : { start: null, end: null, valid: false, description: "#t=a,b and a > b", fragment: "t=7,3", comment: "Invalid semantics: the requested interval's start is beyond its end. The media fragment is ignored."},
11         TC0004 : { start: null, end: null, valid: true, description: "#t=a,b and a = 0, b = e", fragment: "t=0,9.97", comment: "The media is requested from 0 to e."},
12         TC0005 : { start: 3, end: 7, valid: true, description: "#t=a,b and a >= 0, a < b, a < e and b <= e", fragment: "t=3,7", comment: "The media is requested from a to b."},
13         TC0006 : { start: 3, end: null, valid: true, description: "#t=a,b and a >= 0, a < b, a < e and b > e", fragment: "t=3,15", comment: "The media is requested from a to e."},
14         TC0009 : { start: "duration", end: null, valid: false, description: "#t=a,b and a < b and a >= e", fragment: "t=15,20", comment: "The request lies beyond the end of the resource. If the UA knows the duration of the resource, it seeks to the end of the media resource. Otherwise, the UA will send an (out-of-range) HTTP request with an 'include-setup' in order to setup its decoding pipeline."},
15         TC0011 : { start: 3, end: null, valid: true, description: "#t=a with a >= 0, a < e", fragment: "t=3", comment: "Equivalent to #t=a,e. The media is requested from a to e."},
16         TC0012 : { start: null, end: null, valid: false, description: "#t=a, with a >= 0, a < e", fragment: "t=3,", comment: "Invalid syntax, hence the temporal fragment is ignored."},
17         TC0014 : { start: "duration", end: null, valid: false, description: "#t=a with a >= e", fragment: "t=15", comment: "The request lies beyond the end of the resource. If the UA knows the duration of the resource, it seeks to the end of the media resource. Otherwise, the UA will send an (out-of-range) HTTP request with an 'include-setup' in order to setup its decoding pipeline."},
18         TC0015 : { start: null, end: 7, valid: true, description: "#t=,b and b > 0, b <= e", fragment: "t=,7", comment: "Equivalent to #t=0,b. The media is requested from 0 to b."},
19         TC0017 : { start: null, end: "duration", valid: true, description: "#t=,b and b > e", fragment: "t=,15", comment: "Equivalent to #t=0,e. The media is requested from 0 to e."},
20         TC0024 : { start: 3, end: 7, valid: true, description: "NPT", fragment: "t=npt:3,7", comment: "equivalent to #t=3,7"},
21         TC0027 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=banana", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
22         TC0028 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=3,banana", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
23         TC0029 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=banana,7", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
24         TC0030 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t='3'", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
25         TC0031 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=3-7", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
26         TC0032 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=3:7", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
27         TC0033 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=3,7,9", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
28         TC0034 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t%3D3", comment: "UA does not identify this as a media fragment, so it will play the entire media resource. Note: %3D is equivalent to =."},
29         TC0035 : { start: 3, end: null, valid: true, description: "Valid percent encoding", fragment: "%74=3", comment: "The media is requested from 3 seconds to the end. Note: %74 is equivalent to t."},
30         TC0036 : { start: 3, end: null, valid: true, description: "Valid percent encoding", fragment: "t=%33", comment: "The media is requested from 3 seconds to the end. Note: %33 is equivalent to 3."},
31         TC0037 : { start: 3, end: 7, valid: true, description: "Valid percent encoding", fragment: "t=3%2C7", comment: "The media is requested from 3 to 7 seconds. Note: %2C is equivalent to ,."},
32         TC0038 : { start: 3, end: null, valid: true, description: "Valid percent encoding", fragment: "t=%6Ept:3", comment: "The media is requested from 3 seconds to the end. %6E is equivalent to n."},
33         TC0039 : { start: 3, end: null, valid: true, description: "Valid percent encoding", fragment: "t=npt%3A3", comment: "The media is requested from 3 seconds to the end. Note: %3A is equivalent to :."},
34         TC0044 : { start: null, end: null, valid: false, description: "#t=a,b and a < 0", fragment: "t=-1,3", comment: "Invalid syntax: a '-' character is not allowed at this position according to the ABNF. The UA knows that this is an invalid media fragment, so it will play the entire media resource."},
35         TC0051 : { start: 3, end: null, valid: true, description: "Trailing '&'", fragment: "t=3&", comment: "After processing name-value pairs, this appears to be equivalent to #t=3."},
36         TC0052 : { start: 3, end: null, valid: true, description: "Unknown keys", fragment: "u=12&t=3", comment: "After processing name-value pairs, this appears to be equivalent to #t=3."},
37         TC0053 : { start: 3, end: null, valid: true, description: "Unknown unit", fragment: "t=foo:7&t=npt:3", comment: "After processing name-value pairs, this appears to be equivalent to #t=3."},
38         TC0054 : { start: 3, end: null, valid: true, description: "Unknown keys (bis)", fragment: "&&=&=tom&jerry=&t=3&t=meow:0#", comment: "After processing name-value pairs, this appears to be equivalent to #t=3."},
39         TC0055 : { start: 3, end: null, valid: true, description: "Duplicate (key - known unit) combination", fragment: "t=7&t=3", comment: "When a fragment dimensions occurs multiple times, only the last occurrence of that dimension is interpreted."},
40         TC0058 : { start: null, end: null, valid: false, description: "Invalid axis parameters", fragment: "T=3,7", comment: "UA does not identify this as a media fragment. The entire media resource is played."},
41         TC0059 : { start: 3, end: null, valid: true, description: "Duplicate (key - known unit) combination", fragment: "t=smpte:00:00:01&t=npt:3", comment: "When a fragment dimensions occurs multiple times, only the last occurrence of that dimension is interpreted."},
42         TC0061 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
43         TC0062 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=.", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
44         TC0063 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=.0", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
45         TC0064 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=0s", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
46         TC0065 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=,0s", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
47         TC0066 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=0s,0s", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
48         TC0067 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=00:00:00s", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
49         TC0068 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=s", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
50         TC0069 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=npt:", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
51         TC0070 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=1e-1", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
52         TC0071 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=00:00:01.1e-1", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
53         TC0072 : { start: 3, end: null, valid: true, description: "Trailing dot", fragment: "t=3.", comment: "Equivalent to #t=a,e. The media is requested from a to e."},
54         TC0073 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=0:0:0", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
55         TC0074 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=0:00:60", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
56         TC0075 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=0:01:60", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
57         TC0076 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=0:60:00", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
58         TC0077 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=0:000:000", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
59         TC0078 : { start: 3, end: 7, valid: true, description: "NPT HH:MM:SS format", fragment: "t=00:00:03,00:00:07", comment: "The media is requested from a to b."},
60         TC0079 : { start: 3, end: 7, valid: true, description: "NPT mixed formats", fragment: "t=3,00:00:07", comment: "The media is requested from a to b."},
61         TC0080 : { start: null, end: null, valid: true, description: "NPT, trailing dot", fragment: "t=00:00.", comment: "A valid media fragment: { starting at 0 seconds. Thus, the UA will play the entire media resource."},
62         TC0081 : { start: null, end: null, valid: true, description: "NPT, trailing dot (bis)", fragment: "t=0:00:00.", comment: "A valid media fragment: { starting at 0 seconds. Thus, the UA will play the entire media resource."},
63         TC0082 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=0:00:10e-1", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
64         TC0083 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=0:00:60.000", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
65         TC0084 : { start: null, end: null, valid: false, description: "Illegal strings", fragment: "t=0:60:00.000", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
66         TC0085 : { start: 3, end: 7, valid: true, description: "Trailing invalid time fragment is ignored", fragment: "t=3,7&t=foo", comment: "The media is requested from a to b."},
67         TC0086 : { start: 3, end: 7, valid: true, description: "Rubbish before &", fragment: "foo&t=3,7", comment: "Rubbish before & is ignored."},
68         TC0087 : { start: 3, end: 7, valid: true, description: "Rubbish after &", fragment: "t=3,7&foo", comment: "Rubbish after & is ignored."},
69         TC0088 : { start: 3, end: 7, valid: true, description: "Sprinkling &", fragment: "t=3,7&&", comment: "Sprinkling & is OK."},
70         TC0089 : { start: 3, end: 7, valid: true, description: "Sprinkling &", fragment: "&t=3,7", comment: "Sprinkling & is OK."},
71         TC0090 : { start: 3, end: 7, valid: true, description: "Sprinkling &", fragment: "&&t=3,7", comment: "Sprinkling & is OK."},
72         TC0091 : { start: 3, end: 7, valid: true, description: "Sprinkling &", fragment: "&t=3,7&", comment: "Sprinkling & is OK."},
73         TC0092 : { start: null, end: null, valid: false, description: "Incorrect percent encoding", fragment: "t%3d10", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
74         TC0093 : { start: null, end: null, valid: false, description: "Incorrect percent encoding", fragment: "t=10%26", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."},
75         TC0094 : { start: null, end: null, valid: false, description: "Trailing comma", fragment: "t=3,7,", comment: "UA knows that this is an invalid media fragment, so it will play the entire media resource."}
76     };
78     function pause()
79     {
80         const maximumStopDelta = 0.5;
81         var delta = Math.abs(video.currentTime - fragmentEndTime).toFixed(2);
82         reportExpected((delta <= maximumStopDelta), ("video.currentTime - fragmentEndTime"), "<=", maximumStopDelta, delta);
84         endTest();
85     }
87     function canplaythrough()
88     {
89         var info = testData[currentTest];
90         var duration = video.duration.toFixed(2);
91         var start = info.start ? info.start : 0;
92         fragmentEndTime = info.end ? info.end : duration;
94         if (start == "duration")
95             start = duration;
96         if (fragmentEndTime == "duration")
97             fragmentEndTime = duration;
99         // Don't use "testExpected()" so we won't log the actual duration as the floating point result may differ with different engines.
100         var startString = info.start == "duration" ? "duration" : start;
101         reportExpected(video.currentTime.toFixed(2) == start, "video.currentTime", "==", startString, video.currentTime);
103         if (info.valid) {
104             video.currentTime = (fragmentEndTime - 0.5);
105             run("video.play()");
106         } else
107             endTest();
108     }
110     function start()
111     {
112         video = document.createElement('video');
113         video.setAttribute('id', 'vid'); 
114         video.setAttribute('width', '320'); 
115         video.setAttribute('height', '240'); 
116         video.setAttribute('controls', ''); 
117         var paragraph = document.createElement('p');
118         paragraph.appendChild(video);
119         document.body.appendChild(paragraph);
121         waitForEventOnce("canplaythrough", canplaythrough);
122         waitForEvent("pause", pause);
124         var fileName = location.href.split('/').pop();
125         currentTest = fileName.substring(0, fileName.lastIndexOf("."));
127         var info = testData[currentTest];
128         consoleWrite("<br>Title: <b>" + currentTest + "</b>");
129         consoleWrite("Fragment: '<i>" + info.fragment + "</i>'");
130         consoleWrite("Comment: <i>" + info.comment + "</i>");
131         url = findMediaFile("video", "../content/counting") + "#" + info.fragment;
132         video.src = url;
133     }