summaryrefslogtreecommitdiff
path: root/javascript/videojs/test/unit/tech/tech-faker.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/videojs/test/unit/tech/tech-faker.js')
-rw-r--r--javascript/videojs/test/unit/tech/tech-faker.js183
1 files changed, 183 insertions, 0 deletions
diff --git a/javascript/videojs/test/unit/tech/tech-faker.js b/javascript/videojs/test/unit/tech/tech-faker.js
new file mode 100644
index 0000000..cb68fdb
--- /dev/null
+++ b/javascript/videojs/test/unit/tech/tech-faker.js
@@ -0,0 +1,183 @@
+// Fake a media playback tech controller so that player tests
+// can run without HTML5 which PhantomJS does not support.
+import Tech from '../../../src/js/tech/tech.js';
+import {createTimeRanges} from '../../../src/js/utils/time.js';
+/**
+ * @class
+ */
+class TechFaker extends Tech {
+
+ constructor(options, handleReady) {
+ super(options, handleReady);
+
+ this.featuresPlaybackRate = true;
+ this.defaultPlaybackRate_ = 1;
+ this.playbackRate_ = 1;
+ this.currentTime_ = 0;
+
+ if (this.options_ && this.options_.sourceset) {
+ this.fakeSourceset();
+ }
+ if (!options || options.autoReady !== false) {
+ this.triggerReady();
+ }
+ }
+
+ createEl() {
+ const el = super.createEl('div', {
+ className: 'vjs-tech'
+ });
+
+ return el;
+ }
+
+ // fake a poster attribute to mimic the video element
+ poster() {
+ return this.el().poster;
+ }
+ setPoster(val) {
+ this.el().poster = val;
+ this.trigger('posterchange');
+ }
+
+ setControls(val) {}
+
+ setVolume(value) {
+ this.volume_ = value;
+ }
+
+ setMuted() {}
+
+ setDefaultMuted() {}
+
+ setAutoplay(v) {
+ if (!v) {
+ this.options_.autoplay = false;
+ }
+
+ this.options_.autoplay = true;
+ }
+
+ defaultPlaybackRate(value) {
+ if (value !== undefined) {
+ this.defaultPlaybackRate_ = parseFloat(value);
+ }
+ return this.defaultPlaybackRate_;
+ }
+
+ setPlaybackRate(value) {
+ const last = this.playbackRate_;
+
+ this.playbackRate_ = parseFloat(value);
+
+ if (value !== last) {
+ this.trigger('ratechange');
+ }
+ }
+
+ playbackRate() {
+ return this.playbackRate_;
+ }
+
+ setCurrentTime(value) {
+ const last = this.currentTime_;
+
+ this.currentTime_ = parseFloat(value);
+
+ if (value !== last) {
+ this.trigger('timeupdate');
+ }
+ }
+
+ currentTime() {
+ return this.currentTime_;
+ }
+
+ seekable() {
+ return createTimeRanges(0, 0);
+ }
+ seeking() {
+ return false;
+ }
+ setScrubbing() {}
+ fakeSourceset() {
+ this.el_.src = this.options_.sourceset;
+ this.el_.setAttribute('src', this.options_.sourceset);
+ super.triggerSourceset(this.options_.sourceset);
+ }
+ src(src) {
+ if (typeof src !== 'undefined' && this.options_ && this.options_.sourceset) {
+ this.fakeSourceset();
+ }
+ return 'movie.mp4';
+ }
+ addSourceElement() {}
+ removeSourceElement() {}
+ load() {
+ }
+ currentSrc() {
+ return 'movie.mp4';
+ }
+ volume() {
+ return this.volume_ || 0;
+ }
+ muted() {
+ return false;
+ }
+ defaultMuted() {
+ return false;
+ }
+ autoplay() {
+ return this.options_.autoplay || false;
+ }
+ pause() {
+ return false;
+ }
+ paused() {
+ return true;
+ }
+ loop() {
+ return false;
+ }
+ play() {
+ this.trigger('play');
+ }
+ supportsFullScreen() {
+ return false;
+ }
+ buffered() {
+ return {};
+ }
+ duration() {
+ return {};
+ }
+ networkState() {
+ return 0;
+ }
+ readyState() {
+ return 0;
+ }
+ controls() {
+ return false;
+ }
+ ended() {
+ return false;
+ }
+ crossOrigin() {
+ return null;
+ }
+
+ // Support everything except for "video/unsupported-format"
+ static isSupported() {
+ return true;
+ }
+ static canPlayType(type) {
+ return (type !== 'video/unsupported-format' ? 'maybe' : '');
+ }
+ static canPlaySource(srcObj) {
+ return srcObj.type !== 'video/unsupported-format';
+ }
+}
+
+Tech.registerTech('TechFaker', TechFaker);
+export default TechFaker;