@enact/sandstone
Version:
Large-screen/TV support library for Enact, containing a variety of UI components.
235 lines (232 loc) • 10.2 kB
JavaScript
;
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);
});
});
});