/* istanbul ignore file */ require("jest-fetch-mock").enableMocks(); require("@testing-library/jest-dom"); // Mock HTMLMediaElement data and methods not implemented by jsdom. window.HTMLMediaElement.prototype._mock = { paused: true, duration: Number.NaN, _loaded: false, // Emulates the media file loading _load: function mediaInit(media) { media.dispatchEvent(new Event("loadedmetadata")); media.dispatchEvent(new Event("loadeddata")); media.dispatchEvent(new Event("canplaythrough")); }, // Reset to the initial state _resetMock: function resetMock(media) { media._mock = Object.assign({}, window.HTMLMediaElement.prototype._mock); }, _supportsTypes: ["video/mp4", "video/webm", "video/ogg", "audio/mp3", "audio/webm", "audio/ogg", "audio/wav"], }; // Get "paused" value, it is automatically set to true / false when we play / pause the media. Object.defineProperty(window.HTMLMediaElement.prototype, "paused", { get() { return this._mock.paused; }, configurable: true, }); // Get and set media duration Object.defineProperty(window.HTMLMediaElement.prototype, "duration", { get() { return this._mock.duration; }, set(value) { // Reset the mock state to initial (paused) when we set the duration. this._mock._resetMock(this); this._mock.duration = value; }, configurable: true, }); // Load the media file window.HTMLMediaElement.prototype.load = function loadMock() { if (!this._mock._loaded) { // emulate the media file load and metadata initialization this._mock._load(this); } this.dispatchEvent(new Event("load")); }; // Start the playback. window.HTMLMediaElement.prototype.play = function playMock() { if (!this._mock._loaded) { // emulate the media file load and metadata initialization this._mock._load(this); } this._mock.paused = false; this.dispatchEvent(new Event("play")); }; // Pause the playback window.HTMLMediaElement.prototype.pause = function pauseMock() { this._mock.paused = true; this.dispatchEvent(new Event("pause")); }; // Can play the media file window.HTMLMediaElement.prototype.canPlayType = function canPlayTypeMock(type) { return this._mock._supportsTypes.includes(type) ? "maybe" : ""; };