| OLD | NEW |
| 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> | 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <script src="../../resources/js-test.js"></script> | 4 <script src="../../resources/js-test.js"></script> |
| 5 </head> | 5 </head> |
| 6 <body> | 6 <body> |
| 7 <script> | 7 <script> |
| 8 description("Test adding and removing tracks."); | 8 description("Test adding and removing tracks."); |
| 9 | 9 |
| 10 var stream1; | 10 var stream1; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 | 46 |
| 47 function shouldNotFire() { | 47 function shouldNotFire() { |
| 48 testFailed("\"addtrack\" or \"removetrack\" events should not fire as a resu
lt of local addTrack() or removeTrack() operations."); | 48 testFailed("\"addtrack\" or \"removetrack\" events should not fire as a resu
lt of local addTrack() or removeTrack() operations."); |
| 49 } | 49 } |
| 50 | 50 |
| 51 function gotStream2(s) { | 51 function gotStream2(s) { |
| 52 stream2 = s; | 52 stream2 = s; |
| 53 | 53 |
| 54 shouldBe('stream1.getAudioTracks().length', '1'); | 54 shouldBe('stream1.getAudioTracks().length', '1'); |
| 55 shouldBe('stream1.getVideoTracks().length', '1'); | 55 shouldBe('stream1.getVideoTracks().length', '1'); |
| 56 shouldBe('stream1.getTracks().length', '2'); |
| 56 | 57 |
| 57 shouldBe('stream2.getAudioTracks().length', '1'); | 58 shouldBe('stream2.getAudioTracks().length', '1'); |
| 58 shouldBe('stream2.getVideoTracks().length', '1'); | 59 shouldBe('stream2.getVideoTracks().length', '1'); |
| 60 shouldBe('stream2.getTracks().length', '2'); |
| 59 | 61 |
| 60 stream1.onaddtrack = shouldNotFire; | 62 stream1.onaddtrack = shouldNotFire; |
| 61 stream1.onremovetrack = shouldNotFire; | 63 stream1.onremovetrack = shouldNotFire; |
| 62 | 64 |
| 63 // remove a track of each kind | 65 // remove a track of each kind |
| 64 audioTrack = stream1.getAudioTracks()[0]; | 66 audioTrack = stream1.getAudioTracks()[0]; |
| 65 videoTrack = stream1.getVideoTracks()[0]; | 67 videoTrack = stream1.getVideoTracks()[0]; |
| 66 | 68 |
| 67 tryRemoveTrack(stream1, audioTrack); | 69 tryRemoveTrack(stream1, audioTrack); |
| 68 // verify removed tracks | 70 // verify removed tracks |
| 69 shouldBe('stream1.getAudioTracks().length', '0'); | 71 shouldBe('stream1.getAudioTracks().length', '0'); |
| 72 // verify that gettracks length is reduced by 1 |
| 73 shouldBe('stream1.getTracks().length', '1'); |
| 70 shouldBeNull('stream1.getTrackById(audioTrack.id)'); | 74 shouldBeNull('stream1.getTrackById(audioTrack.id)'); |
| 71 // remove a non-existent (already removed) track (should not throw) | 75 // remove a non-existent (already removed) track (should not throw) |
| 72 tryRemoveTrack(stream1, audioTrack); | 76 tryRemoveTrack(stream1, audioTrack); |
| 73 // (re-)add tracks | 77 // (re-)add tracks |
| 74 tryAddTrack(stream1, audioTrack); | 78 tryAddTrack(stream1, audioTrack); |
| 75 shouldBeNonNull('stream1.getTrackById(audioTrack.id)'); | 79 shouldBeNonNull('stream1.getTrackById(audioTrack.id)'); |
| 76 shouldBe('audioTrack', 'stream1.getAudioTracks()[0]'); | 80 shouldBe('audioTrack', 'stream1.getAudioTracks()[0]'); |
| 77 | 81 |
| 78 tryRemoveTrack(stream1, videoTrack); | 82 tryRemoveTrack(stream1, videoTrack); |
| 79 shouldBe('stream1.getVideoTracks().length', '0'); | 83 shouldBe('stream1.getVideoTracks().length', '0'); |
| 84 // verify that gettracks length is reduced by 1 |
| 85 shouldBe('stream1.getTracks().length', '1'); |
| 80 shouldBeNull('stream1.getTrackById(videoTrack.id)'); | 86 shouldBeNull('stream1.getTrackById(videoTrack.id)'); |
| 81 tryRemoveTrack(stream1, videoTrack); | 87 tryRemoveTrack(stream1, videoTrack); |
| 82 tryAddTrack(stream1, videoTrack); | 88 tryAddTrack(stream1, videoTrack); |
| 83 | 89 |
| 84 // verify added tracks | 90 // verify added tracks |
| 85 shouldBe('stream1.getAudioTracks().length', '1'); | 91 shouldBe('stream1.getAudioTracks().length', '1'); |
| 86 shouldBe('stream1.getVideoTracks().length', '1'); | 92 shouldBe('stream1.getVideoTracks().length', '1'); |
| 93 shouldBe('stream1.getTracks().length', '2'); |
| 87 | 94 |
| 88 // verify that kind and label is preserved | 95 // verify that kind and label is preserved |
| 89 shouldBe('stream1.getAudioTracks()[0].kind', 'audioTrack.kind'); | 96 shouldBe('stream1.getAudioTracks()[0].kind', 'audioTrack.kind'); |
| 90 shouldBe('stream1.getAudioTracks()[0].label', 'audioTrack.label'); | 97 shouldBe('stream1.getAudioTracks()[0].label', 'audioTrack.label'); |
| 91 shouldBe('stream1.getVideoTracks()[0].kind', 'videoTrack.kind'); | 98 shouldBe('stream1.getVideoTracks()[0].kind', 'videoTrack.kind'); |
| 92 shouldBe('stream1.getVideoTracks()[0].label', 'videoTrack.label'); | 99 shouldBe('stream1.getVideoTracks()[0].label', 'videoTrack.label'); |
| 93 | 100 |
| 94 // try adding stream1's own tracks | 101 // try adding stream1's own tracks |
| 95 tryAddTrack(stream1, stream1.getAudioTracks()[0]); | 102 tryAddTrack(stream1, stream1.getAudioTracks()[0]); |
| 96 tryAddTrack(stream1, stream1.getVideoTracks()[0]); | 103 tryAddTrack(stream1, stream1.getVideoTracks()[0]); |
| 97 | 104 |
| 98 // verify that nothing has changed | 105 // verify that nothing has changed |
| 99 shouldBe('stream1.getAudioTracks().length', '1'); | 106 shouldBe('stream1.getAudioTracks().length', '1'); |
| 100 shouldBe('stream1.getVideoTracks().length', '1'); | 107 shouldBe('stream1.getVideoTracks().length', '1'); |
| 108 shouldBe('stream1.getTracks().length', '2'); |
| 101 | 109 |
| 102 // add new tracks (from stream2) | 110 // add new tracks (from stream2) |
| 103 tryAddTrack(stream1, stream2.getAudioTracks()[0]); | 111 tryAddTrack(stream1, stream2.getAudioTracks()[0]); |
| 104 tryAddTrack(stream1, stream2.getVideoTracks()[0]); | 112 tryAddTrack(stream1, stream2.getVideoTracks()[0]); |
| 105 | 113 |
| 106 // verify added tracks | 114 // verify added tracks |
| 107 shouldBe('stream1.getAudioTracks().length', '2'); | 115 shouldBe('stream1.getAudioTracks().length', '2'); |
| 108 shouldBe('stream1.getVideoTracks().length', '2'); | 116 shouldBe('stream1.getVideoTracks().length', '2'); |
| 117 shouldBe('stream1.getTracks().length', '4'); |
| 109 | 118 |
| 110 // when all tracks have been removed, stream.ended should return true. | 119 // when all tracks have been removed, stream.ended should return true. |
| 111 tryRemoveTrack(stream2, stream2.getAudioTracks()[0]); | 120 tryRemoveTrack(stream2, stream2.getAudioTracks()[0]); |
| 112 tryRemoveTrack(stream2, stream2.getVideoTracks()[0]); | 121 tryRemoveTrack(stream2, stream2.getVideoTracks()[0]); |
| 113 shouldBeTrue('stream2.ended'); | 122 shouldBeTrue('stream2.ended'); |
| 114 | 123 |
| 115 stream1.stop(); | 124 stream1.stop(); |
| 116 | 125 |
| 117 shouldThrow('stream1.addTrack(audioTrack)'); | 126 shouldThrow('stream1.addTrack(audioTrack)'); |
| 118 shouldThrow('stream1.removeTrack(audioTrack)'); | 127 shouldThrow('stream1.removeTrack(audioTrack)'); |
| 119 | 128 |
| 120 setTimeout(finishJSTest, 0); | 129 setTimeout(finishJSTest, 0); |
| 121 } | 130 } |
| 122 | 131 |
| 123 function gotStream1(s) { | 132 function gotStream1(s) { |
| 124 stream1 = s; | 133 stream1 = s; |
| 125 getUserMedia({audio:true, video:true}, gotStream2); | 134 getUserMedia({audio:true, video:true}, gotStream2); |
| 126 } | 135 } |
| 127 | 136 |
| 128 getUserMedia({audio:true, video:true}, gotStream1); | 137 getUserMedia({audio:true, video:true}, gotStream1); |
| 129 | 138 |
| 130 window.jsTestIsAsync = true; | 139 window.jsTestIsAsync = true; |
| 131 window.successfullyParsed = true; | 140 window.successfullyParsed = true; |
| 132 </script> | 141 </script> |
| 133 </body> | 142 </body> |
| 134 </html> | 143 </html> |
| OLD | NEW |