Tooltip can have different transition styles, which may be overridden by changing `transitionStyle`.
diff --git a/packages/elements/src/tornado-chart/__test__/tornado-item.test.js b/packages/elements/src/tornado-chart/__test__/tornado-chart-item.test.js
similarity index 100%
rename from packages/elements/src/tornado-chart/__test__/tornado-item.test.js
rename to packages/elements/src/tornado-chart/__test__/tornado-chart-item.test.js
diff --git a/packages/elements/src/tornado-chart/__test__/tornado-chart.test.js b/packages/elements/src/tornado-chart/__test__/tornado-chart.test.js
index 56e788efa1..b07c2d5be5 100644
--- a/packages/elements/src/tornado-chart/__test__/tornado-chart.test.js
+++ b/packages/elements/src/tornado-chart/__test__/tornado-chart.test.js
@@ -48,7 +48,7 @@ describe('tornado-chart/TornadoChart', () => {
const legend = element.shadowRoot.querySelector('[part="legend"]');
await oneEvent(element, 'resize');
- await elementUpdated();
+ await elementUpdated(element);
expect(legend.hasAttribute('vertical')).to.equal(true);
});
@@ -62,7 +62,7 @@ describe('tornado-chart/TornadoChart', () => {
);
await oneEvent(element, 'resize');
- await elementUpdated();
+ await elementUpdated(element);
const items = element.querySelectorAll('ef-tornado-item');
items.forEach((item) => {
diff --git a/packages/elements/src/tree-select/__test__/tree-select.interaction.test.js b/packages/elements/src/tree-select/__test__/tree-select.interaction.test.js
index 38d25f8b4a..02c9fa6ff4 100644
--- a/packages/elements/src/tree-select/__test__/tree-select.interaction.test.js
+++ b/packages/elements/src/tree-select/__test__/tree-select.interaction.test.js
@@ -153,7 +153,7 @@ describe('tree-select/Interaction', () => {
el.data = flatData;
el.opened = true;
changeItemSelection(el, flatSelection);
- await nextFrame();
+ await openedUpdated(el);
const elementToRemove = [...el.shadowRoot.querySelectorAll('ef-pill')].find(el => el.value === itemToRemove.value); // Austria
elementToRemove.dispatchEvent(new CustomEvent('clear', {
detail: {
diff --git a/packages/elements/src/tree-select/__test__/utils.js b/packages/elements/src/tree-select/__test__/utils.js
index 5c9823ee81..34860b84e0 100644
--- a/packages/elements/src/tree-select/__test__/utils.js
+++ b/packages/elements/src/tree-select/__test__/utils.js
@@ -3,7 +3,7 @@ import { elementUpdated, expect, nextFrame } from '@refinitiv-ui/test-helpers';
/**
* Cross browser function to wait while select element becomes opened/closed and resized
* @param {TreeSelect} el Tree select
- * @returns {void}
+ * @returns {Promise}
*/
export const openedUpdated = async (el) => {
await elementUpdated(el);
diff --git a/packages/test-helpers/__test__/test-helpers.test.js b/packages/test-helpers/__test__/test-helpers.test.js
index 32a2e6416b..bca94d8c70 100644
--- a/packages/test-helpers/__test__/test-helpers.test.js
+++ b/packages/test-helpers/__test__/test-helpers.test.js
@@ -1,4 +1,5 @@
-import { fixture, expect, keyboardEvent, oneEvent } from '../lib/test-helpers';
+import { fixture, expect, keyboardEvent, oneEvent, isNear, nextFrame, replaceWhitespace } from '../lib/test-helpers';
+import { createSandbox } from 'sinon';
describe('TestHelpersTest', () => {
@@ -48,4 +49,63 @@ describe('TestHelpersTest', () => {
});
});
+ describe('Test nextFrame helper', () => {
+ const sandbox = createSandbox();
+
+ beforeEach(async () => {
+ sandbox.spy(window, "requestAnimationFrame");
+ });
+
+ afterEach(() => {
+ sandbox.restore();
+ });
+
+ it('Calling nextFrame without param', async () => {
+ await nextFrame();
+ expect(window.requestAnimationFrame.calledOnce).to.equal(true, 'requestAnimationFrame should be called once');
+ });
+ it('Calling nextFrame with 1 as param', async () => {
+ await nextFrame(1);
+ expect(window.requestAnimationFrame.calledOnce).to.equal(true, 'requestAnimationFrame should be called once');
+ });
+ it('Calling nextFrame with 2 as param', async () => {
+ await nextFrame(2);
+ expect(window.requestAnimationFrame.calledTwice).to.equal(true, 'requestAnimationFrame should be called twice');
+ });
+ });
+
+ describe('Test isNear helper', () => {
+ it('Calling isNear with numbers & distance', async () => {
+ expect(isNear(10, 10, 0)).to.equal(true, 'isNear at boundary distance of 0 should be true');
+ expect(isNear(10, 10.1, 0)).to.equal(false, 'isNear beyond boundary distance of 0 should be false');
+ expect(isNear(10, 14.9, 5)).to.equal(true, 'isNear within boundary distance greater than 0 should be true');
+ expect(isNear(10, 15, 5)).to.equal(true, 'isNear at boundary distance greater than 0 should be true');
+ expect(isNear(10, 15.1, 5)).to.equal(false, 'isNear beyond boundary distance greater than 0 should be true');
+ });
+
+ it('Calling isNear with numbers, distance & inclusive as true', async () => {
+ expect(isNear(10, 10, 0, true)).to.equal(true, 'isNear at boundary distance of 0 should be true');
+ expect(isNear(10, 10.1, 0, true)).to.equal(false, 'isNear beyond boundary distance of 0 should be false');
+ expect(isNear(10, 14.9, 5, true)).to.equal(true, 'isNear within boundary distance greater than 0 should be true');
+ expect(isNear(10, 15, 5, true)).to.equal(true, 'isNear at boundary distance greater than 0 should be true');
+ expect(isNear(10, 15.1, 5, true)).to.equal(false, 'isNear beyond boundary distance greater than 0 should be true');
+ });
+
+ it('Calling isNear with numbers, distance & inclusive as false', async () => {
+ expect(isNear(10, 10, 0, false)).to.equal(true, 'isNear at boundary distance of 0 should be true');
+ expect(isNear(10, 10.1, 0, false)).to.equal(false, 'isNear beyond boundary distance of 0 should be false');
+ expect(isNear(10, 14.9, 5, false)).to.equal(true, 'isNear within boundary distance greater than 0 should be true');
+ expect(isNear(10, 15, 5, false)).to.equal(false, 'isNear at boundary distance greater than 0 should be true');
+ expect(isNear(10, 15.1, 5, false)).to.equal(false, 'isNear beyond boundary distance greater than 0 should be true');
+ });
+ });
+
+ describe('Test Method helper', () => {
+ it('Replace spacial whitespace to normal whitespace correctly', () => {
+ // Remove whitespace character U+202F from Chrome 111 and U+00A0 from Safari
+ const specialWhitespace = ' ';
+ expect(replaceWhitespace(specialWhitespace)).to.equal(' ', 'Remove whitespace should work correctly');
+ });
+ });
+
});
diff --git a/packages/test-helpers/src/test-helpers.ts b/packages/test-helpers/src/test-helpers.ts
index d13e39d967..3a643772ea 100644
--- a/packages/test-helpers/src/test-helpers.ts
+++ b/packages/test-helpers/src/test-helpers.ts
@@ -1,5 +1,4 @@
-/* istanbul ignore file */
-import { isIE } from '@open-wc/testing';
+import { isIE, nextFrame as _nextFrame } from '@open-wc/testing';
export {
html,
@@ -14,7 +13,6 @@ export {
defineCE,
aTimeout,
waitUntil,
- nextFrame,
litFixture,
litFixtureSync,
fixture,
@@ -38,23 +36,56 @@ export interface CustomKeyboardEvent extends CustomEvent {
* @returns {KeyboardEvent|CustomKeyboardEvent} keyboard event
*/
export const keyboardEvent = (type: string, init: KeyboardEventInit = {}): KeyboardEvent|CustomKeyboardEvent => {
+ /* istanbul ignore else */
if (!isIE()) {
return new KeyboardEvent(type, init);
}
+ else {
+ const event = new CustomEvent(type, {
+ detail: 0,
+ bubbles: true,
+ cancelable: true,
+ composed: true
+ }) as CustomKeyboardEvent;
+ event.key = init.key || '';
+ event.shiftKey = init.shiftKey || false;
+ event.altKey = init.altKey || false;
+ event.ctrlKey = init.ctrlKey || false;
+ event.metaKey = init.metaKey || false;
- const event = new CustomEvent(type, {
- detail: 0,
- bubbles: true,
- cancelable: true,
- composed: true
- }) as CustomKeyboardEvent;
- event.key = init.key || '';
- event.shiftKey = init.shiftKey || false;
- event.altKey = init.altKey || false;
- event.ctrlKey = init.ctrlKey || false;
- event.metaKey = init.metaKey || false;
+ return event;
+ }
+};
+
+/**
+ * Resolves after requestAnimationFrame.
+ * @param [frameCount = 1] number of animationFrame to be requested
+ *
+ * @returns {Promise} Promise that resolved after requestAnimationFrame
+ */
+export const nextFrame = async (frameCount = 1): Promise => {
+ for (let i = 0; i < frameCount; i++) {
+ await _nextFrame();
+ }
+};
- return event;
+/**
+ * Check value difference between 2 number.
+ * If it's within `distance` value, they are near.
+ * @param a 1 of the 2 numbers to be checked
+ * @param b 1 of the 2 numbers to be checked
+ * @param distance maximum value difference of `a` & `b` to be considered near, must equal or greater than 0
+ * @param [inclusive = true] `true`: value difference must be smaller or equal to `distance` , `false`: value difference must be smaller than `distance`
+ * If `distance` is 0, inclusive would be overwritten as `true`.
+ *
+ * @returns {boolean} equality result
+ */
+export const isNear = (a: number, b: number, distance: number, inclusive = true): boolean => {
+ if (distance === 0) {
+ inclusive = true;
+ }
+ const diff = Math.abs(a - b);
+ return inclusive ? diff <= distance : diff < distance;
};
/**
diff --git a/packages/translate/__test__/elf-translate-element.test.js b/packages/translate/__test__/elf-translate-element.test.js
index 338ca379e3..a4f23228ce 100644
--- a/packages/translate/__test__/elf-translate-element.test.js
+++ b/packages/translate/__test__/elf-translate-element.test.js
@@ -47,7 +47,7 @@ describe('Elf Translate Element Lang Test', () => {
expect(el.defaultEl.innerText).to.equal('Региональные настройки: ru');
el.lang = 'en';
await elementUpdated(el);
- await nextFrame(el); // need for IE11
+ await nextFrame(); // need for IE11
expect(el.defaultEl.innerText).to.equal('This is en locale');
});
@@ -56,11 +56,11 @@ describe('Elf Translate Element Lang Test', () => {
expect(el.numberEl.innerText).to.equal('Long number: 0');
el.number = 1000;
await elementUpdated(el);
- await nextFrame(el);
+ await nextFrame();
expect(el.numberEl.innerText).to.equal('Long number: 1,000');
el.number = 1000000;
await elementUpdated(el);
- await nextFrame(el);
+ await nextFrame();
expect(el.numberEl.innerText).to.equal('Long number: 1,000,000');
});
diff --git a/packages/translate/__test__/elf-translate.navigator.test.js b/packages/translate/__test__/elf-translate.navigator.test.js
index 42460baf66..f56bcc8f07 100644
--- a/packages/translate/__test__/elf-translate.navigator.test.js
+++ b/packages/translate/__test__/elf-translate.navigator.test.js
@@ -20,13 +20,13 @@ describe('Elf Translate Navigator Test', () => {
}
document.documentElement.lang = 'en-US';
- await nextFrame(el);
+ await nextFrame();
expect(el.defaultEl.innerText).to.equal('This is en-US locale', 'Document locale should take priority over navigator');
el.lang = 'en-GB';
await elementUpdated(el);
- await nextFrame(el); // need for IE11
+ await nextFrame(); // need for IE11
expect(el.defaultEl.innerText).to.equal('This is en locale', 'Element locale should take priority over document locale');
});
});