Skip to content

Commit 5aad468

Browse files
Merge pull request #1473 from emberjs/fix-test-failures
Get tests passing w/ Chrome's new selectionchange event behavior
2 parents ff604ae + ce8cdcb commit 5aad468

10 files changed

Lines changed: 505 additions & 221 deletions

File tree

.github/workflows/ci-build.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ jobs:
3737
cache: pnpm
3838
- name: Install Dependencies
3939
run: pnpm install
40+
- run: |
41+
google-chrome --version
42+
4043
- name: Build addon
4144
working-directory: addon
4245
run: pnpm build
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
export const isEdge = navigator.userAgent.indexOf('Edge') >= 0;
22

3-
// Unlike Chrome, Firefox emits `selectionchange` events.
3+
// Firefox emits `selectionchange` events.
44
export const isFirefox = navigator.userAgent.indexOf('Firefox') >= 0;
5+
6+
// Chrome emits `selectionchange` events.
7+
export const isChrome = navigator.userAgent.indexOf('Chrome') >= 0;

test-app/tests/unit/dom/blur-test.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
registerHook,
88
} from '@ember/test-helpers';
99
import { buildInstrumentedElement, insertElement } from '../../helpers/events';
10-
import { isEdge } from '../../helpers/browser-detect';
10+
import { isEdge, isChrome } from '../../helpers/browser-detect';
1111
import hasEmberVersion from '@ember/test-helpers/has-ember-version';
1212
import { createDescriptor } from 'dom-element-descriptors';
1313

@@ -18,6 +18,10 @@ if (isEdge) {
1818
blurSteps = ['focusout', 'blur'];
1919
}
2020

21+
if (isChrome) {
22+
focusSteps.push('selectionchange');
23+
}
24+
2125
module('DOM Helper: blur', function (hooks) {
2226
if (!hasEmberVersion(2, 4)) {
2327
return;
@@ -53,7 +57,11 @@ module('DOM Helper: blur', function (hooks) {
5357
});
5458

5559
test('it executes registered blur hooks', async function (assert) {
56-
assert.expect(13);
60+
if (isChrome) {
61+
assert.expect(15);
62+
} else {
63+
assert.expect(13);
64+
}
5765

5866
let element = document.createElement('input');
5967
insertElement(element);

test-app/tests/unit/dom/click-test.js

Lines changed: 85 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
insertElement,
77
} from '../../helpers/events';
88
import hasEmberVersion from '@ember/test-helpers/has-ember-version';
9+
import { isChrome } from '../../helpers/browser-detect';
910
import {
1011
registerHooks,
1112
unregisterHooks,
@@ -202,6 +203,17 @@ module('DOM Helper: click', function (hooks) {
202203
module('focusable element types', function () {
203204
let clickSteps = ['mousedown', 'focus', 'focusin', 'mouseup', 'click'];
204205

206+
if (isChrome) {
207+
clickSteps = [
208+
'mousedown',
209+
'focus',
210+
'focusin',
211+
'mouseup',
212+
'click',
213+
'selectionchange',
214+
];
215+
}
216+
205217
test('clicking a input via selector with context set', async function (assert) {
206218
element = buildInstrumentedElement('input');
207219

@@ -297,7 +309,17 @@ module('DOM Helper: click', function (hooks) {
297309

298310
await click(child);
299311

300-
assert.verifySteps(clickSteps);
312+
if (isChrome) {
313+
assert.verifySteps([
314+
'mousedown',
315+
'focus',
316+
'focusin',
317+
'mouseup',
318+
'click',
319+
]);
320+
} else {
321+
assert.verifySteps(clickSteps);
322+
}
301323
assert.strictEqual(
302324
document.activeElement,
303325
element,
@@ -334,15 +356,28 @@ module('DOM Helper: click', function (hooks) {
334356
await click(focusableElement);
335357
await click(element);
336358

337-
assert.verifySteps([
338-
'mousedown',
339-
'focus',
340-
'focusin',
341-
'mouseup',
342-
'click',
343-
'blur',
344-
'focusout',
345-
]);
359+
if (isChrome) {
360+
assert.verifySteps([
361+
'mousedown',
362+
'focus',
363+
'focusin',
364+
'mouseup',
365+
'click',
366+
'selectionchange',
367+
'blur',
368+
'focusout',
369+
]);
370+
} else {
371+
assert.verifySteps([
372+
'mousedown',
373+
'focus',
374+
'focusin',
375+
'mouseup',
376+
'click',
377+
'blur',
378+
'focusout',
379+
]);
380+
}
346381
});
347382

348383
test('clicking on non-focusable element inside active element does not trigger blur on active element', async function (assert) {
@@ -377,15 +412,28 @@ module('DOM Helper: click', function (hooks) {
377412
await click(focusableElement);
378413
await click(element);
379414

380-
assert.verifySteps([
381-
'mousedown',
382-
'focus',
383-
'focusin',
384-
'mouseup',
385-
'click',
386-
'blur',
387-
'focusout',
388-
]);
415+
if (isChrome) {
416+
assert.verifySteps([
417+
'mousedown',
418+
'focus',
419+
'focusin',
420+
'mouseup',
421+
'click',
422+
'selectionchange',
423+
'blur',
424+
'focusout',
425+
]);
426+
} else {
427+
assert.verifySteps([
428+
'mousedown',
429+
'focus',
430+
'focusin',
431+
'mouseup',
432+
'click',
433+
'blur',
434+
'focusout',
435+
]);
436+
}
389437
});
390438

391439
test('clicking on non-focusable element does not trigger blur on non-focusable active element', async function (assert) {
@@ -417,7 +465,24 @@ module('DOM Helper: click', function (hooks) {
417465
await click(focusableElement);
418466
await click(element);
419467

420-
assert.verifySteps(['mousedown', 'focus', 'focusin', 'mouseup', 'click']);
468+
if (isChrome) {
469+
assert.verifySteps([
470+
'mousedown',
471+
'focus',
472+
'focusin',
473+
'mouseup',
474+
'click',
475+
'selectionchange',
476+
]);
477+
} else {
478+
assert.verifySteps([
479+
'mousedown',
480+
'focus',
481+
'focusin',
482+
'mouseup',
483+
'click',
484+
]);
485+
}
421486

422487
element.removeEventListener('mousedown', preventDefault);
423488
await click(element);

0 commit comments

Comments
 (0)