mirror of
https://github.com/videojs/video.js.git
synced 2024-12-02 09:11:54 +02:00
dd8c25e8d5
Instead of caching the last seek time at the player level, cache it in the Flash tech. The only place this value was used was in the progress controls when Flash was loaded, so this simplifies the logic in that component and pushes the hack down into a single location at least.
99 lines
3.3 KiB
JavaScript
99 lines
3.3 KiB
JavaScript
module('Flash');
|
|
|
|
var streamToPartsAndBack = function(url) {
|
|
var parts = vjs.Flash.streamToParts(url);
|
|
return vjs.Flash.streamFromParts(parts.connection, parts.stream);
|
|
};
|
|
|
|
test('test using both streamToParts and streamFromParts', function() {
|
|
ok('rtmp://myurl.com/&isthis' === streamToPartsAndBack('rtmp://myurl.com/isthis'));
|
|
ok('rtmp://myurl.com/&isthis' === streamToPartsAndBack('rtmp://myurl.com/&isthis'));
|
|
ok('rtmp://myurl.com/isthis/&andthis' === streamToPartsAndBack('rtmp://myurl.com/isthis/andthis'));
|
|
});
|
|
|
|
test('test streamToParts', function() {
|
|
var parts = vjs.Flash.streamToParts('http://myurl.com/streaming&/is/fun');
|
|
ok(parts.connection === 'http://myurl.com/streaming');
|
|
ok(parts.stream === '/is/fun');
|
|
|
|
parts = vjs.Flash.streamToParts('http://myurl.com/&streaming&/is/fun');
|
|
ok(parts.connection === 'http://myurl.com/');
|
|
ok(parts.stream === 'streaming&/is/fun');
|
|
|
|
parts = vjs.Flash.streamToParts('http://myurl.com/streaming/is/fun');
|
|
ok(parts.connection === 'http://myurl.com/streaming/is/');
|
|
ok(parts.stream === 'fun');
|
|
|
|
parts = vjs.Flash.streamToParts('whatisgoingonhere');
|
|
ok(parts.connection === 'whatisgoingonhere');
|
|
ok(parts.stream === '');
|
|
|
|
parts = vjs.Flash.streamToParts();
|
|
ok(parts.connection === '');
|
|
ok(parts.stream === '');
|
|
});
|
|
|
|
test('test isStreamingSrc', function() {
|
|
var isStreamingSrc = vjs.Flash.isStreamingSrc;
|
|
ok(isStreamingSrc('rtmp://streaming.is/fun'));
|
|
ok(isStreamingSrc('rtmps://streaming.is/fun'));
|
|
ok(isStreamingSrc('rtmpe://streaming.is/fun'));
|
|
ok(isStreamingSrc('rtmpt://streaming.is/fun'));
|
|
// test invalid protocols
|
|
ok(!isStreamingSrc('rtmp:streaming.is/fun'));
|
|
ok(!isStreamingSrc('rtmpz://streaming.is/fun'));
|
|
ok(!isStreamingSrc('http://streaming.is/fun'));
|
|
ok(!isStreamingSrc('https://streaming.is/fun'));
|
|
ok(!isStreamingSrc('file://streaming.is/fun'));
|
|
});
|
|
|
|
test('test canPlaySource', function() {
|
|
var canPlaySource = vjs.Flash.canPlaySource;
|
|
|
|
// supported
|
|
ok(canPlaySource({ type: 'video/mp4; codecs=avc1.42E01E,mp4a.40.2' }), 'codecs supported');
|
|
ok(canPlaySource({ type: 'video/mp4' }), 'video/mp4 supported');
|
|
ok(canPlaySource({ type: 'video/x-flv' }), 'video/x-flv supported');
|
|
ok(canPlaySource({ type: 'video/flv' }), 'video/flv supported');
|
|
ok(canPlaySource({ type: 'video/m4v' }), 'video/m4v supported');
|
|
ok(canPlaySource({ type: 'VIDEO/FLV' }), 'capitalized mime type');
|
|
|
|
// not supported
|
|
ok(!canPlaySource({ type: 'video/webm; codecs="vp8, vorbis"' }));
|
|
ok(!canPlaySource({ type: 'video/webm' }));
|
|
});
|
|
|
|
test('currentTime is the seek target during seeking', function() {
|
|
var noop = function() {},
|
|
seeking = false,
|
|
parentEl = document.createElement('div'),
|
|
tech = new vjs.Flash({
|
|
id: noop,
|
|
on: noop,
|
|
options_: {}
|
|
}, {
|
|
'parentEl': parentEl
|
|
}),
|
|
currentTime;
|
|
|
|
tech.el().vjs_setProperty = function(property, value) {
|
|
if (property === 'currentTime') {
|
|
currentTime = value;
|
|
}
|
|
};
|
|
tech.el().vjs_getProperty = function(name) {
|
|
if (name === 'currentTime') {
|
|
return currentTime;
|
|
} else if (name === 'seeking') {
|
|
return seeking;
|
|
}
|
|
};
|
|
|
|
currentTime = 3;
|
|
strictEqual(3, tech.currentTime(), 'currentTime is retreived from the SWF');
|
|
|
|
tech['setCurrentTime'](7);
|
|
seeking = true;
|
|
strictEqual(7, tech.currentTime(), 'during seeks the target time is returned');
|
|
});
|