@enact/ui
Version:
A collection of simplified unstyled cross-platform UI components for Enact
168 lines (164 loc) • 5.75 kB
JavaScript
;
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);
});
});