Skip to content

Commit

Permalink
Clean and add error msg
Browse files Browse the repository at this point in the history
  • Loading branch information
Micajuine Ho committed Sep 3, 2020
1 parent 6187968 commit 2cb04f0
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 35 deletions.
32 changes: 12 additions & 20 deletions extensions/amp-analytics/0.1/events.js
Original file line number Diff line number Diff line change
Expand Up @@ -1489,7 +1489,7 @@ export class VisibilityTracker extends EventTracker {
// When `selector` is specified, we always use "ini-load" signal as
// a "ready" signal.
const readyPromiseWaitForSpec =
waitForSpec || (selector ? 'ini-load' : null);
waitForSpec || (selector ? 'ini-load' : 'none');
return visibilityManager.listenRoot(
visibilitySpec,
this.getReadyPromise(readyPromiseWaitForSpec),
Expand Down Expand Up @@ -1633,20 +1633,6 @@ export class VisibilityTracker extends EventTracker {
return 'onpagehide' in this.root.ampdoc.win;
}

/**
* Sets the default waitForSpec based upon if the element
* passed in is an AMP element or not.
* @param {string|undefined} waitForSpec
* @param {!Element} element
* @return {string}
*/
setDefaultWaitForElement_(waitForSpec, element) {
if (!waitForSpec) {
waitForSpec = isAmpElement(element) ? 'ini-load' : 'none';
}
return waitForSpec;
}

/**
* @param {string|undefined} waitForSpec
* @param {Element=} opt_element
Expand All @@ -1655,19 +1641,25 @@ export class VisibilityTracker extends EventTracker {
*/
getReadyPromise(waitForSpec, opt_element) {
if (opt_element) {
waitForSpec = this.setDefaultWaitForElement_(waitForSpec, opt_element);
if (!isAmpElement(opt_element)) {
userAssert(
!waitForSpec || waitForSpec == 'none',
'waitFor for non-AMP elements must be none or null. Found %s',
waitForSpec
);
} else {
waitForSpec = waitForSpec || 'ini-load';
}
}

if (!waitForSpec) {
if (!waitForSpec || waitForSpec == 'none') {
// Default case, waitFor selector is not defined, wait for nothing
return null;
}

const trackerAllowlist = getTrackerTypesForParentType('visible');
const isAllowedWaitFor = opt_element ? isAmpElement(opt_element) : true;
userAssert(
waitForSpec == 'none' ||
(trackerAllowlist[waitForSpec] !== undefined && isAllowedWaitFor),
trackerAllowlist[waitForSpec] !== undefined,
'waitFor value %s not supported',
waitForSpec
);
Expand Down
43 changes: 28 additions & 15 deletions extensions/amp-analytics/0.1/test/test-events.js
Original file line number Diff line number Diff line change
Expand Up @@ -2247,32 +2247,45 @@ describes.realWin('Events', {amp: 1}, (env) => {
});

describe('non AMP elements', () => {
it('with non AMP element and waitFor NONE', () => {
it('with non AMP element and waitFor NONE or null', () => {
const element = win.document.createElement('p');
expect(tracker.getReadyPromise('none', element)).to.be.null;
expect(tracker.getReadyPromise(null, element)).to.be.null;
});

it('error with non AMP element and waitFor not NONE', () => {
it('error with non AMP element and waitFor not NONE or null', () => {
const element = win.document.createElement('p');
expect(() => tracker.getReadyPromise('ini-load', element)).to.throw(
/waitFor value ini-load not supported/
);
});
});

describe('default waitFor with element', () => {
it('should set default waitFor for non AMP element', () => {
const element = win.document.createElement('p');
expect(tracker.setDefaultWaitForElement_(null, element)).to.equal(
'none'
/waitFor for non-AMP elements must be none or null. Found ini-load/
);
});

it('should set default waitFor for AMP element', () => {
it('should set default waitFor for AMP element', async () => {
const element = win.document.createElement('amp-list');
expect(tracker.setDefaultWaitForElement_(null, element)).to.equal(
'ini-load'
tracker.waitForTrackers_['render-start'] = root.getTracker(
'render-start',
SignalTracker
);
const signalTrackerMock = env.sandbox.mock(
tracker.waitForTrackers_['render-start']
);
const iniLoadTrackerMock = env.sandbox.mock(
tracker.waitForTrackers_['ini-load']
);

await tracker.getReadyPromise(null, element);
iniLoadTrackerMock
.expects('getElementSignal')
.withExactArgs('ini-load', element)
.returns(Promise.resolve())
.once();

await tracker.getReadyPromise('render-start', element);
signalTrackerMock
.expects('getElementSignal')
.withExactArgs('render-start')
.returns(Promise.resolve())
.once();
});
});
});
Expand Down

0 comments on commit 2cb04f0

Please sign in to comment.