Implemented new API for RTCStatsReport object.
[WebKit-https.git] / LayoutTests / fast / mediastream / RTCPeerConnection-stats.html
1
2 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
3 <html>
4 <head>
5 <script src="../js/resources/js-test-pre.js"></script>
6 </head>
7 <body>
8 <script>
9 description("Tests the RTCPeerConnection stats interface.");
10
11 var pc = null;
12 var result;
13 var timestamp;
14 var local;
15
16 function getUserMedia(dictionary, callback) {
17     try {
18         navigator.webkitGetUserMedia(dictionary, callback, error);
19     } catch (e) {
20         testFailed('webkitGetUserMedia threw exception :' + e);
21         finishJSTest();
22     }
23 }
24
25 function error() {
26     testFailed('Stream generation failed.');
27     finishJSTest();
28 }
29
30 function statsHandler1(status)
31 {
32     testPassed("statsHandler1 was called");
33     shouldBeNonNull('status');
34     result = status.result();
35     shouldBe('result.length', '0');
36     shouldNotThrow('getUserMedia({audio:true, video:true}, gotStream)');
37 }
38
39 function gotStream(s) {
40     testPassed('Got a stream.');
41     stream = s;
42
43     pc.addStream(stream);
44     shouldNotThrow('pc.getStats(statsHandler2)');
45 }
46
47 function statsHandler2(status)
48 {
49     testPassed("statsHandler2 was called");
50     // Status must be a global variable to be used in test statements.
51     status_g = status;
52     result = status.result();
53     shouldBeGreaterThanOrEqual('result.length', '2');
54     // The "local" interface is deprecated. Keep test until interface deleted.
55     local = result[0].local;
56     timestamp = local.timestamp;
57     shouldBeGreaterThanOrEqual('timestamp', 'startTime');
58     shouldBeGreaterThanOrEqual('local.names().length', '1');
59     shouldBeGreaterThanOrEqual('local.names().indexOf("type")', '0');
60     shouldBe('local.stat("type")', '"audio"');
61     // Newer interface.
62     res = result[0];
63     shouldBeGreaterThanOrEqual('res.timestamp', 'startTime');
64     shouldBeNonNull('res.id');
65     shouldBeGreaterThanOrEqual('res.names().length', '1');
66     shouldBeGreaterThanOrEqual('res.names().indexOf("type")', '0');
67     shouldBe('res.stat("type")', '"audio"');
68     // Named getter: Can access results by their ID values.
69     shouldBeNonNull('status_g.namedItem(res.id)');
70     shouldBeNonNull('status_g[res.id]');
71     finishJSTest();
72 }
73
74 var startTime = new Date().getTime();
75 shouldNotThrow('pc = new webkitRTCPeerConnection(null)');
76 shouldNotThrow('pc.getStats(statsHandler1)');
77
78 window.jsTestIsAsync = true;
79 window.successfullyParsed = true;
80 </script>
81 <script src="../js/resources/js-test-post.js"></script>
82 </body>
83 </html>