From 4504d9b790c1fdbaa2ab2545cf9c7de2a601f6c8 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Thu, 16 Jan 2020 03:15:52 +0000
Subject: [PATCH] add tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
src/accessibility/RovingTabIndex.js | 2 +-
test/accessibility/RovingTabIndex-test.js | 117 ++++++++++++++++++++++
2 files changed, 118 insertions(+), 1 deletion(-)
create mode 100644 test/accessibility/RovingTabIndex-test.js
diff --git a/src/accessibility/RovingTabIndex.js b/src/accessibility/RovingTabIndex.js
index ad2051f1f1..85aa133aa4 100644
--- a/src/accessibility/RovingTabIndex.js
+++ b/src/accessibility/RovingTabIndex.js
@@ -153,7 +153,7 @@ export const RovingTabIndexHomeEndHelper = ({children}) => {
switch (ev.key) {
case Key.HOME:
// move focus to first item
- setImmediate(() => context.state.refs[0].current.focus());
+ context.state.refs[0].current.focus();
break;
case Key.END:
// move focus to last item
diff --git a/test/accessibility/RovingTabIndex-test.js b/test/accessibility/RovingTabIndex-test.js
new file mode 100644
index 0000000000..2b55d1420c
--- /dev/null
+++ b/test/accessibility/RovingTabIndex-test.js
@@ -0,0 +1,117 @@
+/*
+Copyright 2020 The Matrix.org Foundation C.I.C.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+import React from "react";
+import Adapter from "enzyme-adapter-react-16";
+import { configure, mount } from "enzyme";
+
+import {
+ RovingTabIndexProvider,
+ RovingTabIndexWrapper,
+ useRovingTabIndex,
+} from "../../src/accessibility/RovingTabIndex";
+
+configure({ adapter: new Adapter() });
+
+const Button = (props) => {
+ const [onFocus, isActive, ref] = useRovingTabIndex();
+ return ;
+};
+
+const checkTabIndexes = (buttons, expectations) => {
+ expect(buttons.length).toBe(expectations.length);
+ for (let i = 0; i < buttons.length; i++) {
+ expect(buttons.at(i).prop("tabIndex")).toBe(expectations[i]);
+ }
+};
+
+// give the buttons keys for the fibre reconciler to not treat them all as the same
+const button1 = ;
+const button2 = ;
+const button3 = ;
+const button4 = ;
+
+describe("RovingTabIndex", () => {
+ it("RovingTabIndexProvider renders children as expected", () => {
+ const wrapper = mount(