UNPKG

@enact/ui

Version:

A collection of simplified unstyled cross-platform UI components for Enact

168 lines (164 loc) 5.75 kB
"use strict"; require("@testing-library/jest-dom"); var _react = require("@testing-library/react"); var _react2 = require("react"); var _Media = require("../Media"); var _jsxRuntime = require("react/jsx-runtime"); /* global HTMLMediaElement */ var mediaLoadStub; var mediaPlayStub; var mediaPauseStub; var customMediaEventsMap = { custom: 'onCustom' }; describe('Media', function () { beforeEach(function () { mediaLoadStub = jest.spyOn(HTMLMediaElement.prototype, 'load').mockImplementation(function () { return true; }); mediaPlayStub = jest.spyOn(HTMLMediaElement.prototype, 'play').mockImplementation(function () { return true; }); mediaPauseStub = jest.spyOn(HTMLMediaElement.prototype, 'pause').mockImplementation(function () { return true; }); }); afterEach(function () { mediaLoadStub.mockRestore(); mediaPlayStub.mockRestore(); mediaPauseStub.mockRestore(); }); test('should use the same node when changing the `source`', function () { var _render = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Media.Media, { mediaComponent: "video", "data-testid": "media-id", source: "abc.mp4" })), rerender = _render.rerender; var expected = _react.screen.getByTestId('media-id'); rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Media.Media, { mediaComponent: "video", "data-testid": "media-id", source: "def.mp4" })); var actual = _react.screen.getByTestId('media-id'); expect(actual).toBe(expected); }); test('should return the key when a node provided', function () { var expected = 'path/file.mp4'; var actual = (0, _Media.getKeyFromSource)(/*#__PURE__*/(0, _jsxRuntime.jsx)("source", { src: "path/file.mp4", type: "video/mp4" })); expect(actual).toEqual(expected); }); test('should fire `onCanPlay` when canplay event is fired', function () { var handleCanPlay = jest.fn(); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Media.Media, { mediaComponent: "video", "data-testid": "media-id", onCanPlay: handleCanPlay })); var video = _react.screen.getByTestId('media-id'); var canPlayEvent = (0, _react.createEvent)('canplay', video); (0, _react.fireEvent)(video, canPlayEvent); expect(handleCanPlay).toHaveBeenCalled(); }); test('should fire `onCustom` when custom event is fired', function () { var handleCustom = jest.fn(); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Media.Media, { mediaComponent: "video", "data-testid": "media-id", onCustom: handleCustom, customMediaEventsMap: customMediaEventsMap })); var video = _react.screen.getByTestId('media-id'); var customEvent = (0, _react.createEvent)('custom', video); (0, _react.fireEvent)(video, customEvent); expect(handleCustom).toHaveBeenCalled(); }); test('should call load', function () { var ref = /*#__PURE__*/(0, _react2.createRef)(); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Media.Media, { ref: ref, mediaComponent: "video" })); ref.current.load(); expect(mediaLoadStub).toHaveBeenCalled(); }); test('should call play', function () { var ref = /*#__PURE__*/(0, _react2.createRef)(); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Media.Media, { ref: ref, mediaComponent: "video" })); ref.current.play(); expect(mediaPlayStub).toHaveBeenCalled(); }); test('should call pause', function () { var ref = /*#__PURE__*/(0, _react2.createRef)(); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Media.Media, { ref: ref, mediaComponent: "video" })); ref.current.pause(); expect(mediaPauseStub).toHaveBeenCalled(); }); test('should return duration', function () { var ref = /*#__PURE__*/(0, _react2.createRef)(); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Media.Media, { ref: ref, mediaComponent: "video", "data-testid": "media-id" })); var video = _react.screen.getByTestId('media-id'); var expected = 10; // fake duration Object.defineProperty(video, 'duration', { writable: true, value: expected }); var actual = ref.current.duration; expect(actual).toEqual(expected); }); test('should return proportionPlayed', function () { var ref = /*#__PURE__*/(0, _react2.createRef)(); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Media.Media, { ref: ref, mediaComponent: "video", "data-testid": "media-id" })); var video = _react.screen.getByTestId('media-id'); // fake duration Object.defineProperty(video, 'duration', { writable: true, value: 10 }); ref.current.currentTime = 3; var expected = 0.3; var actual = ref.current.proportionPlayed; expect(actual).toEqual(expected); }); test('should be able to get and set the current time', function () { var ref = /*#__PURE__*/(0, _react2.createRef)(); var expected = 3; (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Media.Media, { ref: ref, mediaComponent: "video" })); ref.current.currentTime = expected; var actual = ref.current.currentTime; expect(actual).toEqual(expected); }); test('should be able to get and set the playback rate', function () { var ref = /*#__PURE__*/(0, _react2.createRef)(); var expected = 2; (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Media.Media, { ref: ref, mediaComponent: "video" })); ref.current.playbackRate = expected; var actual = ref.current.playbackRate; expect(actual).toEqual(expected); }); });