@enact/sandstone
Version:
Large-screen/TV support library for Enact, containing a variety of UI components.
159 lines (157 loc) • 7.65 kB
JavaScript
;
require("@testing-library/jest-dom");
var _react = require("@testing-library/react");
var _Scroller = _interopRequireDefault(require("../Scroller"));
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var focus = function focus(elm) {
return _react.fireEvent.focus(elm);
};
var keyDownUp = function keyDownUp(keyCode) {
return function (elm) {
_react.fireEvent.keyDown(elm, {
keyCode: keyCode
});
return _react.fireEvent.keyUp(elm, {
keyCode: keyCode
});
};
};
var pressEnterKey = keyDownUp(14);
var pressDownKey = keyDownUp(40);
describe('Scroller', function () {
var contents;
beforeEach(function () {
contents = /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
children: ["Lorem ipsum dolor sit amet, consectetur adipiscing elit.", /*#__PURE__*/(0, _jsxRuntime.jsx)("br", {}), "Aenean id blandit nunc. Donec lacinia nisi vitae mi dictum, eget pulvinar nunc tincidunt. Integer vehicula tempus rutrum. Sed efficitur neque in arcu dignissim cursus."]
});
});
afterEach(function () {
contents = null;
});
describe('Scrollbar visibility', function () {
test('should render both horizontal and vertical scrollbars when \'horizontalScrollbar\' and \'verticalScrollbar\' are "visible"', function () {
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scroller["default"], {
horizontalScrollbar: "visible",
verticalScrollbar: "visible",
children: contents
}));
var verticalScrollbar = _react.screen.getByLabelText('scroll up or down with up down button');
var horizontalScrollbar = _react.screen.getByLabelText('scroll left or right with left right button');
expect(verticalScrollbar).toBeInTheDocument();
expect(horizontalScrollbar).toBeInTheDocument();
});
test('should render only vertical scrollbar when \'verticalScrollbar\' is "visible" and \'horizontalScrollbar\' is "hidden"', function () {
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scroller["default"], {
horizontalScrollbar: "hidden",
verticalScrollbar: "visible",
children: contents
}));
var verticalScrollbar = _react.screen.getByLabelText('scroll up or down with up down button');
var horizontalScrollbar = _react.screen.queryByLabelText('scroll left or right with left right button');
expect(verticalScrollbar).toBeInTheDocument();
expect(horizontalScrollbar).toBeNull();
});
test('should not render any scrollbar when \'horizontalScrollbar\' and \'verticalScrollbar\' are "hidden"', function () {
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scroller["default"], {
horizontalScrollbar: "hidden",
verticalScrollbar: "hidden",
children: contents
}));
var verticalScrollbar = _react.screen.queryByLabelText('scroll up or down with up down button');
var horizontalScrollbar = _react.screen.queryByLabelText('scroll left or right with left right button');
expect(verticalScrollbar).toBeNull();
expect(horizontalScrollbar).toBeNull();
});
});
describe('focusable Scrollbar', function () {
test('should have focuable body and thumb when \'focusableScrollbar\' is "byEnter"', function () {
var id = 'scroller';
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scroller["default"], {
"data-testid": id,
focusableScrollbar: "byEnter",
verticalScrollbar: "visible",
children: contents
}));
var scroller = _react.screen.getByTestId(id);
var scrollBody = scroller.children.item(0);
var verticalScrollbar = _react.screen.getByLabelText("scroll up or down with up down button press ok button to read text");
var expected = "spottable";
// dispatching key event to increase code coverage
focus(verticalScrollbar);
pressDownKey(verticalScrollbar);
pressEnterKey(verticalScrollbar);
expect(scrollBody).toHaveClass(expected);
expect(verticalScrollbar).toHaveClass(expected);
});
test('should have focuable scroll thumb when \'focusableScrollbar\' is true', function () {
var id = 'scroller';
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scroller["default"], {
"data-testid": id,
focusableScrollbar: true,
verticalScrollbar: "visible",
children: contents
}));
var scroller = _react.screen.getByTestId(id);
var scrollBody = scroller.children.item(0);
var verticalScrollbar = _react.screen.getByLabelText("scroll up or down with up down button");
var expected = "spottable";
expect(scrollBody).not.toHaveClass(expected);
expect(verticalScrollbar).toHaveClass(expected);
});
});
describe('Scrollbar accessibility', function () {
test('should set a custom "aria-label" to the scroll thumb in the horizontal scroll bar', function () {
var label = 'custom button aria label';
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scroller["default"], {
horizontalScrollbar: "visible",
horizontalScrollThumbAriaLabel: label,
verticalScrollbar: "visible",
children: contents
}));
var horizontalScrollbarLabel = _react.screen.getByLabelText(label);
var horizontalScrollbar = _react.screen.getByLabelText(label).parentElement.parentElement;
expect(horizontalScrollbarLabel).toBeInTheDocument();
expect(horizontalScrollbar).toHaveClass('horizontal');
});
test('should set a custom "aria-label" to the scroll thumb in the vertical scroll bar', function () {
var label = 'custom button aria label';
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scroller["default"], {
horizontalScrollbar: "visible",
verticalScrollThumbAriaLabel: label,
verticalScrollbar: "visible",
children: contents
}));
var verticalScrollbarLabel = _react.screen.getByLabelText(label);
var verticalScrollbar = _react.screen.getByLabelText(label).parentElement.parentElement;
expect(verticalScrollbarLabel).toBeInTheDocument();
expect(verticalScrollbar).toHaveClass('vertical');
});
test('should set a null string "aria-label" to the scroll thumb in the horizontal scroll bar', function () {
var label = '';
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scroller["default"], {
horizontalScrollbar: "visible",
horizontalScrollThumbAriaLabel: label,
verticalScrollbar: "visible",
children: contents
}));
var horizontalScrollbarLabel = _react.screen.getByLabelText(label);
var horizontalScrollbar = _react.screen.getByLabelText(label).parentElement.parentElement;
expect(horizontalScrollbarLabel).toBeInTheDocument();
expect(horizontalScrollbar).toHaveClass('horizontal');
});
test('should set a null string "aria-label" to the scroll thumb in the vertical scroll bar', function () {
var label = '';
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scroller["default"], {
horizontalScrollbar: "visible",
verticalScrollThumbAriaLabel: label,
verticalScrollbar: "visible",
children: contents
}));
var verticalScrollbarLabel = _react.screen.getByLabelText(label);
var verticalScrollbar = _react.screen.getByLabelText(label).parentElement.parentElement;
expect(verticalScrollbarLabel).toBeInTheDocument();
expect(verticalScrollbar).toHaveClass('vertical');
});
});
});