Skip to content

Commit

Permalink
Remove simple alias for wait -> settled.
Browse files Browse the repository at this point in the history
The original goal was to simply "rebrand" `wait` as `settled`, but
`wait` had some legacy APIs that should not exist in `settled`.

This makes `wait` a completely separate and stand alone construct
and avoids erroring when the provided argument is not an object
(bringing it back in line with 0.6.x semantics).
  • Loading branch information
rwjblue committed Feb 10, 2018
1 parent 39e8194 commit a58fbd9
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 24 deletions.
25 changes: 2 additions & 23 deletions addon-test-support/@ember/test-helpers/settled.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,28 +162,9 @@ export function getSettledState() {
@returns {boolean} `true` if settled, `false` otherwise
*/
export function isSettled() {
let waitForTimers = true;
let waitForAJAX = true;
let waitForWaiters = true;

if (arguments[0] !== undefined) {
let options = arguments[0];
waitForTimers = 'waitForTimers' in options ? options.waitForTimers : true;
waitForAJAX = 'waitForAJAX' in options ? options.waitForAJAX : true;
waitForWaiters = 'waitForWaiters' in options ? options.waitForWaiters : true;
}

let { hasPendingTimers, hasRunLoop, hasPendingRequests, hasPendingWaiters } = getSettledState();

if (waitForTimers && (hasPendingTimers || hasRunLoop)) {
return false;
}

if (waitForAJAX && hasPendingRequests) {
return false;
}

if (waitForWaiters && hasPendingWaiters) {
if (hasPendingTimers || hasRunLoop || hasPendingRequests || hasPendingWaiters) {
return false;
}

Expand All @@ -198,7 +179,5 @@ export function isSettled() {
@returns {Promise<void>} resolves when settled
*/
export default function settled() {
let options = arguments[0];

return waitUntil(() => isSettled(options), { timeout: Infinity });
return waitUntil(isSettled, { timeout: Infinity });
}
41 changes: 40 additions & 1 deletion addon-test-support/ember-test-helpers/wait.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,46 @@
export {
default,
_setupAJAXHooks,
_setupPromiseListeners,
_teardownAJAXHooks,
_teardownPromiseListeners,
} from '@ember/test-helpers/settled';

import { waitUntil, getSettledState } from '@ember/test-helpers';

/**
Returns a promise that resolves when in a settled state (see `isSettled` for
a definition of "settled state").
@private
@deprecated
@returns {Promise<void>} resolves when settled
*/
export default function settled() {
let options = arguments[0];

if (typeof options !== 'object' || options === null) {
options = {};
}

return waitUntil(() => {
let waitForTimers = 'waitForTimers' in options ? options.waitForTimers : true;
let waitForAJAX = 'waitForAJAX' in options ? options.waitForAJAX : true;
let waitForWaiters = 'waitForWaiters' in options ? options.waitForWaiters : true;

let { hasPendingTimers, hasRunLoop, hasPendingRequests, hasPendingWaiters } = getSettledState();

if (waitForTimers && (hasPendingTimers || hasRunLoop)) {
return false;
}

if (waitForAJAX && hasPendingRequests) {
return false;
}

if (waitForWaiters && hasPendingWaiters) {
return false;
}

return true;
});
}
9 changes: 9 additions & 0 deletions tests/integration/settled-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,15 @@ module('settled real-world scenarios', function(hooks) {
assert.equal(this.element.textContent, 'async value');
});

test('does not error for various argument types', async function(assert) {
assert.expect(0); // no assertions, just shouldn't error

await settled(3000);
await settled(null);
await settled(undefined);
await settled();
});

test('it works when async exists in an event/action', async function(assert) {
this.owner.register('component:x-test-2', TestComponent2);

Expand Down
12 changes: 12 additions & 0 deletions tests/unit/wait-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { module, test } from 'qunit';
import wait from 'ember-test-helpers/wait';

module('wait: unit tests', function() {
test('issues a helpful assertion for invalid arguments', async function(assert) {
assert.expect(0); // no assertions, just shouldn't error

await wait(3000);
await wait(null);
await wait();
});
});

0 comments on commit a58fbd9

Please sign in to comment.