UNPKG

@enact/sandstone

Version:

Large-screen/TV support library for Enact, containing a variety of UI components.

235 lines (232 loc) 10.2 kB
"use strict"; require("@testing-library/jest-dom"); var _react = require("@testing-library/react"); var _Video = _interopRequireDefault(require("../Video")); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } /* global HTMLMediaElement */ describe('VideoPlayer.Video', function () { beforeEach(function () { jest.spyOn(HTMLMediaElement.prototype, 'load').mockImplementation(function () { return true; }); }); afterEach(function () { HTMLMediaElement.prototype.load.mockRestore(); }); describe('changing sources', function () { // Failures in these tests will often result in the following error. The error is misleading // but indicates the nodes aren't reused as expected. // TypeError: Cannot assign to read only property 'Symbol(impl)' of object '[object DOMImplementation]' test('should use the same node when changing the `source`', function () { var _render = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "abc.mp4" })), rerender = _render.rerender; var expected = _react.screen.getByTestId('video-id'); rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "def.mp4" })); var actual = _react.screen.getByTestId('video-id'); expect(actual).toBe(expected); }); test('should not render `preloadSource` when not present', function () { (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "abc.mp4" })); var actual = _react.screen.getByTestId('video-id').nextElementSibling; expect(actual).toBeNull(); }); test('should use same `source` when removing `source` and no `preload`', function () { var _render2 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "abc.mp4" })), rerender = _render2.rerender; var expected = _react.screen.getByTestId('video-id'); rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: undefined }) // eslint-disable-line no-undefined ); var actual = _react.screen.getByTestId('video-id'); expect(actual).toBe(expected); }); test('should use same `source` when adding `source` and no `preload`', function () { var _render3 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id" })), rerender = _render3.rerender; var expected = _react.screen.getByTestId('video-id'); rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "abc.mp4" })); var actual = _react.screen.getByTestId('video-id'); expect(actual).toBe(expected); }); test('should use the same node when adding `preloadSource`', function () { var _render4 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "abc.mp4" })), rerender = _render4.rerender; var expected = _react.screen.getByTestId('video-id'); rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "def.mp4", source: "abc.mp4" })); var actual = _react.screen.getByTestId('video-id'); expect(actual).toBe(expected); }); test('should render `preloadSource` when added', function () { var _render5 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "abc.mp4" })), rerender = _render5.rerender; rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "def.mp4", source: "abc.mp4" })); var actual = _react.screen.getByTestId('video-id').nextElementSibling; expect(actual).not.toBeNull(); expect(actual.tagName).toBe('VIDEO'); }); test('should use the same node when adding `preloadSource` the same as source', function () { var _render6 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "abc.mp4" })), rerender = _render6.rerender; var expected = _react.screen.getByTestId('video-id'); rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "abc.mp4", source: "abc.mp4" })); var actual = _react.screen.getByTestId('video-id'); expect(actual).toBe(expected); }); test('should use the same node when changing `preloadSource`', function () { var _render7 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "def.mp4", source: "abc.mp4" })), rerender = _render7.rerender; var expected = _react.screen.getByTestId('video-id').nextElementSibling; rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "ghi.mp4", source: "abc.mp4" })); var actual = _react.screen.getByTestId('video-id').nextElementSibling; expect(actual).toBe(expected); }); test('should swap nodes when swapping `source` and `preloadSource`', function () { var _render8 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "def.mp4", source: "abc.mp4" })), rerender = _render8.rerender; var source = _react.screen.getByTestId('video-id'); var preload = _react.screen.getByTestId('video-id').nextElementSibling; rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "abc.mp4", source: "def.mp4" })); var newSource = _react.screen.getByTestId('video-id'); var newPreload = _react.screen.getByTestId('video-id').nextElementSibling; expect(newSource).toBe(preload); expect(newPreload).toBe(source); }); test('should reuse preload node when moving `preloadSource` to `source`', function () { var _render9 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "def.mp4", source: "abc.mp4" })), rerender = _render9.rerender; var preload = _react.screen.getByTestId('video-id').nextElementSibling; rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: null, source: "def.mp4" })); var newSource = _react.screen.getByTestId('video-id'); var newPreload = _react.screen.getByTestId('video-id').nextElementSibling; expect(newSource).toBe(preload); expect(newPreload).toBeFalsy(); }); test('should reuse both nodes when both `preloadSource` and `source` change', function () { var _render10 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "def.mp4", source: "abc.mp4" })), rerender = _render10.rerender; var source = _react.screen.getByTestId('video-id'); var preload = _react.screen.getByTestId('video-id').nextElementSibling; rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "jkl.mp4", source: "ghi.mp4" })); var newSource = _react.screen.getByTestId('video-id'); var newPreload = _react.screen.getByTestId('video-id').nextElementSibling; expect(newSource).toBe(source); expect(newPreload).toBe(preload); }); test('should reuse source node over two changes', function () { var _render11 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "abc.mp4" })), rerender = _render11.rerender; var firstSource = _react.screen.getByTestId('video-id'); rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "def.mp4" })); var secondSource = _react.screen.getByTestId('video-id'); expect(secondSource).toBe(firstSource); rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "ghi.mp4" })); var thirdSource = _react.screen.getByTestId('video-id'); expect(thirdSource).toBe(firstSource); }); test('should swap nodes when preload does not exist initially', function () { var _render12 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", source: "abc.mp4" })), rerender = _render12.rerender; var source = _react.screen.getByTestId('video-id'); rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "def.mp4", source: "abc.mp4" })); var preload = _react.screen.getByTestId('video-id').nextElementSibling; rerender( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Video["default"], { "data-testid": "video-id", preloadSource: "abc.mp4", source: "def.mp4" })); var newSource = _react.screen.getByTestId('video-id'); var newPreload = _react.screen.getByTestId('video-id').nextElementSibling; expect(newSource).toBe(preload); expect(newPreload).toBe(source); }); }); });