optimizely-oui
Version:
Optimizely's Component Library.
203 lines (196 loc) • 9.06 kB
JavaScript
;
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var _react = _interopRequireWildcard(require("react"));
var _enzyme = require("enzyme");
var _accessibility = require("../accessibility");
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
var InputListComponent = (0, _accessibility.keyboardTracker)(function (props) {
var handleKeyDown = props.handleKeyDown,
currentFauxFocusIndex = props.currentFauxFocusIndex,
setItemCount = props.setItemCount;
(0, _react.useEffect)(function () {
setItemCount(3);
}, []);
return _react["default"].createElement("div", null, _react["default"].createElement("input", {
onKeyDown: handleKeyDown
}), _react["default"].createElement("ul", null, [1, 2, 3].map(function (item, idx) {
return _react["default"].createElement("li", {
className: currentFauxFocusIndex === idx ? "selected" : "",
key: idx
}, "Item ", item);
})));
});
var InputListComponentWithAdditionalItems = (0, _accessibility.keyboardTracker)(function (props) {
var handleKeyDown = props.handleKeyDown,
currentFauxFocusIndex = props.currentFauxFocusIndex,
setItemCount = props.setItemCount;
(0, _react.useEffect)(function () {
setItemCount(3);
}, []);
return _react["default"].createElement("div", null, _react["default"].createElement("input", {
onKeyDown: handleKeyDown
}), _react["default"].createElement("ul", null, _react["default"].createElement("li", {
className: currentFauxFocusIndex === 0 ? "selected" : "",
key: 0
}, "Additional Item 1"), _react["default"].createElement("li", {
className: currentFauxFocusIndex === 1 ? "selected" : "",
key: 1
}, "Additional Item 2")), _react["default"].createElement("ul", null, [1, 2, 3].map(function (item, idx) {
return _react["default"].createElement("li", {
className: currentFauxFocusIndex === idx + 2 ? "selected" : "",
key: idx + 2
}, "Item ", item);
})));
});
describe("utils/accessibility", function () {
describe("#getAssistiveTextFromColorClass", function () {
it("should throw error if non-existent class is provided", function () {
expect(function () {
(0, _accessibility.getAssistiveTextFromColorClass)("foo-bar");
}).toThrow();
});
it("should return a word if a correct color class is provided", function () {
expect((0, _accessibility.getAssistiveTextFromColorClass)("good-news")).toBe("Success");
});
});
describe("#keyboardTracker", function () {
var component;
describe("without additionalItems", function () {
beforeEach(function () {
component = (0, _enzyme.mount)(_react["default"].createElement(InputListComponent, null));
});
it("should default to index 0", function () {
var selected = component.find("li.selected");
expect(selected).toHaveLength(1);
expect(selected.at(0).text()).toBe("Item 1");
});
it("should track ArrowDown and ArrowUp keys", function () {
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
var selected = component.find("li.selected");
expect(selected).toHaveLength(1);
expect(selected.at(0).text()).toBe("Item 2");
});
it("should limit key tracking to the size of the list", function () {
// Simulate arrow key'ing all the way down, then all the way back up
var selected = component.find.bind(component, "li.selected");
expect(selected().first().text()).toBe("Item 1");
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
expect(selected().first().text()).toBe("Item 2");
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
expect(selected().first().text()).toBe("Item 3");
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
expect(selected().first().text()).toBe("Item 3");
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
expect(selected().first().text()).toBe("Item 2");
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
expect(selected().first().text()).toBe("Item 1");
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
expect(selected().first().text()).toBe("Item 1");
});
});
describe("with additional items", function () {
beforeEach(function () {
component = (0, _enzyme.mount)(_react["default"].createElement(InputListComponentWithAdditionalItems, {
additionalItems: 2
}));
});
it("should default to index 0", function () {
var selected = component.find("li.selected");
expect(selected).toHaveLength(1);
expect(selected.at(0).text()).toBe("Additional Item 1");
});
it("should track ArrowDown and ArrowUp keys", function () {
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
var selected = component.find("li.selected");
expect(selected).toHaveLength(1);
expect(selected.at(0).text()).toBe("Additional Item 2");
});
it("should limit key tracking to the size of the list", function () {
// Simulate arrow key'ing all the way down, then all the way back up
var selected = component.find.bind(component, "li.selected");
expect(selected().first().text()).toBe("Additional Item 1");
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
expect(selected().first().text()).toBe("Additional Item 2");
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
expect(selected().first().text()).toBe("Item 1");
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
expect(selected().first().text()).toBe("Item 2");
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
expect(selected().first().text()).toBe("Item 3");
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
component.find("input").simulate("keydown", {
key: "ArrowDown"
});
expect(selected().first().text()).toBe("Item 3");
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
expect(selected().first().text()).toBe("Item 2");
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
expect(selected().first().text()).toBe("Item 1");
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
expect(selected().first().text()).toBe("Additional Item 2");
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
expect(selected().first().text()).toBe("Additional Item 1");
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
component.find("input").simulate("keydown", {
key: "ArrowUp"
});
expect(selected().first().text()).toBe("Additional Item 1");
});
});
});
});