Created
February 23, 2020 17:15
-
-
Save mdmower/d2252c6dc06d096687c56a6368a30c41 to your computer and use it in GitHub Desktop.
AMPHTML verbose unit tests - 2020-02-22
This file has been truncated, but you can view the full file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[14:00:08] Using gulpfile ~/source/amphtml/gulpfile.js | |
[14:00:08] Starting 'unit'... | |
[14:00:08] Run gulp help to see a list of all test flags. | |
[14:00:08] ⤷ Use --nohelp to silence these messages. | |
[14:00:08] ⤷ Use --local_changes to run unit tests from files commited to the local branch. | |
[14:00:08] ⤷ Use --testnames to see the names of all tests being run. | |
[14:00:08] Running tests against unminified code. | |
[14:00:08] --headless: Running tests in a headless Chrome window. | |
[14:00:08] --nobuild: Skipping build. | |
[14:00:08] --verbose: Enabling verbose mode. Expect lots of output! | |
[14:00:08] Started AMP Test Server at http://localhost:8081 | |
[14:00:08] Serving unminified JS | |
[14:00:08] Running gulp unit. Press Ctrl + C to cancel... | |
[14:00:09] Running tests locally... | |
START: | |
[14:00:11] Transforming tests with browserify... | |
.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................. | |
[14:01:47] Done. Running tests... | |
[14:01:59] HeadlessChrome 80.0.3987 (Linux 0.0.0): STARTED | |
● generates extensions metadata | |
● generates runtime offsets | |
● generates json offsets | |
● handles already existing amp-ad-metadata json | |
● generates image metadata | |
● adds the correct metadata for a story ad | |
WARN: '[SCRIPT] Type is invalid, must be `application/json`' | |
● warns user when invalid script is in document | |
● reorders head | |
● reorders head a4a | |
3p-frame | |
● add attributes | |
WARN: '[EXPERIMENTS] "%s" experiment %s for the domain "%s". See: https://amp.dev/documentation/guides-and-tutorials/learn/experimental', 'exp-a', 'enabled', 'localhost' | |
WARN: '[EXPERIMENTS] "%s" experiment %s for the domain "%s". See: https://amp.dev/documentation/guides-and-tutorials/learn/experimental', 'exp-b', 'enabled', 'localhost' | |
● should create an iframe | |
● should copy attributes to iframe | |
● should set feature policy for sync-xhr | |
● should set sandbox | |
● should set sandbox (direct call) | |
● should not set sandbox without feature detection | |
INFO: '[3p-frame] Iframe doesn't support %s', 'allow-top-navigation-by-user-activation' | |
● should not set sandbox with failing feature detection | |
● should pick the right bootstrap url for local-dev mode | |
● should pick the right bootstrap url for testing mode | |
● should pick the right bootstrap unique url (prod) | |
● should return a stable URL in getBootstrapBaseUrl | |
● should return a stable URL in getDefaultBootstrapBaseUrl | |
● should pick the right bootstrap url (custom) | |
● should return different values for different file names | |
● should pick the right bootstrap url (custom) | |
● should pick the right bootstrap url (custom) | |
● should pick default url if custom disabled | |
● should create frame with default url if custom disabled | |
● should prefetch bootstrap frame and JS | |
● should prefetch default bootstrap frame if custom disabled | |
● should make sub domains (unique) | |
● should make sub domains (Math) | |
● should make sub domains (crypto) | |
● should make sub domains (fallback) | |
● uses a unique name based on domain | |
serializeMessage | |
● should work without payload | |
● should work with payload | |
● should work with rtvVersion | |
deserializeMessage | |
● should deserialize valid message | |
● should deserialize valid message with rtv version | |
● should return null if the input not a string | |
● should return null if the input does not start with amp- | |
● should return null if the input is not a json | |
● should return null if failed to parse the input | |
3p messaging | |
● should receive messages | |
● should receive more messages | |
● should support unlisten | |
● should not stop on errors | |
#masterSelect | |
● should allow sharing between configured networks | |
iframe-messaging-client | |
iframe-messaging-client - host window set | |
getData | |
● should get data | |
● should not get data with wrong messageId | |
● should not get data with wrong response type | |
● should have callback called once | |
makeRequest | |
● should send the request via postMessage | |
requestOnce | |
● should unlisten after message received | |
registerCallback | |
● should invoke callback on receiving a message of expected response type | |
● should invoke multiple callbacks on receiving a message of expected response type | |
● should not invoke callback on receiving a message of irrelevant response type | |
● should not invoke callback on receiving a non-AMP message | |
● should not invoke callback on receiving a message not from host window | |
● should not invoke callback on receiving a message containing no sentinel | |
● should not invoke callback on receiving a message containing wrong sentinel | |
sendMessage | |
● should send postMessage to host window | |
iframe-messaging-client - host window not set | |
makeRequest | |
● should broadcast the request via postMessage | |
ERROR: 'The test "3p recaptcha.js should require a window.name" contains an "allowConsoleError" block that didn't result in a call to console.error.' | |
3p recaptcha.js | |
● should require a window.name | |
● should require a sitekey in the window.name dataObject | |
doesOriginDomainMatchIframeSrc() | |
● should require the origin | |
● should allow cache domains | |
● should allow canonical domains | |
● should allow punycode curls encoded domains | |
● should allow sha256 curls encoded domains | |
amp-ad-adplugg-impl | |
adplugg | |
● should create an AdPlugg ad tag | |
● should queue an anon function to register the event listeners | |
● should queue the run command to fill the tag | |
● implement the renderStart API | |
● implement the noContentAvailable API | |
amp-ad-csa-impl | |
inputs | |
● should create a csa container | |
ad request | |
● should request AFS | |
● should request AFSh | |
● should request AFSh (backfill) | |
callback | |
● when ads are ATF and CSA container > AMP container | |
● when ads are ATF and CSA container < AMP container | |
● when ads are BTF and CSA container > AMP container | |
● when ads are BTF and CSA container < AMP container | |
● when ads do not load | |
● when ads do not load but there is backfill | |
pubmine | |
● should set pubmine publisher config on global if loader in a master frame | |
● should add a command and not to load the script if loaded in a slave frame | |
amp-ad-ssp | |
● should add root div | |
● should call validateData() | |
● should call computeInMasterFrame() | |
● should call loadScript() | |
● should call finish work with null | |
● should call ssp.config() | |
● should call context.noContentAvailable() | |
● should call context.noContentAvailable() in case of invalid zone | |
● should call context.renderStart() | |
unruly | |
● should set unruly publisher config on global | |
● should call loadScript | |
● should throw if siteId is not provided | |
inabox-host:FrameOverlayManager | |
● should listen to window resize event | |
● should expand frame and execute callback | |
● should collapse frame and execute callback with remeasured box | |
● should collapse frame and execute callback with known box rect | |
WARN: '[inabox-host] Ignoring an inabox message. Likely the requester iframe has been removed. message.data=undefined' | |
WARN: '[inabox-host] Ignoring an inabox message. Likely the requester iframe has been removed. message.data=undefined' | |
inabox-host | |
● should process queue | |
● should handle no queue | |
INFO: '[inabox-host] Invalid %s %s', 'ampInaboxPendingMessages', 1234 | |
● should handle non-array queue | |
INFO: '[inabox-host] Skip a 2nd attempt of initializing AMP inabox host.' | |
● should handle duplicate executions | |
inabox-host:messaging | |
processMessage | |
● should process valid message | |
● should process valid message 2 | |
● should ignore non-string message | |
● should ignore message without sentinel | |
● should ignore message does not start with amp- | |
INFO: '[InaboxMessagingHost] Ignored message from untrusted iframe:', Object{source: Window{parent: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ..., __AMP_TEST_IFRAME: ..., testLocation: ..., eventListeners: ..., addEventListener: ..., removeEventListener: ...}, opener: null, top: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ..., io: ..., karma: ..., ampInaboxPositionObserver: ..., ampInaboxFrameOverlayManager: ...}, length: 0, frames: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ...}, closed: false, location: Location{href: ..., ancestorOrigins: ..., origin: ..., protocol: ..., host: ..., hostname: ..., port: ..., pathname: ..., search: ..., hash: ..., assign: ..., reload: ..., toString: ..., replace: ...}, self: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ...}, window: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ...}, document: <html><head></head><body></body></html>, name: '', customElements: CustomElementRegistry{}, history: History{}, locationbar: BarProp{}, menubar: BarProp{}, personalbar: BarProp{}, scrollbars: BarProp{}, statusbar: BarProp{}, toolbar: BarProp{}, status: '', frameElement: <iframe srcdoc="<h1>Fake iframe</h1>" data-amp-allowed="send-positions,full-overlay-frame,cancel-full-overlay-frame"></iframe>, navigator: Navigator{}, origin: 'http://localhost:9876', external: External{}, screen: Screen{}, innerWidth: 300, innerHeight: 150, scrollX: 0, pageXOffset: 0, scrollY: 0, pageYOffset: 0, visualViewport: VisualViewport{}, screenX: 0, screenY: 0, outerWidth: 800, outerHeight: 600, devicePixelRatio: 1, clientInformation: Navigator{}, screenLeft: 0, screenTop: 0, defaultStatus: '', defaultstatus: '', styleMedia: StyleMedia{}, onsearch: null, onwebkitanimationend: null, onwebkitanimationiteration: null, onwebkitanimationstart: null, onwebkittransitionend: null, isSecureContext: true, onabort: null, onblur: null, oncancel: null, oncanplay: null, oncanplaythrough: null, onchange: null, onclick: null, onclose: null, oncontextmenu: null, oncuechange: null, ondblclick: null, ondrag: null, ondragend: null, ondragenter: null, ondragleave: null, ondragover: null, ondragstart: null, ondrop: null, ondurationchange: null, onemptied: null, onended: null, onerror: null, onfocus: null, onformdata: null, oninput: null, oninvalid: null, onkeydown: null, onkeypress: null, onkeyup: null, onload: null, onloadeddata: null, onloadedmetadata: null, onloadstart: null, onmousedown: null, onmouseenter: null, onmouseleave: null, onmousemove: null, onmouseout: null, onmouseover: null, onmouseup: null, onmousewheel: null, onpause: null, onplay: null, onplaying: null, onprogress: null, onratechange: null, onreset: null, onresize: null, onscroll: null, onseeked: null, onseeking: null, onselect: null, onstalled: null, onsubmit: null, onsuspend: null, ontimeupdate: null, ontoggle: null, onvolumechange: null, onwaiting: null, onwheel: null, onauxclick: null, ongotpointercapture: null, onlostpointercapture: null, onpointerdown: null, onpointermove: null, onpointerup: null, onpointercancel: null, onpointerover: null, onpointerout: null, onpointerenter: null, onpointerleave: null, onselectstart: null, onselectionchange: null, onanimationend: null, onanimationiteration: null, onanimationstart: null, ontransitionend: null, onafterprint: null, onbeforeprint: null, onbeforeunload: null, onhashchange: null, onlanguagechange: null, onmessage: null, onmessageerror: null, onoffline: null, ononline: null, onpagehide: null, onpageshow: null, onpopstate: null, onrejectionhandled: null, onstorage: null, onunhandledrejection: null, onunload: null, performance: Performance{}, stop: function stop() { ... }, open: function open() { ... }, alert: function alert() { ... }, confirm: function confirm() { ... }, prompt: function prompt() { ... }, print: function print() { ... }, queueMicrotask: function queueMicrotask() { ... }, requestAnimationFrame: function requestAnimationFrame() { ... }, cancelAnimationFrame: function cancelAnimationFrame() { ... }, captureEvents: function captureEvents() { ... }, releaseEvents: function releaseEvents() { ... }, requestIdleCallback: function requestIdleCallback() { ... }, cancelIdleCallback: function cancelIdleCallback() { ... }, getComputedStyle: function getComputedStyle() { ... }, matchMedia: function matchMedia() { ... }, moveTo: function moveTo() { ... }, moveBy: function moveBy() { ... }, resizeTo: function resizeTo() { ... }, resizeBy: function resizeBy() { ... }, scroll: function scroll() { ... }, scrollTo: function scrollTo() { ... }, scrollBy: function scrollBy() { ... }, getSelection: function getSelection() { ... }, find: function find() { ... }, webkitRequestAnimationFrame: function webkitRequestAnimationFrame() { ... }, webkitCancelAnimationFrame: function webkitCancelAnimationFrame() { ... }, fetch: function fetch() { ... }, btoa: function btoa() { ... }, atob: function atob() { ... }, setTimeout: function setTimeout() { ... }, clearTimeout: function clearTimeout() { ... }, setInterval: function setInterval() { ... }, clearInterval: function clearInterval() { ... }, createImageBitmap: function createImageBitmap() { ... }, close: function close() { ... }, focus: function focus() { ... }, blur: function blur() { ... }, postMessage: function () { ... }, onappinstalled: null, onbeforeinstallprompt: null, crypto: Crypto{}, indexedDB: IDBFactory{}, webkitStorageInfo: DeprecatedStorageInfo{}, sessionStorage: Storage{}, localStorage: Storage{amp-experiment-toggles: ...}, onpointerrawupdate: null, speechSynthesis: SpeechSynthesis{}, webkitRequestFileSystem: function () { ... }, webkitResolveLocalFileSystemURL: function () { ... }, openDatabase: function () { ... }, applicationCache: ApplicationCache{}, caches: CacheStorage{}, ondevicemotion: null, ondeviceorientation: null, ondeviceorientationabsolute: null}, origin: 'www.example.com', data: 'amp-{"sentinel":"0-123","type":"send-positions"}'} | |
● should ignore message from untrusted iframe | |
INFO: '[InaboxMessagingHost] Ignored message from untrusted iframe:', Object{source: null, origin: 'www.example.com', data: 'amp-{"sentinel":"0-123","type":"send-positions"}'} | |
● should tolerate message with null source | |
● should process messages with allowed actions | |
INFO: '[InaboxMessagingHost] Ignored non-whitelisted message type:', Object{source: Window{parent: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ..., __AMP_TEST_IFRAME: ..., testLocation: ..., eventListeners: ..., addEventListener: ..., removeEventListener: ...}, opener: null, top: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ..., io: ..., karma: ..., ampInaboxPositionObserver: ..., ampInaboxFrameOverlayManager: ...}, length: 0, frames: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ...}, closed: false, location: Location{href: ..., ancestorOrigins: ..., origin: ..., protocol: ..., host: ..., hostname: ..., port: ..., pathname: ..., search: ..., hash: ..., assign: ..., reload: ..., toString: ..., replace: ...}, self: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ...}, window: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ...}, document: <html><head></head><body></body></html>, name: '', customElements: CustomElementRegistry{}, history: History{}, locationbar: BarProp{}, menubar: BarProp{}, personalbar: BarProp{}, scrollbars: BarProp{}, statusbar: BarProp{}, toolbar: BarProp{}, status: '', frameElement: <iframe srcdoc="<h1>Fake iframe</h1>" data-amp-allowed="send-positions"></iframe>, navigator: Navigator{}, origin: 'http://localhost:9876', external: External{}, screen: Screen{}, innerWidth: 300, innerHeight: 150, scrollX: 0, pageXOffset: 0, scrollY: 0, pageYOffset: 0, visualViewport: VisualViewport{}, screenX: 0, screenY: 0, outerWidth: 800, outerHeight: 600, devicePixelRatio: 1, clientInformation: Navigator{}, screenLeft: 0, screenTop: 0, defaultStatus: '', defaultstatus: '', styleMedia: StyleMedia{}, onsearch: null, onwebkitanimationend: null, onwebkitanimationiteration: null, onwebkitanimationstart: null, onwebkittransitionend: null, isSecureContext: true, onabort: null, onblur: null, oncancel: null, oncanplay: null, oncanplaythrough: null, onchange: null, onclick: null, onclose: null, oncontextmenu: null, oncuechange: null, ondblclick: null, ondrag: null, ondragend: null, ondragenter: null, ondragleave: null, ondragover: null, ondragstart: null, ondrop: null, ondurationchange: null, onemptied: null, onended: null, onerror: null, onfocus: null, onformdata: null, oninput: null, oninvalid: null, onkeydown: null, onkeypress: null, onkeyup: null, onload: null, onloadeddata: null, onloadedmetadata: null, onloadstart: null, onmousedown: null, onmouseenter: null, onmouseleave: null, onmousemove: null, onmouseout: null, onmouseover: null, onmouseup: null, onmousewheel: null, onpause: null, onplay: null, onplaying: null, onprogress: null, onratechange: null, onreset: null, onresize: null, onscroll: null, onseeked: null, onseeking: null, onselect: null, onstalled: null, onsubmit: null, onsuspend: null, ontimeupdate: null, ontoggle: null, onvolumechange: null, onwaiting: null, onwheel: null, onauxclick: null, ongotpointercapture: null, onlostpointercapture: null, onpointerdown: null, onpointermove: null, onpointerup: null, onpointercancel: null, onpointerover: null, onpointerout: null, onpointerenter: null, onpointerleave: null, onselectstart: null, onselectionchange: null, onanimationend: null, onanimationiteration: null, onanimationstart: null, ontransitionend: null, onafterprint: null, onbeforeprint: null, onbeforeunload: null, onhashchange: null, onlanguagechange: null, onmessage: null, onmessageerror: null, onoffline: null, ononline: null, onpagehide: null, onpageshow: null, onpopstate: null, onrejectionhandled: null, onstorage: null, onunhandledrejection: null, onunload: null, performance: Performance{}, stop: function stop() { ... }, open: function open() { ... }, alert: function alert() { ... }, confirm: function confirm() { ... }, prompt: function prompt() { ... }, print: function print() { ... }, queueMicrotask: function queueMicrotask() { ... }, requestAnimationFrame: function requestAnimationFrame() { ... }, cancelAnimationFrame: function cancelAnimationFrame() { ... }, captureEvents: function captureEvents() { ... }, releaseEvents: function releaseEvents() { ... }, requestIdleCallback: function requestIdleCallback() { ... }, cancelIdleCallback: function cancelIdleCallback() { ... }, getComputedStyle: function getComputedStyle() { ... }, matchMedia: function matchMedia() { ... }, moveTo: function moveTo() { ... }, moveBy: function moveBy() { ... }, resizeTo: function resizeTo() { ... }, resizeBy: function resizeBy() { ... }, scroll: function scroll() { ... }, scrollTo: function scrollTo() { ... }, scrollBy: function scrollBy() { ... }, getSelection: function getSelection() { ... }, find: function find() { ... }, webkitRequestAnimationFrame: function webkitRequestAnimationFrame() { ... }, webkitCancelAnimationFrame: function webkitCancelAnimationFrame() { ... }, fetch: function fetch() { ... }, btoa: function btoa() { ... }, atob: function atob() { ... }, setTimeout: function setTimeout() { ... }, clearTimeout: function clearTimeout() { ... }, setInterval: function setInterval() { ... }, clearInterval: function clearInterval() { ... }, createImageBitmap: function createImageBitmap() { ... }, close: function close() { ... }, focus: function focus() { ... }, blur: function blur() { ... }, postMessage: function () { ... }, onappinstalled: null, onbeforeinstallprompt: null, crypto: Crypto{}, indexedDB: IDBFactory{}, webkitStorageInfo: DeprecatedStorageInfo{}, sessionStorage: Storage{}, localStorage: Storage{amp-experiment-toggles: ...}, onpointerrawupdate: null, speechSynthesis: SpeechSynthesis{}, webkitRequestFileSystem: function () { ... }, webkitResolveLocalFileSystemURL: function () { ... }, openDatabase: function () { ... }, applicationCache: ApplicationCache{}, caches: CacheStorage{}, ondevicemotion: null, ondeviceorientation: null, ondeviceorientationabsolute: null}, origin: 'www.example.com', data: 'amp-{"sentinel":"0-124","type":"full-overlay-frame"}'} | |
● should ignore messages with disallowed actions | |
● should allow read-only messages from frames with no whitelist | |
INFO: '[InaboxMessagingHost] Ignored non-whitelisted message type:', Object{source: Window{parent: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ..., __AMP_TEST_IFRAME: ..., testLocation: ..., eventListeners: ..., addEventListener: ..., removeEventListener: ...}, opener: null, top: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ..., io: ..., karma: ..., ampInaboxPositionObserver: ..., ampInaboxFrameOverlayManager: ...}, length: 0, frames: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ...}, closed: false, location: Location{href: ..., ancestorOrigins: ..., origin: ..., protocol: ..., host: ..., hostname: ..., port: ..., pathname: ..., search: ..., hash: ..., assign: ..., reload: ..., toString: ..., replace: ...}, self: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ...}, window: Window{parent: ..., opener: ..., top: ..., length: ..., frames: ..., closed: ..., location: ..., self: ..., window: ..., document: ..., name: ..., customElements: ..., history: ..., locationbar: ..., menubar: ..., personalbar: ..., scrollbars: ..., statusbar: ..., toolbar: ..., status: ..., frameElement: ..., navigator: ..., origin: ..., external: ..., screen: ..., innerWidth: ..., innerHeight: ..., scrollX: ..., pageXOffset: ..., scrollY: ..., pageYOffset: ..., visualViewport: ..., screenX: ..., screenY: ..., outerWidth: ..., outerHeight: ..., devicePixelRatio: ..., clientInformation: ..., screenLeft: ..., screenTop: ..., defaultStatus: ..., defaultstatus: ..., styleMedia: ..., onsearch: ..., onwebkitanimationend: ..., onwebkitanimationiteration: ..., onwebkitanimationstart: ..., onwebkittransitionend: ..., isSecureContext: ..., onabort: ..., onblur: ..., oncancel: ..., oncanplay: ..., oncanplaythrough: ..., onchange: ..., onclick: ..., onclose: ..., oncontextmenu: ..., oncuechange: ..., ondblclick: ..., ondrag: ..., ondragend: ..., ondragenter: ..., ondragleave: ..., ondragover: ..., ondragstart: ..., ondrop: ..., ondurationchange: ..., onemptied: ..., onended: ..., onerror: ..., onfocus: ..., onformdata: ..., oninput: ..., oninvalid: ..., onkeydown: ..., onkeypress: ..., onkeyup: ..., onload: ..., onloadeddata: ..., onloadedmetadata: ..., onloadstart: ..., onmousedown: ..., onmouseenter: ..., onmouseleave: ..., onmousemove: ..., onmouseout: ..., onmouseover: ..., onmouseup: ..., onmousewheel: ..., onpause: ..., onplay: ..., onplaying: ..., onprogress: ..., onratechange: ..., onreset: ..., onresize: ..., onscroll: ..., onseeked: ..., onseeking: ..., onselect: ..., onstalled: ..., onsubmit: ..., onsuspend: ..., ontimeupdate: ..., ontoggle: ..., onvolumechange: ..., onwaiting: ..., onwheel: ..., onauxclick: ..., ongotpointercapture: ..., onlostpointercapture: ..., onpointerdown: ..., onpointermove: ..., onpointerup: ..., onpointercancel: ..., onpointerover: ..., onpointerout: ..., onpointerenter: ..., onpointerleave: ..., onselectstart: ..., onselectionchange: ..., onanimationend: ..., onanimationiteration: ..., onanimationstart: ..., ontransitionend: ..., onafterprint: ..., onbeforeprint: ..., onbeforeunload: ..., onhashchange: ..., onlanguagechange: ..., onmessage: ..., onmessageerror: ..., onoffline: ..., ononline: ..., onpagehide: ..., onpageshow: ..., onpopstate: ..., onrejectionhandled: ..., onstorage: ..., onunhandledrejection: ..., onunload: ..., performance: ..., stop: ..., open: ..., alert: ..., confirm: ..., prompt: ..., print: ..., queueMicrotask: ..., requestAnimationFrame: ..., cancelAnimationFrame: ..., captureEvents: ..., releaseEvents: ..., requestIdleCallback: ..., cancelIdleCallback: ..., getComputedStyle: ..., matchMedia: ..., moveTo: ..., moveBy: ..., resizeTo: ..., resizeBy: ..., scroll: ..., scrollTo: ..., scrollBy: ..., getSelection: ..., find: ..., webkitRequestAnimationFrame: ..., webkitCancelAnimationFrame: ..., fetch: ..., btoa: ..., atob: ..., setTimeout: ..., clearTimeout: ..., setInterval: ..., clearInterval: ..., createImageBitmap: ..., close: ..., focus: ..., blur: ..., postMessage: ..., onappinstalled: ..., onbeforeinstallprompt: ..., crypto: ..., indexedDB: ..., webkitStorageInfo: ..., sessionStorage: ..., localStorage: ..., onpointerrawupdate: ..., speechSynthesis: ..., webkitRequestFileSystem: ..., webkitResolveLocalFileSystemURL: ..., openDatabase: ..., applicationCache: ..., caches: ..., ondevicemotion: ..., ondeviceorientation: ..., ondeviceorientationabsolute: ...}, document: <html><head></head><body></body></html>, name: '', customElements: CustomElementRegistry{}, history: History{}, locationbar: BarProp{}, menubar: BarProp{}, personalbar: BarProp{}, scrollbars: BarProp{}, statusbar: BarProp{}, toolbar: BarProp{}, status: '', frameElement: <iframe srcdoc="<h1>Fake iframe</h1>"></iframe>, navigator: Navigator{}, origin: 'http://localhost:9876', external: External{}, screen: Screen{}, innerWidth: 300, innerHeight: 150, scrollX: 0, pageXOffset: 0, scrollY: 0, pageYOffset: 0, visualViewport: VisualViewport{}, screenX: 0, screenY: 0, outerWidth: 800, outerHeight: 600, devicePixelRatio: 1, clientInformation: Navigator{}, screenLeft: 0, screenTop: 0, defaultStatus: '', defaultstatus: '', styleMedia: StyleMedia{}, onsearch: null, onwebkitanimationend: null, onwebkitanimationiteration: null, onwebkitanimationstart: null, onwebkittransitionend: null, isSecureContext: true, onabort: null, onblur: null, oncancel: null, oncanplay: null, oncanplaythrough: null, onchange: null, onclick: null, onclose: null, oncontextmenu: null, oncuechange: null, ondblclick: null, ondrag: null, ondragend: null, ondragenter: null, ondragleave: null, ondragover: null, ondragstart: null, ondrop: null, ondurationchange: null, onemptied: null, onended: null, onerror: null, onfocus: null, onformdata: null, oninput: null, oninvalid: null, onkeydown: null, onkeypress: null, onkeyup: null, onload: null, onloadeddata: null, onloadedmetadata: null, onloadstart: null, onmousedown: null, onmouseenter: null, onmouseleave: null, onmousemove: null, onmouseout: null, onmouseover: null, onmouseup: null, onmousewheel: null, onpause: null, onplay: null, onplaying: null, onprogress: null, onratechange: null, onreset: null, onresize: null, onscroll: null, onseeked: null, onseeking: null, onselect: null, onstalled: null, onsubmit: null, onsuspend: null, ontimeupdate: null, ontoggle: null, onvolumechange: null, onwaiting: null, onwheel: null, onauxclick: null, ongotpointercapture: null, onlostpointercapture: null, onpointerdown: null, onpointermove: null, onpointerup: null, onpointercancel: null, onpointerover: null, onpointerout: null, onpointerenter: null, onpointerleave: null, onselectstart: null, onselectionchange: null, onanimationend: null, onanimationiteration: null, onanimationstart: null, ontransitionend: null, onafterprint: null, onbeforeprint: null, onbeforeunload: null, onhashchange: null, onlanguagechange: null, onmessage: null, onmessageerror: null, onoffline: null, ononline: null, onpagehide: null, onpageshow: null, onpopstate: null, onrejectionhandled: null, onstorage: null, onunhandledrejection: null, onunload: null, performance: Performance{}, stop: function stop() { ... }, open: function open() { ... }, alert: function alert() { ... }, confirm: function confirm() { ... }, prompt: function prompt() { ... }, print: function print() { ... }, queueMicrotask: function queueMicrotask() { ... }, requestAnimationFrame: function requestAnimationFrame() { ... }, cancelAnimationFrame: function cancelAnimationFrame() { ... }, captureEvents: function captureEvents() { ... }, releaseEvents: function releaseEvents() { ... }, requestIdleCallback: function requestIdleCallback() { ... }, cancelIdleCallback: function cancelIdleCallback() { ... }, getComputedStyle: function getComputedStyle() { ... }, matchMedia: function matchMedia() { ... }, moveTo: function moveTo() { ... }, moveBy: function moveBy() { ... }, resizeTo: function resizeTo() { ... }, resizeBy: function resizeBy() { ... }, scroll: function scroll() { ... }, scrollTo: function scrollTo() { ... }, scrollBy: function scrollBy() { ... }, getSelection: function getSelection() { ... }, find: function find() { ... }, webkitRequestAnimationFrame: function webkitRequestAnimationFrame() { ... }, webkitCancelAnimationFrame: function webkitCancelAnimationFrame() { ... }, fetch: function fetch() { ... }, btoa: function btoa() { ... }, atob: function atob() { ... }, setTimeout: function setTimeout() { ... }, clearTimeout: function clearTimeout() { ... }, setInterval: function setInterval() { ... }, clearInterval: function clearInterval() { ... }, createImageBitmap: function createImageBitmap() { ... }, close: function close() { ... }, focus: function focus() { ... }, blur: function blur() { ... }, postMessage: function () { ... }, onappinstalled: null, onbeforeinstallprompt: null, crypto: Crypto{}, indexedDB: IDBFactory{}, webkitStorageInfo: DeprecatedStorageInfo{}, sessionStorage: Storage{}, localStorage: Storage{amp-experiment-toggles: ...}, onpointerrawupdate: null, speechSynthesis: SpeechSynthesis{}, webkitRequestFileSystem: function () { ... }, webkitResolveLocalFileSystemURL: function () { ... }, openDatabase: function () { ... }, applicationCache: ApplicationCache{}, caches: CacheStorage{}, ondevicemotion: null, ondeviceorientation: null, ondeviceorientationabsolute: null}, origin: 'www.example.com', data: 'amp-{"sentinel":"0-125","type":"full-overlay-frame"}'} | |
● should ignore write messages from frames with no whitelist | |
send-positions | |
● should send position back | |
send-positions position observer callback | |
● should postMessage on position change | |
● should not double register | |
full-overlay-frame | |
● should accept request and expand | |
● should accept reset request and collapse | |
getMeasureableFrame | |
● should return correct frame when many iframes at same level | |
● should return correct frame multiple level of xdomain | |
● should return correct frame for single xdomain frame | |
● should return correct frame for no xdomain frames | |
getFrameElement | |
● should return correct frame when intermediate xdomain frames | |
● should return correct frame when all frames friendly | |
● should return correct frame when many frames registered | |
● should return cached frame | |
● should return null if frame is not registered | |
● should return null if frame is more than 10 levels deep | |
unregisterIframe | |
● unregisters frames | |
● no errors or effects if called with a non-registered iframe | |
inabox-mutator | |
● changeSize | |
● attemptChangeSize | |
● expandElement | |
● attemptCollapse | |
● collapseElement | |
● measureElement | |
● mutateElement | |
● measureMutateElement | |
ERROR: 'Missing resource prop on [object HTMLDivElement]' | |
The test "inabox-resources add & remove" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
inabox-resources | |
● add & remove | |
● upgraded | |
inabox-viewport | |
● should center content, resize and remeasure on overlay mode | |
● should reset content and request resize on leave overlay mode | |
● should update box rect when expanding/collapsing | |
● should update box rect when collapsing | |
● should update box rect when expanding/collapsing - friendly iframe case | |
● should center the fixed container properly (skipped) | |
● should undo styling when the fixed container is reset | |
● should request the position async from host | |
● should request the position directly from host if friendly | |
● should disconnect friendly listener and reconnect again properly | |
should work for size, layoutRect and position observer | |
● cross domain | |
● same domain | |
inabox-host:position-observer | |
● observe should work | |
● getTargetRect should work within nested iframes | |
● should get existing observer | |
inabox-utils | |
● should fire custom event and postMessage | |
● Should not return an a4aId if no a4a meta tag in head | |
● Should be able to get the a4aId if on the document | |
3p environment | |
● should instrument a window | |
● should instrument dynamically created child iframes: srcdoc | |
● should instrument dynamically created child iframes: doc.write | |
● should instrument nested child iframes: doc.write | |
● should instrument nested child iframes: mixed | |
timers | |
● throttle setTimeout | |
● throttle setInterval | |
● should support multi arg forms | |
● should cancel uninstrumented timeouts | |
3p | |
● should throw an error if src does not contain addyn | |
● should not throw if source contains /addyn/ | |
● should run in next tick | |
● should run in next tick (setTimeout) | |
● should do work only in master | |
validateSrcPrefix() | |
● should throw when a string prefix does not match | |
● should throw when array prefixes do not match | |
● should not throw when a string prefix matches | |
● should not throw when any of the array prefixes match | |
validateData | |
● should check mandatory fields | |
● should allow mandatory fields to have 0 as a value | |
● should check mandatory fields with alternative options | |
● should check optional fields | |
● should check mandatory and optional fields | |
loadScript | |
● should add <script /> with url to the body | |
● should handle onSuccess callback | |
● should handle onFailure callback | |
ActionService parseAction | |
● should parse full form | |
● should parse full form with two actions | |
● should parse with default method | |
● should parse with default method for two different targets | |
● should parse with numeric target | |
● should parse with two numeric targets | |
● should parse with lots of whitespace | |
● should parse with an arg | |
● should parse args in more than one action | |
● should parse multiple event types with multiple actions | |
● should parse with multiple args | |
● should parse with multiple args with whitespace | |
● should parse with no args | |
● should parse with no args with whitespace | |
● should parse with double-quoted args | |
● should parse with single-quoted args | |
● should parse with args with trailing comma | |
● should parse with boolean args | |
● should parse with numeric args | |
● should parse with term semicolon | |
● should parse with args as a proto-less object | |
● should interprete key always as string | |
● should parse with object literal args | |
● should parse with expression args | |
● should return null for undefined references in dereferenced arg | |
● should return null for non-primitives in dereferenced args | |
● should support event data and opt_args | |
● evaluated args should be proto-less objects | |
● should dereference arg expressions | |
● should dereference arg expressions with an event without data | |
● should dereference arg expressions with an event with data | |
● should parse empty to null | |
● should fail parse without event | |
● should fail parse without target | |
● should fail parse with period in event or method | |
● should fail parse with invalid args | |
ActionService setActions | |
● should set actions | |
Action parseActionMap | |
● should parse with a single action | |
● should parse with two actions | |
● should parse with dupe actions by overriding with last | |
● should parse empty forms to null | |
Action adoptEmbedWindow | |
● should create embedded action service | |
Action findAction | |
● should create action map in getActionMap_ | |
● should cache action map | |
● should find action on the same element | |
● should find action in subtree | |
● should skip action on disabled elements | |
● should skip parent action on descendants of disabled elements | |
● should skip action on form control in a disabled fieldset | |
Action hasAction | |
● returns true if the target element has the target action | |
● returns true if an intermediate element has target action | |
● returns false if the target element does not have the target action | |
Action hasResolvableAction | |
● returns true if the target element exists (single) | |
● returns true if the target element exists (action up the tree) | |
● returns true if the target element exists (one amongst many) | |
● returns false if the target element does not exist (one) | |
● returns false if the target element does not exist (multiple) | |
● returns false if target element does not have the target action | |
Action method | |
● should invoke on the AMP element | |
● should invoke on the AMP element with args | |
● should not allow invoke on non-AMP and non-whitelisted element | |
● should not allow invoke on unresolved AMP element | |
● should trigger event | |
● should execute method | |
macros | |
● should invoke proper action | |
installActionHandler | |
● should invoke on non-AMP but whitelisted element | |
● should not check trust level (handler should check) | |
Multiple handlers action method | |
● should trigger event | |
● should chain asynchronous actions | |
Action interceptor | |
● should not initialize until called | |
● should queue actions | |
● should dequeue actions after handler set | |
Action common handler | |
● should execute actions registered | |
● should check trust before invoking action | |
Action global target | |
● should register global target | |
Core events | |
● should trigger tap event on click | |
● should trigger tap event on key press if focused element has role=button | |
● should trigger tap event and prevent default on key press if focused element has role=button and has an action invoked | |
● should trigger tap event on key press if focused element has role=option | |
● should NOT trigger tap event on key press if focused element DOES NOT have role=button | |
● should NOT trigger tap event on key press if focused element DOES NOT have any role | |
● should trigger submit event | |
● should trigger change event | |
● should trigger change event for <input type="checkbox"> elements | |
● should trigger change event for <input type="range"> elements | |
● should trigger change event for <input type="search"> elements | |
● should trigger change event with details for <select> elements | |
● should trigger change event with details for <textarea> elements | |
● should trigger input-debounced event on input | |
● should trigger input-throttled event on input | |
DeferredEvent | |
● should copy the properties of an event object | |
● should replace functions with throws | |
Action whitelisting | |
● should not allow any action with empty string whitelist | |
● should ignore unparseable whitelist entries | |
with non-empty whitelist | |
● should allow whitelisted actions | |
● should allow whitelisted actions case insensitive | |
● should whitelist default actions if alias is registered default | |
● should allow whitelisted actions with wildcard target | |
● should not allow non-whitelisted actions | |
● should allow adding actions to the whitelist | |
Activity getTotalEngagedTime | |
● should have 0 engaged time if there is no activity | |
● should have 5 seconds of engaged time after doc becomes visible | |
● should have 4 seconds of engaged time 4 seconds after visible | |
● should have 10 seconds of engaged time | |
● should have the same engaged time in separate requests | |
● should not accumulate engaged time after inactivity | |
● should accumulate engaged time over multiple activities | |
● should set event listeners on the document for "mousedown", "mouseup", "mousemove", "keyup", "keydown", "mouseleave" | |
Activity getIncrementalEngagedTime | |
● should have 0 seconds of incremental engaged time with no activity | |
● should have 5 seconds of incremental engaged time after doc becomes visible | |
● should have 4 seconds of incremental engaged time after 4 seconds | |
● should reset incremental engaged time after each poll | |
● should not reset incremental engaged time if reset is false | |
● should keep individual incremental engaged times per name | |
ad-cid | |
● should get correct cid | |
● should respect clientIdCookieName field | |
WARN: '[AD-CID]', Error: cid timeout | |
Error: cid timeout | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:352:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/timer-impl.js:142:23 | |
at wrapped (http://localhost:9876/home/mdmower/source/amphtml/src/service/timer-impl.js:83:9) | |
at callTimer (http://localhost:9876/absolute/tmp/node_modules/lolex/src/lolex-src.js:421:1) | |
at doTickInner (http://localhost:9876/absolute/tmp/node_modules/lolex/src/lolex-src.js:869:1) | |
at doTick (http://localhost:9876/absolute/tmp/node_modules/lolex/src/lolex-src.js:950:1) | |
at Object.tick (http://localhost:9876/absolute/tmp/node_modules/lolex/src/lolex-src.js:957:1) | |
at http://localhost:9876/home/mdmower/source/amphtml/test/unit/test-ad-cid.js:103:13 | |
● should return on timeout | |
ERROR: '[AD-CID] Error: nope' | |
The test "ad-cid should return undefined on failed CID" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should return undefined on failed CID | |
ad-helper | |
isAdPositionAllowed function | |
● should allow position fixed element that is whitelisted | |
● should allow position fixed element inside whitelisted element | |
● should not allow position fixed element that is non-whitelisted element | |
● should not allow position sticky-fixed element that is non-whitelisted element | |
● should not allow position fixed element inside non-whitelisted element | |
getAdContainer function | |
● should return null if no container | |
● should return the closest container | |
● should return pre-calculated value | |
test-ads-config | |
● should have all ad networks configured | |
● should sort adConfig in alphabetic order (skipped) | |
● preconnect should have no duplicates with prefetch | |
● should use HTTPS URLs | |
alp-handler | |
● should navigate to correct destination | |
● should navigate to correct destination (left mouse button) | |
● should perform a2a navigation if appropriate | |
● should perform a2a navigation if appropriate (.de) | |
● should perform a2a navigation if appropriate nested: 1 | |
● should perform a2a navigation if appropriate nested: 2 | |
● should perform a2a navigation if appropriate nested: 3 | |
● should not perform a2a for other origins | |
● should not perform a2a for other origins (2) | |
● should perform special navigation if specially asked for | |
● should navigate if trusted is not set. | |
● should fail with trusted being false | |
● should support custom arg name | |
● should support existing fragments | |
● should support other targets | |
● should find the closest a tag | |
● should require an a tag | |
● should ignore other mouse buttons | |
● should ignore special keys | |
● should only navigate to AMP | |
● should require a destination | |
● should warmup statically | |
● should warmup dynamically | |
● should ignore irrelevant events for warmup (bad target) | |
● should ignore irrelevant events for warmup (bad href) | |
3p ampcontext.js | |
● should send error message with report3pError | |
● should add metadata to window.context using name as per 3P. | |
● should add metadata to window.context using name as per A4A. | |
● should add metadata to window.context using window var. | |
● should set up only sentinel if no metadata provided. | |
● should throw error if sentinel invalid | |
● should throw error if metadata missing | |
● should be able to send an intersection observer request | |
● should send a pM and set callback when onPageVisibilityChange() | |
● should call resize success callback on resize success | |
● should call resize denied callback on resize denied | |
amp-img | |
● should load an img with more attributes | |
● should load an img | |
● should preconnect the src url | |
● should load an img with srcset | |
● should preconnect to the the first srcset url if src is not set | |
WARN: '[amp-img] Removed [srcset] since [src] was mutated. Recommend adding a [srcset] binding to support responsive images.', <amp-img src="foo.jpg" width="300" height="200" class="i-amphtml-element i-amphtml-layout-fixed i-amphtml-layout-size-defined i-amphtml-layout" i-amphtml-layout="fixed" style="width: 300px; height: 200px;"><img decoding="async" sizes="(max-width: 320px) 300px, 300px" srcset="/examples/img/[email protected] 641w, | |
/examples/img/[email protected] 1282w" src="/examples/img/sample.jpg" class="i-amphtml-fill-content i-amphtml-replaced-content"><div class="i-amphtml-loading-container i-amphtml-fill-content"><div class="amp-active"></div></div></amp-img> | |
● should handle attribute mutations | |
● should propagate srcset and sizes | |
● should propagate data attributes | |
● should respect noprerender attribute | |
● should allow prerender by default | |
● should propagate ARIA attributes | |
● should propagate the object-fit attribute | |
● should not propagate the object-fit attribute if invalid | |
● should propagate the object-position attribute | |
● should not propagate the object-position attribute if invalid | |
● should not error on unlayoutCallback before layoutCallback | |
#fallback on initial load | |
● should not display fallback if loading succeeds | |
● should display fallback if loading fails | |
● should hide child placeholder elements if loading fails | |
● should fallback once and remove fallback once image loads | |
● should not remove the fallback if fetching fails | |
blurred image placeholder | |
● should set placeholder opacity to 0 on image load | |
auto-generate sizes | |
● should not generate sizes for amp-imgs that already have sizes | |
● should not generate sizes for amp-imgs without srcset | |
● should not generate sizes for amp-imgs with x descriptors | |
● should generate correct sizes for layout fixed | |
● should generate correct sizes for layout responsive | |
● should generate correct sizes for layout fixed-height | |
● should generate correct sizes for layout fill | |
● should generate correct sizes for layout flex-item | |
layout intrinsic | |
● should not exceed given width and height even if image natural size is larger | |
● should reach given width and height even if image natural size is smaller | |
● expands a parent div with no explicit dimensions | |
● is bounded by explicit dimensions of a parent container | |
amp-inabox | |
installAmpdocServicesForInabox | |
● should install same services for inabox | |
amp-pixel | |
● should be non-displayed | |
● should NOT trigger when src is empty | |
INFO: '[amp-pixel] pixel triggered: ', 'https://pubads.g.doubleclick.net/activity;dc_iu=1/abc;ord=1?' | |
● should trigger when doc becomes visible | |
INFO: '[amp-pixel] pixel triggered: ', '//pubads.g.doubleclick.net/activity;dc_iu=1/abc;ord=2' | |
● should allow protocol-relative URLs | |
ERROR: 'The <amp-pixel> src attribute must start with "https://" or "//". Invalid value: http://pubads.g.doubleclick.net/activity;dc_iu=1/abc;ord=2' | |
The test "amp-pixel should disallow http URLs" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should disallow http URLs | |
ERROR: 'The <amp-pixel> src attribute must start with "https://" or "//". Invalid value: /activity;dc_iu=1/abc;ord=2' | |
The test "amp-pixel should disallow relative URLs" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should disallow relative URLs | |
ERROR: 'The <amp-pixel> src attribute must start with "https://" or "//". Invalid value: https/activity;dc_iu=1/abc;ord=2' | |
The test "amp-pixel should disallow fake-protocol URLs" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should disallow fake-protocol URLs | |
INFO: '[amp-pixel] pixel triggered: ', 'https://pubads.g.doubleclick.net/activity;r=111' | |
● should replace URL parameters | |
● should throw for referrerpolicy with value other than no-referrer | |
INFO: '[amp-pixel] pixel triggered: ', 'https://pubads.g.doubleclick.net/activity;t=value1' | |
amp-pixel in embed | |
● should use embed's URL replacer | |
AmpStoryPlayer | |
● should build an iframe for each story | |
● should correctly append params at the end of the story url | |
● should correctly append params at the end of a story url with existing params | |
● should set first story as visible | |
● should prerender next stories | |
● should remove iframe from a story with distance > 1 from current story and give it to a new story that is distance <= 1 when navigating | |
● should remove iframe from a story with distance > 1 from current story and give it to a new story that is distance <= 1 when navigating backwards | |
● should register handlers at build time | |
● should navigate to next story when the last page of a story is tapped | |
AmpDocService | |
params | |
● should read params from window name and fragment | |
● should ignore window name and fragment with explicit params | |
single-doc mode | |
● should initialize as single-doc | |
● should not return a conflicting value on a form | |
● should not return a conflicting value on a document fragment | |
● should always yield the single document | |
● should return meta content values | |
shadow documents | |
● should yield the closest shadow doc | |
● should pass shadow doc params | |
shadow-doc mode | |
● should not initialize as single-doc | |
● should yield custom-element shadow-doc when exists | |
● should yield cached or custom-element shadow-doc when exists | |
● should create and cache shadow-doc | |
● should fail if shadow root not found | |
● should allow checking for an AmpDoc for an external node | |
● should fail to install shadow doc twice | |
● should navigate via host | |
fie-doc mode | |
● should initialize as single-doc | |
● should yield custom-element doc when exists | |
● should yield cached or custom-element shadow-doc when exists | |
● should create and cache shadow-doc | |
● should navigate to parent if shadow root not found | |
● should fail to install shadow doc twice | |
● should navigate via host | |
fie-doc | |
● should create and cache fie-doc | |
● should pass fie doc params | |
AmpDoc.visibilityState | |
● should set up and destroy listeners | |
● should be visible by default | |
● should override at construction time | |
● should override at construction time via params | |
● should override visibilityState after construction | |
● should update last visibility after construction | |
● should update visibility in children | |
● should update when document visibility changes | |
● should update embed document visibility | |
● should override to prerender/inactive/paused | |
● should prioritize document hidden for paused | |
● should configure visibilityState for prerender | |
● should be hidden when the browser document is unknown state | |
● should yield undefined for whenVisible methods | |
AmpDocSingle | |
● should return window | |
● should return document as root | |
● should find element by id | |
● should initialize ready state and body immediately | |
● should wait for body and ready state | |
● should declare extension | |
● should ignore duplicate extensions | |
AmpDocShadow | |
● should return window | |
● should return document as root | |
● should find element by id | |
● should update when body is available | |
● should only allow one body update | |
● should update when doc is ready | |
● should only allow one ready update | |
AmpDocFie | |
● should create AmpDocFie | |
● should create AmpDocFie with provided signals | |
● should return window | |
● should return document as root | |
● should find element by id | |
● should update when body is available | |
● should update when doc is ready | |
● should only allow one ready update | |
analytics | |
triggerAnalyticsEvent | |
● should not do anything if analytics is not installed | |
● should trigger analytics event if analytics is installed | |
Animation | |
● animation | |
● should animate out-of-bounds time | |
● halt freeze | |
● halt reset | |
● halt forward | |
WARN: '[Animation] cannot animate' | |
● should NOT start animation when cannot animate | |
WARN: '[Animation] cancel animation' | |
● should halt-freeze animation when cannot animate | |
BaseElement | |
● should delegate update priority to resources | |
● propagateAttributes - niente | |
● propagateAttributes | |
● propagateDataset | |
● should register action | |
● should fail execution of unregistered action | |
● `this` context of handler should not be the holder | |
● should execute registered action | |
● should execute default method by "activate" | |
● should not allow two default actions | |
● should check trust before invocation | |
● should return correct layoutBox | |
● should return true for inabox experiment renderOutsideViewport | |
forwardEvents | |
● forwards single event | |
● forwards multiple events | |
batchFetchJsonFor | |
URL replacement | |
● should not replace URL vars if opt_urlReplacement == NONE | |
● should throw user error if expanding non-whitelisted vars with urlReplacement == OPT_IN | |
● should replace all URL vars if opt_urlReplacement == ALL | |
POST based identity | |
● should send POST request with auth token is present | |
● should send POST request with empty, defined identity token | |
● should not transform the request with an undefined token | |
BatchedXhr | |
#fetch | |
● should fetch a generic request once for identical URLs | |
● should fetch once for a relative and absolute URL that point to the same location. | |
● should separately cache generic fetches with identical URLsbut different "Accept" headers | |
● should cache the same as the convenience methods | |
#fetchJson | |
● should fetch JSON GET requests once for identical URLs | |
● should not be affected by fragments passed in the URL | |
● should not cache for POST requests | |
#fetchText | |
● should fetch text GET requests once for identical URLs | |
● should not cache for POST requests | |
cacheCidApi | |
isSupported | |
● should return true if page is in CCT and is served by a proxy | |
● should return false if page is not embedded in CCT | |
● should return false if page is not served by a proxy | |
getScopedCid | |
● should use client ID API from api if everything great | |
● should return null if opted out | |
● should try alternative url if API provides | |
ERROR: '[CacheCidApi] Error: fetchCidTimeout' | |
The test "cacheCidApi getScopedCid should fail if the request times out" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should fail if the request times out | |
chunk2 | |
visible no amp | |
● should execute a chunk | |
● should execute chunks | |
● should support nested micro tasks in chunks | |
invisible no amp | |
● should execute a chunk | |
● should execute chunks | |
with viewer | |
visible | |
● should execute a chunk with an ampdoc | |
● should execute a chunk | |
● should execute chunks | |
error handling | |
● should proceed on error and rethrowAsync | |
invisible | |
● should execute a chunk | |
● should execute chunks | |
invisible but deactivated | |
● should execute a chunk | |
● should execute chunks | |
invisible via document.hidden | |
● should execute a chunk | |
● should execute chunks | |
invisible to visible | |
● should execute a chunk | |
● should execute chunks | |
● should execute a chunk | |
● should execute chunks | |
invisible to visible after a while | |
● should execute a chunk | |
● should execute chunks | |
realWin | |
● should execute a chunk | |
● should execute chunks | |
realWin noIdleCallback | |
● should execute a chunk | |
● should execute chunks | |
long tasks | |
long chunk tasks force a macro task between work | |
● should not run macro tasks with invisible bodys | |
● should execute chunks after long task in a macro task | |
● should not issue a macro task after having been idle | |
onIdle | |
● should fire for sufficient remaining time | |
● should try again with not enough time | |
● should try again with not enough time (2 recursions) | |
● should timeout when callback is called after timeout | |
● should timeout when callback is called with didTimeout | |
test-cid-api | |
● should return $OPT_OUT if API returns optOut | |
● should return null if API returns no CID | |
● should try alternative url if API provides | |
ERROR: '[GoogleCidApi] ' | |
The test "test-cid-api should return null if API rejects" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should return null if API rejects | |
● should return null if AMP_TOKEN=$ERROR | |
● should return null if AMP_TOKEN=$NOT_FOUND | |
● should fetch CID from API if AMP_TOKEN=$NOT_FOUND and document referrer is proxy origin | |
● should return $OPT_OUT if AMP_TOKEN=$OPT_OUT | |
● should not send another request if one is already out | |
● should work when 2 scopes are requested same time | |
getScopedCid | |
● should get CID when no AMP_TOKEN exists | |
● should get CID when AMP_TOKEN exists | |
cid | |
with real crypto | |
● should hash domain name and scope | |
● should hash domain name and scope | |
with crypto stub | |
● should depend on external id e1 | |
● should depend on external id e2 | |
● should depend on domain | |
● should fallback to cookie value on custom domain. | |
● should fallback to cookie of given name on custom domain. | |
● should depend fall back to cookies on custom domain and not create a cookie | |
● should produce golden value | |
● should be stable with respect to a saved seed | |
● should pick up the cid value from storage | |
● should return empty if opted out | |
● should read from viewer storage if embedded | |
● should read from viewer storage if embedded and convert cid to new format | |
● should not read from untrusted viewer | |
● should store to viewer storage if embedded | |
● should prefer value in storage if present | |
● should expire on read after 365 days | |
● should expire on read after 365 days when embedded | |
● should set last access time once a day | |
● should set last access time once a day when embedded | |
● should wait until after pre-rendering | |
● should wait for consent | |
● should fail on failed consent | |
● should fail on invalid scope | |
● should not store until persistence promise resolves | |
● should not wait persistence consent for viewer storage | |
● fallback with no window.crypto | |
● should NOT create fallback cookie by default with string scope | |
● should NOT create fallback cookie by default with struct scope | |
● should create fallback cookie when asked | |
● should create fallback cookie with provided name | |
● should update fallback cookie expiration when present | |
● should not update expiration when created externally | |
● should return same value for multiple calls on non-proxied urls | |
● should return same value for multiple calls on proxied urls | |
● should retreive cookie value with . in name | |
getProxySourceOrigin | |
● should fail on non-proxy origin | |
● get method should return CID when in Viewer | |
● get method should time out when in Viewer | |
pub origin, CID API opt in | |
● should use cid api on pub origin if opted in | |
● should fallback to cookie if cid api returns nothing | |
● should respect CID API opt out | |
isScopeOptedIn | |
● should read predefined clients and custom API keys correctly | |
● should work if meta only contains predefined clients | |
● should work if meta only contains custom scopes | |
WARN: '[CID] Unsupported client for Google CID API: abodeanalytics.Please remove or correct meta[name="amp-google-client-id-api"]' | |
ERROR: 'The test "cid isScopeOptedIn should not work if vendor not whitelisted" contains an "allowConsoleError" block that didn't result in a call to console.error.' | |
● should not work if vendor not whitelisted | |
cid optout: | |
optOutOfCid() | |
● should send a message to viewer | |
● should save bit in storage | |
● should reject promise if storage set fails | |
isOptedOutOfCid() | |
● should return true if bit is set in storage | |
● should return false if bit is not set in storage | |
● should return false if storage get fails | |
consent | |
block by metaTags | |
● block by tagName | |
● block by lowercase tagName | |
● not block unspecified element | |
● handles white space | |
● only work with tagName | |
test-cookies | |
● should return null for no cookie, malformed, or not found | |
● should return value when found | |
● should return value for an escaped cookie name | |
● should return an unescaped value | |
● should write the cookie | |
● should respect the secure option | |
● getHighestAvailableDomain without meta tag | |
● getHigestAvaibleDomain in valid meta tag | |
● getHigestAvaibleDomain with invalid meta tag | |
● should write the cookie to the right domain on origin | |
ERROR: 'Should never attempt to set cookie on proxy origin: c&1' | |
The test "test-cookies write cookie to right domain on proxy" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Should never attempt to set cookie on proxy origin: c&1' | |
The test "test-cookies write cookie to right domain on proxy" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Should never attempt to set cookie on proxy origin. (in depth check): c&1' | |
The test "test-cookies write cookie to right domain on proxy" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Should never attempt to set cookie on proxy origin. (in depth check): c&1' | |
The test "test-cookies write cookie to right domain on proxy" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Could not support highestAvailable Domain on proxy origin, specify domain explicitly' | |
The test "test-cookies write cookie to right domain on proxy" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● write cookie to right domain on proxy | |
crypto-impl | |
● native API result should exactly equal to crypto lib result | |
● should not load closure lib when native API is available (string input) | |
● should not load closure lib when native API is available (Uint8Array input) | |
with native crypto API | |
● should hash "abc" in sha384 | |
● should hash [1,2,3] in sha384 | |
● should hash "abc" in sha384Base64 | |
● should hash "foobar" in sha384Base64 | |
● should hash [1,2,3] in sha384 | |
● should throw when input contains chars out of range [0,255] | |
● should hash "abc" to uniform number | |
with crypto lib | |
● should hash "abc" in sha384 | |
● should hash [1,2,3] in sha384 | |
● should hash "abc" in sha384Base64 | |
● should hash "foobar" in sha384Base64 | |
● should hash [1,2,3] in sha384 | |
● should throw when input contains chars out of range [0,255] | |
● should hash "abc" to uniform number | |
with native crypto API rejects | |
● should hash "abc" in sha384 | |
● should hash [1,2,3] in sha384 | |
● should hash "abc" in sha384Base64 | |
● should hash "foobar" in sha384Base64 | |
● should hash [1,2,3] in sha384 | |
● should throw when input contains chars out of range [0,255] | |
● should hash "abc" to uniform number | |
with native crypto API throws | |
● should hash "abc" in sha384 | |
● should hash [1,2,3] in sha384 | |
● should hash "abc" in sha384Base64 | |
● should hash "foobar" in sha384Base64 | |
● should hash [1,2,3] in sha384 | |
● should throw when input contains chars out of range [0,255] | |
● should hash "abc" to uniform number | |
CSS | |
escapeCssSelectorIdent | |
● should escape | |
scopeSelector | |
● concats simple | |
● concats multiple selectors (2) | |
● concats multiple selectors (4) | |
Curve | |
● bezierCurve | |
● getCurve on common curves | |
● getCurve on cubic-bezier curves | |
CustomElement register | |
● should go through stub/upgrade cycle | |
● should mark stubbed element as declared | |
● should install pre-stubbed element extension | |
● should not install declared pre-stubbed element extension | |
● should not install declared pre-installed element | |
● insert script for amp-ad when script is not included | |
● insert script for amp-embed when script is not included | |
● insert script for amp-video when script is not included | |
no body | |
● should be stub elements when body available | |
● should repeat stubbing when body is not available | |
● should stub element when not stubbed yet | |
● should copy or stub element definitions in a child window | |
CustomElement | |
CustomElement | |
● should initialize ampdoc and resources on attach only | |
● Element - createdCallback | |
● StubElement - createdCallback | |
● Element - should only add classes on first attachedCallback | |
● Element - handles async connectedCallback when disconnected | |
● Element - should reset on 2nd attachedCallback when requested | |
● Element - should NOT reset on 2nd attachedCallback w/o request | |
● Element - getIntersectionChangeEntry | |
● Element - updateLayoutBox | |
● should tolerate errors in onLayoutMeasure | |
● should not call onMeasureChanged callback when element dimensions have not changed | |
● should call onMeasureChanged callback when element dimensions have changed | |
● StubElement - upgrade after attached | |
● StubElement - upgrade before attached | |
● StubElement - should NOT allow upgrade for a template element | |
● Element - re-upgrade to new direct instance | |
● Element - re-upgrade to new promised instance | |
● Element - re-upgrade to new promised null | |
ERROR: 'Error: upgrade failed' | |
The test "CustomElement CustomElement Element - re-upgrade with a failed promised" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● Element - re-upgrade with a failed promised | |
● Element - can only re-upgrade once | |
● StubElement - re-upgrade | |
● Element - build NOT allowed before attachment | |
● Element - build allowed | |
● should build on consent sufficient | |
● should not build on consent insufficient | |
● should respect user specified consent policy | |
● should repsect metaTag specified consent | |
ERROR: 'intentional [object HTMLElement]' | |
The test "CustomElement CustomElement should anticipate build errors" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: '[Resource] failed to build: amp-test#1 Error: intentional' | |
The test "CustomElement CustomElement should anticipate build errors" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should anticipate build errors | |
● Element - build creates a placeholder if one does not exist | |
● Element - build does not create a placeholder when one exists | |
● Element - buildCallback cannot be called twice | |
● Element - build is repeatable | |
● Element - build NOT allowed when in template | |
● StubElement - build never allowed | |
● Element - createPlaceholder | |
● Element - attachedCallback | |
● StubElement - attachedCallback | |
● Element - detachedCallback | |
● Element - handles async detachedCallback when connected | |
● Element - layoutCallback before build | |
● StubElement - layoutCallback before build or upgrade | |
● Element - layoutCallback | |
● Element - layoutCallback should call firstLayoutCompleted only once | |
● Element - layoutCallback is NOT allowed in template | |
● StubElement - layoutCallback should fail before attach | |
● StubElement - layoutCallback after attached | |
● should enqueue actions until built | |
● should execute action immediately after built | |
● should dequeue all actions after build | |
● should NOT enqueue actions when in template | |
● should reapply layout=nodisplay in SSR | |
● should change size without sizer | |
● should change size - height only without sizer | |
● should change size - width only without sizer | |
● should change size - margins only without sizer | |
● should change size - some margins only without sizer | |
● should change size - some margins only without sizer | |
● should change size with sizer | |
● should reset sizer for responsive layout | |
● should reset sizer for intrinsic layout | |
● should NOT apply media condition in template | |
● should change size to zero | |
● should change width to zero | |
● should remove i-amphtml-layout-awaiting-size class when size changed | |
● should dispatch custom event size-changed when size changed | |
apply sizes and media query | |
● should apply media condition | |
● should apply sizes condition | |
● should apply heights condition | |
● should rediscover sizer to apply heights in SSR | |
● should NOT rediscover sizer after reset in SSR | |
unlayoutCallback | |
● should unlayout built element and reset layoutCount | |
● should not reset layoutCount if relayout not requested | |
● StubElement | |
pauseCallback | |
● should not pause unbuilt element | |
● should pause upgraded element | |
● should only pause once | |
● should pause stub element | |
resumeCallback | |
● should resume upgraded element | |
● should resume upgraded element only once | |
● should resume stub element | |
viewportCallback | |
● Element should allow, but not delegate before build | |
● StubElement - should not delegate before build or upgrade | |
● Element - should be called once built | |
● StubElement - should be called once upgraded | |
● StubElement - should not upgrade before attach | |
● Element - should be called on built if in viewport | |
● Element - should NOT be called in template | |
CustomElement Service Elements | |
● getRealChildren should return nothing | |
● getRealChildren should return content-only nodes | |
● getPlaceholder should return nothing | |
● getPlaceholder should return the last placeholder | |
● getPlaceholder should blacklist some tags | |
● togglePlaceholder should do nothing when no placeholder is found | |
● togglePlaceholder should do hide all placeholders when found | |
● toggleFallback should toggle unsupported class | |
● toggleFallback should not display fallback before element layout | |
● togglePlaceholder should NOT call in template | |
Loading Indicator | |
● should be enabled by default | |
● should be disabled in A4A | |
● should disable when explicitly disabled by the attribute | |
● should disable when element is not whitelisted | |
● should disable when not measured | |
● should disable when element has already been laid out | |
● should disable when element is a placeholder itself | |
● should disable when element is not sized | |
● should ignore loading-off if never created | |
● should ignore loading-on if not allowed | |
● should ignore loading-on if already rendered | |
● should ignore loading-on if already loaded | |
● should cancel loading on render-start | |
● should create and turn on | |
● should turn on already created | |
● should turn off | |
● should turn off and cleanup | |
● should NOT cleanup if re-used | |
● should ignore loading-off if never created | |
● should turn off when exits viewport | |
● should NOT turn off when exits viewport but already laid out | |
● should turn on when enters viewport | |
● should NOT turn on when enters viewport but already laid out | |
● should start loading when measured if already in viewport | |
● should create loading when measured if in the top window | |
ERROR: 'The "height" attribute is missing: [object HTMLElement]' | |
The test "CustomElement Loading Indicator should toggle loading off after layout complete" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should toggle loading off after layout complete | |
ERROR: 'The "height" attribute is missing: [object HTMLElement]' | |
The test "CustomElement Loading Indicator should toggle loading off after layout failed" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should toggle loading off after layout failed | |
ERROR: 'The "height" attribute is missing: [object HTMLElement]' | |
The test "CustomElement Loading Indicator should disable toggle loading on after layout failed" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should disable toggle loading on after layout failed | |
● should ignore loading "on" if layout completed before vsync (skipped) | |
CustomElement Overflow Element | |
● should NOT be initialized by default | |
● should be initialized to null when absent | |
● should be initialized correctly when present | |
● should NOT override role and tabindex | |
WARN: '[CustomElement] Cannot resize element and overflow is not available', <amp-test-overflow></amp-test-overflow> | |
● should noop when overflow is missing | |
● should set overflow | |
● should unset overflow | |
● should force change size when clicked | |
fetch-mock | |
on realWin | |
● should mock fetches | |
on fakeWin | |
● should mock fetches | |
document-info | |
● should provide the canonicalUrl | |
● should provide the sourceUrl | |
● should provide the updated sourceUrl | |
● should provide the pageViewId | |
● should provide the pageViewId64 | |
● should provide the relative canonicalUrl as absolute | |
● should provide the linkRels containing link tag rels | |
● should provide empty linkRels if there are no link tags | |
● should provide the linkRels containing link tag rels as absolute | |
● should provide the linkRels containing link tag rels with space in rel | |
● should provide the linkRels containing link tag rels with multiple hrefs | |
● should provide the linkRels containing link tag rels but drop prefetch/preload/preconnect rels | |
● should provide the metaTags | |
● should provide empty metaTags if there are no meta tags | |
● should provide the replaceParams for an AMP landing page | |
● should not have replaceParams for non-AMP landing page | |
● should not provide the replaceParams if invalid | |
documentReady | |
● should interpret readyState correctly | |
● should call callback immediately when ready | |
● should wait to call callback until ready | |
● should wait to call callback for several loading events | |
whenDocumentReady | |
● should call callback immediately when ready | |
● should not call callback | |
● should wait to call callback until ready | |
whenDocumentComplete | |
● should call callback immediately when complete | |
● should not call callback | |
● should wait to call callback until ready | |
test-document-submit | |
installGlobalSubmitListenerForDoc | |
● should not register submit listener if amp-form is not registered. | |
● should register submit listener if amp-form extension is registered. | |
onDocumentFormSubmit_ | |
● should check target and action attributes | |
● should assert none of the inputs named __amp_source_origin | |
● should assert __amp_source_origin is not set in action | |
● should fail when POST and action-xhr is not set | |
● should do nothing if already prevented | |
● should default target to _top when missing | |
● should throw if no target | |
● should prevent submit | |
● should not check validity if novalidate provided | |
● should not prevent default | |
● should delegate xhr submit through action service | |
● should not delegate non-XHR submit through action service | |
DOM | |
● should remove all children | |
● should copy all children | |
● isConnectedNode | |
● isConnectedNode (no Node.p.isConnected) | |
● rootNodeFor | |
● rootNodeFor (no Node.p.getRootNode) | |
● closest should find itself | |
● closest should stop search at opt_stopAt | |
● closest should find first match | |
● closestNode should find nodes as well as elements | |
● closestAncestorElementBySelector should find first match | |
● elementByTag should find first match | |
● childElement should find first match | |
● childElements should find all matches | |
● childNodes should find all matches | |
● childElementByTag should find first match | |
● childElementByTag should find first match (polyfill) | |
● childElementsByTag should find first match | |
● childElementsByTag should find first match (polyfill) | |
● childElementByAttr should find first match | |
● childElementByAttr should find first match | |
● childElementsByAttr should find all matches | |
● childElementsByAttr should find all matches | |
● lastChildElementByAttr should find last match | |
● ancestorElements should find all matches | |
● ancestorElementsByTag should find all matches | |
● iterateCursor should loop through every element in a NodeList | |
● iterateCursor should allow null elements in a list | |
● scopedQuerySelector should find first match | |
● scopedQuerySelector should find first match (polyfill) | |
● scopedQuerySelectorAll should find all matches | |
● scopedQuerySelectorAll should find all matches (polyfill) | |
● isEnabled | |
● templateContentClone on a <template> element (browser supports HTMLTemplateElement) | |
● templateContentClone on a <template> element (simulate a browser that does not support HTMLTemplateElement) | |
isShadowRoot | |
● should yield false for non-nodes | |
● should yield false for other types of nodes | |
● should yield true for natively-supported createShadowRoot API | |
● should yield true for natively-supported attachShadow API | |
● should yield false for document-fragment non-shadow-root node | |
● should yield true for polyfill | |
waitFor | |
● should immediately return if child is available | |
● should wait until child is available | |
● should prefer MutationObserver and disconnect when done | |
● should fallback to polling without MutationObserver | |
● should wait for body | |
● should wait for body even if doc is complete | |
● should yield body asap even if doc is not complete | |
getDataParamsFromAttributes | |
● should return key-value for data-param- attributes | |
● should return key-value for custom data attributes | |
hasNextNodeInDocumentOrder | |
● should return true when the element has a nextSibling | |
● should return true when element ancestor has nextSibling | |
● should return false when ancestor with sibling with stop node | |
openWindowDialog | |
● should return on first success | |
● should retry on first null | |
● should retry on first undefined | |
ERROR: '[DOM] Failed to open url on target: _blank Error: intentional' | |
The test "DOM openWindowDialog should retry on first exception" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should retry on first exception | |
● should return the final result | |
● should return the final exception | |
● should not retry with noopener set | |
● should retry only non-top target | |
isJsonScriptTag | |
● should return true for <script type="application/json"> | |
● should return true for <script type="aPPLication/jSon"> | |
● should return false for <script type="text/javascript"> | |
● should return false for <div type="application/json"> | |
escapeHtml | |
● should tolerate empty string | |
● should ignore non-escapes | |
● should subsctitute escapes | |
tryFocus | |
● should call focus on the element | |
● should not throw exception if element focus throws exception | |
matches | |
● finds element by id | |
● finds element by tagname | |
domOrderComparator | |
● should sort elements by dom order | |
whenUpgradeToCustomElement function | |
● should not continue if element is not AMP element | |
ERROR: 'The element did not specify a layout attribute. Check https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/control_layout and the respective element documentation for details.' | |
The test "DOM whenUpgradeToCustomElement function should resolve if element has already upgrade" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should resolve if element has already upgrade | |
ERROR: 'The element did not specify a layout attribute. Check https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/control_layout and the respective element documentation for details.' | |
The test "DOM whenUpgradeToCustomElement function should resolve when element upgrade" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should resolve when element upgrade | |
toggleAttribute | |
● should toggle to remove the attribute with an empty value | |
● should toggle to remove the attribute with a non-empty value | |
● should toggle to add the attribute | |
● should remove the attribute when forced | |
● should not add the attribute when forced off | |
● should add the attribute when forced and it does not exist | |
● should leave the attribute when forced and it exists | |
getElementServiceIfAvailable() | |
● should wait for doc ready when not available | |
● should resolve with body when not available | |
● should wait for body when available | |
● should resolve with body when available | |
in single ampdoc | |
getElementService() | |
● should be provided by element | |
● should fail if element is not in page. | |
getElementServiceIfAvailable() | |
● should be provided by element if available | |
getElementServiceForDoc() | |
● should be provided by element | |
● should fail if element is not in page. | |
getElementServiceIfAvailableForDoc() | |
● should be provided by element if available | |
● should wait for body when not available | |
● resolve w/ body when not available | |
● should wait for body when available | |
● should resolve with body when available | |
● isExtensionScriptInNode | |
in embed scope | |
● should return existing service | |
● should return service for scheduled element | |
● should return ampdoc-scope service if node in top window | |
● should NOT return ampdoc-scope service if node in embed window | |
installErrorReporting | |
● should install window.onerror handler | |
● should install unhandledrejection handler | |
ERROR: 'Error: error' | |
The test "installErrorReporting should report the normal promise rejection" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should report the normal promise rejection | |
ERROR: 'Error: rejected promise [object Object]' | |
The test "installErrorReporting should allow null errors" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should allow null errors | |
ERROR: 'Error: "string error"' | |
The test "installErrorReporting should allow string errors" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should allow string errors | |
● should ignore cancellation | |
● should ignore blockByConsent | |
reportErrorToServerOrViewer | |
● should report to server if AMP doc is not single | |
● should report to server if AMP doc is not opted in | |
● should report to server if viewer is not capable | |
● should report to server if viewer is not trusted | |
● should report to viewer with message named `error` with stripped down error data set | |
getErrorReportData | |
● reportError with error object | |
● reportError with error and ignore stack | |
● reportError with error object w/args | |
● reportError with a string instead of error | |
● reportError with no error | |
● reportError with associatedElement | |
ERROR: 'XYZ' | |
The test "getErrorReportData reportError mark asserts" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● reportError mark asserts | |
ERROR: 'XYZ' | |
The test "getErrorReportData reportError mark asserts without error object" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● reportError mark asserts without error object | |
● reportError marks 3p | |
● reportError marks canary and viewerState | |
● reportError marks binary type | |
● reportError without error object | |
● should accumulate errors | |
● should not double report | |
● should construct cancellation | |
● reportError with error object | |
ERROR: 'XYZ' | |
The test "getErrorReportData should throttle user errors" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should throttle user errors | |
● should not report load errors | |
● should report throttled load errors at threshold | |
● should not report Script errors | |
● should report throttled Script errors at threshold | |
● should report throttled load errors under threshold | |
● should omit the error stack for user errors | |
● should report experiments (skipped) | |
reportError marks single pass type | |
● reports single pass | |
● reports multi pass | |
● reports esm | |
● does nothing for undeclared single pass type | |
detectNonAmpJs | |
● should let AMP's JS pass | |
● should be case insensitive | |
● should detect other JS | |
● should detect other JS (2) | |
● should gracefully handle no JS | |
● should detect non-AMP JS in karma | |
ERROR: 'Error: error' | |
The test "reportError should accept Error type" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
reportError | |
● should accept Error type | |
ERROR: 'Error: "error"' | |
The test "reportError should accept string and report incorrect use" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should accept string and report incorrect use | |
ERROR: 'Error: 101' | |
The test "reportError should accept number and report incorrect use" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should accept number and report incorrect use | |
ERROR: 'Error: Unknown error' | |
The test "reportError should accept null and report incorrect use" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should accept null and report incorrect use | |
detectJsEngineFromStack | |
on iOS | |
● detects safari as safari (skipped) | |
● detects chrome as safari (skipped) | |
● detects firefox as safari (skipped) | |
on other OSs | |
● detects safari as safari (skipped) | |
● detects chrome as chrome | |
● detects firefox as firefox (skipped) | |
● detects edge as IE (skipped) | |
user error reporting | |
● should trigger triggerAnalyticsEvent with correct arguments | |
EventHelper | |
● listen | |
● listenOnce | |
● listenOnce - cancel | |
● listenOncePromise - load event | |
● isLoaded for complete property | |
● isLoaded for readyState property | |
● isLoaded for Window | |
● loadPromise - already complete | |
● loadPromise - already readyState == complete | |
● loadPromise - media element already errored | |
● loadPromise - media element errored but retries diffent src | |
● loadPromise - load event | |
● loadPromise - error event | |
● loadPromise - error event should mark media element as errored | |
● should polyfill CustomEvent constructor | |
● should create the correct custom event for IE11 | |
● should detect when addEventListener options are supported | |
● should cache the result of the test and only do it once | |
● should detect when addEventListener options are not supported | |
experimentToggles | |
● should return experiment status map | |
● should cache experiment toggles on window | |
isExperimentOn | |
with only cookie flag | |
● should return "off" with no cookies, malformed or empty | |
● should return "off" when value is not in the list | |
● should return "on" when value is in the list | |
● should return "off" when disabling value is in the list | |
with global flag | |
● should prioritize cookie flag | |
● should fall back to global flag | |
● should return "off" when disabling value is in the list | |
● should return "off" when not in cookie flag or global flag | |
● should calc if experiment should be "on" | |
● should cache calc value | |
toggleExperiment | |
● should toggle to "on" with no cookies, malformed or empty | |
● should toggle "on" when value is not in the list | |
● should toggle "off" when value is in the list | |
● should set "on" when requested | |
● should set "off" when requested | |
● should not set localStorage when transientExperiment==true | |
● should set localStorage when !transientExperiment | |
● should not mess up localStorage when transientExperiment==true | |
● should override global settings | |
meta override | |
● should allow override iff the experiment is whitelisted | |
url override | |
● should allow override iff the experiment is whitelisted | |
isCanary | |
● should return value based on binary version | |
getBinaryType | |
● should return correct type | |
● should return "unknown" | |
experiment branch tests | |
#randomlySelectUnsetExperiments | |
● handles empty experiments list | |
● handles experiment not diverted path | |
● handles experiment diverted path 1 | |
● handles experiment diverted path 2 | |
● picks a branch if traffic eligible | |
● doesn't pick a branch if traffic ineligible | |
● doesn't pick a branch if no traffic eligibility function | |
● doesn't pick a branch if traffic becomes eligible after first diversion | |
● handles multiple experiments | |
● handles multi-way branches | |
● handles multiple experiments with multi-way branches | |
● should not process the same experiment twice | |
● returns empty experiments map | |
● returns map with experiment diverted path 1 | |
● returns map with multiple experiments with multi-way branches | |
exponentialBackoff | |
● should backoff exponentially | |
● should exponentiate correctly | |
extension-analytics | |
insertAnalyticsElement | |
● should create analytics element if analytics is installed, disableImmediate true | |
● should create analytics element if analytics is installed, disableImmediate false | |
CustomEventReporterBuilder | |
● track event with one request | |
● track event with multiple request | |
● track multi event | |
ERROR: 'customEventReporterBuilder should not track same eventType twice' | |
The test "extension-analytics CustomEventReporterBuilder should not add already tracked event" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should not add already tracked event | |
● should return a customEventReporter instance | |
ERROR: 'The node must be attached to request ampdoc.' | |
The test "extension-analytics CustomEventReporterBuilder should return a customEventReporter instance" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● Should allow to specify transport config | |
ERROR: 'The node must be attached to request ampdoc.' | |
The test "extension-analytics CustomEventReporterBuilder Should allow to specify transport config" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● Should allow to specify extraUrlParams config | |
ERROR: 'The node must be attached to request ampdoc.' | |
The test "extension-analytics CustomEventReporterBuilder Should allow to specify extraUrlParams config" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
CustomEventReporter test | |
● replace eventType with new name | |
● trigger event with new name | |
ERROR: 'Cannot trigger non initiated eventType' | |
The test "extension-analytics CustomEventReporter test should not trigger not added event" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should not trigger not added event | |
ERROR: 'Assertion failed' | |
The test "extension-analytics useAnalyticsInSandbox parent does NOT relayout, call in buildCallback should insert analytics after LOAD_START" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
useAnalyticsInSandbox | |
parent does NOT relayout, call in buildCallback | |
● should insert analytics after LOAD_START | |
ERROR: 'Assertion failed' | |
The test "extension-analytics useAnalyticsInSandbox parent does NOT relayout, call in buildCallback should insert analytics when config arrives late" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should insert analytics when config arrives late | |
ERROR: 'Assertion failed' | |
The test "extension-analytics useAnalyticsInSandbox parent does NOT relayout, call in buildCallback should remove analytics after UNLOAD" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should remove analytics after UNLOAD | |
● should NOT insert analytics after UNLOAD | |
ERROR: 'Assertion failed' | |
The test "extension-analytics useAnalyticsInSandbox parent does NOT relayout, call in layoutCallback should insert and remove analytics" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
parent does NOT relayout, call in layoutCallback | |
● should insert and remove analytics | |
ERROR: 'Assertion failed' | |
The test "extension-analytics useAnalyticsInSandbox parent relayout, call in buildCallback should NOT insert analytics when relayout" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
parent relayout, call in buildCallback | |
● should NOT insert analytics when relayout | |
● should NOT insert when config arrives at relayout | |
ERROR: 'Assertion failed' | |
The test "extension-analytics useAnalyticsInSandbox parent relayout, call in layoutCallback should insert analytics when relayout" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Assertion failed' | |
The test "extension-analytics useAnalyticsInSandbox parent relayout, call in layoutCallback should insert analytics when relayout" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
parent relayout, call in layoutCallback | |
● should insert analytics when relayout | |
ERROR: 'Assertion failed' | |
The test "extension-analytics useAnalyticsInSandbox parent relayout, call in layoutCallback should only insert with latest config" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should only insert with latest config | |
Extension Location | |
get correct script source | |
● with local mode | |
● with remote mode | |
● should allow no versions | |
● should handles single pass experiment | |
get correct entry point source | |
● with local mode | |
● with remote mode | |
● with remote mode & rtv | |
● should handle single pass experiment | |
get correct URL parts | |
● non-RTV urls | |
● RTV urls | |
● extensions with "latest" version | |
● extensions with .max suffix | |
Module Extension Location | |
get correct script source | |
● with local mode | |
● with remote mode | |
● should allow no versions | |
● should handles single pass experiment | |
get correct entry point source | |
● with local mode | |
● with remote mode | |
● with remote mode & rtv | |
● should handle single pass experiment | |
get correct URL parts | |
● non-RTV urls | |
● RTV urls | |
● extensions with "latest" version | |
● extensions with .max suffix | |
Extensions | |
registerExtension | |
● should register successfully without promise | |
● should register successfully with promise | |
● should fail registration without promise | |
● should fail registration with promise | |
● should fail on timeout | |
● should add element in registration | |
ERROR: '[extensions] unknown extension for e1' | |
The test "Extensions registerExtension should add element out of registration" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: '[extensions] unknown extension for ' | |
The test "Extensions registerExtension should add element out of registration" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should add element out of registration | |
● should install auto undeclared elements for single-doc | |
● should skip non-auto undeclared elements for single-doc | |
● should install declared elements for single-doc | |
● should install non-auto declared elements for single-doc | |
● should install elements in shadow doc | |
● should add doc factory in registration | |
ERROR: '[extensions] unknown extension for ' | |
The test "Extensions registerExtension should add doc factory out of registration" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should add doc factory out of registration | |
● should install all doc factories to shadow doc (skipped) | |
● should add service factory in registration | |
ERROR: '[extensions] unknown extension for ' | |
The test "Extensions registerExtension should add service factory out of registration" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: '[extensions] unknown extension for ' | |
The test "Extensions registerExtension should add service factory out of registration" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should add service factory out of registration | |
● should install auto undeclared services for single-doc | |
● should skip non-auto undeclared services for single-doc | |
● should install declared services for single-doc | |
● should install all services to doc (skipped) | |
● should load extension class via load extension | |
● should keep awaiting promise through reload | |
ERROR: 'Cannot find script for extension: amp-list' | |
The test "Extensions reloadExtension should devAssert if script cannot be found" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
reloadExtension | |
● should devAssert if script cannot be found | |
ERROR: 'Cannot find script for extension: amp-list' | |
The test "Extensions reloadExtension should ignore inserted scripts" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should ignore inserted scripts | |
● should support [custom-element] scripts | |
● should support "latest" version scripts | |
● should support [custom-template] scripts | |
● should support no-attribute scripts | |
preloadExtension | |
● should insert extension script correctly | |
● should insert template extension script correctly | |
● should insert extension script and not collide with prefixes | |
● should insert extension version correctly | |
● should not insert version for _bundle | |
● should only insert script once | |
● should not insert when script exists in head | |
● should give script correct attributes | |
● should insert special-case for amp-embed script | |
installExtensionForDoc | |
● should insert extension script correctly | |
● should stub main extension immediately | |
● should reuse the load if already started | |
● should install doc services | |
● should survive factory failures (skipped) | |
Finite State Machine | |
simple machines | |
● invokes callbacks on transition | |
● ignores other transition callbacks | |
● handles unregistered transitions | |
FixedLayer | |
no-transfer | |
● should initialize fixed layer to null | |
● should discover all potentials | |
● should add and remove element directly | |
● should remove node when disappeared from DOM | |
● should remove all candidates | |
● should collect updates | |
● should support vendor-based sticky | |
● should disregard non-fixed position | |
● should disregard invisible element, but for fixed only | |
● should disregard display:none element | |
● should tolerate getComputedStyle = null | |
● should collect for top != auto | |
● should collect for top = auto, but not update top | |
● should work around top=0 for sticky | |
● should work around top=0 for sticky when offset = 0 | |
● should NOT work around top=0 for sticky for non-implicit top | |
● should collect for implicit top = auto, but not update top | |
● should override implicit top = auto to 0 when equals padding | |
● should override implicit top = auto to 0 and padding + border | |
● should override implicit top = auto to 0 w/transient padding | |
● should always collect and update top = 0 | |
● should handle transitions | |
● should mutate element to fixed without top | |
● should mutate element to sticky without top | |
● should mutate element to fixed with top | |
● should add needed padding to sticky top if transferring | |
● should not add unneeded padding to sticky top if transferring | |
● should mutate element to sticky with top | |
● should reset top upon being removed from fixedlayer | |
● should reset sticky top upon being removed from fixedlayer | |
● should transform fixed elements with anchored top | |
● should NOT transform sticky elements with anchored top | |
● should compound transform with anchored top | |
● should NOT transform fixed elements w/o anchored top | |
● should user error when inline styles may be overriden | |
● should ignore descendants of already-tracked elements | |
● should replace descendants of tracked elements | |
hidden toggle | |
● should trigger an update | |
with-transfer | |
● should not instantiate transfer layer on setup | |
● should collect turn off transferrable | |
● should collect turn on transferrable with top = 0 | |
● should collect turn on transferrable with top != 0 | |
● should collect turn on transferrable with bottom = 0 | |
● should not disregard invisible element if it has forceTransfer | |
● should disregard element if it has forceTransfer=false | |
● should collect turn on transferrable with bottom != 0 | |
● should collect z-index | |
WARN: '[FixedLayer] In order to improve scrolling performance in Safari, we now move the element to a fixed positioning layer:', | |
● should transfer element | |
● should ignore transfer when non-transferrable | |
WARN: '[FixedLayer] In order to improve scrolling performance in Safari, we now move the element to a fixed positioning layer:', | |
WARN: '[FixedLayer] Failed to move the element to the fixed position layer. This is most likely due to the compound CSS selector:', | |
● should return transfered element if it no longer matches | |
WARN: '[FixedLayer] In order to improve scrolling performance in Safari, we now move the element to a fixed positioning layer:', | |
● should remove transfered element if it no longer exists | |
● should disregard transparent element | |
● should force transfer for visibility=hidden element | |
● should user error when inline styles may be overriden | |
WARN: '[FixedLayer] In order to improve scrolling performance in Safari, we now move the element to a fixed positioning layer:', | |
● should sync attributes between body and layer | |
● should sync invalid-named attributes to layer | |
hidden toggle | |
● should trigger an update | |
FixedLayer Setup Execution Bailouts | |
● should not perform setup when served canonically | |
● should perform setup when served within a viewer | |
FixedLayer Setup Execution Bailouts with Local Development | |
● should perform setup when served canonically | |
● should perform setup when served within a viewer | |
shadow transfer | |
● should create layer correctly | |
WARN: '[FixedLayer] In order to improve scrolling performance in Safari, we now move the element to a fixed positioning layer:', <div></div> | |
WARN: '[FixedLayer] In order to improve scrolling performance in Safari, we now move the element to a fixed positioning layer:', <div slot="i-amphtml-fixed"></div> | |
● should transfer element | |
WARN: '[FixedLayer] In order to improve scrolling performance in Safari, we now move the element to a fixed positioning layer:', <div></div> | |
WARN: '[FixedLayer] In order to improve scrolling performance in Safari, we now move the element to a fixed positioning layer:', <div></div> | |
● should return element | |
FocusHistory | |
● should subscribe to focus events | |
● should push focused elements with timestamp | |
● should push focused elements with timestamp after window.blur | |
● should push and purge | |
● should replace second push with a new timestamp | |
● should purge elements before timestamp | |
● should return false when nothing matches descendants | |
● should check active element for descendants | |
● should check history descendants | |
font-stylesheet-timeout | |
font-stylesheet-timeout | |
● should not time out for immediately loading style sheets | |
● should time out if style sheets do not load | |
● should time out from response start | |
● should time out multiple style sheets and ignore CDN URLs | |
font-display: swap | |
● should not change loaded fonts | |
● should change loading fonts to swap | |
● should not override non-default values | |
FormDataWrapper | |
entries | |
when native `entries` is not available | |
● returns empty if no form passed and no entries appended | |
● returns multiple form entries and appended entries | |
● includes the focused submit input at submit-time | |
● includes the focused submit button at submit-time | |
● includes the first submit button at submit-time if none is focused | |
● excludes the submit input if it has no name attribute | |
when entries appended | |
● returns appended string entries | |
● returns appended non-string entries | |
● returns appended entries without deleted entries | |
● does not delete items if a non-present name is deleted | |
when form passed to constructor | |
● returns empty if no entries in form | |
● returns text input entries in form | |
● returns textarea entries in form | |
● returns checked checkbox entries in form | |
● returns selected single-select entries in form | |
● returns selected multi-select entries in form | |
● deletes form element values | |
● deletes form element values | |
when native `entries` is available | |
● returns empty if no form passed and no entries appended | |
● returns multiple form entries and appended entries | |
● includes the focused submit input at submit-time | |
● includes the focused submit button at submit-time | |
● includes the first submit button at submit-time if none is focused | |
● excludes the submit input if it has no name attribute | |
when entries appended | |
● returns appended string entries | |
● returns appended non-string entries | |
● returns appended entries without deleted entries | |
● does not delete items if a non-present name is deleted | |
when form passed to constructor | |
● returns empty if no entries in form | |
● returns text input entries in form | |
● returns textarea entries in form | |
● returns checked checkbox entries in form | |
● returns selected single-select entries in form | |
● returns selected multi-select entries in form | |
● deletes form element values | |
● deletes form element values | |
Ios11NativeFormDataWrapper | |
● replaces empty file objects in forms with empty blobs | |
● appends empty blobs instead of empty file objects | |
PolyfillFormDataWrapper | |
● getFormData matches native behavior | |
getFormAsObject | |
● excludes disabled input | |
● excludes input with disabled ancestral fieldset | |
● excludes input without name | |
● returns text input entries | |
● returns text input entries with empty value | |
● returns textarea entries | |
● returns checked checkbox entries | |
● excludes unchecked checkbox entries | |
● returns checked radio button entries | |
● excludes unchecked radio button entries | |
● returns first option for select with nothing selected | |
● returns empty for multi-select with nothing selected | |
● returns selected entry in single-select | |
● returns single selected entry in multi-select | |
● returns multiple selected entries in multi-select | |
● returns the first submit input entries if none focused | |
● returns focused submit input entries | |
● returns the first submit button entries if none focused | |
● returns focused button input entries | |
● returns multiple form entries | |
isDisabled | |
elements without ancestral fieldset | |
● returns true for disabled elements | |
● returns false for enabled elements | |
elements with ancestral fieldset | |
● returns true for enabled elements with disabled ancestral fieldset | |
● returns false for enabled elements with enabled ancestral fieldset | |
● returns true for disabled elements with enabled ancestral fieldset | |
isFieldDefault | |
text field | |
● returns true if text field's value matches its default value | |
● returns false if text field's value does not match its default value | |
textarea | |
● returns true if textarea's value matches its default value | |
● returns false if textarea's value does not match its default value | |
radio button | |
● returns true if the radio button is in its default state | |
● returns false if the radio button is not in its default state | |
checkbox | |
● returns true if checkbox is in its default state | |
● returns false if checkbox is not in its default state | |
single select dropdown | |
● returns true if the dropdown's selections match its default selections | |
● returns false if the dropdown's selections does not match its default selections | |
multi select dropdown | |
● returns true if the dropdown's selections match its default selections | |
● returns false if the dropdown's selections does not match its default selections | |
isFieldEmpty | |
checkbox | |
● returns false if the checkbox is checked | |
● returns true if the checkbox is not checked | |
radio button | |
● returns false if the radio is checked | |
● returns true if the radio is not checked | |
text field | |
● returns true if the text field is empty | |
● returns false if the text field is not empty | |
textarea | |
● returns true if the textarea is empty | |
● returns false if the textarea is not empty | |
dropdown menu | |
● always returns false | |
unsupported elements | |
● throws an error | |
friendly-iframe-embed | |
● should follow main install steps | |
● should write doc if srcdoc is not available (skipped) | |
● should create ampdoc and install extensions | |
● should create ampdoc and install extensions with host | |
● should install extensions | |
● should pass pre-install callback | |
● should install and dispose services (skipped) | |
● should dispose ampdoc | |
● should start invisible by default and update on request | |
● should support host (skipped) | |
● should await initial load (skipped) | |
● should await initial with host (skipped) | |
mergeHtml | |
● should install base | |
● should install fonts | |
● should escape urls | |
● should pre-pend to html | |
● should insert into head | |
● should insert into head w/o html | |
● should insert before body | |
● should insert before body w/o html | |
● should insert after html | |
● should insert CSP | |
child document ready and loaded states | |
● should wait until ready (skipped) | |
● should wait until ready for doc.write case (skipped) | |
● should wait for loaded state (skipped) | |
● should wait for loaded state for doc.write case (skipped) | |
● should add violation listener (skipped) | |
child document ready polling | |
● should not poll if body is already ready | |
● should poll until ready | |
● should stop polling when loaded | |
● should stop polling when loading failed (skipped) | |
full overlay mode | |
● should not throw if inside an amp-ad | |
● should throw if not inside an amp-ad | |
● resizes body and fixed container when entering | |
● should reset body and fixed container when leaving | |
installExtensionsInChildWindow | |
● should set window hierarchy | |
● should install runtime styles | |
● should install built-ins | |
● should adopt standard services | |
● should install extensions in child window | |
● should adopt extension services | |
● should call pre-install callback before other installs (skipped) | |
installStandardServicesInEmbed | |
● verify order of adopted services for embed | |
installExtensionsInFie | |
● should set window hierarchy | |
● should install runtime styles | |
● should install built-ins | |
● should create new standard services | |
● should adopt parent standard services | |
● should install extensions in child window | |
● should adopt extension services | |
● should call pre-install callback before other installs | |
TapRecognizer | |
● should allow single-point touchstart | |
● should deny two-point touchstart | |
● should allow small drift | |
● should deny large drift | |
● should signal ready on touchend | |
● should emit and end on start | |
DoubletapRecognizer | |
● should allow single-point touchstart | |
● should deny two-point touchstart | |
● should allow small drift | |
● should deny large drift | |
● should ask pending for first touchend | |
● should send ready for second touchend | |
● should emit and end on start | |
SwipeXYRecognizer | |
● should allow single-point touchstart | |
● should deny two-point touchstart | |
● should allow small drift before requesting ready | |
● should send ready after significant move | |
● should emit on start | |
● should emit on touchmove after start | |
● should stop on touchend; velocity doesn't change | |
● should stop on touchend; velocity changes | |
● should ignore additional touches if eventing | |
TapzoomRecognizer | |
● should allow single-point touchstart | |
● should deny two-point touchstart | |
● should allow small drift for tap | |
● should deny large drift for tap | |
● should ask pending for first touchend | |
● should ignore small drift after first tap | |
● should send ready after significant move | |
● should emit on start | |
● should emit on touchmove after start | |
● should stop on touchend | |
PinchRecognizer | |
● should wait and listen on single-point touchstart | |
● should allow two-point touchstart | |
● should allow small drift before requesting ready | |
● should send ready after significant move | |
● should allow small drift before cancelling and then cancel | |
● should emit on start | |
● should emit on touchmove after start | |
● should stop on touchend; velocity doesn't change | |
● should stop on touchend; velocity changes | |
● should ignore additional touches if eventing | |
Gestures | |
● onPointerDown should be called | |
● should proceed with series if touchstart returns true | |
● should cancel series if touchstart returns false | |
● should cancel series if touchmove returns false | |
● should enter tracking mode on touchstart true | |
● should stay in tracking mode on touchmove true | |
● should exit tracking mode on touchmove false | |
● should exit tracking mode on touchend without pending | |
● should stay in tracking mode on touchend with pending | |
● should reset pending state in events if expired | |
● should cancel tracking for ready recognizers | |
● should deny ready state if already eventing | |
● should enter ready state | |
● should deny pending state if already eventing | |
● should enter ready state | |
● should stop eventing | |
● should deny emit if another eventing | |
● should allow emit | |
● should ignore pass - nothing to do | |
● should allow to start with no competition | |
● should wait while others are pending | |
● should allow youngest to start | |
● should allow event to propagate when nothing happening | |
● should cancel event when eventing | |
● should cancel event after eventing stopped | |
● should cancel event when anyone is ready | |
● should cancel event when anyone is pending | |
● should gesture recognizer on removeGesture | |
● should remove listeners and shared cache instance on cleanup | |
Gestures - with shouldNotPreventdefault | |
● should cancel event when eventing | |
● should cancel event after eventing stopped | |
● should cancel event when anyone is ready | |
● should cancel event when anyone is pending | |
Gestures - with shouldStopPropagation | |
● should stop event from propagating | |
getHtml | |
● should correctly works with empty second parameter | |
● should correctly works with attributes array | |
● should correctly works with attributes array | |
● should works only with attributes from whitelist | |
● should correctly work with wrong selector | |
HiddenObserver | |
● initializes mutation observer on first listen | |
● keeps mutation observer on second listen | |
● frees mutation observer after last unlisten | |
● keeps mutation observer after second-to-last unlisten | |
● passes MutationRecords to handler | |
History | |
● should initialize correctly | |
● should push new state | |
● should pop previously pushed state | |
● should return and call callback when history popped | |
● should return and call callback with state when history popped | |
● should replace previously pushed state | |
● should get previously pushed state | |
● should push a new state and replace it for target | |
● should pop previously pushed state via goBack | |
● should NOT pop first state via goBack | |
● should get fragment | |
● should update fragment | |
History install | |
● should create natural binding and make it singleton | |
● should create virtual binding | |
HistoryBindingNatural | |
● should initialize correctly | |
● should initialize correctly with preexisting state | |
● should preserve the initial state if possible | |
● should override history.pushState and set its properties | |
● should override history.replaceState and set its properties | |
● should not pass in `url` argument to original replace state if parameter is undefined | |
● should push new state in the window.history and notify | |
● should pop a state from the window.history and notify | |
● should restore previous state after pop and notify | |
● should get current state | |
● should replace current state | |
● should update its state and notify on history.back | |
● should update path from URL parameter | |
● should strip fragment from URL parameter | |
● should append the fragment parameter to the URL parameter | |
HistoryBindingVirtual | |
● should initialize correctly | |
WARN: '[History] Ignored unexpected "%s" data:', 'pushHistory', undefined | |
`pushHistory` API | |
● viewer does not support responses | |
● viewer supports responses | |
WARN: '[History] Ignored unexpected "%s" data:', 'pushHistory', true | |
● handles bad viewer responses | |
WARN: '[History] Ignored unexpected "%s" data:', 'popHistory', undefined | |
`popHistory` API | |
● viewer does not support responses | |
● viewer supports responses | |
WARN: '[History] Ignored unexpected "%s" data:', 'popHistory', true | |
● handles bad viewer responses | |
WARN: '[History] Ignored unexpected "%s" data:', 'replaceHistory', undefined | |
`replaceHistory` API | |
● viewer does not support responses | |
● viewer supports responses | |
WARN: '[History] Ignored unexpected "%s" data:', 'replaceHistory', true | |
● handles bad viewer responses | |
● supports full URL replacement | |
● does not support full URL replacement | |
`historyPopped` API | |
● pushes and pops | |
● sends {stackIndex: <number>, title: <string>} | |
● sends {newStackIndex: <number>} | |
WARN: '[History] Ignored unexpected "historyPopped" data:', Object{invalid: 'data'} | |
● sends invalid data | |
Local Hash Navigation | |
● should push a new state and replace it for target on Natural (skipped) | |
● should push a new state and replace it for target on Virtual | |
WARN: '[lru-cache] Trimming LRU cache' | |
Get and update fragment | |
● should get fragment on Natural | |
● should update fragment on Natural | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should update fragment on Natural if the url does not contain fragment previously | |
● should get fragment from the viewer on Virtual if the viewer has capability of getting fragment | |
● should NOT get fragment from the viewer on Virtual if the viewer does NOT have capability of getting fragment | |
● should NOT get fragment from the viewer on Virtual if the viewer does NOT return a fragment | |
● should update fragment of the viewer on Virtual if the viewer has capability of updating fragment | |
● should NOT update fragment of the viewer on Virtual if the viewer does NOT have capability of updating fragment | |
ie-media-bug | |
● should bypass polling for non-IE browsers | |
● should bypass polling when matchMedia is not broken | |
● should poll when matchMedia is wrong, but eventually succeeds | |
● should poll until times out | |
● should tolerate matchMedia exceptions | |
iframe-helper | |
● should assert src in iframe | |
● should assert iframe is detached | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should listen to iframe messages from non-3P frame | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should listen to iframe messages from 3P frame | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should listen to iframe messages from nested 3P frame | |
● should un-listen and resolve promise after first hit (skipped) | |
● should un-listen on next message when iframe is unattached (skipped) | |
● should set sentinel on postMessage data (skipped) | |
pausable iframes | |
● should configure pausable with no "allow" | |
● should configure pausable with an existing "allow" | |
● should be pausable | |
● should be unpausable b/c feature is allowed | |
● should be unpausable b/c feature is not supported | |
● should be unpausable b/c feature policies are not supported | |
● should pause/resume | |
test-iframe-createIframeWithMessageStub | |
● should get message from fragment and post back to parent window | |
● should echo back message to parent window | |
WARN: '[lru-cache] Trimming LRU cache' | |
impression | |
● should do nothing if the experiment is off | |
● should resolve if no click no replaceUrl | |
WARN: '[IMPRESSION]', Error: TrackImpressionPromise timeout | |
Error: TrackImpressionPromise timeout | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:352:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/timer-impl.js:142:23 | |
at wrapped (http://localhost:9876/home/mdmower/source/amphtml/src/service/timer-impl.js:83:9) | |
at callTimer (http://localhost:9876/home/mdmower/source/amphtml/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js:421:24) | |
at doTickInner (http://localhost:9876/home/mdmower/source/amphtml/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js:869:29) | |
at doTick (http://localhost:9876/home/mdmower/source/amphtml/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js:950:20) | |
at Object.tick (http://localhost:9876/home/mdmower/source/amphtml/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js:957:20) | |
at Context.<anonymous> (http://localhost:9876/home/mdmower/source/amphtml/test/unit/test-impression.js:90:11) | |
at callFn (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5432:21) | |
● should resolve trackImpressionPromise after timeout | |
WARN: '[IMPRESSION] Error request replaceUrl from viewer', Error: No messaging channel: undefined | |
Error: No messaging channel: undefined | |
at getChannelError (http://localhost:9876/home/mdmower/source/amphtml/src/service/viewer-impl.js:875:20) | |
at ViewerImpl.sendMessageInternal_ (http://localhost:9876/home/mdmower/source/amphtml/src/service/viewer-impl.js:775:31) | |
at ViewerImpl.sendMessageAwaitResponse (http://localhost:9876/home/mdmower/source/amphtml/src/service/viewer-impl.js:746:17) | |
at handleReplaceUrl (http://localhost:9876/home/mdmower/source/amphtml/src/impression.js:154:6) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/impression.js:104:33 | |
● should resolve after clickUrl and replaceUrl | |
● shouldAppendExtraParams | |
clickUrl | |
● should do nothing if there is no click arg | |
● should do nothing if there is the click arg is http | |
● should invoke click URL with experiment on | |
● should invoke click URL in trusted viewer | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should invoke click URL for trusted referrer | |
WARN: '[IMPRESSION]', Error: TrackImpressionPromise timeout | |
Error: TrackImpressionPromise timeout | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:352:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/timer-impl.js:142:23 | |
at wrapped (http://localhost:9876/home/mdmower/source/amphtml/src/service/timer-impl.js:83:9) | |
at callTimer (http://localhost:9876/home/mdmower/source/amphtml/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js:421:24) | |
at doTickInner (http://localhost:9876/home/mdmower/source/amphtml/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js:869:29) | |
at doTick (http://localhost:9876/home/mdmower/source/amphtml/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js:950:20) | |
at Object.tick (http://localhost:9876/home/mdmower/source/amphtml/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js:957:20) | |
at Context.<anonymous> (http://localhost:9876/home/mdmower/source/amphtml/test/unit/test-impression.js:197:13) | |
at callFn (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5432:21) | |
● should do nothing if response is not received | |
● should do nothing if get empty response | |
● should resolve if get no content response | |
● should still resolve on request error | |
● should resolve trackImpressionPromise if resolve click | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace location href only with query params | |
replaceUrl | |
● do nothing if no init replaceUrl param | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should use init replaceUrl parm if viewer has no capability | |
WARN: '[IMPRESSION] Error request replaceUrl from viewer', Error: No messaging channel: undefined | |
Error: No messaging channel: undefined | |
at getChannelError (http://localhost:9876/home/mdmower/source/amphtml/src/service/viewer-impl.js:875:20) | |
at ViewerImpl.sendMessageInternal_ (http://localhost:9876/home/mdmower/source/amphtml/src/service/viewer-impl.js:775:31) | |
at ViewerImpl.sendMessageAwaitResponse (http://localhost:9876/home/mdmower/source/amphtml/src/service/viewer-impl.js:746:17) | |
at Function.invoke (http://localhost:9876/absolute/tmp/node_modules/sinon/lib/sinon/proxy-invoke.js:47:1) | |
at ViewerImpl.sendMessageAwaitResponse (http://localhost:9876/absolute/tmp/node_modules/sinon/lib/sinon/proxy.js:230:1) | |
at handleReplaceUrl (http://localhost:9876/home/mdmower/source/amphtml/src/impression.js:154:6) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/impression.js:104:33 | |
● should request replaceUrl if viewer signals | |
● should resolve if receive viewer response | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace location href with replaceUrl from viewer | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
getExtraParamsUrl | |
● should append gclid and gclsrc from window href | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should respect window location href | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should respect param in url | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should respect param in data-amp-addparams | |
isTrustedReferrer | |
● should return true for whitelisted hosts | |
● should not trust host as referrer with http | |
● should not trust non-whitelisted hosts | |
● should find and await all visible content elements in given rect | |
Input | |
● should initialize in touch mode | |
● should fire states immediately | |
● should release mousemove event asap | |
● should detect mouse | |
● should try to detect mouse again | |
● should ignore mouse move if it belongs to touch | |
● should stop trying to detect mouse after few attempts | |
● should detect keyboard states | |
● should ignore keyboard state on input | |
test-input.js setupInputModeClasses | |
● should add amp-mode-mouse class to body when mouseConfirmed | |
● should add amp-mode-keyboard-active class to body when onKeyDown | |
3p integration.js | |
● should register integrations | |
● should not throw validateParentOrigin without ancestorOrigins | |
● should validateParentOrigin with correct ancestorOrigins | |
● should throw in validateParentOrigin with incorrect ancestorOrigins | |
● should parse JSON from fragment unencoded (most browsers) | |
● should parse JSON from fragment encoded (Firefox) | |
● should be ok with empty fragment | |
● should call the right action based on type | |
● should support config processing in draw3p | |
● should throw if origin was never validated | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow all types on localhost | |
● should allow all types on default host | |
● should allow all types on unique default host | |
● should validate types on custom host | |
● should ensure the 3p frame is actually framed | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should validateAllowedEmbeddingOrigins: non-cache | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should validateAllowedEmbeddingOrigins: cache | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should validateAllowedEmbeddingOrigins: referrer non-cache | |
● should validateAllowedEmbeddingOrigins: referrer cache | |
IntersectionObserverApi | |
● should tick if element in viewport when start sending io | |
● should tick on inViewport value when element call fire | |
● should not tick before start observing | |
● should destroy correctly | |
getIntersectionChangeEntry | |
● without owner | |
● with owner | |
IntersectionObserverPolyfill | |
threshold | |
● default threshold is "[0]" | |
● accept a single number threshold | |
● threshold value must be finite number | |
● will be sorted | |
● should NOT contain value less than 0 or greater than 1 | |
● getThresholdSlot function | |
tick function | |
● should tick with right threshold | |
● should trigger for new observed element | |
mutation observer | |
● should create a mutation observer, on initial observer | |
● should remove mutation observer, on disconnect | |
w/o container should get IntersectionChangeEntry when | |
● completely in viewport | |
● intersects on the edge | |
● intersects the viewport (bottom right) | |
● intersects the viewport (top left) | |
● NOT intersects when element outside (top left) viewport | |
● NOT intersects with element outside (bottom) viewport | |
● element has owner | |
w/ container should get IntersectionChangeEntry when | |
● nested element in container in viewport | |
● nested element in container, container intersect viewport | |
● nested element in container, container not in viewport | |
● nested element outside container but in viewport | |
● element has an owner | |
with multiple elements | |
● should tick on multi elements | |
● should only fire for elements that crossed threshold | |
● should stop observing after unobserve | |
intersectionRatio | |
● should return a valid ratio | |
● should not return NaN | |
● intersect correctly base | |
● intersects on the edge | |
● intersect correctly 2 | |
● intersect correctly 3 | |
● intersect correctly 3 | |
● intersects with an owner element | |
● does not intersect with an elements out of viewport | |
● does not intersect with an element out of viewport | |
IntersectionObserver | |
● should not send intersection | |
● should send intersection | |
● should send more intersections | |
● should init listeners when element is in viewport | |
● should unlisten listeners when element is out of viewport | |
● should go into in-viewport state for initially visible element | |
● should not send intersection after destroy is called | |
INFO: '[JANK] Paint latency: 20ms' | |
jank-meter | |
● should use first schedule time when scheduled multiple times | |
INFO: '[JANK] Paint latency: 17ms' | |
● should count bad frames correctly | |
json | |
getValueForExpr | |
● should return self for "." | |
● should return a simple value | |
● should return a nested value | |
● should return a nested value without proto | |
● should shortcircuit if a parent in chain missing | |
● should shortcircuit if a parent in chain is not an object | |
● should only search in own properties | |
● should support array index | |
● should only search in own properties of arrays | |
recreateNonProtoObject | |
● should recreate an empty object | |
● should recreate an object | |
● should recreate a nested object | |
tryParseJson | |
● should return object for valid json | |
● should not throw and return null for invalid json | |
● should call onFailed for invalid and not call for valid json | |
getChildJsonConfig | |
● return json config | |
● throw if not one script | |
● throw if type is not application/json | |
● throw if cannot parse json | |
deepEquals | |
● should throw on non-finite depth arg | |
● should handle null and empty objects | |
● should check strict equality | |
● should check deep equality in nested arrays and objects | |
● should check array order | |
● should not check object key order | |
● should stop diving once depth arg is exceeded | |
layout-delay-meter | |
● should tick when there is a delay | |
● should tick when there is no delay | |
● should not tick if it never enterViewport | |
● should not tick if it never startLayout | |
LayoutRect | |
● layoutRectLtwh | |
● layoutRectsOverlap | |
● expandLayoutRect | |
● moveLayoutRect | |
● layoutRectFromDomRect | |
● rectIntersection | |
cloneLayoutMarginsChangeDef | |
● should clone margins change correctly into new object | |
layoutRectSizeEquals | |
● should detect changes | |
● should detect no changes | |
areMarginsChanged | |
● should find margins are not changed when values the same | |
● should find margins are not changed when all changes undefined | |
● should find margins to be changed when top different | |
● should find margins to be changed when right different | |
● should find margins to be changed when bottom different | |
● should find margins to be changed when left different | |
Layout | |
● parseLayout | |
● are loading components allowed | |
● parseLayout - failure | |
● parseLength | |
● getLengthUnits | |
● getLengthNumeral | |
● assertLength | |
● assertLengthOrPercent | |
● layout=nodisplay | |
● layout=nodisplay with SSR | |
● layout=fixed | |
● layout=fixed - default with width/height | |
● layout=fixed - requires width/height | |
● layout=fixed-height | |
● layout=fixed-height, with width=auto | |
● layout=fixed-height, prohibit width!=auto | |
● layout=fixed-height - default with height | |
● layout=fixed-height - default with height and width=auto | |
● layout=fixed-height - requires height | |
● layout=responsive | |
● layout=responsive - default with sizes | |
● layout=intrinsic | |
● layout=intrinsic - default with sizes | |
● layout=fill | |
● layout=container | |
● layout=flex-item | |
● layout=fluid - default | |
● layout=fluid - default with width | |
● layout=unknown | |
● should configure natural dimensions; default layout | |
● should configure natural dimensions; default layout; with width | |
● should configure natural dimensions; default layout; with height | |
● should configure natural dimensions; layout=fixed | |
● should configure natural dimensions; layout=fixed-height | |
● should layout with pixel values | |
● should layout with valid with auto width value | |
● should fail invalid width | |
● should fail invalid height | |
● should trust server layout | |
● should read sizer for responsive layout | |
● should allow sizer to be missing | |
● should allow sizer to be missing even if other children there | |
● should fail when server generates invalid layout | |
● should not re-layout cloned content | |
localization | |
localized string IDs | |
● should have unique values | |
localization service | |
● should get string text | |
● should handle registration of uppercase locales | |
● should utilize fallback if string is missing | |
● should not utilize fallback if string is present | |
● should have language fallbacks | |
● should default to English | |
pseudolocales | |
● should transform strings | |
● should contain all string IDs from original locale | |
Logging | |
Level | |
● should be enabled when directly allowed | |
● should be disabled when directly disallowed | |
● should be disabled with no console | |
● should be disabled with hash param log=0 | |
● should be enabled when forced for tests | |
● should be enabled as INFO when forced for localDev | |
Level messages | |
● should log correctly for FINE | |
● should log correctly for INFO | |
● should log correctly for WARN | |
● should log correctly for ERROR | |
● should report ERROR even when OFF and coallesce messages | |
● should report ERROR and mark with expected flag | |
● should report ERROR when OFF from a single message | |
● should report ERROR when OFF from a single error object | |
UserLog | |
● should be WARN by default | |
● should be enabled in development mode | |
● should be enabled with log=1 | |
● should be enabled with log>1 | |
● should be configured with USER suffix | |
DevLog | |
● should be disabled by default | |
● should NOT be enabled in development mode | |
● should NOT be enabled with log=1 | |
● should be enabled as INFO with log=2 | |
● should be enabled as FINE with log=3 | |
● should be configured with no suffix | |
asserts | |
● should fail | |
● should not fail | |
● should not fail direct dev | |
● should not fail direct user | |
● should fail direct dev | |
● should fail direct user | |
● should substitute | |
● should add element and assert info | |
● should recognize asserts | |
● should recognize non-asserts | |
● should create expected error from message | |
● should create suffixed errors from message | |
● should create suffixed errors from error | |
● should only add suffix once | |
● should strip suffix if not available | |
● should create other-suffixed errors | |
● should pass for elements | |
● should should identify non-elements | |
assertString | |
● should return non-empty string | |
● should return empty string | |
● should fail with on non string | |
assertNumber | |
● should return the number value | |
● should return zero | |
● should return NaN | |
● should fail with on non number | |
assertEnumValue | |
● should return the enum value | |
● should fail with unknown enum value | |
● should fail with values of different case | |
assertArray | |
● should return the array value | |
● should return empty array | |
● should fail with non-array values | |
error | |
● reuse errors | |
rethrowAsync | |
● should rethrow error with single message | |
● should rethrow a single error | |
● should rethrow error with many messages | |
● should rethrow error with original error and messages | |
● should preserve error suffix | |
duplicateErrorIfNecessary | |
● should not duplicate if message is writeable | |
● should duplicate if message is non-writable | |
● copies all the tidbits | |
embed error | |
● should return logger for user-error | |
● should return logger for embed-error | |
● should not create extra identical loggers | |
expandMessageArgs with URL | |
● returns url without args | |
● returns url with one arg | |
● returns url with many args | |
Extracted messages by ids | |
● displays URL for assertString without messages | |
● expands message from table for assertString | |
● displays URL for assertNumber without messages | |
● expands message from table for assertNumber | |
● displays URL for assertArray without messages | |
● expands message from table for assertArray | |
● displays URL for assertBoolean without messages | |
● expands message from table for assertBoolean | |
MediaSessionAPI Helper Functions | |
● should parse the schema and find the image | |
● should parse the og-image | |
● should parse the favicon | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should set the media session | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should throw if artwork src is invalid - object | |
● should throw if artwork src is invalid - string | |
● should throw if artwork is not array | |
modal | |
getElementsToAriaHide | |
● should return all siblings | |
● should return aunts/uncles | |
● should not return children | |
● should not return cousins | |
setModalAsOpen | |
● should hide via aria for elements without aria-hidden | |
● should hide via aria for elements with aria-hidden="true" | |
● should hide via aria for elements with aria-hidden="false" | |
● should unhide ancestors | |
● should hide elements outside of the containing ShadowRoot | |
● should make elements outside of the tree non-tabbable | |
● should make elements outside of the ShadowRoot non-tabbable | |
setModalAsClosed | |
● should remove aria-hidden for elements without it | |
● should restore aria-hidden="true" | |
● should restore aria-hidden="false" | |
● should clear tabindex if none was present | |
● should restore tabindex | |
nested opens/closes | |
● should handle nested opens for aria-hidden | |
● should handle nested opens for tabindex | |
WARN: '[lru-cache] Trimming LRU cache' | |
getMode | |
● CDN - lite mode on | |
WARN: '[lru-cache] Trimming LRU cache' | |
● CDN - lite mode off | |
WARN: '[lru-cache] Trimming LRU cache' | |
● Origin - lite mode on | |
WARN: '[lru-cache] Trimming LRU cache' | |
● Origin - lite mode off | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should support different html formats for development | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not support invalid format for development | |
getRtvVersion | |
● should default to version | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should use window.AMP_CONFIG.v if not in dev mode | |
Motion calcVelocity | |
● should dampen velocity when prevVelocity is 0 | |
● should not affect velocity when prevVelocity the same | |
● should slow down deceleration when prevVelocity is available | |
● should be zero when both new and old velocity are zero | |
● should calculate even when time is zero | |
● should calculate continuosly | |
Motion continueMotion | |
● should follow positive inertia | |
● should halt when requested while following positive inertia | |
● should follow negative inertia | |
● should halt when requested while following negative inertia | |
Mustache | |
● should escape html | |
● should transform unescaped html | |
● should only expand own properties | |
● should NOT allow calls to builtin functions | |
● should NOT allow delimiter substituion | |
mutator changeSize | |
● should schedule separate requests | |
● should schedule height only size change | |
● should remove request change size for unloaded resources | |
● should schedule width only size change | |
● should schedule margin only size change | |
● should only schedule latest request for the same resource | |
● should NOT change size if it didn't change | |
● should change size | |
● should change size when only width changes | |
● should change size when only height changes | |
● should pick the smallest relayoutTop | |
● should measure non-measured elements | |
attemptChangeSize rules wrt viewport | |
● should NOT change size when height is unchanged | |
● should NOT change size when height and margins are unchanged | |
● should change size when margins but not height changed | |
● should change size when forced | |
● should change size when document is invisible | |
● should change size when active | |
● should NOT change size via activation if has not been active | |
● should change size via activation if has been active | |
● should change size when below the viewport | |
● should change size when below the viewport and top margin also changed | |
● should change size when box top below the viewport but top margin boundary is above viewport but top margin in unchanged | |
● should NOT change size when top margin boundary within viewport and top margin changed | |
● should defer when above the viewport and scrolling on | |
● should defer change size if just inside viewport and viewport scrolled by user. | |
● should NOT change size and call overflow callback if viewport not scrolled by user. | |
● should change size when above the vp and adjust scrolling | |
● should NOT resize when above vp but cannot adjust scrolling | |
● should resize if multi request above vp can adjust scroll | |
● should NOT resize if multi req above vp cannot adjust scroll | |
● should NOT adjust scrolling if height not change above vp | |
● should adjust scrolling if height change above vp | |
● in vp should NOT call overflowCallback if new height smaller | |
● in viewport should NOT change size if in the last 15% but NOT in the last 1000px | |
● in viewport should NOT change size and calls overflowCallback | |
● should change size if in viewport, but only modifying width and reflow is not possible | |
● should NOT change size if in viewport, only modifying width and reflow is possible | |
● should NOT change size when resized margin in viewport and should call overflowCallback | |
● should change size when resized margin above viewport | |
● should reset pending change size when rescheduling | |
● should force resize after focus | |
attemptChangeSize rules for element wrt document | |
● should NOT change size when far the bottom of the document | |
● should change size when close to the bottom of the document | |
mutator mutateElement and collapse | |
● should mutate from visible to invisible | |
● should mutate from visible to invisible on itself | |
● should mutate from invisible to visible | |
● should mutate from visible to visible | |
● attemptCollapse should not call attemptChangeSize | |
● attemptCollapse should complete collapse if resize succeed | |
● attemptCollapse should NOT complete collapse if resize fail | |
● should complete collapse and trigger relayout | |
● should ignore relayout on an already collapsed element | |
WARN: '[lru-cache] Trimming LRU cache' | |
Navigation | |
non-embed | |
discovery | |
● should select a direct link | |
● should select a custom linker target | |
● should NOT handle custom protocol when not iframed | |
● should discover a link from a nested target | |
● should NOT proceed if event is cancelled | |
● should ignore a target without link | |
● should ignore a link without href | |
ERROR: 'The test "Navigation non-embed anchor mutators should throw error if priority is already in use" contains an "allowConsoleError" block that didn't result in a call to console.error.' | |
anchor mutators | |
● should throw error if priority is already in use | |
● should execute in order | |
● verify order of operations | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
link expansion | |
● should expand a link | |
● should only expand with whitelist | |
● should expand link if event type is right click | |
WARN: '[lru-cache] Trimming LRU cache' | |
link decoration | |
● should decorate for page w/ ga tag | |
● should not decorate for page w/o ga tag | |
● should not decorate for embed | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should only decorate w/ params exists in sourceUrl | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should append gclid and gclsrc to outgoing link | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should respect params in outgoing link | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should repsect data-amp-addparams | |
● should respect async gclid and gclsrc assignment | |
when linking to ftp: protocol | |
● should always open in _blank when embedded | |
● should not do anything not embedded | |
when linking to custom protocols e.g. whatsapp: | |
● should open link in _top on Safari iOS when embedded | |
● should not do anything on when not embedded | |
● should not do anything for mailto: protocol | |
● should not do anything on other non-safari iOS | |
● should not do anything on other platforms | |
when linking to a different origin or path | |
● should not do anything on path change | |
● should not do anything on origin change | |
● should not do anything when there is no hash | |
● should not do anything on a query change | |
when linking to identifier | |
● should find element by id | |
WARN: '[navigation] failed to find element with id=test or a[name=test]' | |
● should always call preventDefault | |
● should call querySelector on document if element with id is not found | |
● should call scrollIntoView twice if element with id is found | |
● should use escaped css selectors with spaces | |
● should use escaped css selectors with quotes | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should push and pop history state with pre-existing hash | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should only scroll same hash, no history changes | |
when linking to rel=amphtml | |
● should delegate navigation if viewer supports A2A | |
● should behave normally if viewer does not support A2A | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
navigateTo | |
● should reject invalid protocols | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: 'The test "Navigation non-embed navigateTo should navigate relative to source url" contains an "allowConsoleError" block that didn't result in a call to console.error.' | |
● should navigate relative to source url | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should delegate navigation to viewer if necessary | |
fie embed | |
fie embed | |
● should adopt correctly to embed | |
when linking to a different origin or path | |
● should update target to _blank | |
● should keep the target when specified | |
● should reset the target when illegal specified | |
when linking to identifier | |
● should NOT do anything, but cancel the event | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
anchor-click-interceptor | |
● should replace CLICK_X and CLICK_Y in href | |
NotificationUiManager | |
Notification UI Manager | |
● show UI in sequence | |
● queue empty handler | |
● queue not empty handler | |
Object | |
● hasOwn | |
● ownProperty | |
map | |
● should make map like objects | |
● should make map like objects from objects | |
deepMerge | |
● should deep merge objects | |
● should NOT deep merge arrays | |
● should use Object.assign if merged object exceeds max depth | |
● should handle destination objects with circular references | |
● should throw on source objects with circular references | |
● should merge null and undefined correctly | |
● should short circuit when merging the same object | |
Observable | |
● add-remove-fire | |
OriginExperiments | |
● should return false if no token is found | |
● should return false if crypto is unavailable | |
● should return false for missing token | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return false if origin does not match | |
TokenMaster | |
TokenMaster | |
● should throw for an unknown token version number | |
● should throw if config length exceeds byte length | |
● should throw if signature cannot be verified | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should throw if approved origin is not current origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return false if trial has expired | |
● should return true for a well-formed, unexpired token | |
● should ignore trailing slash on location | |
owners-impl | |
schedulePause | |
● should not throw with a single element | |
● should not throw with an array of elements | |
● should be ok with non amp children | |
● should call pauseCallback on custom element | |
● should call unlayoutCallback when unlayoutOnPause | |
scheduleResume | |
● should not throw with a single element | |
● should not throw with an array of elements | |
● should be ok with non amp children | |
● should call resumeCallback on paused custom elements | |
● should call resumeCallback on non-paused custom elements | |
scheduleLayout | |
● should schedule when resource is READY_FOR_LAYOUT | |
● should schedule after build | |
scheduleUnlayout | |
● should not throw with a single element | |
● should not throw with an array of elements | |
● should be ok with non amp children | |
● should schedule on custom element with multiple children | |
schedulePreload | |
● should not throw with a single element | |
● should not throw with an array of elements | |
● should be ok with non amp children | |
● should schedule on custom element with multiple children | |
● should schedule on nested custom element placeholder | |
● should schedule amp-* placeholder inside non-amp element | |
requireLayout | |
● should layout AMP element itself | |
● should layout non-AMP element's all AMP children | |
● should layout element w/ state=LAYOUT_FAILED | |
● should not layout element w/ state=LAYOUT_COMPLETE | |
● should not double schedule element w/ state=LAYOUT_SCHEDULED | |
● should not require layout for undisplayed element | |
Pass | |
● handler called | |
● schedule no delay | |
● schedule with delay | |
● schedule later | |
● schedule earlier | |
● should have a min delay for recursive schedule | |
performance | |
● should wait for visible resources | |
when viewer is not ready | |
● should queue up tick events | |
● should map tickDelta to tick | |
● should map tickDelta to non-zero tick | |
● should have max 50 queued events | |
● should add default absolute start time on the queued tick event | |
● should drop events in the head of the queue | |
when viewer is ready, | |
config | |
● should configure correctly when viewer is embedded and supports csi | |
● should configure correctly when viewer is embedded and does NOT support csi | |
● should configure correctly when viewer is embedded and does NOT support csi | |
● should configure correctly when viewer is not embedded | |
channel established | |
● should flush events when channel is ready | |
channel not established | |
● should not flush anything | |
tickSinceVisible | |
● should always be zero before viewer is set | |
● should always be zero before visible | |
● should calculate after visible | |
● should be zero after visible but for earlier event | |
and performanceTracking is off | |
● should not forward queued ticks | |
● should ignore all calls to tick | |
● should ignore all calls to flush | |
and performanceTracking is on | |
● should forward all queued tick events | |
● should have no more queued tick events after flush | |
● should forward tick events | |
● should call the flush callback | |
● should flush with the story experiment enabled | |
coreServicesAvailable | |
document started in prerender | |
● should call prerenderComplete on viewer | |
● should call prerenderComplete on viewer even if csi is off | |
● should tick `pc` with delta=400 when user request document to be visible before before first viewport completion | |
● should tick `pc` with `delta=0` when viewport is complete before user request document to be visible | |
document did not start in prerender | |
● should call prerenderComplete on viewer | |
● should tick `pc` with `opt_value=undefined` when user requests document to be visible | |
performance with experiment | |
● rtvVersion experiment | |
● addEnabledExperiment should work | |
PeformanceObserver metrics | |
● forwards first-input-delay polyfill metric | |
should forward paint metrics for performance entries | |
● created before performance service registered | |
● created after performance service registered | |
should forward largest-contentful-paint metric for performance entries | |
● after performance service registered | |
should forward first input metrics for performance entries | |
● created before performance service registered for Chromium 77 | |
forwards cumulative layout shift metric | |
● for Chromium 77 | |
● when the viewer visibility changes to inactive | |
Platform | |
● should tolerate empty or null | |
● iPhone 6 Plus v8 | |
● iPhone 6 Plus v9 | |
● iPhone 6 Plus no version | |
● iPhone ios 10.2.1 | |
● iPad 2 | |
● iPhone ios 10.2, Chrome ios | |
● Desktop Safari | |
● Desktop Safari 12 | |
● Nexus 6 Chrome | |
● Pixel Chrome 61 | |
● Firefox | |
● Firefox ios | |
● Opera android | |
● Opera ios | |
● IE | |
● IEMobile | |
● Edge | |
Array.includes | |
● finds primitives when they are present | |
● finds objects when they are present | |
● finds NaN when NaN is present | |
● should only find null when null is desired | |
● should only find undefined when undefined is desired | |
● should treat 0 and -0 as equal | |
● should respect the fromIndex argument | |
copyProperties | |
● copies own properties from proto object | |
● copies own descriptor from proto object | |
● copies own getter/setter from proto object | |
● does not override already defined property | |
● copies own properties from proto.__proto__ object | |
● copies own descriptor from proto object | |
● copies own getter/setter from proto object | |
● does not override already defined property | |
● does not override closer property with __proto__ property | |
HTMLDocument.contains | |
● should NOT override an existing method | |
● should override a existing method | |
● should polyfill document.contains API | |
● should allow a null arg | |
● should be inclusionary for documentElement | |
● should be inclusionary for document itself | |
DOMTokenList.toggle/add on non-IE | |
● should NOT override toggle in non-IE browsers | |
● should NOT override add in non-IE browsers | |
DOMTokenList.toggle/add On IE | |
● should polyfill DOMTokenList.toggle API | |
● should polyfill DOMTokenList.add API | |
Math.sign | |
● returns 1 for positive x | |
● returns -1 for negative x | |
● returns 0 for 0 | |
● returns -0 for -0 | |
● returns NaN for NaN | |
● returns NaN for non-numbers | |
Object.assign | |
● should throw an error if target is null or undefined | |
● should ignore null or undefined sources | |
● should copy and override keys from source to target | |
Object.values | |
● should disallow null and undefined | |
● should allow primitives | |
● should return values of objects | |
PositionObserver | |
PositionObserver for AMP doc | |
API functions includes observe/unobserve/changeFidelity | |
● should observe identical element and start | |
● should unobserve and stop | |
update position info at correct time | |
● should update new position with scroll event | |
● should not update if element position does not change | |
should provide correct position data | |
● overlap with viewport | |
● out of viewport | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
preconnect | |
● should preconnect | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should preconnect to origins | |
● should preconnect with known support | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should preconnect with polyfill | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should cleanup | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should preconnect to 2 different origins | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should timeout preconnects | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should timeout preconnects longer with active connect | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should add links if feature if detected | |
● should preload | |
PullToRefreshBlocker | |
● should only subscribe to touchstart initially | |
● should start tracking on touch start | |
● should NOT start tracking with non-single-touch | |
● should NOT start tracking when scrolled | |
● should stop tracking on touch end | |
● should stop tracking on touch cancel | |
● should cancel pull down on touch move | |
● should NOT cancel pull up on touch move | |
● should keep tracking on touch move if | |
DOMPurify-based | |
sanitizer tests | |
● should output basic text | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should output valid markup | |
● should NOT output security-sensitive markup | |
● should NOT output security-sensitive markup when nested | |
● should NOT output security-sensitive markup when broken | |
● should output "on" attribute | |
● should output "data-, aria-, and role" attributes | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should output "href" attribute | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow arbitrary protocols | |
● should output "rel" attribute | |
● should output "layout" attribute | |
● should output "media" attribute | |
● should output "sizes" attribute | |
● should output "heights" attribute | |
● should default target to _top with href | |
● should NOT default target to _top w/o href | |
● should output a valid target | |
● should output a valid target in different case | |
● should override a unallowed target | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should NOT output security-sensitive attributes | |
● should NOT output blacklisted values for class attributes | |
● should allow amp-subscriptions attributes | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow source::src with valid protocol | |
● should not allow source::src with invalid protocol (skipped) | |
● should allow div::template | |
● should allow form::action-xhr | |
● should allow input::mask-output | |
● should not allow unsupported attributes after a valid one | |
● should allow <amp-form>-related attributes | |
● should avoid disallowing default-supported attributes | |
● should allow <amp-lightbox> attributes | |
● should output diff marker attributes for some elements | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should resolve URLs | |
purifyTagsForTripleMustache() | |
● should output basic text | |
● should output HTML entities | |
● should output valid markup | |
● should NOT output non-whitelisted markup | |
● should compensate for broken markup | |
● should support list tags | |
● should whitelist formatting related elements | |
● should whitelist table related elements and anchor tags | |
● should sanitize tags, removing unsafe attributes | |
should sanitize `style` attribute | |
● should allow valid styles | |
● should ignore styles containing `!important` | |
● should ignore styles containing `position:fixed` | |
● should ignore styles containing `position:sticky` | |
<script> | |
● should not allow plain <script> tags | |
● should not allow script[type="text/javascript"] | |
● should not allow script[type="application/javascript"] | |
● should allow script[type="application/json"] | |
● should allow script[type="application/ld+json"] | |
● should not allow insecure <script> tags around secure ones | |
for <amp-bind> | |
● should rewrite [text] and [class] attributes | |
● should add "i-amphtml-binding" for data-amp-bind-* | |
● should NOT rewrite values of binding attributes | |
structured data | |
● [itemprop] global attribute | |
SVG | |
● should prevent XSS via <G> tag and onload attribute | |
● should prevent XSS via <SCRIPT> tag | |
● should prevent automatic execution of onload attribute without other SVG elements | |
● should prevent simple passive XSS via XLink | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should prevent XSS via "from" attribute in SVG and inline-SVG | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should output <use> only if href is relative | |
DOMPurify-based, custom html | |
AMP formats | |
● should blacklist input[type="image"] and input[type="button"] in AMP | |
● should allow input[type="file"] and input[type="password"] | |
● should sanitize certain tag attributes for AMP4Email | |
● should only allow whitelisted AMP elements in AMP4EMAIL | |
validateAttributeChange | |
● should validate script[type] | |
● should validate a[target] | |
● should disallow binding attributes | |
● should allow whitelisted-by-tag attributes | |
● should allow AMP element attributes | |
● should perform AMP runtime validations | |
getAllowedTags | |
● should contain html tags | |
● should contain svg tags | |
● should have blacklisted tags set to false | |
waitForServices | |
● should resolve if no blocking services is presented | |
● should timeout if some blocking services are missing | |
● should resolve when all extensions are ready | |
● should resolve if no service.whenReady | |
● should wait to resolve for service.whenReady | |
Resource | |
● should initialize correctly | |
● should initialize correctly when already built | |
● should not build before upgraded | |
● should build after upgraded | |
● should blacklist on build failure | |
● should mark as not ready for layout even if already measured | |
● should mark as not laid out if not yet measured | |
● should track size changes on measure | |
● should track no size changes on measure | |
● should allow to measure when not upgraded | |
● should allow measure even when not built | |
● should measure and update state | |
● should update initial box only on first measure | |
● should request measure even when not built | |
● should request measure when built | |
● should always layout if has not been laid out before | |
● should not relayout if has box has not changed | |
● should not relayout if box changed but element didn't opt in | |
● should relayout if box changed when element opted in | |
● should calculate NOT fixed for non-displayed elements | |
● should calculate fixed for always-fixed parent | |
● should calculate fixed for fixed-style parent | |
● should hide and update layout box on collapse | |
● should show and request measure on expand | |
● should ignore startLayout if already completed or failed or going | |
● should fail startLayout if not built | |
● should ignore startLayout if not visible | |
● should force startLayout for first layout | |
● should ignore startLayout for re-layout when not opt-in | |
● should force startLayout for re-layout when opt-in | |
● should complete startLayout | |
● should complete startLayout with height == 0 | |
● should fail startLayout | |
● should record layout schedule time | |
● should not record layout schedule time in startLayout | |
● should change size and update state | |
● should change size but not state | |
● should update priority | |
getPageLayoutBoxAsync | |
● should return layout box when the resource has NOT been measured | |
● should return layout box when the resource has been measured | |
placeholder measure | |
● should measure placeholder with stubbed parent | |
● should NOT measure placeholder with unstubbed parent | |
● should support abnormal case with no parent | |
● should support abnormal case with non-AMP parent | |
setInViewport | |
● should call viewportCallback when not built | |
● should call viewportCallback when built | |
Resource set/get ownership | |
● should set resource before Resource created for child element | |
● should always get the lastest owner value | |
● should remove cached value for grandchild | |
● should not change owner if it is set via setOwner | |
unlayoutCallback | |
● should NOT call unlayoutCallback on unbuilt element | |
● should call unlayoutCallback on built element and update state | |
● updated state should bypass isRelayoutNeeded | |
● should call unlayoutCallback on built element but NOT update state | |
● should call viewportCallback when resource not in viewport | |
● should call viewportCallback when resource in viewport | |
● should delegate unload to unlayoutCallback | |
pauseCallback | |
● should call pauseCallback on unbuilt element | |
● should call pauseCallback on built element | |
● should NOT call unlayoutCallback | |
when unlayoutOnPause | |
● should call unlayoutCallback and update state | |
● should call unlayoutCallback but NOT update state | |
when remove from DOM | |
● should call pauseCallback on remove for unbuilt ele | |
● should call pauseCallback on remove for built ele | |
manual disconnect | |
● should call disconnect on remove for built ele (skipped) | |
● should call disconnected regardless of isConnected (skipped) | |
resumeCallback | |
● should call resumeCallback on unbuilt element | |
● should call resumeCallback on un-paused element | |
Resource idleRenderOutsideViewport | |
● should return true if isWithinViewportRatio | |
● should return false for false element idleRenderOutsideViewport | |
Resource renderOutsideViewport | |
boolean API | |
when element returns true | |
when element is inside viewport | |
● should allow rendering when bottom falls outside | |
● should allow rendering when top falls outside | |
when element is owned | |
● should allow rendering when bottom falls outside | |
● should allow rendering when top falls outside | |
when element is just below viewport | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is marginally below viewport | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is wayyy below viewport | |
● should allow rendering | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is owned | |
● should allow rendering | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is just above viewport | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is marginally above viewport | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is wayyy above viewport | |
● should allow rendering | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is owned | |
● should allow rendering | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element returns false | |
when element is inside viewport | |
● should allow rendering when bottom falls outside | |
● should allow rendering when top falls outside | |
when element is owned | |
● should allow rendering when bottom falls outside | |
● should allow rendering when top falls outside | |
when element is just below viewport | |
● should disallow rendering when scrolling towards | |
● should disallow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is marginally below viewport | |
● should disallow rendering when scrolling towards | |
● should disallow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is wayyy below viewport | |
● should disallow rendering | |
● should disallow rendering when scrolling towards | |
● should disallow rendering when scrolling away | |
when element is owned | |
● should allow rendering | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is just above viewport | |
● should disallow rendering when scrolling towards | |
● should disallow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is marginally above viewport | |
● should disallow rendering when scrolling towards | |
● should disallow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is wayyy above viewport | |
● should disallow rendering | |
● should disallow rendering when scrolling towards | |
● should disallow rendering when scrolling away | |
when element is owned | |
● should allow rendering | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
number API | |
when element is inside viewport | |
● should allow rendering when bottom falls outside | |
● should allow rendering when top falls outside | |
when element is owned | |
● should allow rendering when bottom falls outside | |
● should allow rendering when top falls outside | |
when element is just below viewport | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is marginally below viewport | |
● should allow rendering when scrolling towards | |
● should disallow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is wayyy below viewport | |
● should disallow rendering | |
● should disallow rendering when scrolling towards | |
● should disallow rendering when scrolling away | |
when element is owned | |
● should allow rendering | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is just above viewport | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is marginally above viewport | |
● should allow rendering when scrolling towards | |
● should disallow rendering when scrolling away | |
when element is owned | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is wayyy above viewport | |
● should disallow rendering | |
● should disallow rendering when scrolling towards | |
● should disallow rendering when scrolling away | |
when element is owned | |
● should allow rendering | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is on the left of viewport | |
● should disallow rendering | |
● should disallow rendering when scrolling towards on y-axis | |
● should disallow rendering when scrolling away on y-axis | |
when element is owned | |
● should allow rendering | |
● should allow rendering when scrolling towards on y-axis | |
● should allow rendering when scrolling away on y-axis | |
when element is on the right of viewport | |
● should disallow rendering | |
● should disallow rendering when scrolling towards on y-axis | |
● should disallow rendering when scrolling away on y-axis | |
when element is owned | |
● should allow rendering | |
● should allow rendering when scrolling towards on y-axis | |
● should allow rendering when scrolling away on y-axis | |
when element is fully in viewport | |
● should allow rendering | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is owned | |
● should allow rendering | |
● should allow rendering when scrolling towards on y-axis | |
● should allow rendering when scrolling away on y-axis | |
when element is partially in viewport | |
● should allow rendering | |
● should allow rendering when scrolling towards | |
● should allow rendering when scrolling away | |
when element is owned | |
● should allow rendering | |
● should allow rendering when scrolling towards on y-axis | |
● should allow rendering when scrolling away on y-axis | |
whenWithinViewport | |
● should resolve correctly | |
● should resolve immediately if already laid out | |
● should resolve correctly with float | |
Resources | |
● should calculate correct calcTaskScore | |
● should calculate correct calcTaskTimeout | |
● should not schedule non-prerenderable resource when document is in prerender | |
● should schedule prerenderable resource when document is in prerender | |
● should not schedule prerenderable resource when document is hidden | |
● should not schedule non-renderOutsideViewport resource when resource is not visible | |
● should force schedule non-renderOutsideViewport resource when resource is not visible | |
● should schedule renderOutsideViewport resource when resource is not visible | |
● should schedule idleRenderOutsideViewport resource when resource is not visible | |
● should update priority and schedule pass | |
● should update priority and update tasks | |
Resources startup | |
● should run a full reload pass on window.onload | |
● should run a full reload pass on fonts timeout | |
● should run a full reload pass on document.fonts.ready | |
● should not remeasure if fonts load before doc-ready | |
● should run a full reload when a new element is connected | |
Resources discoverWork | |
● should set ready-scan signal on first ready pass after amp init | |
● should measure unbuilt elements | |
● should render two screens when visible | |
● should NOT rerender anything | |
● should re-render from requested position | |
● should prerender only one screen with prerenderSize = 1 | |
● should NOT prerender anything with prerenderSize = 0 | |
● should remeasure when requested and scheduled unloads (skipped) | |
● should eject stale tasks when element unloaded | |
● should schedule resource for execution | |
● should record layout schedule time on the resource element | |
● should not schedule resource execution outside viewport | |
● should force schedule resource execution outside viewport | |
● should schedule resource prerender when doc in prerender mode | |
● should not schedule resource prerender | |
● should schedule resource execution when doc is hidden | |
● should update inViewport before scheduling layouts (skipped) | |
● should build resource when not built | |
● should build resource when not built and before doc ready | |
● should NOT build non-prerenderable resources in prerender | |
● should NOT build when quota reached | |
● should build render blocking resource even if quota is reached | |
● should layout resource if outside viewport but idle | |
● should force build resources during discoverWork layout phase | |
onNextPass | |
● should only run callbacks once. | |
Resources contentHeight | |
● should measure initial contentHeight | |
● should send contentHeight to viewer if height was changed | |
● should not send contentHeight to viewer if height is not changed | |
● should send contentHeight to viewer if viewport resizes | |
Resources.add/upgrade/remove | |
● should enforce that viewport is ready for first add | |
● should build elements immediately if the document is ready | |
buildReadyResources_ | |
● should NOT build past the root node when pending | |
● should not try to build resources already being built | |
runtime | |
● should convert AMP from array to AMP object in single-doc | |
● should convert AMP from array to AMP object in shadow-doc | |
● should install legacy stubs in single-doc | |
● should install legacy stubs in shadow-doc | |
● should NOT set cursor:pointer on document element on non-IOS | |
● should set cursor:pointer on document element on IOS | |
● should set cursor:pointer on IOS in shadow-doc | |
● should execute scheduled extensions & execute new extensions | |
● should not maybePumpEarlyFrame when body not yet present | |
● should not maybePumpEarlyFrame when a renderDelayingExtension is present | |
● should maybePumpEarlyFrame and delay extension execution | |
● support struct AMP.push raw functions and high priority | |
● loads and waits for a single intermediate bundles | |
● loads and waits for a multiple intermediate bundles | |
● should wait for body before processing extensions | |
WARN: '[EXPERIMENTS] "%s" experiment %s for the domain "%s". See: https://amp.dev/documentation/guides-and-tutorials/learn/experimental', 'version-locking', 'enabled', 'localhost' | |
● should load correct extension version | |
● should be robust against errors in early extensions | |
single-mode | |
● should export properties to global AMP object | |
● should register element without CSS | |
● should register element with CSS | |
● should register doc-service as ctor and install imm | |
● should register doc-service factory and install | |
shadow-mode | |
● should export properties to global AMP object | |
● should register element without CSS | |
● should register element with CSS | |
● should register doc-service as ctor and defer install | |
WARN: '[lru-cache] Trimming LRU cache' | |
runtime multidoc | |
attachShadowDoc | |
● should install services and styles | |
● should install doc services | |
● should pass init parameters to viewer | |
● should update host visibility | |
● should import body | |
● should read title element | |
● should read canonical element | |
● should import fonts | |
● should ignore boilerplate style | |
● should import custom style | |
● should import keyframes style | |
● should ignore runtime extension | |
● should ignore unknown script | |
● should import extension element | |
● should import extension element with version ≠ 0.1 | |
● should import extension template | |
● should import inline script | |
● should ignore inline script if javascript | |
● should import meta content | |
● should start as visible by default | |
● should start as prerender when requested | |
● should expose visibility method | |
● should expose close method and dispose services | |
● should expose head tag | |
attachShadowDocAsStream | |
● should install services and styles | |
● should install doc services | |
● should pass init parameters to viewer | |
● should update host visibility | |
● should import body | |
● should mark doc as ready | |
● should read title element | |
● should read canonical element | |
● should import fonts | |
● should ignore boilerplate style | |
● should import custom style | |
● should ignore runtime extension | |
● should ignore unknown script | |
● should import extension element | |
● should import extension template | |
● should import inline script | |
● should ignore inline script if javascript | |
● should start as visible by default | |
● should start as prerender when requested | |
● should expose visibility method | |
● should expose close method and dispose services | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
messaging | |
document.contains is the browser implementation | |
● should broadcast to all but sender | |
● should stop broadcasting after close | |
WARN: '[multidoc-manager] Shadow doc wasn't previously closed' | |
● should stop broadcasting after force-close | |
● should send message | |
● should receive message | |
document.contains is a stubbed implementation | |
● should broadcast to all but sender | |
● should stop broadcasting after close | |
WARN: '[multidoc-manager] Shadow doc wasn't previously closed' | |
● should stop broadcasting after force-close | |
● should send message | |
● should receive message | |
Caja-based | |
sanitizeHtml | |
● should output basic text | |
● should output valid markup | |
● should NOT output security-sensitive markup | |
● should NOT output security-sensitive markup when nested | |
● should NOT output security-sensitive markup when broken | |
● should output "on" attribute | |
● should output "data-, aria-, and role" attributes | |
● should output "href" attribute | |
● should output "rel" attribute | |
● should output "layout" attribute | |
● should output "media" attribute | |
● should output "sizes" attribute | |
● should output "heights" attribute | |
● should default target to _top with href | |
● should NOT default target to _top w/o href | |
● should output a valid target | |
● should output a valid target in different case | |
● should override a unallowed target | |
● should NOT output security-sensitive attributes | |
● should NOT output blacklisted values for class attributes | |
● should allow amp-subscriptions attributes | |
● should allow source::src with valid protocol | |
● should not allow source::src with invalid protocol (skipped) | |
● should allow div::template | |
● should allow form::action-xhr | |
● should allow <amp-form>-related attributes | |
● should allow <amp-lightbox> attributes | |
● should sanitize invalid attributes | |
ERROR: 'The test "Caja-based should sanitize based on AMP doc format type should allow for input type file and password" contains an "allowConsoleError" block that didn't result in a call to console.error.' | |
should sanitize based on AMP doc format type | |
● should allow for input type file and password | |
● should disallow certain attributes on form for AMP4Email | |
ERROR: 'The test "Caja-based should sanitize based on AMP doc format type should only allow whitelisted AMP elements in AMP4EMAIL" contains an "allowConsoleError" block that didn't result in a call to console.error.' | |
● should only allow whitelisted AMP elements in AMP4EMAIL | |
sanitizeTagsForTripleMustache | |
● should output basic text | |
● should output valid markup | |
● should NOT output non-whitelisted markup | |
● should compensate for broken markup | |
should sanitize `style` attribute | |
● should allow valid styles | |
● should ignore styles containing `!important` | |
● should ignore styles containing `position:fixed` | |
● should ignore styles containing `position:sticky` | |
Caja-specific sanitization | |
● should apply html4/caja restrictions | |
● should catch attribute value whitespace variations | |
● should ignore invalid characters in attributes | |
for <amp-bind> | |
● should output [text] and [class] attributes | |
● should add "i-amphtml-binding" for data-amp-bind-* | |
● should NOT rewrite values of binding attributes | |
service | |
disposable interface | |
● should test disposable interface | |
● should assert disposable interface | |
window singletons | |
● should make per window singletons | |
● should not instantiate service when registered | |
● should only instantiate the service once | |
● should return the service when it exists | |
● should throw before creation if factory is not provided | |
● should fail without factory on initial setup | |
● should provide a promise that resolves when instantiated | |
● should resolve existing service promise on registering service | |
● should resolve service promise if service is registered | |
● should provide promise without clobbering registered services | |
● should NOT return null promise for registered services | |
● should set service builders to null after instantiation | |
● should resolve service for a child window | |
ampdoc singletons | |
● should make per ampdoc singletons and store them in window | |
● should make per ampdoc singletons via ampdoc | |
● should make per ampdoc singletons and store them in ampdoc | |
● should not instantiate service when registered | |
● should not instantiate service when registered (race) | |
● should fail without factory on initial setup | |
● should provide a promise that resolves when instantiated | |
● should NOT return null promise for registered services | |
● should reject service promise - reject before get | |
● should reject service promise - reject after get | |
● should reject service promise - reject multiple times | |
● should reject service promise - reject before register | |
● should not reject service promise if already registered | |
● should resolve service for a child window | |
ERROR: '[SERVICE] failed to dispose service b intentional' | |
The test "service ampdoc singletons should dispose disposable services" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should dispose disposable services | |
embed service | |
● should return the service via node | |
● should not fallback from FIE to parent service | |
● should find ampdoc and return its service | |
● should not fallback embedded ampdoc to parent | |
● should override services on embedded ampdoc | |
● should return overriden service | |
embeddable interface | |
installServiceInEmbedIfEmbeddable() | |
● should install embeddable if embeddable | |
getParentWindowFrameElement | |
● should return frameElement | |
● should return null when not parented | |
● should survive exceptions | |
shadow-embed | |
shadow APIs | |
none | |
● should transform CSS installStylesForDoc for shadow root | |
createShadowRoot | |
● should clear duplicate root | |
● should have host | |
● should have getElementById | |
● should add id for polyfill | |
● should add host style for polyfill | |
● Should add an id and class for CSS encapsulation to the shadow root | |
● Should transform CSS for the shadow root | |
stylesheets | |
● should have shadow stylesheets and not global | |
importShadowBody | |
● should import body with all children (skipped) | |
● should import shallow body (skipped) | |
v0 | |
● should transform CSS installStylesForDoc for shadow root | |
createShadowRoot | |
● should clear duplicate root | |
● should have host | |
● should have getElementById | |
● Should add an id and class for CSS encapsulation to the shadow root | |
● Should transform CSS for the shadow root | |
stylesheets | |
● should have shadow stylesheets and not global | |
importShadowBody | |
● should import body with all children (skipped) | |
● should import shallow body (skipped) | |
v1 | |
● should transform CSS installStylesForDoc for shadow root | |
createShadowRoot | |
● should clear duplicate root | |
● should have host | |
● should have getElementById | |
● Should add an id and class for CSS encapsulation to the shadow root | |
● Should transform CSS for the shadow root | |
stylesheets | |
● should have shadow stylesheets and not global | |
importShadowBody | |
● should import body with all children (skipped) | |
● should import shallow body (skipped) | |
getShadowRootNode | |
● should find itself as the root node | |
● should find the root node from ancestors | |
● should find the root node via polyfill | |
scopeShadowCss | |
● should replace root selectors | |
● should avoid false positives for root selectors | |
createShadowDomWriter | |
● should resolve to streamer | |
● should resolve to bulk without API | |
● should resolve to bulk on firefox | |
SizeList parseSizeList | |
● should accept single option | |
● should accept multiple options | |
● should accept even more multiple options | |
● should accept complicated media conditions | |
● should accept different length units | |
● should accept fractional numbers | |
● should accept CSS functions | |
● should tolerate right paren | |
● should fail on invalid CSS functions | |
● should accept percent when allowed | |
● should not accept percent | |
● should fail bad length | |
SizeList construct | |
● should have at least one option | |
● the last option must not have a query | |
● non-last options must have media query | |
SizeList select | |
● should select default last option | |
● should select a matching option | |
● should select first matching option | |
Srcset | |
parseSrcset | |
● should accept single source, default to 1px | |
● should ignore empty source | |
● should accept multiple sources, default to 1x | |
● should accept width-based sources | |
● should accept dpr-based sources | |
● should tolerate other sources | |
● should parse fractions | |
● should tolerate negatives | |
● should accept several sources | |
● should accept commas in URLs | |
● should accept no-whitestpace | |
● should accept other special chars in URLs | |
● should accept false cognitives in URLs | |
● should not accept mixed sources | |
● should parse misc examples | |
srcsetFromElement | |
● should select srcset when only srcset available | |
● should select srcset when src is empty | |
● should select src when only src available | |
● should select src when only srcset is empty | |
● should prefer srcset to src | |
● should allow non-compliant src with space | |
● should require srcset or src to be available | |
srcsetFromSrc | |
● should construct with undefined width and 1 dpr | |
construct | |
● should enforce only one type of descriptor per source | |
● should not allow 0-width descriptor | |
● should not allow 0-dpr descriptor | |
● should enforce only one type of descriptor total | |
● should not allow duplicate sources | |
select | |
● select by width | |
● select by width with preference toward higher width | |
● select by dpr | |
ssr-template-helper | |
isEnabled | |
● should return true if doc level opt-in | |
● should return false if not doc level opt-in | |
● should return false if doc level opt-in but viewer does not have capability | |
ssr | |
● Should refuse to SSR with an untrusted viewer | |
● should build payload | |
rendering templates | |
applySsrOrCsrTemplate | |
● should set html template | |
● should throw error if html template is not defined | |
● should throw if trying to ssr from an untrusted viewer | |
● should render template | |
● should set template array | |
StandardActions | |
getAutofocusElementForShowAction | |
● returns element (direct) | |
● returns element (wrapped) | |
● returns null | |
"hide" action | |
● should handle normal element | |
● should handle AmpElement | |
"show" action | |
● should handle normal element (toggle) | |
● should handle normal element (hidden attribute) | |
● should handle AmpElement (toggle) | |
● should handle AmpElement (hidden attribute) | |
iOS force sync | |
● executes asynchronously when no autofocus (wrapped) | |
● executes asynchronously when no autofocus (direct) | |
● executes synchronously when autofocus (wrapped) | |
● executes synchronously when autofocus (direct) | |
autofocus | |
● focuses [autofocus] element asynchronously (direct) | |
● focuses [autofocus] element asynchronously (wrapped) | |
● does not focus element | |
iOS force sync | |
● focuses [autofocus] element synchronously (direct) | |
● focuses [autofocus] element synchronously (wrapped) | |
● does not focus element | |
"toggle" action | |
● should show normal element when hidden (toggle) | |
● should show normal element when hidden (hidden attribute) | |
● should hide normal element when shown | |
● should show AmpElement when hidden (toggle) | |
● should show AmpElement when hidden (hidden attribute) | |
● should hide AmpElement when shown | |
"toggleClass" action | |
● should add class when not in classList | |
● should delete class when in classList | |
● should add classes with amp- and -amp- prefixes | |
● should delete classes with amp- and -amp- prefixes | |
● should not add amp internal classes | |
● should not delete amp internal classes | |
● should add class when not in classList, when force=true | |
● should keep class when in classList, when force=true | |
● should not add when not in classList, when force=false | |
● should delete class when in classList, when force=false | |
"scrollTo" action | |
● should handle normal element | |
● should handle AmpElement | |
"focus" action | |
● should handle normal element | |
● should handle AmpElement | |
"AMP" global target | |
● should implement goBack | |
● should implement optoutOfCid | |
● should implement setState() | |
● should implement pushState() | |
● should implement print | |
● should implement scrollTo with element target | |
navigateTo | |
● should be implemented | |
● should pass if node does not have throwIfCannotNavigate() | |
● should pass if node does not have throwIfCannotNavigate(), given target | |
● should check throwIfCannotNavigate() for AMP elements | |
closeOrNavigateTo | |
● should be implemented | |
● should close window if allowed | |
● should NOT close if no opener | |
● should NOT close if has a parent | |
● should NOT close if in multi-doc | |
● should navigate if not allowed to close | |
● should navigate if win.close rejects | |
installInEmbedWindow | |
● should configured the embedded actions service | |
Static Template | |
html | |
● generates static html tree | |
● works as a variable | |
● creates tree with last ownerDocument | |
● ignores text before first element | |
● ignores text after first element | |
● rejects multiple root elements | |
● rejects non-existent root | |
● rejects dynamic templates | |
htmlRefs | |
● finds all elements with ref attribute | |
● ignores element if it has ref attribute | |
● rejects empty ref attribute | |
● rejects duplicate ref attribute | |
WARN: '[lru-cache] Trimming LRU cache' | |
Storage | |
Storage | |
● should configure store correctly | |
● should initialize empty store with prototype-less objects | |
● should restore store with prototype-less objects | |
● should get the value first time and reuse store | |
● should get the value from first ever request and reuse store | |
ERROR: '[Storage] Failed to load store: intentional' | |
The test "Storage Storage should recover from binding failure" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should recover from binding failure | |
ERROR: '[Storage] Failed to load store: InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.' | |
The test "Storage Storage should recover from binding error" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should recover from binding error | |
● should save the value first time and reuse store | |
● should remove the key first time and reuse store | |
● should react to reset messages | |
● should ignore unrelated reset messages | |
Store | |
● should get undefined with empty store | |
● should set a new value with timestamp | |
● should overwrite a value with new timestamp | |
● should update a value w/o changing timestamp | |
● should remove a value | |
● should store limited amount of values | |
● should prohibit unsafe values | |
ERROR: '[Storage] Error: localStorage not supported.' | |
The test "LocalStorageBinding should throw if localStorage is not supported" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
LocalStorageBinding | |
● should throw if localStorage is not supported | |
● should load store when available | |
● should load default store when not yet available | |
● should reject on local storage failure w/ localStorage support | |
● should succeed loadBlob w/o localStorage support | |
ERROR: '[Storage] Error: localStorage not supported.' | |
The test "LocalStorageBinding should bypass loading from localStorage if getItem throws" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should bypass loading from localStorage if getItem throws | |
● should save store | |
● should reject on save store failure | |
● should succeed saveBlob w/o localStorage support | |
ERROR: '[Storage] Error: localStorage not supported.' | |
The test "LocalStorageBinding should bypass saving to localStorage if getItem throws" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should bypass saving to localStorage if getItem throws | |
ViewerStorageBinding | |
● should load store from viewer | |
● should load default store when not yet available | |
● should reject on viewer failure | |
● should save store | |
● should reject on save store failure | |
dashToCamelCase | |
● should transform dashes to camel case. | |
endsWith | |
● should determine whether string ends with. | |
includes | |
● should determine whether string includes. | |
expandTemplate | |
● should replace place holders with values. | |
● should handle malformed place holders. | |
● should default to one iteration. | |
● should handle multiple iterations when asked to. | |
● should handle circular expansions without hanging | |
camelCaseToDash | |
● should convert camelCase strings to dash-case strings | |
trimEnd | |
● remove trailing spaces | |
● remove trailing whitespace characters | |
● should keep leading spaces | |
● should keep leading whitespace characters | |
asyncStringReplace | |
● should not replace with no match | |
● should replace with string as callback | |
● should use replacer with special pattern | |
● should replace with sync function as callback | |
● should replace with no capture groups | |
● should replace with one capture group | |
● should replace with two capture groups | |
● should replace twice | |
padStart | |
● should pad string to target length | |
● should trim padString if necessary to fit target length | |
● should return original string if equal or greater than target length | |
Styles | |
makeBodyVisible | |
● should make visible in recovery call | |
● should wait for render delaying services | |
● should skip schedulePass if no render delaying services | |
installStylesForDoc | |
single | |
● should install runtime styles | |
● should install extension styles after runtime | |
● should install user styles after everything else | |
● should not create duplicate runtime style | |
● should discover existing runtime style | |
● should re-create runtime style if absent | |
● should discover existing extension style | |
● should re-create extension style | |
● should re-create extension style w/o cache | |
● should use the cached extension style | |
● should create a amp-custom style | |
● should create a amp-keyframes style | |
● should use a transform | |
shadow native | |
● should install runtime styles | |
● should install extension styles after runtime | |
● should install user styles after everything else | |
● should not create duplicate runtime style | |
● should discover existing runtime style | |
● should re-create runtime style if absent | |
● should discover existing extension style | |
● should re-create extension style | |
● should re-create extension style w/o cache | |
● should use the cached extension style | |
● should create a amp-custom style | |
● should create a amp-keyframes style | |
● should use a transform | |
shadow polyfill | |
● should install runtime styles | |
● should install extension styles after runtime | |
● should install user styles after everything else | |
● should not create duplicate runtime style | |
● should discover existing runtime style | |
● should re-create runtime style if absent | |
● should discover existing extension style | |
● should re-create extension style | |
● should re-create extension style w/o cache | |
● should use the cached extension style | |
● should create a amp-custom style | |
● should create a amp-keyframes style | |
● should use a transform | |
installStylesLegacy | |
● should install runtime styles | |
● should install extension styles after runtime | |
● should create a amp-custom style | |
Style | |
● toggle | |
● setStyle | |
● setStyle with vendor prefix | |
● setStyles | |
● setImportantStyles | |
● setImportantStyles with vendor prefix | |
● px | |
● translateX | |
● translate | |
● camelCaseToTitleCase | |
● removeAlphaFromColor | |
getVendorJsPropertyName | |
● no prefix | |
● should use cached previous result | |
● Webkit | |
● Moz | |
● ms | |
● O opera | |
TaskQueue | |
● should enqueue and dequeue | |
● should perform score-based peek | |
Template | |
● should render immediately | |
● should render when detached | |
● should render array | |
● should NOT allow registering template class twice | |
● should block render until template registered | |
● should unblock render when template registered | |
● should unblock render for parallel templates | |
● should discover template via ID | |
● should require discovered template via ID to be "template" | |
● should require discovered "script" with type defined | |
● should discover template via children | |
● should fail when template not found | |
● should detect if a template is present in a container | |
● should discover and render template for an array | |
BaseTemplate | |
● should require render override | |
● should unwrap single element | |
● should unwrap with empty/whitespace text | |
● should NOT unwrap multiple elements | |
● should NOT unwrap with non-empty/whitespace text | |
Timer | |
● delay | |
● delay 0 real window | |
● delay 1 real window | |
● delay default | |
● cancel | |
● cancel default | |
● promise | |
● timeoutPromise - no race | |
● timeoutPromise - race no timeout | |
● timeoutPromise - race with timeout | |
● poll - resolves only when condition is true | |
● poll - clears out interval when complete | |
Transition | |
● all | |
● withCurve | |
● setStyles | |
● numeric | |
● springAds.js | |
● px | |
● translateX | |
● should translate with X and Y | |
● should translate with only X | |
concat | |
● should concat two string transitions | |
● should handle single transitions | |
● should handle empty input | |
● should ignore non-string transitions | |
● should support other delimeters | |
Types | |
toArray | |
● should return empty array if null is passed | |
● should convert NodeList to array | |
● should convert HTMLCollection to array | |
● should convert HTMLOptionsCollection to array | |
isFiniteNumber | |
● should yield false for non-numbers | |
● should yield true for numbers | |
isEnumValue | |
● should return true for valid enum values | |
● should return false for non-enum values | |
UrlReplacements | |
UrlReplacements | |
● limit replacement params size | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace RANDOM | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace COUNTER | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace CANONICAL_URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace CANONICAL_HOST | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace CANONICAL_HOSTNAME | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace CANONICAL_PATH | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace DOCUMENT_REFERRER | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace EXTERNAL_REFERRER | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace EXTERNAL_REFERRER to empty string if referrer is of same domain | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace EXTERNAL_REFERRER to empty string if referrer is CDN proxy of same domain | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace EXTERNAL_REFERRER to empty string if referrer is CDN proxy of same domain (before CURLS) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace TITLE | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should prefer original title for TITLE | |
● should replace AMPDOC_HOST | |
● should replace AMPDOC_HOSTNAME | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace SOURCE_PATH | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace PAGE_VIEW_ID | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace PAGE_VIEW_ID_64 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace CLIENT_ID | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow empty CLIENT_ID | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace CLIENT_ID with opt_cookieName | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should parse _ga cookie correctly | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace CLIENT_ID synchronously when available | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace AMP_STATE(key) | |
● should replace VARIANT (skipped) | |
● should replace VARIANT with empty string if amp-experiment is not configured (skipped) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace VARIANTS | |
● should replace VARIANTS with empty string if amp-experiment is not configured (skipped) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace SHARE_TRACKING_INCOMING and SHARE_TRACKING_OUTGOING | |
● should replace SHARE_TRACKING_INCOMING and SHARE_TRACKING_OUTGOING with empty string if amp-share-tracking is not configured (skipped) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace TIMESTAMP | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace TIMESTAMP_ISO | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return correct ISO timestamp | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace TIMEZONE | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace TIMEZONE_CODE | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace SCROLL_HEIGHT | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace SCREEN_WIDTH | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace SCREEN_HEIGHT | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace VIEWPORT_WIDTH | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace VIEWPORT_HEIGHT | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace PAGE_LOAD_TIME | |
● should reject protocol changes | |
WARN: '[lru-cache] Trimming LRU cache' | |
● Should replace BACKGROUND_STATE with 0 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● Should replace BACKGROUND_STATE with 1 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● Should replace VIDEO_STATE(video,parameter) with video data | |
● should replace NAV_REDIRECT_COUNT | |
● should replace NAV_TIMING (skipped) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace NAV_TIMING when attribute names are invalid | |
● should replace NAV_TYPE | |
● should replace DOMAIN_LOOKUP_TIME | |
● should replace TCP_CONNECT_TIME | |
● should replace SERVER_RESPONSE_TIME | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace PAGE_DOWNLOAD_TIME | |
● should replace REDIRECT_TIME (skipped) | |
● should replace DOM_INTERACTIVE_TIME | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace CONTENT_LOAD_TIME | |
● should replace AVAILABLE_SCREEN_HEIGHT | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace AVAILABLE_SCREEN_WIDTH | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace SCREEN_COLOR_DEPTH | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace BROWSER_LANGUAGE | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace USER_AGENT | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace VIEWER with origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace VIEWER with empty string | |
● should replace TOTAL_ENGAGED_TIME | |
● should replace INCREMENTAL_ENGAGED_TIME | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace AMP_VERSION | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace FRAGMENT_PARAM with 2 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace AMP_GEO(ISOCountry) and AMP_GEO | |
● should accept $expressions | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should ignore unknown substitutions | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace several substitutions | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace new substitutions | |
● should report errors & replace them with empty string (sync) (skipped) | |
● should report errors & replace them with empty string (promise) (skipped) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should support positional arguments | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should support multiple positional arguments | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should support multiple positional arguments with dots | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should support promises as replacements | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should override an existing binding | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should add an additional binding | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should NOT overwrite the cached expression with new bindings | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should expand bindings as functions | |
● should expand bindings as functions with promise | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should expand null as empty string | |
● should expand undefined as empty string | |
● should expand empty string as empty string | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should expand zero as zero | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should expand false as false | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should resolve sub-included bindings | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should expand multiple vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should collect vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should collect unwhitelisted vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: 'The replacement url has invalid protocol: javascript://example.com/?r=0.17944693054878424' | |
The test "UrlReplacements UrlReplacements should reject javascript protocol" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should reject javascript protocol | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should expand sync and respect white list | |
WARN: '[lru-cache] Trimming LRU cache' | |
AMPDOC_URL | |
● should replace AMPDOC_URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should add extra params to AMPDOC_URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should merge extra params in AMPDOC_URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow an embedded amp_r parameter | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should prefer original params in AMPDOC_URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should merge multiple extra params safely in AMPDOC_URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
SOURCE_URL | |
● should replace SOURCE_URL and SOURCE_HOST | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace SOURCE_URL and SOURCE_HOSTNAME | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should update SOURCE_URL after track impression | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should add extra params to SOURCE_URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should ignore extra params that already exists in SOURCE_URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not change SOURCE_URL if is not ad landing page | |
WARN: '[lru-cache] Trimming LRU cache' | |
PAGE_LOAD_TIME | |
● is replaced if timing info is not available | |
WARN: '[lru-cache] Trimming LRU cache' | |
● is replaced if PAGE_LOAD_TIME is available within a delay | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
QUERY_PARAM | |
● should replace QUERY_PARAM with foo | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace QUERY_PARAM with "" | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace QUERY_PARAM with default_value | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace QUERY_PARAM with extra param | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace QUERY_PARAM, preferring original over extra | |
WARN: '[lru-cache] Trimming LRU cache' | |
sync expansion | |
● should expand w/ collect vars (skip async macro) | |
● should reject protocol changes | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should reject javascript protocol | |
WARN: '[lru-cache] Trimming LRU cache' | |
access values via amp-access | |
● should replace ACCESS_READER_ID | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace AUTHDATA | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should report error if not available | |
access values via amp-subscriptions | |
● should replace ACCESS_READER_ID | |
● should replace AUTHDATA | |
● should report error if not available | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
link expansion | |
● should replace href | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should append default outgoing decoration | |
● should replace href 2x | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace href 2 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● has nothing to replace | |
● should not replace without user whitelisting | |
WARN: '[URL] Ignoring unsupported replacement', 'ABC' | |
● should not replace without user whitelisting 2 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace default append params regardless of whitelist | |
WARN: '[URL] Ignoring unsupported replacement', 'RANDOM' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not replace unwhitelisted fields | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace for http (non-secure) whitelisted origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace with canonical origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace with whitelisted origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[URL] Ignoring link replacement %s because the link does not go to the document's source, canonical, or whitelisted origin.', 'https://example2.com/link?out=QUERY_PARAM(foo)' | |
● should not replace to different origin | |
WARN: '[URL] Ignoring link replacement %s because the link does not go to the document's source, canonical, or whitelisted origin.', 'https://example2.com/link?out=QUERY_PARAM(foo)' | |
● should not append default param to different origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace whitelisted fields | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should add URL parameters for different origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should add URL parameters for http URL's(non-secure) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should add URL parameters and repalce whitelisted values for http whitelisted URL's(non-secure) | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[URL] Ignoring link replacement %s because the link does not go to the document's source, canonical, or whitelisted origin.', 'http://example2.com/link?out=QUERY_PARAM(foo)&guid=123&c=CLIENT_ID(abc)' | |
● should add URL parameters and not repalce whitelisted values for non whitelisted http URL's(non-secure) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should append query parameters and repalce whitelisted values | |
Expanding String | |
● should not reject protocol changes with expandStringSync | |
● should not encode values returned by expandStringSync | |
● should not check protocol changes with expandStringAsync | |
● should not encode values returned by expandStringAsync | |
Expanding Input Value | |
● should fail for non-inputs | |
● should fail for non-hidden inputs | |
● should not replace not whitelisted vars | |
● should replace input value with var subs - sync | |
● should replace input value with var subs - sync | |
extractClientIdFromGaCookie | |
● should extract correct Client ID | |
WARN: '[lru-cache] Trimming LRU cache' | |
resolveUrlAttr | |
● should throw if __amp_source_origin is set | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should resolve non-hash href | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should ignore hash URLs | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should resolve src | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should rewrite image http(s) src | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should rewrite image http(s) srcset | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should NOT rewrite image http(s) src when not on proxy | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should NOT rewrite image data src | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
rewriteAttributesForElement | |
● should not modify `target` on publisher origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
on CDN origin | |
● should set `target` when rewrite <a> from hash to non-hash | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should remove `target` when rewrite <a> from non-hash to hash | |
getWinOrigin | |
● should return origin if available | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return origin from href when win.origin is not available | |
● should return origin from href when win.origin is empty | |
● should return origin from href when win.origin is null | |
● should return "null" when win.origin is "null" | |
WARN: '[lru-cache] Trimming LRU cache' | |
parseUrlDeprecated | |
● should parse correctly | |
WARN: '[lru-cache] Trimming LRU cache' | |
● caches results | |
● caches up to 100 results (skipped) | |
● should handle ports | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should omit HTTP default port | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should omit HTTPS default port | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should support http | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should resolve relative urls | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should resolve path relative urls | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should handle URLs with just the domain | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should parse origin https://twitter.com/path#abc | |
● should parse origin data:12345 | |
parseQueryString | |
● should return empty params when query string is empty or null | |
● should parse single key-value | |
● should parse two key-values | |
● should ignore leading ? | |
● should ignore leading # | |
● should parse empty value | |
● should decode names and values | |
● should return last dupe | |
serializeQueryString | |
● should return empty string for empty params | |
● should serialize a single value | |
● should serialize multiple values | |
● should coerce to string | |
● should encode values and keys | |
● should serialize multiple valued parameters | |
WARN: '[lru-cache] Trimming LRU cache' | |
assertHttpsUrl/isSecureUrl | |
● should NOT allow null or undefined, but allow empty string | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow https | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow protocol relative | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow localhost with http | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow localhost with http suffix | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should fail on http | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should fail on http with localhost in the name | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
assertAbsoluteHttpOrHttpsUrl | |
● should allow http | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow https | |
● should fail on relative protocol | |
● should fail on relative url | |
● should fail on not allowed protocol | |
removeFragment | |
● should remove fragment | |
● should remove empty fragment | |
● should ignore when no fragment | |
removeSearch | |
● should remove search | |
● should remove search with value | |
● should remove multiple params | |
● should remove empty search | |
● should ignore when no search | |
● should preserve fragment | |
● should preserve fragment with multiple params | |
● should preserve fragment when no search | |
● should handle empty fragment | |
addParamToUrl | |
● should preserve hash value | |
● should preserve query values | |
● should optionally add params to the front | |
● should encode uri values | |
● should keep host and path intact | |
addParamsToUrl | |
● should loop over the keys and values correctly | |
● should keep host and path intact | |
WARN: '[lru-cache] Trimming LRU cache' | |
addMissingParamsToUrl | |
● should not replace existing params | |
WARN: '[lru-cache] Trimming LRU cache' | |
isProxyOrigin | |
● should return that https://cdn.ampproject.org/ is a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that http://cdn.ampproject.org/ is not a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://cdn.ampproject.org.badguys.com/ is not a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://cdn.ampproject.orgbadguys.com/ is not a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://cdn.ampproject.org:1234 is not a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://cdn.ampproject.org/v/www.origin.com/foo/?f=0 is a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://cdn.ampproject.org/c/www.origin.com/foo/?f=0 is a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://xyz.cdn.ampproject.org/ is a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that http://xyz.cdn.ampproject.org/ is not a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://xyz-123.cdn.ampproject.org/ is a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://xyz.cdn.ampproject.org/v/www.origin.com/foo/?f=0 is a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://xyz.cdn.ampproject.org/c/www.origin.com/foo/?f=0 is a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that http://localhost:123 is not a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://cdn.ampproject.net/v/www.origin.com/foo/?f=0 is not a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://medium.com/swlh/nobody-wants-your-app-6af1f7f69cb7 is not a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that http://www.spiegel.de/politik/deutschland/angela-merkel-a-1062761.html is not a proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
isLocalhostOrigin | |
● should return that http://localhost is a localhost origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://localhost is a localhost origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that http://localhost:123/foo.html is a localhost origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://localhost:123/foo.html is a localhost origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that http://localhost.example.com/foo.html is not a localhost origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that http://www.example.com/foo.html is not a localhost origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
isProtocolValid | |
● should return that http://foo.com is a valid protocol | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that https://foo.com is a valid protocol | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that bar://foo.com is a valid protocol | |
● should return that is a valid protocol | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that foo is a valid protocol | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that ./foo is a valid protocol | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that /foo is a valid protocol | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that //foo.com is a valid protocol | |
● should return that undefined is a valid protocol | |
● should return that null is a valid protocol | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that javascript:alert("hello world!"); is not a valid protocol | |
● should return that data:12345 is not a valid protocol | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return that vbscript:foo is not a valid protocol | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
getSourceOrigin/Url | |
● should return the source origin/url from https://cdn.ampproject.org/v/www.origin.com/foo/?f=0#h | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/v/s/www.origin.com/foo/?f=0#h | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/www.origin.com/foo/?f=0 | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/s/www.origin.com/foo/?f=0 | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/s/origin.com/foo/?f=0 | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/s/origin.com%3A81/foo/?f=0 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/a/www.origin.com/foo/?f=0#h | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/ad/www.origin.com/foo/?f=0#h | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/action/www.origin.com/foo/?f=0#h | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/action/s/www.origin.com/foo/?f=0#h | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://xyz.cdn.ampproject.org/v/www.origin.com/foo/?f=0#h | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://xyz.cdn.ampproject.org/v/s/www.origin.com/foo/?f=0#h | |
● should return the source origin/url from https://xyz.cdn.ampproject.org/c/www.origin.com/foo/?f=0 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://xyz.cdn.ampproject.org/c/s/www.origin.com/foo/?f=0 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://xyz.cdn.ampproject.org/c/s/origin.com/foo/?f=0 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://xyz.cdn.ampproject.org/c/s/origin.com%3A81/foo/?f=0 | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?amp_js_param=5 | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?f=0&_js_v=5#something | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?amp_js_v=5&f=0#bar | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?f=0&_js_param=5&d=5#baz | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?f_amp_js_param=5&d=5 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?amp_js_param=5?d=5 | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/&_js_param=5&d=5 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?amp_r=test%3Dhello%20world | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?usqp=mq331AQCCAE | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?usqp=mq331AQCCAE&_js_param=5 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?amp_js_param=5&usqp=mq331AQCCAE | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?usqp=mq331AQCCAE&bar=1&_js_param=5 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?f=0&usqp=mq331AQCCAE#something | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?usqp=mq331AQCCAE&f=0#bar | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?f=0&usqp=mq331AQCCAE&d=5#baz | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?f_usqp=mq331AQCCAE&d=5 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/?usqp=mq331AQCCAE?d=5 | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the source origin/url from https://cdn.ampproject.org/c/o.com/foo/&usqp=mq331AQCCAE&d=5 | |
● should return the source origin/url from https://origin.com/foo/?f=0 | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should fail on invalid source origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
resolveRelativeUrl | |
● should return the resolved rel url from https://acme.org/path/file?f=0#h with base https://base.org/bpath/bfile?bf=0#bh | |
● should return the resolved rel url from data:12345 with base https://base.org/bpath/bfile?bf=0#bh | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the resolved rel url from //acme.org/path/file?f=0#h with base https://base.org/bpath/bfile?bf=0#bh | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the resolved rel url from //acme.org/path/file?f=0#h with base http://base.org/bpath/bfile?bf=0#bh | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the resolved rel url from /path/file?f=0#h with base https://base.org/bpath/bfile?bf=0#bh | |
● should return the resolved rel url from /path/file?f=0#h with base http://base.org/bpath/bfile?bf=0#bh | |
● should return the resolved rel url from \path/file?f=0#h with base http://base.org/bpath/bfile?bf=0#bh | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the resolved rel url from file?f=0#h with base https://base.org/bpath/bfile?bf=0#bh | |
● should return the resolved rel url from file?f=0#h with base http://base.org/bpath/bfile?bf=0#bh | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the resolved rel url from file?f=0#h with base https://base.org/bfile?bf=0#bh | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return the resolved rel url from file?f=0#h with base http://base.org/bfile?bf=0#bh | |
● should return the resolved rel url from file?f=0#h with base [object Object] | |
WARN: '[lru-cache] Trimming LRU cache' | |
getCorsUrl | |
● should error if __amp_source_origin is set | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should set __amp_source_origin as a url param | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
removeAmpJsParamsFromUrl | |
● should handle unaffected URLs | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should remove all internal params | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should remove all internal params, leaving others intact | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should preserve the fragment | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should preserve the path | |
removeParamsFromSearch | |
● should remove the leading ? or & | |
● should remove the param from searchUrl | |
● should remove all param with same name from searchUrl | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
getProxyServingType | |
● should ignore non-proxy origins | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should correctly extract known types | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should correctly extract unknown types | |
validator-integration | |
maybeValidate | |
● should not load validator script if not in dev mode | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not load validator script if bypassed | |
● should load validator script if dev mode | |
loadScript | |
● should propagate pre-existing nonces | |
VariableSource | |
● Works without any variables | |
WARN: '[lru-cache] Trimming LRU cache' | |
● Works with sync variables | |
● Works with async variables | |
● Works with both sync and async variables | |
● Works with multiple variables | |
● Works with sync variable that is set multiple times | |
● Works with async variable that is set multiple times | |
● Does not cache a built Expr | |
● Should not work with empty variable whitelist | |
WARN: '[lru-cache] Trimming LRU cache' | |
Whitelist of variable substitutions | |
● Works with whitelisted variables | |
● Should not work with unwhitelisted variables | |
getTimingData | |
● should wait for load event | |
video-manager-impl#AnalyticsPercentageTracker | |
#start | |
● waits for LOADEDMETADATA | |
● works if LOADEDMETADATA fires before the tracker starts | |
● aborts if duration is invalid (0) | |
● aborts if duration is invalid (NaN) | |
● aborts if duration is invalid (-1) | |
● aborts if duration is invalid (undefined) | |
● aborts if duration is invalid (null) | |
● aborts if duration is 0 after initially valid | |
● aborts if duration is NaN after initially valid | |
● aborts if duration is -1 after initially valid | |
● aborts if duration is undefined after initially valid | |
● aborts if duration is null after initially valid | |
● does not trigger if the video is paused | |
● does not trigger if percentage < 5% | |
● triggers every 5% starting on 0s | |
● triggers every 5% starting on 2s | |
● triggers every 5% starting on 4s | |
● triggers every 5% starting on 6s | |
● triggers every 5% starting on 8s | |
● triggers every 5% starting on 10s | |
● triggers every 5% starting on 12s | |
● triggers every 5% starting on 14s | |
● triggers every 5% starting on 16s | |
● triggers every 5% starting on 18s | |
● triggers every 5% starting on 20s | |
● triggers every 5% starting on 22s | |
● triggers every 5% starting on 24s | |
● triggers every 5% starting on 26s | |
● triggers every 5% starting on 28s | |
● triggers every 5% starting on 30s | |
● triggers every 5% starting on 32s | |
● triggers every 5% starting on 34s | |
● triggers every 5% starting on 36s | |
● triggers every 5% starting on 38s | |
● triggers every 5% starting on 40s | |
● triggers every 5% starting on 42s | |
● triggers every 5% starting on 44s | |
● triggers every 5% starting on 46s | |
● triggers every 5% starting on 48s | |
● triggers every 5% starting on 50s | |
● triggers every 5% starting on 52s | |
● triggers every 5% starting on 54s | |
● triggers every 5% starting on 56s | |
● triggers every 5% starting on 58s | |
● triggers every 5% starting on 60s | |
● triggers every 5% starting on 62s | |
● triggers every 5% starting on 64s | |
● triggers every 5% starting on 66s | |
● triggers every 5% starting on 68s | |
● triggers every 5% starting on 70s | |
● triggers every 5% starting on 72s | |
● triggers every 5% starting on 74s | |
● triggers every 5% starting on 76s | |
● triggers every 5% starting on 78s | |
● triggers every 5% starting on 80s | |
● triggers every 5% starting on 82s | |
● triggers every 5% starting on 84s | |
● triggers every 5% starting on 86s | |
● triggers every 5% starting on 88s | |
● triggers every 5% starting on 90s | |
● triggers every 5% starting on 92s | |
● triggers every 5% starting on 94s | |
● triggers every 5% starting on 96s | |
● triggers every 5% starting on 98s | |
● triggers 100% on ended | |
#stop | |
● cancels upcoming events | |
video-iframe-integration | |
adopt(win) | |
<script async> support | |
● should execute callbacks pushed before adoption | |
● should execute callbacks pushed after adoption | |
AmpVideoIntegration | |
#getMetadata | |
● gets metadata from window name | |
#method | |
● should execute on message | |
● should reject invalid methods | |
#postEvent | |
● should post any event | |
#getIntersection | |
● should request and receive intersection | |
#listenTo | |
jwplayer | |
● registers all events and methods | |
video.js | |
● registers all methods | |
getVideoJs | |
● returns window global if no initializer provided | |
● returns initializer if provided | |
● fails if no initializer provided or Video.JS not present | |
Rotate-to-fullscreen | |
● should enter fullscreen if a video is centered in portrait | |
● should not enter fullscreen if no video is centered in portrait | |
● should exit fullscreen on rotation | |
● should not exit on rotation if no video was in fullscreen | |
● selects the only video playing manually amongst visible | |
● selects center-most video among those visible and playing | |
● selects top-most video if two videos are equally centered | |
● selects the highest intersection ratio if two videos are visible | |
VideoSessionManager | |
● should trigger a listener when a session ends | |
● should only begin a session once even after repeated calls | |
● should only end a session once even after repeated calls | |
viewerCidApi | |
isSupported | |
● should return true if Viewer is trusted and has CID capability | |
● should return false if Viewer has no CID capability | |
● should return false if Viewer is not trusted | |
getScopedCid | |
● should use client ID API from api if everything great | |
● should not use client ID API if no opt in meta tag | |
● should not use client ID API if scope not whitelisted | |
● should return undefined if Viewer returns undefined | |
● should reject if Viewer rejects | |
WARN: '[lru-cache] Trimming LRU cache' | |
Viewer | |
● should configure correctly based on ampdoc | |
● should expose viewer capabilities | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not clear fragment in non-embedded mode | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not clear fragment in embedded mode | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should set ampshare fragment within custom tab | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should merge fragments within custom tab | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not duplicate ampshare when merging | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should remove multiple ampshares when merging | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should remove extra ampshare even when it's first | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should remove extra ampshare even when it's sandwiched | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should clear fragment when click param is present | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should restore fragment within custom tab with click param | |
● should configure prerenderSize by default | |
● should return promise that resolve on visible | |
● should initialize firstVisibleTime when doc becomes visible | |
● should configure prerenderSize | |
● should receive viewport event | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
replaceUrl | |
● should replace URL for the same non-proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should ignore replacement fragment | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace relative URL for the same non-proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should fail to replace URL for a wrong non-proxy origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should tolerate errors when trying to replace URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace URL for the same source origin on proxy | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should fail replace URL for wrong source origin on proxy | |
● should NOT replace URL in shadow doc | |
should receive the visibilitychange event | |
● should change prerenderSize | |
● should change visibilityState | |
● should receive "paused" visibilityState | |
● should receive "inactive" visibilityState | |
● should parse "hidden" as "prerender" before first visible | |
● should parse "hidden" as "inactive" after first visible | |
● should reject unknown values | |
● should be inactive when the viewer tells us we are inactive | |
● should be prerender when the viewer tells us we are prerender | |
● should be hidden when the browser document is hidden | |
● should be paused when the browser document is visible but viewer ispaused | |
● should be visible when the browser document is visible | |
● should change visibility on visibilitychange event | |
Messaging not embedded | |
● should not expect messaging | |
● should fail sendMessageAwaitResponse | |
● should do nothing in sendMessage but not fail | |
● should post broadcast event but not fail | |
Messaging embedded | |
● should receive broadcast event | |
● should post broadcast event | |
ERROR: 'Error: No messaging channel: initMessagingChannel' | |
The test "Viewer Messaging embedded should post broadcast event but not fail w/o messaging" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should post broadcast event but not fail w/o messaging | |
● sendMessageAwaitResponse should wait for messaging channel | |
ERROR: 'Error: No messaging channel: initMessagingChannel' | |
The test "Viewer Messaging embedded should timeout messaging channel" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should timeout messaging channel | |
sendMessage | |
● should send event when deliverer is set | |
sendMessage with cancelUnsent | |
● should queue non-dupe events | |
● should queue dupe events | |
● should dequeue events when deliverer is set | |
● should return undefined | |
sendMessageAwaitResponse | |
● should send event when deliverer is set | |
sendMessageAwaitResponse with cancelUnsent | |
● should send queued messages | |
● should return promise that resolves on response | |
isEmbedded | |
● should NOT be embedded when not iframed | |
● should be embedded when iframed w/ "origin" in URL hash | |
● should be embedded when iframed w/ "visibilityState" | |
● should NOT be embedded when iframed w/o "origin" param | |
● should be embedded with "webview=1" param | |
● should be embedded with query param | |
● should be embedded when isCctEmbedded | |
isWebviewEmbedded | |
● should be webview w/ "webview=1" | |
● should NOT be webview w/o "webview=1" | |
● should NOT be webview w/ "webview=0" | |
● should NOT be webview if iframed regardless of "webview=1" | |
isCctEmbedded | |
● should be CCT embedded with "amp_gsa=1" and "amp_js_v=a\d*" | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should NOT be CCT embedded w/o "amp_gsa=1" | |
● should NOT be CCT embedded w/ "amp_gsa=0" | |
● should NOT be CCT embedded w/ "amp_js_v" not starting with "a" | |
● should NOT be CCT embedded if iframed regardless of "amp_gsa=1" | |
isTrustedViewer | |
● should consider non-trusted when not iframed | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should consider trusted by ancestor | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should consider trusted by ancestor | |
● should consider non-trusted without ancestor | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should consider non-trusted with wrong ancestor | |
● should decide trusted on connection with origin | |
● should NOT allow channel without origin | |
● should allow channel without origin thats an empty string | |
● should decide non-trusted on connection with wrong origin | |
● should give precedence to ancestor | |
when in webview | |
● should decide trusted on connection with origin | |
● should NOT allow channel without origin | |
● should decide non-trusted on connection with wrong origin | |
● should NOT give precedence to ancestor | |
when isCctEmbedded | |
● should decide trusted on connection with origin | |
● should NOT allow channel without origin | |
● should decide non-trusted on connection with wrong origin | |
● should NOT give precedence to ancestor | |
when in a fake webview (a bad actor iframe) | |
● should consider trusted by ancestor | |
● should consider non-trusted without ancestor | |
● should consider non-trusted with wrong ancestor | |
● should decide trusted on connection with origin | |
● should NOT allow channel without origin | |
● should decide non-trusted on connection with wrong origin | |
● should give precedence to ancestor | |
should be able to roughly compare origins | |
● should find http://google.com and http://google.com to match | |
● should find https://google.com and https://google.com to match | |
● should find https://www.google.com and https://google.com to match | |
● should find https://www.google.net and https://google.net to match | |
● should find https://www.google.co.uk and https://google.co.uk to match | |
● should find https://www.google.co.uk:80 and https://google.co.uk:80 to match | |
● should find https://www.www.google.com and https://google.com to match | |
● should find https://www.www.www.google.com and https://google.com to match | |
● should find http://www.www.www.google.com:1337 and http://google.com:1337 to match | |
● should find https://amp.google.com and https://google.com to match | |
● should find https://www.amp.google.com and https://google.com to match | |
● should find https://amp.www.google.com and https://google.com to match | |
● should find https://mobile.google.com and https://google.com to match | |
● should find https://m.google.com and https://google.com to match | |
● should find https://amp.m.google.com and https://google.com to match | |
● should find https://amp.mobile.google.com and https://google.com to match | |
● should find https://amp.mobile.google.co.uk and https://google.co.uk to match | |
● should find https://www1.www2.www3.google.com and https://google.com to match | |
● should find https://www.xyz.google.com and https://xyz.google.com to match | |
● should find https://xyz.www.xyz.google.com and https://xyz.www.xyz.google.com to match | |
● should NOT find http://google.com and https://google.com to match | |
● should NOT find https://google.com and https://google.net to match | |
● should NOT find https://www.google.com and http://google.com to match | |
● should NOT find https://google.com:80 and https://google.com:81 to match | |
● should NOT find https://xyz.google.com and https://google.com to match | |
● should NOT find https://xyz.google.com and http://xyz.google.com to match | |
● should NOT find https://xyz.google.com:80 and https://xyz.google.com:81 to match | |
should trust trusted viewer origins | |
● testing https://google.com | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://www.google.com | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://news.google.com | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://google.co | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://www.google.co | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://news.google.co | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://www.google.co.uk | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://www.google.co.au | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://news.google.co.uk | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://news.google.co.au | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://google.de | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://www.google.de | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://news.google.de | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://abc.www.google.com | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://google.cat | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://www.google.cat | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing x-thread:// | |
WARN: '[lru-cache] Trimming LRU cache' | |
should not trust host as referrer with http | |
● testing http://google.com | |
WARN: '[lru-cache] Trimming LRU cache' | |
should NOT trust wrong or non-whitelisted domain variations | |
● testing https://google.net | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://google.other.com | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://www.google.other.com | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://withgoogle.com | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://acme.com | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://google | |
WARN: '[lru-cache] Trimming LRU cache' | |
● testing https://www.google | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
referrer | |
● should return document referrer if not overriden | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should NOT allow override if not iframed | |
● should NOT allow override if not trusted | |
● should NOT allow override if ancestor is empty | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow partial override if async not trusted | |
● should allow full override if async trusted | |
● should allow override if iframed and trusted | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should allow override to empty if iframed and trusted | |
WARN: '[lru-cache] Trimming LRU cache' | |
viewerUrl | |
● should initially always return current location | |
● should always return current location for top-level window | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should NOT allow override if not iframed | |
● should NOT allow override if not trusted | |
● should NOT allow override if ancestor is empty | |
● should allow partial override if async not trusted | |
● should allow full override if async trusted | |
● should allow override if iframed and trusted | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should ignore override to empty if iframed and trusted | |
viewerOrigin | |
● should return empty string if origin is not known | |
● should return ancestor origin if known | |
● should return viewer origin if set via handshake | |
● should return empty string if handshake does not happen | |
ViewportBindingNatural | |
● should setup overflow:visible on body | |
● should configure body as relative | |
● should override body overflow for iOS webview | |
● should NOT require fixed layer transferring | |
● should NOT require override of the global scrollTo | |
● should connect events: subscribe to scroll and resize events | |
● should disconnect events | |
● should update padding | |
● should calculate size | |
● should calculate scrollTop from scrollElement | |
● should calculate scrollWidth from scrollElement | |
● should calculate scrollHeight from scrollElement | |
● should calculate contentHeight from body height | |
● should include padding top in contentHeight | |
● should account for child margin-top | |
● should account for child margin-top (WebKit) | |
● should update scrollTop on scrollElement | |
● should fallback scrollTop to pageYOffset | |
● should offset client rect for layout | |
● should offset client rect for layout and position passed in | |
● should disable scroll temporarily and reset scroll | |
ViewportBindingNatural on iOS | |
● should reset overscroll on X-axis | |
ViewportBindingIosEmbedWrapper | |
● should NOT setup body min-height w/o experiment | |
● should require override of the global scrollTo | |
● should require fixed layer transferring | |
● should require fixed layer transferring for later iOS w/o experiment | |
● should configure fixed layer transferring based on iOS version | |
● should start w/o overscroll and set it on doc ready | |
● should have UI setup | |
● should have CSS setup | |
● should be immediately scrolled to 1 to avoid freeze | |
● should connect events: subscribe to scroll and resize events | |
● should disconnect events | |
● should update padding | |
● should calculate size | |
● should calculate scrollTop from wrapper | |
● should calculate scrollWidth from wrapper | |
● should calculate scrollHeight from wrapper | |
● should calculate contentHeight from body height | |
● should include padding top in contentHeight | |
● should account for child margin-top | |
● should update scrollTop on wrapper | |
● should adjust scrollTop to avoid scroll freeze | |
● should offset client rect for layout | |
● should offset client rect for layout and position passed in | |
● should call scroll event | |
● should disable scroll temporarily and reset scroll | |
● should NOT refresh overscroll w/o experiment | |
Viewport | |
● should connect binding right away when visible | |
● should disconnect binding on dispose | |
● should connect binding later when visibility changes | |
● should update scroll position when visibility changes | |
● should resize only after size has been initialed | |
● should pass through size and scroll | |
● should cache result for getRect() | |
● should invalidate getRect() cache after scroll | |
● should invalidate getRect() cache after resize | |
● should not relayout on height resize | |
● should relayout on width resize | |
● should defer change event until fixed layer is complete | |
● should dispatch onResize on width resize | |
● should dispatch onResize on height resize | |
● should not dispatch onResize if size does not actually change | |
● should not do anything if padding is not changed | |
● should update non-transient padding | |
● should update padding when viewer wants to hide header | |
● should update padding for fixed layer when viewer wants to hide header | |
● should update viewport when entering lightbox mode | |
● should update viewport when leaving lightbox mode | |
● should enter full overlay on FIE when entering lightbox mode | |
● should leave full overlay on FIE when leaving lightbox mode | |
● should update viewport when entering overlay mode | |
● should update viewport when leaving overlay mode | |
● should disable scrolling based on requests | |
● should reset scrolling based on requests | |
● should send scroll events | |
● should defer scroll events | |
● should update scroll pos and reset cache | |
● scrolls with scrollIntoView respecting padding | |
● scrolls with animateScrollIntoView respecting padding | |
● should not change scrollTop for animateScrollIntoView | |
● should send cached scroll pos to getLayoutRect | |
● should calculate client rect w/o global client rect | |
● should calculate client rect w/ global client rect when | |
● should deletegate scrollWidth | |
● should deletegate scrollHeight | |
● should delegate contentHeight | |
● should delegate contentHeightChanged | |
● should scroll to target position when the viewer sets scrollTop | |
top-level classes | |
● should set singledoc class | |
● should not set singledoc class | |
ERROR: 'Expected service viewer to be registered' | |
The test "Viewport top-level classes should not set singledoc class" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should set standalone class | |
● should set embedded class | |
● should not set iframed class | |
● should set iframed class | |
ios-webview | |
● should set ios-webview class | |
● should set ios-webview class even when not on iOS | |
● should not set ios-webview class w/o webview param | |
zero dimensions | |
● should be ok with non-zero dimensions | |
● should report zero width | |
● should report zero height | |
● should report both zero width and height | |
● should report only 1% of the time | |
● should report in prerender state | |
● should NOT report in hidden state | |
● should NOT report in inactive state | |
top-level styles | |
● should not set pan-y when not embedded | |
● should set pan-y with experiment | |
for child window | |
● should calculate child window element rect via parent | |
● should offset child window element with parent scroll pos | |
overrideGlobalScrollTo | |
● should not override scrollTo/pageYOffset if not requested | |
● should override scrollTo when requested | |
● should override scrollY/pageYOffset when requested | |
● should tolerate scrollTo override failures | |
● should tolerate scrollY override failures | |
Viewport META | |
parseViewportMeta | |
● should accept null or empty strings | |
● should parse single key-value | |
● should parse two key-values | |
● should parse empty value | |
● should return last dupe | |
● should ignore extra delims | |
● should support semicolon | |
● should support mix of comma and semicolon | |
● should ignore extra mix delims | |
stringifyViewportMeta | |
● should stringify empty | |
● should stringify single key-value | |
● should stringify two key-values | |
● should stringify empty values | |
updateViewportMetaString | |
● should do nothing with empty values | |
● should add a new value | |
● should replace the existing value | |
● should delete the existing value | |
● should ignore delete for a non-existing value | |
● should do nothing if values did not change | |
WARN: '[lru-cache] Trimming LRU cache' | |
TouchZoom | |
● should initialize original viewport meta | |
● should disable TouchZoom | |
● should ignore disable TouchZoom if already disabled | |
● should ignore disable TouchZoom if embedded | |
● should restore TouchZoom | |
● should reset TouchZoom; zooming state unknown | |
● should ignore reset TouchZoom if not currently zoomed | |
● should proceed with reset TouchZoom if currently zoomed | |
● should ignore reset TouchZoom if embedded | |
createViewport | |
in Android | |
● should bind to "natural" when not iframed | |
● should bind to "naturual" when iframed | |
in iOS | |
● should bind to "natural" when not iframed | |
● should bind to "iOS embed" when iframed | |
● should NOT bind to "iOS embed" when iframed but not embedded | |
● should bind to "iOS embed" when iframed but in test mode | |
● should bind to "natural" when iframed, but iOS supports scrollable iframes | |
marginBottomOfLastChild | |
● should return the marginBottom of the last child | |
● should return 0 if element has no children | |
● should skip elements that have zero height | |
● should skip elements that are not position: static|relative | |
vsync | |
single-doc | |
● should init correctly | |
● should fail canAnimate without node | |
● should generate a frame and run callbacks (skipped) | |
● should tolerate errors in measures and mutates (skipped) | |
● should schedule nested vsyncs (skipped) | |
● should return a promise from runPromise that executes "run" (skipped) | |
● should return a promise from measurePromise that runs measurer (skipped) | |
● should return a promise from mutatePromisethat runs mutator (skipped) | |
● should schedule via animation frames when doc is visible | |
● should schedule via timer frames when doc is not visible | |
● should run via backup timer if rAF somehow doesnt fire | |
● should re-schedule when doc goes invisible | |
● should re-schedule when doc goes visible | |
● should NOT re-schedule when no tasks pending | |
● should run anim task when visible | |
● should create and run anim task when visible | |
WARN: '[VSYNC] Did not schedule a vsync request, because document was invisible' | |
● should NOT run anim task when invisible | |
WARN: '[VSYNC] Did not schedule a vsync request, because document was invisible' | |
● should create but NOT run anim task when invisible | |
● should reject mutate series when invisible | |
RAF polyfill | |
● should schedule frames using the polyfill | |
multi-doc | |
● should init correctly | |
● should schedule via animation frames when doc is visible | |
● should schedule via timer frames when doc is not visible | |
● should re-schedule when doc goes invisible | |
● should re-schedule when doc goes visible | |
● should NOT re-schedule when no tasks pending | |
● should run anim task when visible | |
● should create and run anim task when visible | |
WARN: '[VSYNC] Did not schedule a vsync request, because document was invisible' | |
● should NOT run anim task when invisible | |
WARN: '[VSYNC] Did not schedule a vsync request, because document was invisible' | |
● should create but NOT run anim task when invisible | |
● should reject mutate series when invisible | |
web components | |
● should report whether native shadow dom supported | |
Web Components spec | |
Shadow DOM | |
● reports NONE when no spec is available | |
● gives preference to v1 over v0 when both specs are available | |
● reports v0 when available but v1 is not | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
DocumentFetcher | |
#fetchDocument | |
● should be able to fetch a document | |
● should mark 400 as not retriable | |
● should mark 415 as retriable | |
● should mark 500 as retriable | |
● should error on non truthy responseXML | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
interceptor | |
● should return correct document response | |
fetch | |
fetch method | |
● should allow GET method | |
● should allow POST method | |
ERROR: 'Only one of GET, POST is currently allowed. Got PUT' | |
The test "fetch fetch method should not allow PUT method" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should not allow PUT method | |
ERROR: 'Only one of GET, POST is currently allowed. Got PATCH' | |
The test "fetch fetch method should not allow PATCH method" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should not allow PATCH method | |
ERROR: 'Only one of GET, POST is currently allowed. Got DELETE' | |
The test "fetch fetch method should not allow DELETE method" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should not allow DELETE method | |
● should allow FormData as body | |
● should do `GET` as default method | |
● should normalize POST method name to uppercase | |
● should parse and pass the headers | |
● should pass the body to xhr request | |
● should make xhr request withCredentials for creds include | |
Response | |
● should keep default status as 200 OK | |
● should default status as 200 OK when an explicit for undefined status | |
● should construct with body and explicit header uses header | |
● should reflect given status | |
● should provide url | |
● should provide text | |
ERROR: 'Body already used' | |
The test "fetch Response should provide text only once" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should provide text only once | |
● should provide json | |
● should be cloneable and each instance should provide text | |
ERROR: 'Body already used' | |
The test "fetch Response should not be cloneable if body is already accessed" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should not be cloneable if body is already accessed | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
XHR | |
AMP-Same-Origin | |
● should not be set for cross origin requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should be set for all same origin GET requests | |
● should be set for all same origin POST requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should check origin not source origin | |
Native | |
● should do simple JSON fetch (skipped) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should redirect fetch | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should fail fetch for 400-error | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should fail fetch for 500-error | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should NOT succeed CORS setting cookies without credentials | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should succeed CORS setting cookies with credentials | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should ignore CORS setting cookies w/omit credentials | |
● should NOT succeed CORS with invalid credentials | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should expose HTTP headers | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should omit request details for privacy | |
assertSuccess | |
● should resolve if success | |
● should reject if error | |
● should include response in error | |
● should not resolve after rejecting promise | |
#fetchText | |
● should be able to fetch a document | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
#XHR | |
● should allow GET and POST methods | |
● should allow FormData as body | |
● should do `GET` as default method | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should normalize GET method name to uppercase | |
● should normalize POST method name to uppercase | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should inject source origin query parameter | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should inject source origin query parameter w/o query | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should defend against invalid source origin query parameter | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should defend against empty source origin query parameter | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should defend against re-encoded source origin parameter | |
● should not include __amp_source_origin if ampCors set to false | |
● should accept AMP origin when received in response | |
doc visibility | |
● should not call fetch if view is not visible | |
● should call fetch if view is visible | |
● should not be set for cross origin requests | |
● should be set for all same origin GET requests | |
● should be set for all same origin POST requests | |
● should check origin not source origin | |
Polyfill | |
● should do simple JSON fetch (skipped) | |
● should redirect fetch | |
● should fail fetch for 400-error | |
● should fail fetch for 500-error | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should NOT succeed CORS setting cookies without credentials | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should succeed CORS setting cookies with credentials | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should ignore CORS setting cookies w/omit credentials | |
● should NOT succeed CORS with invalid credentials | |
● should expose HTTP headers | |
● should omit request details for privacy | |
assertSuccess | |
● should resolve if success | |
● should reject if error | |
● should include response in error | |
● should not resolve after rejecting promise | |
● should be able to fetch a document | |
WARN: '[lru-cache] Trimming LRU cache' | |
#fetch Polyfill | |
● should be able to fetch a response | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
Native POST | |
● should get an echo'd response back | |
● should throw when `body` is not an object or array | |
Polyfill POST | |
● should have required json POST headers by default | |
● should get an echo'd response back | |
● should throw when `body` is not an object or array | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
interceptor | |
● should not intercept if AMP doc is not single | |
● should not intercept if AMP doc does not opt in | |
● should not intercept if viewer is not capable | |
● should not intercept if viewer untrusted and non-dev mode | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not intercept a 1p cdn from subdomain | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not intercept a 1p cdn resource | |
● should intercept if viewer untrusted but in local dev mode | |
WARN: '[EXPERIMENTS] "%s" experiment %s for the domain "%s". See: https://amp.dev/documentation/guides-and-tutorials/learn/experimental', 'untrusted-xhr-interception', 'enabled', undefined | |
● should intercept if untrusted-xhr-interception experiment enabled | |
WARN: '[EXPERIMENTS] "%s" experiment %s for the domain "%s". See: https://amp.dev/documentation/guides-and-tutorials/learn/experimental', 'untrusted-xhr-interception', 'disabled', undefined | |
● should intercept if non-dev mode but viewer trusted | |
● should send viewer message named `xhr` | |
● should post correct structurally-cloneable GET request | |
● should post correct structurally-cloneable JSON request | |
● should post correct structurally-cloneable FormData request | |
ERROR: 'Object expected: ' | |
The test "XHR interceptor should be rejected when response undefined" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should be rejected when response undefined | |
ERROR: 'Object expected: ' | |
The test "XHR interceptor should be rejected when response null" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should be rejected when response null | |
ERROR: 'Object expected: response text' | |
The test "XHR interceptor should be rejected when response is string" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should be rejected when response is string | |
when native Response type is available | |
● should return correct non-document response | |
when native Response type is unavailable | |
● should return correct non-document response | |
● should return default response when body/init missing | |
● should return default response when status/headers missing | |
● should convert body to string | |
● should convert status to int | |
● should convert headers to string | |
● should support case-insensitive header search | |
#xssiJson | |
● should call response.json() if prefix is either missing or the empty string | |
WARN: '[XHR] Failed to strip missing prefix "while(1)" in fetch response.' | |
● should not strip characters if the prefix is not present | |
● should strip prefix from the response text if prefix is present | |
yield | |
● should work with nested promises | |
● should work with promise chain | |
● should work with promise inside setTimeout | |
● should work with manually resolved promise inside setTimeout | |
● should block a promise | |
● should be able to expect throwable | |
Expander | |
#eliminateOverlaps | |
● should handle empty | |
● should return single item | |
● should sort basic case | |
● will always prefer the first match in overlap | |
● will prefer longer match if same start index | |
● should handle keywords next to each other | |
Whitelist of variables | |
● should not replace unwhitelisted RANDOM | |
● should replace whitelisted ABCD | |
● should not replace anything with empty whitelist | |
#expand | |
called asyncronously | |
● should handle empty urls | |
● parses one function, one argument | |
● parses nested function one level | |
● parses nested function two levels | |
● parses one function, two string arguments | |
● parses one function, two string arguments with space | |
● parses function with func then string as args | |
● parses function with macro then string as args | |
● parses function with string then func as args | |
● parses function with two funcs as args | |
● parses function with three funcs as args | |
● should treat unrecognized keywords as normal strings | |
● ignores commas within backticks | |
● ignores left parentheses within backticks | |
● ignores right parentheses within backticks | |
● trims with the wrong number of parens | |
● passes undefined for omitted args | |
● should not double encode nested macros | |
● should handle backticks inside args | |
● should handle backticks inside args w/ macros | |
unique cases | |
● should handle real urls | |
● should handle tokens with parenthesis next to each other | |
called synchronously | |
● should handle empty urls | |
● parses one function, one argument | |
● parses nested function one level | |
● parses nested function two levels | |
● parses one function, two string arguments | |
● parses one function, two string arguments with space | |
● parses function with func then string as args | |
● parses function with macro then string as args | |
● parses function with string then func as args | |
● parses function with two funcs as args | |
● parses function with three funcs as args | |
● should treat unrecognized keywords as normal strings | |
● ignores commas within backticks | |
● ignores left parentheses within backticks | |
● ignores right parentheses within backticks | |
● trims with the wrong number of parens | |
● passes undefined for omitted args | |
● should not double encode nested macros | |
● should handle backticks inside args | |
● should handle backticks inside args w/ macros | |
unique cases | |
● should resolve promise to empty string | |
● should resolve asyncronous function to empty string | |
● should resolve asyncronous function to empty string | |
● dismiss async in real urls | |
● dismiss async in nested calls | |
collectVars | |
called asyncronously | |
● sibling macros | |
● nested macros | |
● macros that resolve undefined should be empty string | |
● should handle async functions | |
called syncronously | |
● sibling macros | |
● nested macros | |
● macros that resolve undefined should be empty string | |
● should discard async functions when called synchronously | |
opt_whiteList | |
● should only resolve values in the whitelist | |
getMacroNames | |
● should handle no names found | |
● should find the correct names | |
● should find the nested names | |
areEqualOrdered | |
● should return true on empty arrays | |
● should return true on same array with primitive types of same seq | |
● should return true on same array with objects of same seq | |
● should return false on same array with primitive types of different seq | |
● should return false on same array with objects of different seq | |
● should return false on array of different length | |
remove | |
● should remove elements that return true | |
● handles no removals | |
● handles consecutive removals | |
findIndex | |
● should return the index of first matching element | |
● should return -1 if no matching element | |
● should pass index as the 2nd param to the predicate function | |
● should pass the original array as the 3rd param to the predicate | |
fromIterator | |
● should return empty array for empty iterator | |
● should return non-empty array for non-empty iterator | |
pushIfNotExist | |
● should push element | |
● should not push element | |
base64 | |
base64 <> utf-8 encode/decode | |
NativeTextEncoding | |
base64Encode/base64Decode | |
● SimplyFoo | |
● Unicode௵Z加䅌ਇ☎Èʘغޝ | |
● Symbols/.,+-_()*&^%$#@!`~:="' | |
base64UrlEncode/base64UrlDecode | |
● SimplyFoo | |
● Unicode௵Z加䅌ਇ☎Èʘغޝ | |
● Symbols/.,+-_()*&^%$#@!`~:="' | |
PolyfillTextEncoding | |
base64Encode/base64Decode | |
● SimplyFoo | |
● Unicode௵Z加䅌ਇ☎Èʘغޝ | |
● Symbols/.,+-_()*&^%$#@!`~:="' | |
base64UrlEncode/base64UrlDecode | |
● SimplyFoo | |
● Unicode௵Z加䅌ਇ☎Èʘغޝ | |
● Symbols/.,+-_()*&^%$#@!`~:="' | |
Mixed | |
base64Encode/base64Decode | |
● SimplyFoo | |
● Unicode௵Z加䅌ਇ☎Èʘغޝ | |
● Symbols/.,+-_()*&^%$#@!`~:="' | |
base64UrlEncode/base64UrlDecode | |
● SimplyFoo | |
● Unicode௵Z加䅌ਇ☎Èʘغޝ | |
● Symbols/.,+-_()*&^%$#@!`~:="' | |
base64UrlDecodeToBytes | |
● should map a sample string appropriately | |
● should handle padded and unpadded input | |
● should signal an error with bad input characters | |
● should signal an error with bad padding | |
base64DecodeToBytes | |
● should map a sample string appropriately | |
● should handle padded and unpadded input | |
● should signal an error with bad input characters | |
● should signal an error with bad padding | |
base64EncodeFromBytes | |
● should encode a bytes array to base64url string correctly | |
● should encode a bytes array to base64 string correctly | |
base64(Encode/Decode)FromString | |
● should handle unicode and non-unicode strings encoding | |
● should handle unicode and non-unicode strings decoding | |
stringToBytes | |
● should map a sample string appropriately | |
● should signal an error with a character >255 | |
● should convert bytes array to string | |
● should generate random bytes array when win.crypto is availble | |
● should return null when trying to generate random bytes array if win.crypto is not availble | |
utf8 | |
● should encode given string into utf-8 byte array | |
● should decode given utf-8 bytes into string | |
bytesToUInt32 | |
● should convert Uint8Arrays into unsigned 32-bit integers | |
document-visibility | |
● should be visible when no properties defined | |
● should resolve non-vendor hidden property | |
● should resolve non-vendor visibilityState property | |
● should prefer visibilityState property to hidden | |
● should consider prerender as visible | |
● should resolve non-vendor visibilitychange event | |
● should resolve vendor hidden property | |
● should resolve vendor visibilityState property | |
● should resolve vendor visibilitychange event | |
#DomAncestorVisitor | |
● should respect maxAncestorsToVisit | |
● should not re-run completed visitors | |
● should cease visiting once visitor returns | |
domFingerprint | |
● should map a sample DOM structure to the right string | |
● should map a sample DOM structure to the right hashed value | |
DomWriterStreamer | |
DomWriterStreamer | |
● should complete when writer has been closed | |
● should resolve body as soon as available | |
● should schedule body chunk | |
● should schedule several body chunks together | |
● should not parse noscript as markup | |
● should not parse noscript as markup across writes | |
DomWriterBulk | |
● should complete when writer has been closed | |
● should wait for body until stream is closed | |
● should process for body chunks together | |
● should not parse noscript as markup | |
LruCache | |
● should create a prototype-less object for caching | |
● should cache up to capacity | |
● should not-evict when putting same key | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should never be over cap | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should evict least recently used | |
utils/math | |
mapRange | |
● should map a number to the current value | |
● should automatically detect source range bounds order | |
● should accept decreasing target ranges | |
● should constrain input to the source range | |
mod | |
● a -> positive number, b -> positive number | |
● a -> negative number, b -> positive number | |
● a -> positive number, b -> negative number | |
● a -> negative number, b -> negative number | |
clamp | |
● should not clamp if within the range | |
● should be inclusive of the range | |
● should clamp larger values | |
● should clamp smaller values | |
● should fail if the minimum is greater than the maximum | |
boundValue | |
● should not bound if within the range | |
● should not bound if larger than the range but within the extent | |
● should not bound if smaller than the range but within the extent | |
● should be inclusive of the extended range | |
● should bound values larger than the extended range | |
● should bound values smaller the extended range | |
● should fail if the minimum is greater than the maximum | |
magnitude | |
● should operate on all-positive vectors | |
● should operate on partially-negative vectors | |
● should operate on all-negative vectors | |
● should yield the absolute value of one delta if the other is zero | |
● should yield zero for the zero-vector | |
distance | |
● should yield zero distance for identical points | |
● should compute distance when one point is the origin | |
● should compute distance when all coordinates are positive | |
● should compute distance when all coordinates are negative | |
● should compute distance when some coordinates are negative | |
sum | |
● should sum up an array of numbers | |
pemToBytes | |
● should convert a valid key | |
● should convert without headers, footers, line breaks | |
● should convert without line breaks | |
● should convert without header | |
● should convert without footer | |
PriorityQueue | |
● should return the correct length of the queue | |
● should support enqueueing arbitrary data types | |
● should support peeking at the max priority item | |
● should dequeue items in descending priority order | |
● should dequeue items with same priority in FIFO order | |
● should return null when dequeueing an empty queue | |
● should throw error when priority is NaN | |
● should iterate through queue | |
PromiseUtils | |
LastAddedResolver | |
● should resolve when its only promise resolves | |
● should resolve when its last promise added resolves | |
● should support adding initial promises in the constructor | |
● should reject only when the last promise rejects | |
function utils | |
throttle | |
● should work | |
● should throttle recursive callback | |
debounce | |
● should wait before calling | |
● should debounce recursive callback | |
Signals | |
● should register signal without promise | |
● should reject signal without promise | |
● should not duplicate signal | |
● should override signal time | |
● should resolve signal after it was requested | |
● should resolve signal before it was requested | |
● should reject signal after it was requested | |
● should reject signal before it was requested | |
● should reset signal before it was triggered | |
● should reset signal after it was triggered | |
● should reset signal after it was requested | |
● should reset signal after it was resolved | |
● should reset a pre-resolved signal | |
Signals with zero for tests | |
● should register signal without promise | |
WARN: '[lru-cache] Trimming LRU cache' | |
utils/xhr-utils | |
setupAMPCors | |
● should set AMP-Same-Origin header | |
● should not set AMP-Same-Origin header | |
setupInit | |
● should set up init | |
● should set up init with Accept header value | |
● should handle null credentials | |
setupJsonFetchInit | |
● set proper properties | |
getViewerInterceptResponse | |
● should be no-op if amp doc is absent | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not intercept if viewer can not intercept | |
● should not intercept if request is initialized to bypass for local development | |
● should not intercept if amp doc does not support xhr interception | |
● should not intercept if URL is known as a proxy URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should send xhr request to viewer | |
● should wait for visibility | |
● should not wait for visibility if prerenderSafe | |
getViewerAuthTokenIfAvailable | |
● should return undefined if crossorigin attr is not present | |
● should return undefined if crossorigin attr does not contain exactly "amp-viewer-auth-token-post" | |
● should return an auth token if one is present | |
● should return an empty auth token if there is not one present | |
● should return an empty auth token if there is an issue retrieving the identity token | |
● should assert that amp-viewer-assistance extension is present | |
invokeWebWorker | |
● should check if Worker is supported | |
● should send and receive a message | |
● should differentiate messages of different methods | |
● should differentiate messages of same method with different ids | |
● should log error when unexpected message is received | |
● should clean up storage after message completion | |
● should send unique scope IDs per `opt_localWin` value | |
getAutoConfig | |
● should use image_stacked on wide slots | |
● should use mobile_banner_image_sidebyside on narrow slots on mobile | |
● should use image_sidebyside on narrow slots on desktop | |
getPubControlConfig | |
● should use setting when only one provided | |
● should use different settings for mobile and desktop when two provided | |
● should return different sizes for different layouts | |
● should reject invalid pub params | |
● limits number of columns if publisher chose too many | |
buildUrl | |
● should build a simple URL | |
#line-delimited-response-handler | |
stream not supported | |
● should fallback to text if no stream support | |
● should fallback to text if no stream support w/ empty response | |
● should fallback to text if no TextDecoder | |
all-traffic-experiments-tests | |
#validateExperimentIds | |
● should return true for empty list | |
● should return true for a singleton numeric list | |
● should return false for a singleton non-numeric list | |
● should return true for a multi-item valid list | |
● should return false for a multi-item invalid list | |
#addExperimentIdToElement | |
● should add attribute when there is none present to begin with | |
● should append experiment to already valid single experiment | |
● should do nothing to already valid single experiment | |
● should append experiment to already valid multiple experiments | |
● should should replace existing invalid experiments | |
#isInExperiment | |
● should return false for empty element and any query | |
● should return false for empty attribute and any query | |
● should return false for real data string but mismatching query | |
● should return true for singleton data and matching query | |
● should return true for matching query | |
Google A4A utils | |
#additionalDimensions | |
● should return the right value when fed mocked inputs | |
#ActiveView AmpAnalytics integration | |
● should extract correct config from header | |
● should add the correct CSI signals | |
#getAmpRuntimeTypeParameter | |
● should specify that this is experimental | |
● should specify that this is control | |
● should specify that this is experimentA | |
● should not have `art` parameter when AMP_CONFIG is undefined | |
● should not have `art` parameter when binary type is production | |
● should not have `art` parameter when canonical | |
#googleAdUrl | |
● should set ad position | |
● should include scroll position | |
● should include all experiment ids | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should include debug_experiment_id if local mode w/ deid hash | |
● should include GA cid/hid | |
● should have correct bc value when everything supported | |
● should have correct bc value when sandbox not supported | |
● should not include bc when nothing supported | |
● should handle referrer url promise timeout | |
● should include domLoading time | |
#mergeExperimentIds | |
● should merge a single id to itself | |
● should merge a single ID to a list | |
● should merge multiple IDs into a list | |
● should discard invalid ID | |
● should return empty string for invalid input | |
#maybeAppendErrorParameter | |
● should append parameter | |
● should not append parameter if already present | |
● should not append parameter if truncated | |
#getEnclosingContainerTypes | |
● should return empty if no containers | |
● should return container: AMP-CAROUSEL | |
● should return container: AMP-FX-FLYING-CARPET | |
● should return container: AMP-LIGHTBOX | |
● should return container: AMP-STICKY-AD | |
● should include ALL containers | |
#getIdentityTokenRequestUrl | |
● should use google.com if at top | |
● should use google.com if no ancestorOrigins | |
● should use google.com if non-google top | |
● should use google ancestor origin based top domain | |
● should use supplied domain | |
WARN: '[lru-cache] Trimming LRU cache' | |
#getIdentityToken | |
● should ignore response if required fields are missing | |
● should fetch full token as expected | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should redirect as expected | |
● should stop after 1 redirect | |
● should use previous execution | |
● should handle fetch error | |
● should fetch if SUFFICIENT consent | |
● should not fetch if INSUFFICIENT consent | |
● should not fetch if UNKNOWN consent | |
variables for amp-analytics | |
● should include the correlator | |
● should include the slot index | |
● should include the qqid when provided | |
● should omit the qqid when null | |
● should include scheduleTime for ad render start triggers | |
● should omit scheduleTime by default | |
● should include viewer lastVisibleTime | |
#extractHost | |
● http://foo.com/sl?lj=fl | |
● Http://bar.com?lj=fl | |
● htTps://foo.com?lj=fl | |
● http://bar.com | |
● https://foo.com | |
● https://foo.com:8080 | |
● https://bar.com:8080/lkjs?a=b | |
● bar.com:8080/lkjs?a=b | |
● bar.com:8080/ | |
● bar.com/sl?lj=fl | |
● foo.com/sl/lj=fl?ls=f | |
● bar.com?lj=fl | |
● foo.com?lj=fl | |
● hello.com | |
● | |
#getCorrelator | |
● should return cached value if it exists | |
● should calculate correlator from PVID and CID if possible | |
● should calculate randomly if experiment on | |
#groupAmpAdsByType | |
● should find amp-ad of only given type | |
● should find amp-ad within sticky container | |
● should find and group multiple, some in containers | |
#getMultiSizeDimensions | |
● should return all sizes | |
WARN: '[AMP-AD] Secondary height 300 can't be larger than the primary height.' | |
● should return a smaller array | |
WARN: '[AMP-AD] Secondary width 300 can't be larger than the primary width. Secondary height 300 can't be larger than the primary height.' | |
WARN: '[AMP-AD] Secondary width 300 can't be larger than the primary width.' | |
● should return an even smaller array | |
WARN: '[AMP-AD] Secondary width 300 can't be larger than the primary width. Secondary height 300 can't be larger than the primary height.' | |
WARN: '[AMP-AD] Secondary width 300 can't be larger than the primary width. Secondary height 250 can't be larger than the primary height.' | |
WARN: '[AMP-AD] Secondary width 250 can't be larger than the primary width. Secondary height 250 can't be larger than the primary height.' | |
WARN: '[AMP-AD] Secondary width 250 can't be larger than the primary width. Secondary height 200 can't be larger than the primary height.' | |
WARN: '[AMP-AD] Secondary width 150 can't be larger than the primary width.' | |
● should return an empty array | |
WARN: '[AMP-AD] Secondary width 150 is smaller than 2/3rds of the primary width. Secondary height 50 is smaller than 2/3rds of the primary height.' | |
● should return a smaller array due to lowerbound | |
WARN: '[AMP-AD] Secondary height 300 can't be larger than the primary height.' | |
WARN: '[AMP-AD] Secondary width 150 is smaller than 2/3rds of the primary width. Secondary height 50 is smaller than 2/3rds of the primary height.' | |
● should return a smaller array due to lowerbound + smaller primary size | |
WARN: '[AMP-AD] Invalid width of -1 given for secondary size.' | |
● should return all positive sizes | |
● should not add dummy size for fluid if fluid is primary size | |
● should allow fluid with fixed sizes | |
#getMatchedContentResponsiveHeightAndUpdatePubParams | |
● should use auto logic when no pub params present | |
● should use pub control logic when pub params present | |
amp-3d-gltf | |
● renders iframe (skipped) | |
● sends toggleAmpViewport(false) when exiting viewport (skipped) | |
● sends toggleAmpViewport(true) when entering viewport (skipped) | |
ERROR: 'The element did not specify a layout attribute. Check https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/control_layout and the respective element documentation for details.' | |
The test "amp-3q-player renders" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
amp-3q-player | |
● renders | |
● requires data-id | |
ERROR: 'The element did not specify a layout attribute. Check https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/control_layout and the respective element documentation for details.' | |
The test "amp-3q-player should forward events from amp-3q-player to the amp element" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should forward events from amp-3q-player to the amp element | |
INFO: '[amp-a4a] upgradeDelay mock: 0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
integration test: a4a | |
● should render a single AMP ad in a friendly iframe | |
INFO: '[amp-a4a] upgradeDelay mock: 0' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should fall back to 3p when no signature is present | |
INFO: '[amp-a4a] upgradeDelay mock: 0' | |
● should not send request if display none | |
INFO: '[amp-a4a] upgradeDelay mock: 0' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should fall back to 3p when the XHR fails | |
INFO: '[amp-a4a] upgradeDelay mock: 0' | |
● should collapse slot when creative response has code 204 | |
INFO: '[amp-a4a] upgradeDelay mock: 0' | |
● should collapse slot when creative response.arrayBuffer() is empty | |
INFO: '[amp-a4a] upgradeDelay mock: 0' | |
● should continue to show old creative after refresh and no fill | |
● should propagate errors out and report them to upstream error log (skipped) | |
A4AVariableSource | |
● should replace RANDOM | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace CANONICAL_URL | |
● should replace NAV_TIMING | |
● should replace NAV_TYPE | |
● should replace NAV_REDIRECT_COUNT | |
● should replace HTML_ATTR | |
● should replace CLIENT_ID with null | |
● should not replace PAGE_LOAD_TIME | |
● should not replace DOMAIN_LOOKUP_TIME | |
● should not replace TCP_CONNECT_TIME | |
● should not replace SERVER_RESPONSE_TIME | |
● should not replace PAGE_DOWNLOAD_TIME | |
● should not replace REDIRECT_TIME | |
● should not replace DOM_INTERACTIVE_TIME | |
● should not replace CONTENT_LOAD_TIME | |
● should not replace ACCESS_READER_ID | |
● should not replace AUTHDATA | |
● should not replace AMP_STATE | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
amp-a4a | |
● should set height/width on iframe matching header value | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[inabox-host] Error processing inabox message [object MessageEvent] TypeError: Cannot read property 'length' of undefined' | |
The test "amp-a4a ads are visible for SafeFrame rendering case" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ads are visible | |
● for SafeFrame rendering case | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-a4a] fallback to 3p' | |
● for ios defaults to SafeFrame rendering | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● for cached content iframe rendering case | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● populates postAdResponseExperimentFeatures | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● for A4A friendly iframe rendering case | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● detachedCallback should destroy FIE and detach frame | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● for A4A layout should resolve once FIE is created | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should fire amp-analytics triggers for lifecycle events | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should update embed visibility | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● for requests from insecure HTTP pages | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should fire amp-analytics triggers | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should not fire amp-analytics triggers without config | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should insert an amp-analytics element | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should not insert an amp-analytics element if config is null | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
layoutCallback cancels properly | |
● when unlayoutCallback called after adPromise | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● when unlayoutCallback called before renderAmpCreative_ | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
cross-domain rendering | |
#renderViaIframeGet | |
● should attach a client cached iframe when set | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should apply sandbox when sandboxHTMLCreativeFrame is true | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should not apply sandbox when sandboxHTMLCreativeFrame false | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should set feature policy for sync-xhr | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
illegal render mode value | |
● should render via cached iframe | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should fire amp-analytics triggers for illegal render modes | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
#renderViaNameFrame | |
● should attach a NameFrame when header is set | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should make only one NameFrame even if onLayoutMeasure called multiple times | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should apply sandbox when sandboxHTMLCreativeFrame is true | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should not apply sandbox when sandboxHTMLCreativeFrame false | |
● should not attach a NameFrame when header is (skipped) | |
● should not attach a NameFrame when header is client_cache (skipped) | |
● should not attach a NameFrame when header is safeframe (skipped) | |
● should not attach a NameFrame when header is some_random_thing (skipped) | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should fire amp-analytics triggers for lifecycle stages | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
ERROR: '[inabox-host] Error processing inabox message [object MessageEvent] TypeError: Cannot read property 'length' of undefined' | |
The test "amp-a4a cross-domain rendering #renderViaSafeFrame should attach a SafeFrame when header is set" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
#renderViaSafeFrame | |
● should attach a SafeFrame when header is set | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should use safeframe version header value | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
ERROR: '[inabox-host] Error processing inabox message [object MessageEvent] TypeError: Cannot read property 'length' of undefined' | |
The test "amp-a4a cross-domain rendering #renderViaSafeFrame should make only one SafeFrame even if onLayoutMeasure called multiple times" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should make only one SafeFrame even if onLayoutMeasure called multiple times | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
ERROR: '[inabox-host] Error processing inabox message [object MessageEvent] TypeError: Cannot read property 'length' of undefined' | |
The test "amp-a4a cross-domain rendering #renderViaSafeFrame should apply sandbox when sandboxHTMLCreativeFrame is true" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should apply sandbox when sandboxHTMLCreativeFrame is true | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
ERROR: '[inabox-host] Error processing inabox message [object MessageEvent] TypeError: Cannot read property 'length' of undefined' | |
The test "amp-a4a cross-domain rendering #renderViaSafeFrame should not apply sandbox when sandboxHTMLCreativeFrame false" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should not apply sandbox when sandboxHTMLCreativeFrame false | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should not attach a SafeFrame when header is | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should not attach a SafeFrame when header is client_cache | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should not attach a SafeFrame when header is nameframe | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should not attach a SafeFrame when header is some_random_thing | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
ERROR: '[inabox-host] Error processing inabox message [object MessageEvent] TypeError: Cannot read property 'length' of undefined' | |
The test "amp-a4a cross-domain rendering #renderViaSafeFrame should reset state to null on unlayoutCallback" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should reset state to null on unlayoutCallback | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
ERROR: '[inabox-host] Error processing inabox message [object MessageEvent] TypeError: Cannot read property 'length' of undefined' | |
The test "amp-a4a cross-domain rendering #renderViaSafeFrame should fire amp-analytics triggers for lifecycle stages" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should fire amp-analytics triggers for lifecycle stages | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
cross-domain vs A4A | |
● should not use nameframe if creative is A4A | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should not use nameframe even if onLayoutMeasure called multiple times | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should not use safeframe if creative is A4A | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should not use safeframe even if onLayoutMeasure called multiple times | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
#onLayoutMeasure | |
● resumeCallback calls onLayoutMeasure | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● resumeCallback does not call onLayoutMeasure for FIE | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● resumeCallback w/ measure required no onLayoutMeasure | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should run end-to-end and render in friendly iframe | |
WARN: '[amp-a4a] fallback to 3p' | |
● should update priority for non AMP if in experiment | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should prefetch amp images | |
WARN: '[amp-a4a] <AMP-A4A> is not allowed to be placed in elements with position:fixed: [object HTMLElement]' | |
● must not be position:fixed | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● does not initialize promise chain 0 height/width | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● does not initialize promise chain when hidden by media query | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● does not initialize promise chain when has attribute "hidden" | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● #layoutCallback valid AMP | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● #layoutCallback not valid AMP | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] adsense', 'Error injecting creative in friendly frame', 'amp render failure' | |
WARN: '[amp-a4a] fallback to 3p' | |
● #layoutCallback AMP render fail, recover non-AMP | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should run end-to-end in the presence of an XHR error | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should use adUrl from onNetworkFailure | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
INFO: '[amp-a4a] frame get disabled as part of network failure handler' | |
ERROR: 'Missing resource prop on [object HTMLElement]' | |
The test "amp-a4a #onLayoutMeasure should not execute frame GET if disabled via onNetworkFailure" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should not execute frame GET if disabled via onNetworkFailure | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should handle XHR error when resolves before layoutCallback | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should handle XHR error when resolves after layoutCallback | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should collapse 204 | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should collapse 500 | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should collapse empty body | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should collapse no fill header | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should process safeframe version header properly | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
ERROR: '[inabox-host] Error processing inabox message [object MessageEvent] TypeError: Cannot read property 'length' of undefined' | |
The test "amp-a4a #onLayoutMeasure should ignore invalid safeframe version header" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should ignore invalid safeframe version header | |
INFO: '[amp-a4a] upgradeDelay adsense: 1' | |
delay request experiment | |
● should delay request until within renderOutsideViewport | |
INFO: '[amp-a4a] upgradeDelay adsense: 1' | |
● should delay request until numeric value | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
#preconnectCallback | |
● validate | |
#getAmpAdMetadata | |
● should parse metadata | |
● should parse metadata with wrong opening tag | |
WARN: '[amp-a4a] adsense', 'Could not locate start index for amp meta data in: %s', '<html><head> | |
<style amp-custom>p { background: green }</style> | |
<style amp4ads-boilerplate>body{visibility:hidden}</style> | |
<script async src="https://cdn.ampproject.org/v0.js"></script></head> | |
<body><p>some text</p><script type=application/json" amp-ad-metadata>{"customElementExtensions":["amp-vine","amp-vine","amp-vine"],"customStylesheets":[{"href":"https://fonts.googleapis.com/css?foobar"},{"href":"https://fonts.com/css?helloworld"}],"images":["https://some.image.com/a=b","https://other.image.com"],"ampRuntimeUtf16CharOffsets":[63,184]}</script></body></html>' | |
● should return null if metadata opening tag is (truly) wrong | |
WARN: '[amp-a4a] adsense', 'Invalid amp metadata: %s', '' | |
● should return null if missing ampRuntimeUtf16CharOffsets | |
WARN: '[amp-a4a] adsense', 'Invalid amp metadata: %s', '{"customElementExtensions":"amp-vine","customStylesheets":[{"href":"https://fonts.googleapis.com/css?foobar"},{"href":"https://fonts.com/css?helloworld"}],"images":["https://some.image.com/a=b","https://other.image.com"],"ampRuntimeUtf16CharOffsets":[63,184]}' | |
● should return null if invalid extensions | |
WARN: '[amp-a4a] adsense', 'Invalid amp metadata: %s', '{"customElementExtensions":["amp-vine","amp-vine","amp-vine"],"customStylesheets":"https://fonts.googleapis.com/css?foobar","images":["https://some.image.com/a=b","https://other.image.com"],"ampRuntimeUtf16CharOffsets":[63,184]}' | |
● should return null if non-array stylesheets | |
WARN: '[amp-a4a] adsense', 'Invalid amp metadata: %s', '{"customElementExtensions":["amp-vine","amp-vine","amp-vine"],"customStylesheets":[{"href":"https://fonts.googleapis.com/css?foobar"},{"foo":"https://fonts.com/css?helloworld"}],"images":["https://some.image.com/a=b","https://other.image.com"],"ampRuntimeUtf16CharOffsets":[63,184]}' | |
● should return null if invalid stylesheet object | |
● should not include amp images if not an array | |
● should tolerate missing images | |
● should limit to 5 images | |
WARN: '[amp-a4a] adsense', 'Invalid amp metadata: %s', '{"customElementExtensions":["amp-vine","amp-vine","amp-vine"],"customStylesheets":[{"href":"https://fonts.googleapis.com/css?foobar"},{"href":"https://fonts.com/css?helloworld"}],"images":["https://some.image.com/a=b","https://other.image.com"],"ctaUrl":"http://foo.com","ampRuntimeUtf16CharOffsets":[63,184]}' | |
● should throw due to missing CTA type | |
● should not throw due to missing outlink | |
● should set appropriate attributes and return metadata object | |
#maybeValidateAmpCreative | |
● should pass verification with story ad | |
● should throw due to invalid AMP creative with story ad | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
#renderOutsideViewport | |
● should return false if throttled | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should return true if throttled, but AMP creative | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should return 1.25 if prefer-viewability-over-views | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
#renderAmpCreative_ | |
● should render correctly | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should render correctly in ampdoc-fie mode | |
#getLayoutPriority | |
with shadow AmpDoc | |
● should return priority of 1 | |
with single AmpDoc | |
● should return priority of 2 | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
#unlayoutCallback | |
● verify state reset | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● attemptChangeSize reverts | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● verify cancelled promise | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
consent integration | |
● should delay ad url by getConsentPolicyState | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should not wait on consent if no policy | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should pass consent state to getAdUrl | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
ERROR: '[amp-a4a] Error determining consent string Error: consent err!' | |
The test "amp-a4a #unlayoutCallback consent integration should return UNKNOWN if consent exception" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should return UNKNOWN if consent exception | |
protectFunctionWrapper | |
● works properly with no error | |
● handles error properly | |
● returns undefined if error thrown in error handler | |
error handler | |
● should rethrow cancellation | |
● should create an error if needed | |
● should configure ignoreStack when specified | |
● should route error to user.error in dev mode | |
● should route error to user.warn in prod mode | |
● should send an expected error in prod mode with sampling | |
● should NOT send an expected error in prod mode with sampling | |
#assignAdUrlToError | |
● should attach info to error correctly | |
● should not modify if no query string | |
#extractSize | |
● should return a size | |
● should return no size | |
refresh | |
● should effectively reset the slot and invoke given callback | |
● should fire an analytics event when refreshing | |
● should fail gracefully if race conditions nullify adPromise | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
buildCallback | |
● should set isSinglePageStoryAd to false | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● should set isSinglePageStoryAd to true | |
canonical AMP | |
● shouldPreferentialRenderWithoutCrypto returns false by default | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
preferential rendering | |
● by default not allowed if crypto signature present but no SSL | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
● allowed if crypto signature present, no SSL, and overrided shouldPreferentialRenderWithoutCrypto | |
INFO: '[amp-a4a] upgradeDelay adsense: 12345' | |
WARN: '[amp-a4a] fallback to 3p' | |
● not allowed if no crypto signature present | |
AmpA4a-RTC | |
#tryExecuteRealTimeConfig | |
● should not execute if RTC never imported | |
● should log user error if RTC Config set but RTC not supported | |
#getCustomRealTimeConfigMacros_ | |
● should return empty object | |
#inNonAmpPreferenceExp | |
● {} | |
● {"type":"doubleclick","prefVal":true,"expected":true} | |
● {"type":"adsense","prefVal":true,"expected":true} | |
● {"type":"adsense","prefVal":"true","expected":true} | |
● {"type":"doubleclick","prefVal":false} | |
● {"type":"adsense","prefVal":false} | |
● {"type":"doubleclick"} | |
● {"type":"doubleclick","prefVal":""} | |
● {"type":"otherNetwork","prefVal":true} | |
single pass experiments | |
● should add single pass id | |
● should add multi pass id | |
● should not add any single pass experiment ids | |
WARN: '[lru-cache] Trimming LRU cache' | |
AmpAdTemplateHelper | |
● should return a promise resolving to a string template | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should use CDN url if one is supplied | |
● should convert canonical to CDN | |
● should render a template with correct values | |
WARN: '[amp-mustache] The extension "amp-mustache-0.1.js" is deprecated. Please use a more recent version of this extension.' | |
● should render a template with correct values | |
● should insert analytics component | |
getAmpAdMetadata | |
● should parse metadata successfully | |
● should parse metadata despite missing offsets | |
WARN: '[amp-ad-util] Invalid amp metadata: %s', ' | |
{ | |
"ampRuntimeUtf16CharOffsets" : [ '116', '281' ], | |
"customElementExtensions" : [ "amp-font" ], | |
"customStylesheets" : [ | |
{ | |
"href" : "https://fonts.googleapis.com/css?family=Questrial" | |
} | |
], | |
"extensions" : [ | |
{ | |
"custom-element" : "amp-font", | |
"src" : "https://cdn.ampproject.org/v0/amp-font-0.1.js" | |
} | |
] | |
} | |
' | |
● should return null -- bad offset | |
WARN: '[amp-ad-util] Invalid amp metadata: %s', '' | |
● should return null -- missing closing script tag | |
RTC_VENDORS | |
● should have all lowercase keys | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should all use https | |
CryptographicValidator | |
● should have AMP validator result | |
● should have non-AMP validator result | |
WARN: '[amp-ad-util] Invalid amp metadata: %s', ' | |
{ | |
"ampRuntimeUtf16CharOffsets" : [ '116', '281' ], | |
"customElementExtensions" : [ "amp-font" ], | |
"customStylesheets" : [ | |
{ | |
"href" : "https://fonts.googleapis.com/css?family=Questrial" | |
} | |
], | |
"extensions" : [ | |
{ | |
"custom-element" : "amp-font", | |
"src" : "https://cdn.ampproject.org/v0/amp-font-0.1.js" | |
} | |
] | |
} | |
' | |
● should have non-AMP validator result due to bad metadata | |
FriendlyFrameRenderer | |
● should append iframe child | |
● should set the correct srcdoc on the iframe | |
● should set correct attributes on the iframe | |
● should style body of iframe document to be visible | |
FriendlyFrameUtil | |
● should append iframe child | |
● should set the correct srcdoc on the iframe | |
● should set correct attributes on the iframe | |
● should style body of iframe document to be visible | |
NameFrameRenderer | |
● should append iframe child | |
● should have src pointing to nameframe | |
● should set correct attributes on the iframe | |
real-time-config-manager | |
#truncUrl_ | |
● truncates URL | |
#getCalloutParam_ | |
● should convert url to callout param when parseable | |
● should convert & trunc url when parseable | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
#maybeExecuteRealTimeConfig_ | |
● should send RTC callouts for all specified URLS without macros | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[real-time-config] RTC callout to www.5.com/ caused 7' | |
WARN: '[real-time-config] RTC callout to www.6.com/ caused 7' | |
● should send only 5 RTC callouts for all URLS without macros | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should send RTC callouts to inflated publisher URLs | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should send RTC callouts to inflated vendor URLs | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should send callouts to vendor URLs with object/array macros | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should send RTC callouts to inflated publisher and vendor URLs | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should ignore bad macros for vendor urls | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[real-time-config] RTC callout to fakevendor caused 7' | |
● should favor publisher URLs over vendor URLs | |
WARN: '[real-time-config] RTC callout to www.0.com/ caused 5' | |
● should not send more than one RTC callout to the same url | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[real-time-config] RTC callout to www.insecure.biz/ caused 6' | |
● should not send an RTC callout to an insecure url | |
WARN: '[real-time-config] RTC callout to unknownvendor caused 9' | |
● should not send RTC callout to unknown vendor | |
WARN: '[real-time-config] RTC callout to www.0.com/ caused 4' | |
● should handle bad JSON response | |
WARN: '[real-time-config] RTC callout to www.0.com/ caused 8' | |
● should catch errors due to network failure | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[real-time-config] RTC callout to foo.com/ caused 11' | |
● should handle consentState SUFFICIENT | |
● should handle consentState INSUFFICIENT | |
WARN: '[real-time-config] RTC callout to foo.com/ caused 11' | |
● should handle consentState UNKNOWN_NOT_REQUIRED | |
● should handle consentState UNKNOWN | |
#validateRtcConfig | |
● should return parsed rtcConfig for valid rtcConfig | |
● should allow timeout of 0 | |
WARN: '[real-time-config] Invalid RTC timeout: 1000000ms, using default timeout 1000ms' | |
● should not allow timeout greater than default | |
● should return false if rtc-config not specified | |
● should return false for rtcConfig missing required values | |
● should return false for rtcConfig missing required values | |
● should return false for rtcConfig missing required values | |
● should return false for rtcConfig missing required values | |
● should return false for rtcConfig missing required values | |
WARN: '[real-time-config] Could not JSON parse rtc-config attribute' | |
● should return false for bad JSON rtcConfig | |
WARN: '[real-time-config] RTC callout to www.example.biz/ caused 11' | |
#inflateAndSendRtc_ | |
● should not send RTC if macro expansion exceeds timeout | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not send RTC if no longer current | |
modifyRtcConfigForConsentStateSettings | |
● should not modify rtcConfig if consent state is valid | |
● should clear all callouts if global setting mismatched | |
● should handle empty urls array | |
● should handle empty vendors object | |
● should handle missing urls array | |
● should handle missing vendors object | |
● should clear just invalid custom URLs | |
● should clear just invalid vendor callouts | |
● should not clear callouts if per-callout setting valid | |
● should handle mix of global and individual consent settings | |
● should always clear RTC for a new consent state | |
● should not clear RTC for a null consent state | |
WARN: '[lru-cache] Trimming LRU cache' | |
sendErrorMessage | |
● should send error message pingback to correct url | |
refresh | |
refresh-manager | |
● should get null refreshInterval | |
● should get refreshInterval from slot | |
● should get refreshInterval from meta tag | |
● should call convertConfiguration_ and set proper units | |
● should execute the refresh event correctly | |
#ioCallback_ | |
● should stay in INITIAL state | |
● should transition into VIEW_PENDING state | |
● should transition to VIEW_PENDING state then back to INITIAL | |
RefreshIntersectionObserverWrapper | |
● should invoke callback with intersection ratio 1 | |
● should invoke callback with intersection ratio 0.5 | |
● should not invoke callback | |
SignatureVerifier | |
● should make no network requests when crypto is unavailable (skipped) | |
WARN: '[lru-cache] Trimming LRU cache' | |
when crypto is available | |
● should verify a signature | |
● should verify multiple signatures with only one network request | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should verify signatures from multiple signing services | |
● should verify signatures when different signing services share a kid | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should verify a signature from a newly added key | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should return ERROR_KEY_NOT_FOUND for a nonexistent kid | |
● should not make more network requests retrying a nonexistent kid | |
● should return ERROR_SIGNATURE_MISMATCH for a wrong signature | |
● should return UNVERIFIED and report on Web Cryptography error | |
● should return UNVERIFIED on network connectivity error | |
● should not retry for same service on network connectivity error | |
● should return UNVERIFIED, report, and not retry on malformed JSON | |
● should return UNVERIFIED, report, and not retry on non-JWK Set JSON | |
● should report on extraneous malformed data | |
● should return UNVERIFIED, report, and not retry on malformed key | |
#verify | |
● should verify a signature header | |
● should return UNVERIFIED on no header | |
● should return UNVERIFIED on no header when crypto unavailable | |
● should return ERROR_SIGNATURE_MISMATCH on malformed header | |
WARN: '[amp-mustache] The extension "amp-mustache-0.1.js" is deprecated. Please use a more recent version of this extension.' | |
WARN: '[lru-cache] Trimming LRU cache' | |
TemplateRenderer | |
● should append iframe child with correct template values | |
WARN: '[amp-mustache] The extension "amp-mustache-0.1.js" is deprecated. Please use a more recent version of this extension.' | |
● should set correct attributes on the iframe | |
WARN: '[amp-mustache] The extension "amp-mustache-0.1.js" is deprecated. Please use a more recent version of this extension.' | |
● should style body of iframe document to be visible | |
WARN: '[amp-mustache] The extension "amp-mustache-0.1.js" is deprecated. Please use a more recent version of this extension.' | |
● should insert analytics | |
TemplateValidator | |
AMP Result | |
● should have AMP validator result | |
● should have AMP validator result w/ deprecated header name | |
● should have TEMPLATE ad response type | |
● should have creativeData with minified creative in metadata | |
● should have amp-analytics and mustache in customElementExtensions | |
Non-AMP Result | |
● should have NON_AMP validator result due to lack of headers | |
● should have NON_AMP validator result due to lack of mustache header | |
● should have TEMPLATE ad response type | |
● should have the response body as the creative in creativeData | |
INFO: '[amp-access-laterpay] Authorization URL: ', undefined | |
LaterpayVendor | |
authorize | |
● uses a non default region | |
INFO: '[amp-access-laterpay] Authorization URL: ', 'https://builturl' | |
● successful authorization | |
INFO: '[amp-access-laterpay] Authorization URL: ', 'https://builturl' | |
● authorization fails due to lack of server config | |
INFO: '[amp-access-laterpay] Authorization URL: ', 'https://builturl' | |
● authorization response from server fails | |
create purchase overlay | |
● renders list | |
● renders 3 purchase options | |
purchase option selection | |
● purchase option is selected | |
purchase | |
● sends request for purchase | |
● sends request for already purchased | |
INFO: '[amp-access-laterpay] Authorization URL: ', undefined | |
● uses a non default region | |
INFO: '[amp-access-laterpay] Authorization URL: ', 'https://builturl' | |
● successful authorization | |
INFO: '[amp-access-laterpay] Authorization URL: ', 'https://builturl' | |
● authorization fails due to lack of server config | |
INFO: '[amp-access-laterpay] Authorization URL: ', 'https://builturl' | |
● authorization response from server fails | |
● renders list | |
● renders 3 purchase options | |
● renders identify url link | |
● purchase option is selected | |
● sends request for purchase | |
● sends request for already purchased | |
INFO: '[amp-access-poool] Authorization URL: ', 'https://builturl' | |
PooolVendor | |
authorize | |
● successful authorization | |
INFO: '[amp-access-poool] Authorization URL: ', 'https://builturl' | |
● authorization fails because of wrong or missing server config | |
INFO: '[amp-access-poool] Authorization URL: ', undefined | |
● authorization response fails - 402 error | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ReadDepthTracker | |
● updates last read position to API with correct snippet | |
● does not update last read position if position has not changed | |
evaluateAccessExpr | |
● should NOT allow double equal | |
● should evaluate simple boolean expressions | |
● should evaluate boolean expressions over undefined | |
● should evaluate simple numeric expressions | |
● should evaluate negative numerics | |
● should evaluate numeric expressions over mistamtching type | |
● should evaluate simple string expressions | |
● should evaluate string expressions with wrong type | |
● should evaluate simple NULL expressions | |
● should evaluate NULL expressions with wrong type | |
● should evaluate truthy expressions | |
● should evaluate NOT expressions | |
● should evaluate AND/OR expressions | |
● should evaluate nested expressions | |
● should shortcircuit nested expressions with missing parent | |
● should evaluate nested expressions with brackets | |
● should NOT evaluate nested expressions with wrong type | |
● should evaluate nested expressions securely | |
● should accept name grammar | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
AccessClientAdapter | |
config | |
● should load valid config | |
● should set authorization timeout if provided | |
● should allow only lower-than-default timeout in production | |
● should fail when authorization timeout is malformed | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should fail if config authorization is missing or malformed | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should fail if config pingback is missing or malformed | |
● should allow missing pingback when noPingback=true | |
runtime | |
authorize | |
● should issue XHR fetch | |
● should fail when XHR fails | |
● should time out XHR fetch | |
pingback | |
● should send POST pingback | |
● should fail when POST fails | |
WARN: '[lru-cache] Trimming LRU cache' | |
AccessIframeAdapter | |
config | |
● should load valid config | |
● should load valid config with vars | |
● should require "iframeSrc" | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should require "iframeSrc" to be secure | |
● should require "defaultResponse" | |
● should disallow non-array vars | |
runtime connect | |
● should NOT connect until necessary | |
● should connect on first and only first authorize | |
● should resolve vars | |
runtime | |
● should connect | |
authorize | |
● should issue authorization | |
● should default to the default response | |
● should store successful authorization | |
● should recover the response from storage | |
● should reject the expired response from storage | |
● should tolerate storage failures | |
● should ignore absent storage | |
pingback | |
● should send pingback | |
actions | |
● should reset stored state after action | |
AccessOtherAdapter | |
config | |
● should load valid config | |
● should load valid config with fallback object | |
runtime | |
● should disable authorization without fallback object | |
● should disable authorization on proxy | |
● should enable authorization when not on proxy and with auth | |
● should fail authorization on proxy | |
● should respond to authorization when not on proxy proxy | |
● should short-circuit pingback flow | |
WARN: '[lru-cache] Trimming LRU cache' | |
AccessServerJwtAdapter | |
config | |
● should load valid config | |
● should fail if config is invalid: authorization | |
● should fail if config is invalid: publicKeyUrl | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should fail if config is invalid: http publicKeyUrl | |
● should support either publicKey or publicKeyUrl | |
● should tolerate when i-amphtml-access-state is missing | |
runtime | |
authorize | |
● should fallback to client auth when not on proxy | |
● should fallback to client auth w/o server state | |
● should execute via server on proxy and w/server state | |
● should fetch JWT directly via client | |
● should fetch JWT directly and authorize-and-fill via server | |
● should fail when authorize-and-fill fails | |
● should fail when authorize-and-fill times out | |
WARN: '[amp-access-server-jwt] Section not found: ', 'a3' | |
● should replace sections | |
● should disable validation by default | |
● should fetch JWT | |
● should fail when JWT fetch fails | |
● should fail when JWT fetch times out | |
● should verified JWT after fetch when supported | |
● should verified JWT after fetch when supported with PEM | |
WARN: '[amp-access-server-jwt] Cannot verify signature on this browser since it doesn't support WebCrypto APIs' | |
● should NOT verified JWT after fetch when not supported | |
validation | |
● should validate | |
● should fail w/o exp | |
● should fail w/invalid exp | |
● should fail when expired | |
● should succeed with array aud | |
● should fail w/o aud | |
● should fail w/non-AMP aud | |
● should fail w/non-AMP aud array | |
pingback | |
● should always send client pingback | |
AccessServerAdapter | |
config | |
● should load valid config | |
● should fail if config is invalid | |
● should tolerate when i-amphtml-access-state is missing | |
runtime | |
authorize | |
● should fallback to client auth when not on proxy | |
● should fallback to client auth w/o server state | |
● should execute authorize-and-fill | |
● should fail when XHR fails | |
● should time out XHR fetch | |
WARN: '[amp-access-server] Section not found: ', 'a3' | |
● should replace sections | |
pingback | |
● should always send client pingback | |
AccessSource | |
● should parse multiple login URLs | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-access] Experiment "amp-access-server" is not enabled.' | |
INFO: '[amp-access] Forcing access type: SERVER' | |
● should parse type | |
● should return adapter config | |
● should parse type for JWT w/o experiment | |
● should parse type for JWT with experiment | |
● should initialize authorization fallback response | |
● should login with url only | |
ERROR: '[UrlReplacements] Access or subsciptions service is not installed to access: AUTHDATA' | |
The test "AccessSource adapter context should resolve URL without auth response and no authdata vars" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
AccessSource adapter context | |
● should resolve URL without auth response and no authdata vars | |
● should resolve URL without auth response and with authdata vars | |
ERROR: '[UrlReplacements] Access or subsciptions service is not installed to access: AUTHDATA' | |
The test "AccessSource adapter context should resolve URL with auth response and no authdata vars" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should resolve URL with auth response and no authdata vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should resolve URL with auth response and with authdata vars | |
● should resolve URL with unknown authdata var | |
● should return adapter config | |
WARN: '[lru-cache] Trimming LRU cache' | |
AccessSource authorization | |
● should resolve first-authorization promise after response | |
WARN: '[lru-cache] Trimming LRU cache' | |
AccessVendorAdapter | |
config | |
● should load valid config | |
● should require vendor name | |
● should wait on registration | |
● should fail re-registration | |
runtime | |
authorize | |
● should call vendor authorization | |
● should fail when vendor fails | |
pingback | |
● should send pingback signal | |
● should fail when vendor fails | |
AccessService | |
● should disable service when no config | |
● should fail if config is malformed | |
● should default to "client" and fail if authorization is missing | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should fail if config login is malformed | |
● should parse the complete config | |
● should fail if type is unknown | |
● should start when enabled | |
● should start all services | |
● should initialize publisher origin | |
● should find and register vendor | |
● should fail to find non-existent vendor | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should parse multiple sources | |
● should reject invalid multiple sources | |
AccessService authorization | |
● should short-circuit authorization flow when disabled | |
● should run authorization flow | |
ERROR: '[amp-access] Authorization failed: intentional' | |
The test "AccessService authorization should recover from authorization failure" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should recover from authorization failure | |
● should apply authorization response to new sections | |
● should execute the onApplyAuthorizations registered callbacks | |
● should run authorization for broadcast events on same origin | |
AccessService applyAuthorizationToElement_ | |
● should toggle authorization attribute | |
● should render and re-render templates when access is on | |
● should NOT render templates when access is off | |
WARN: '[lru-cache] Trimming LRU cache' | |
AccessService pingback | |
● should register "viewed" signal after timeout | |
● should register "viewed" signal after scroll | |
● should register "viewed" signal after click | |
● should wait for last authorization completion | |
● should cancel "viewed" signal after click | |
● should schedule "viewed" monitoring only once | |
● should ignore "viewed" monitoring when pingback is disabled | |
● should re-schedule "viewed" monitoring after visibility change | |
● should re-start "viewed" monitoring when directly requested | |
● should send POST pingback | |
● should NOT send analytics event if postback failed | |
● should broadcast "viewed" signal to other documents | |
AccessService refresh | |
● should intercept global action to refresh | |
AccessService login | |
● should intercept global action to login | |
● should intercept global action to login-other | |
● should build login url | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should build multiple login url | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should build login url with RETURN_URL | |
● should open dialog in the same microtask | |
● should fail to open dialog if loginUrl is not built yet | |
● should succeed login with success=true | |
● should fail login with success=no | |
● should fail login with empty response, but re-authorize | |
● should fail login with aborted dialog | |
● should succeed login with success=true with multiple logins | |
● should block login for 1 second | |
● should wait for token exchange post-login with success=true | |
AccessService analytics | |
● should return null when not enabled | |
● should return reader id | |
● should return authdata | |
● should wait the first authorization for authdata | |
● should wait the latest authorization for authdata if started | |
AccessService multiple sources | |
● should run authorization flow | |
ERROR: '[amp-access] Authorization failed: rejected' | |
The test "AccessService multiple sources should return authdata" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should return authdata | |
● should succeed login flat | |
● should succeed login hierarchy | |
LoginDoneDialog | |
buildStyles_ | |
● should build complete CSS expression | |
● should prioritize query parameter first | |
● should fallback to navigator.lang if no DOM nodes exist | |
● should fallback to navigator.userLang if no DOM nodes exist | |
● should fallback to en-US if no DOM nodes exist | |
buildLangSelector | |
● should enable every prefix | |
● should normalize prefixes | |
● should protect form malformed prefixes | |
postbackOrRedirect_ | |
● should post message to opener | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should redirect to url without opener with HTTP | |
● should work around double-encoding of URL on redirect | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should redirect to url without opener with HTTPS | |
● should work around double-encoding of URL on redirect w/HTTPS | |
● should fail tripple-encoding of URL | |
● should fail redirect to url without opener and invalid URL | |
● should fail without opener and redirect URL | |
● should fail with timeout | |
● should revert to error mode if window is not closed | |
● should configure error mode for "postback" | |
● should configure error mode for "close" | |
AmpAccessIframeApi | |
● should configure messenger | |
● should connect and initialize | |
● should authorize | |
● should pingback | |
● should tolerate pingback without response | |
● should ignore unimplemented pingback | |
Messenger | |
ampdoc side | |
● should now allow connecting twice | |
● should add and remove message listener | |
● should fail target until connected | |
● should succeed target once connected | |
● should return origin immediately | |
● should fail sending a command until connected | |
● should send a command once connected | |
● should call an inbound command | |
● should ignore an inbound non-conforming message | |
● should ignore an inbound command for a wrong origin | |
● should send and receive a rsvp command | |
● should increment rvsp | |
● should send and receive a rsvp command with error | |
execute rsvp | |
● should execute rsvp as a promise | |
● should execute rsvp as an object | |
● should execute rsvp as an error | |
iframe side | |
● should immediately resolve the target | |
● should fail to return origin until connected | |
● should disallow other commands before connect | |
● should allow connect without origin | |
● should connect and initialize origin | |
● should initialize origin when source matches | |
● should disallow origin initialization w/o connect | |
JwtHelper | |
decode | |
● should decode fully | |
● should fail on invalid format | |
● should fail on invalid JSON in header | |
● should fail on invalid JSON in payload | |
● should decode web safe and non-web-safe base64 | |
decodeAndVerify with subtle | |
● should decode and verify token correctly | |
● should fail invalid signature | |
decodeAndVerify with mock subtle | |
● should fail invalid token | |
● should fail without alg | |
● should fail with wrong alg | |
● should fetch they key and verify | |
ViewerLoginDialog | |
● should delegate to viewer with url | |
● should delegate to viewer with url promise | |
● should fail when url promise fails | |
● should fail when viewer fails | |
● should have correct URL with other parameters | |
● should allow alternative form of return URL | |
WebLoginDialog | |
● should call window.open in the same microtask with url | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should call window.open in the same microtask with promise | |
ERROR: '[DOM] Failed to open url on target: _blank OPEN ERROR' | |
The test "WebLoginDialog should yield error if window.open fails" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should yield error if window.open fails | |
● should yield error if window.open returns null | |
● should yield error if window.open returns null with promise | |
● should respond when window.open succeeds | |
● should have correct window.open params | |
● should have correct URL with other parameters | |
● should substitute return URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should override return URL | |
● should respond with empty string when dialog is closed | |
● should succeed with URL promise | |
● should fail when URL promise is rejected | |
amp-accordion | |
● should expand when toggle action is triggered on a collapsed section | |
● multiple accordions should not have the same IDs on content | |
● should collapse when toggle action is triggered on a expanded section | |
● should expand when expand action is triggered on a collapsed section | |
● should collapse other sections when expand action is triggered on a collapsed section if expand-single-section attribute is set | |
● should trigger a section's expand event the section is expanded without animation | |
● should trigger a section's collapse event the section is expanded without animation | |
● should trigger a section's expand event the section is expanded with animation | |
● should trigger a section's collapse event the section is expanded with animation | |
● should size responsive children correctly when animating | |
● should size fixed size children correctly when animating | |
● should stay expanded on the expand action when expanded | |
● should collapse on the collapse action when expanded | |
● should stay collapsed on the collapse action when collapsed | |
● should expand when header of a collapsed section is clicked | |
● should expand section when header's child is clicked | |
● should collapse when header of an expanded section is clicked | |
● should allow for clickable links in header | |
● should expand when header of a collapsed section is activated via keyboard | |
● should NOT expand section when header's child is activated via keyboard | |
● should collapse when header of an expanded section is activated via keyboard | |
● should be navigable by up and down arrow keys when any header has focus | |
● should return correct sessionStorageKey | |
● should set sessionStorage on change in expansion | |
● should respect session states and expand/collapse | |
● should disable sessionStorage when opt-out | |
● two accordions should not affect each other | |
● should trigger expand/collapse events | |
amp-action-macro | |
● should build if experiment is on | |
● should not build if experiment is off | |
registered action | |
● should register execute action | |
ERROR: 'Variable argument name " z " is not defined in [object HTMLElement]' | |
The test "amp-action-macro registered action should validate caller argument vars against defined arguments" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should validate caller argument vars against defined arguments | |
● should trigger macro action | |
ERROR: 'Action macro with ID " amp-action-id " cannot reference itself or macros defined after it' | |
The test "amp-action-macro registered action should not allow recursive calls" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should not allow recursive calls | |
● should allow calls to macros defined before itself | |
ERROR: 'Action macro with ID " amp-action-id-unreferrable " cannot reference itself or macros defined after it' | |
The test "amp-action-macro registered action should not allow calls to macros defined after itself" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should not allow calls to macros defined after itself | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-mustache] The extension "amp-mustache-0.1.js" is deprecated. Please use a more recent version of this extension.' | |
WARN: '[lru-cache] Trimming LRU cache' | |
Iframe Rendering | |
● should load AMP ad in friendly frame | |
● should load non-AMP ad in nameframe | |
● should load non-AMP ad in nameframe if missing mustache header | |
#getRequestUrl | |
● should add url to context | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should expand url | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should substitute macros | |
mandatory fields | |
● should throw if missing src attribute | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
amp-ad-exit | |
● should reject non-JSON children | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
● should do nothing for missing targets | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'twoSecond': fail' | |
● should stop event propagation | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': fail' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'twoSecond': fail' | |
● should reject fast clicks | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
● should use options.startTimingEvent | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should attempt new-tab navigation | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
● should fall back to top navigation | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
● should attempt same-tab navigation | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should ping tracking URLs with sendBeacon | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
● should ping tracking URLs with image requests (no sendBeacon) | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
● should ping tracking URLs with image requests (sendBeacon fails) | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
● should ping tracking URLs with image requests (transport) | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace standard URL variables | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace custom URL variables with vars | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'borderProtection': fail' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'borderProtection': fail' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'borderProtection': fail' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'borderProtection': pass' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'borderProtection': pass' | |
● border protection | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'borderProtectionRelativeTo': fail' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'borderProtectionRelativeTo': fail' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'borderProtectionRelativeTo': fail' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'borderProtectionRelativeTo': pass' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'borderProtectionRelativeTo': pass' | |
● border protection relative to div | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': fail' | |
● should not trigger for amp-carousel buttons | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'unclickableFilter': fail' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'unclickableFilter': pass' | |
● should not trigger for elements matching InactiveElementFilter | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace custom URL variables with 3P Analytics defaults | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace custom URL variables with 3P Analytics signals | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
● should reject unrecognized 3P Analytics vendors | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
● getAmpAdResourceId_ should reference AMP top window | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
● should exit to the default target if varible target is never set | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
● should cause error when variable target is never set and default value is not provided | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
● should cause error when variable target was pointed to an invalid target | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
● should cause error when exiting to an invalid variable target | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
● should cause error when neither "target" nor "variable" is provided in arguments | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
● should cause error when both "target" and "variable" are provided in arguments | |
WARN: '[amp-ad-exit] No friendly parent amp-ad element was found for amp-ad-exit; not in inabox case.' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
INFO: '[amp-ad-exit] Filter 'minDelay': pass' | |
INFO: '[amp-ad-exit] Filter 'carouselBtns': pass' | |
● should exit to the pointed-to target and work with custom URL variables | |
amp-ad-network-adsense-impl | |
#isValidElement | |
● should be valid | |
● should be valid (responsive) | |
WARN: '[amp-ad-network-adsense-impl] Specified height 666 in <amp-ad> tag is not equal to the required height of 320 for responsive AdSense ad units.' | |
● should NOT be valid (responsive with wrong height) | |
WARN: '[amp-ad-network-adsense-impl] Invalid width 666 for full-width responsive <amp-ad> tag. Width must be 100vw.' | |
● should NOT be valid (responsive with wrong width) | |
WARN: '[amp-ad-network-adsense-impl] Responsive AdSense ad units require the attribute data-full-width.' | |
● should NOT be valid (responsive with missing data-full-width) | |
● should NOT be valid (impl tag name) | |
● should NOT be valid (missing ad client) | |
● should be valid (amp-embed) | |
#extractSize | |
● without analytics | |
● with analytics | |
● should consume sandbox header | |
INFO: '[amp-ad-network-adsense-impl] network error, attempt adding of error parameter', Error: xhr failure | |
Error: xhr failure | |
at Context.<anonymous> (http://localhost:9876/home/mdmower/source/amphtml/extensions/amp-ad-network-adsense-impl/0.1/test/test-amp-ad-network-adsense-impl.js:262:33) | |
at callFn (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5432:21) | |
at Test.Runnable.run (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5419:7) | |
at Runner.runTest (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:6086:10) | |
at http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:6212:12 | |
at next (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5995:14) | |
at http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:6005:7 | |
at next (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5907:14) | |
at http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5973:5 | |
at timeslice (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:82:27) | |
#onNetworkFailure | |
● should append error parameter | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
#onCreativeRender | |
● injects amp analytics, trigger immediate disable exp | |
WARN: '[lru-cache] Trimming LRU cache' | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
● injects amp analytics | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
INFO: '[amp-a4a] upgradeDelay adsense: 1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should register click listener | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
INFO: '[amp-a4a] upgradeDelay adsense: 1' | |
● should not register click listener is amp-ad-exit | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
● should set iframe id and data-google-query-id attribute | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
INFO: '[amp-ad-network-adsense-impl] Saved publisher auto ad size setting: true' | |
● should write auto ad size data to localstorage | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
centering | |
● centers iframe in slot when height && width | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
● centers iframe in slot when !height && !width | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
● centers iframe in slot when !height && width | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
● centers iframe in slot when height && !width | |
#getAdUrl | |
● should contain act | |
● should have aanf equal to true | |
● should not contain aanf for ignore | |
● should have aanf equal to True | |
● formats client properly | |
● has correct format when width == "auto" | |
● has correct format when height == "auto" | |
● has correct format when as-use-attr-for-format is on | |
● has experiment eid in adsense frmt exp and width/height numeric | |
● has control eid in adsense frmt exp and width/height numeric | |
● returns the right URL | |
● with multiple slots | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
● should include identity | |
● includes adsense package code when present | |
INFO: '[amp-ad-network-adsense-impl] Ad request suppressed due to unknown consent' | |
● should return empty string if unknown consentState | |
● should include npa=1 if unknown consent & explicit npa | |
● should include npa=1 if insufficient consent | |
● should not include not npa, if sufficient consent | |
● should not include npa, if not required consent | |
● should have spsa and size 1x1 when single page story ad | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
#unlayoutCallback | |
● should reset state to null on non-FIE unlayoutCallback | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
● should not reset state to null on FIE unlayoutCallback | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
● should call #resetSlot, remove child iframe, but keep other children | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
#buildCallback | |
● should do nothing for non-responsive | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
● should schedule a resize for responsive | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
● should schedule a resize for matched content responsive | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
for publisher opted in to auto ad size optimization | |
● does nothing if experiment is disabled | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
● does nothing if ad unit is responsive already | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
● upgrades manual ad units to responsive if experiment is enabled | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
for publisher not opted in to auto ad size optimization | |
● does not upgrade manual ad units to responsive if experiment is enabled | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
INFO: '[amp-a4a] upgradeDelay adsense: 2' | |
WARN: '[amp-ad-network-adsense-impl] Responsive AdSense ad units require the attribute data-full-width.' | |
WARN: '[amp-a4a] adsense', 'Amp ad element ignored as invalid', <amp-ad width="100vw" height="150" data-auto-format="rspv" type="adsense" data-ad-client="ca-pub-1234" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-adsense-impl" style="width: 375px; height: 300px; display: block; position: relative; top: 150vh;"><iframe srcdoc="<h1>Fake iframe</h1>"></iframe><div fallback=""><div class="i-amphtml-ad-default-holder" data-ad-holder-text="Ad"></div></div><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
#onLayoutMeasure | |
● should change left margin for responsive | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-ad-network-adsense-impl] Responsive AdSense ad units require the attribute data-full-width.' | |
WARN: '[amp-a4a] adsense', 'Amp ad element ignored as invalid', <amp-ad width="100vw" height="150" data-auto-format="rspv" type="adsense" data-ad-client="ca-pub-1234" class="i-amphtml-element i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-adsense-impl" style="width: 375px; height: 300px; display: block; position: relative; top: 150vh; margin-left: -24px;"><iframe srcdoc="<h1>Fake iframe</h1>"></iframe><div fallback=""><div class="i-amphtml-ad-default-holder" data-ad-holder-text="Ad"></div></div><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
WARN: '[amp-ad-network-adsense-impl] Responsive AdSense ad units require the attribute data-full-width.' | |
WARN: '[amp-a4a] adsense', 'Amp ad element ignored as invalid', <amp-ad width="100vw" height="150" data-auto-format="rspv" type="adsense" data-ad-client="ca-pub-1234" class="i-amphtml-element i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-adsense-impl" style="width: 375px; height: 300px; display: block; position: relative; top: 150vh; margin-left: 0px;"><iframe srcdoc="<h1>Fake iframe</h1>"></iframe><div fallback=""><div class="i-amphtml-ad-default-holder" data-ad-holder-text="Ad"></div></div><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
WARN: '[amp-ad-network-adsense-impl] Responsive AdSense ad units require the attribute data-full-width.' | |
WARN: '[amp-a4a] adsense', 'Amp ad element ignored as invalid', <amp-ad width="100vw" height="150" data-auto-format="rspv" type="adsense" data-ad-client="ca-pub-1234" class="i-amphtml-element i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-adsense-impl" style="width: 375px; height: 300px; display: block; position: relative; top: 150vh; margin-left: 0px;"><iframe srcdoc="<h1>Fake iframe</h1>"></iframe><div fallback=""><div class="i-amphtml-ad-default-holder" data-ad-holder-text="Ad"></div></div><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><div class="i-amphtml-loading-container i-amphtml-fill-content"><div class="amp-active"></div></div></amp-ad> | |
INFO: '[amp-a4a] upgradeDelay adsense: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
INFO: '[amp-a4a] upgradeDelay adsense: 3' | |
WARN: '[amp-ad-network-adsense-impl] Responsive AdSense ad units require the attribute data-full-width.' | |
WARN: '[amp-a4a] adsense', 'Amp ad element ignored as invalid', <amp-ad width="100vw" height="150" data-auto-format="rspv" type="adsense" data-ad-client="ca-pub-1234" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-adsense-impl" style="width: 375px; height: 300px; display: block; position: relative; top: 150vh;"><iframe srcdoc="<h1>Fake iframe</h1>"></iframe><div fallback=""><div class="i-amphtml-ad-default-holder" data-ad-holder-text="Ad"></div></div><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
● should change right margin for responsive in RTL | |
WARN: '[amp-ad-network-adsense-impl] Responsive AdSense ad units require the attribute data-full-width.' | |
WARN: '[amp-a4a] adsense', 'Amp ad element ignored as invalid', <amp-ad width="100vw" height="150" data-auto-format="rspv" type="adsense" data-ad-client="ca-pub-1234" class="i-amphtml-element i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-adsense-impl" style="width: 375px; height: 300px; display: block; position: relative; top: 150vh; margin-right: -109px;"><iframe srcdoc="<h1>Fake iframe</h1>"></iframe><div fallback=""><div class="i-amphtml-ad-default-holder" data-ad-holder-text="Ad"></div></div><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
WARN: '[amp-ad-network-adsense-impl] Responsive AdSense ad units require the attribute data-full-width.' | |
WARN: '[amp-a4a] adsense', 'Amp ad element ignored as invalid', <amp-ad width="100vw" height="150" data-auto-format="rspv" type="adsense" data-ad-client="ca-pub-1234" class="i-amphtml-element i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-adsense-impl" style="width: 375px; height: 300px; display: block; position: relative; top: 150vh; margin-right: 0px;"><iframe srcdoc="<h1>Fake iframe</h1>"></iframe><div fallback=""><div class="i-amphtml-ad-default-holder" data-ad-holder-text="Ad"></div></div><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
WARN: '[amp-ad-network-adsense-impl] Responsive AdSense ad units require the attribute data-full-width.' | |
WARN: '[amp-a4a] adsense', 'Amp ad element ignored as invalid', <amp-ad width="100vw" height="150" data-auto-format="rspv" type="adsense" data-ad-client="ca-pub-1234" class="i-amphtml-element i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-adsense-impl" style="width: 375px; height: 300px; display: block; position: relative; top: 150vh; margin-right: 0px;"><iframe srcdoc="<h1>Fake iframe</h1>"></iframe><div fallback=""><div class="i-amphtml-ad-default-holder" data-ad-holder-text="Ad"></div></div><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><amp-analytics sandbox="true" trigger="immediate" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 1px; height: 1px;"><script type="application/json">{"requests":{"csi":"https://csi.gstatic.com/csi?"},"transport":{"xhrpost":false},"triggers":{"adRequestStart":{"on":"ad-request-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afs_lvt.${viewerLastVisibleTime}~afs.${time}"}},"adResponseEnd":{"on":"ad-response-end","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"afe.${time}"}},"adRenderStart":{"on":"ad-render-start","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ast.${scheduleTime}~ars_lvt.${viewerLastVisibleTime}~ars.${time}","qqid":"${qqid}"}},"adIframeLoaded":{"on":"ad-iframe-loaded","request":"csi","sampleSpec":{"sampleOn":"a4a-csi-${pageViewId}","threshold":1},"selector":"amp-ad","selectionMethod":"closest","extraUrlParams":{"met.a4a":"ail.${time}"}}},"extraUrlParams":{"s":"ampad","ctx":"2","c":"${correlator}","slotId":"${slotId}","puid":"${requestCount}~${timestamp}"}}</script></amp-analytics><div class="i-amphtml-loading-container i-amphtml-fill-content"><div class="amp-active"></div></div></amp-ad> | |
#delayAdRequestEnabled | |
● should return 3 | |
● should respect loading strategy | |
#preconnect | |
● should preload nameframe | |
#getConsentPolicy | |
● should return null | |
#isXhrAllowed | |
● should return false on a canonical page | |
● should return true on a non-canonical page | |
#checksumVerification | |
● should call super if missing Algorithm header | |
● should properly validate checksum | |
● should fail validation if invalid checksum | |
#letCreativeTriggerRenderStart | |
● should return true for sticky ad | |
● should trigger renderStarted on fill msg from sticky ad | |
● should return false for non-sticky ad | |
responsive-state | |
createIfResponsive | |
● should return non null for a responsive element | |
● should return null for a non responsive element | |
WARN: '[amp-ad-network-adsense-impl] Responsive AdSense ad units require the attribute data-full-width.' | |
isValidElement | |
● should return false if there is no data-full-width attribute | |
WARN: '[amp-ad-network-adsense-impl] Responsive AdSense ad units require the attribute data-full-width.' | |
● should return false if the height is not whitelisted | |
WARN: '[amp-ad-network-adsense-impl] Invalid width 90vw for full-width responsive <amp-ad> tag. Width must be 100vw.' | |
● should return false if the width is not whitelisted | |
● should return true for a valid element | |
getRafmtParam | |
● should return 13 for data-auto-format="rspv" | |
● should return 15 for data-auto-format="mcrspv" | |
attemptChangeSize | |
● should attempt to set the right size for data-auto-format="rspv" without height fix experiment | |
● should attempt to set the right size for data-auto-format="rspv" with height fix experiment | |
● should attempt to set the right size for data-auto-format="mcrspv" | |
alignToViewport | |
● aligns a responsive element with the viewport edges in LTR | |
● aligns a responsive element with the viewport edges in RTL | |
maybeUpgradeToResponsive | |
● resolves to null when the appropriate experiment isn't enabled | |
● resolves to null when the ad unit is responsive already | |
● returns null when the ad unit is not responsive and ad size optimization is not set | |
● returns null when the ad unit is not responsive and ad size optimization is disabled | |
● returns a valid responsive state and upgrades element when the ad unit is not responsive and ad size optimization is enabled | |
maybeAttachSettingsListener | |
● doesn't set up a listener if the experiment is not enabled | |
INFO: '[amp-ad-network-adsense-impl] Saved publisher auto ad size setting: true' | |
sets up a listener that | |
● writes opt in data to localstorage | |
INFO: '[amp-ad-network-adsense-impl] Saved publisher auto ad size setting: false' | |
● writes opt out data to localstorage | |
INFO: '[amp-ad-network-adsense-impl] Saved publisher auto ad size setting: false' | |
● doesn't write data with the wrong message type | |
INFO: '[amp-ad-network-adsense-impl] Saved publisher auto ad size setting: false' | |
● doesn't write data with the wrong client ID | |
amp-ad-network-adzerk-impl | |
#getAdUrl | |
● should be valid | |
● should be valid #2 | |
● should be invalid | |
#getSigningServiceNames | |
● should be empty array | |
WARN: '[lru-cache] Trimming LRU cache' | |
#maybeValidateAmpCreative | |
● should properly inflate template | |
#getAmpAdMetadata | |
● should auto add amp-analytics if required | |
● should not add amp-analytics if not | |
cloudflare-a4a-config | |
● should pass a4a config predicate | |
● should not pass a4a config predicate when useRemoteHtml is true | |
WARN: '[lru-cache] Trimming LRU cache' | |
amp-ad-network-cloudflare-impl | |
#isValidElement | |
● should be valid | |
● should NOT be valid (impl tag name) | |
#getAdUrl | |
● should be valid | |
● should handle non-a4a URLs | |
● should accept a4a src | |
● should handle additional templated width/height | |
● should handle data parameters | |
● should handle default src with data parameters (skipped) | |
amp-ad-network-doubleclick-impl | |
#isValidElement | |
● should be valid | |
● should NOT be valid (impl tag name) | |
● should be NOT valid (missing ad client) (skipped) | |
● should be valid (amp-embed) | |
#extractSize | |
● should ignore creative-size header for fluid response | |
● should not load amp-analytics without an analytics header | |
● should load amp-analytics with an analytics header | |
● should load delayed impression amp-pixels with fluid | |
● should not load delayed impression amp-pixels with fluid + multi-size | |
● should consume pageview state tokens when header is present | |
● should consume sandbox header | |
● should adjust slot CSS after expanding width #0 | |
● should adjust slot CSS after expanding width #1 | |
● should adjust slot CSS after expanding width #2 | |
● should adjust slot CSS after expanding width #3 | |
● should adjust slot CSS after expanding width #4 | |
● should adjust slot CSS after expanding width #5 | |
● should adjust slot CSS after expanding width #6 | |
● should adjust slot CSS after expanding width #7 | |
● should adjust slot CSS after expanding width #8 | |
● should adjust slot CSS after expanding width #9 | |
● should adjust slot CSS after expanding width #10 | |
● should adjust slot CSS after expanding width #11 | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
#onCreativeRender | |
● injects amp analytics, trigger immediate disable exp | |
WARN: '[lru-cache] Trimming LRU cache' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
● injects amp analytics | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 1' | |
● should register click listener | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 1' | |
● should not register click listener is amp-ad-exit | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
● should set iframe id and data-google-query-id attribute | |
#getAdUrl | |
● returns the right URL | |
● includes psts param when there are pageview tokens | |
● does not include psts param when there are no pageview tokens | |
● handles Single Page Story Ad parameter | |
● handles tagForChildDirectedTreatment | |
● handles categoryExclusions without targeting | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● has correct format when height == "auto" | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: 'Unmatched GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1544577908&sz=320x50&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321003073&ga_cid=GA1.2.12345.54321&ga_hid=3073&dt=1582408994118&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=19&dtd=4&__amp_source_origin=about%3Asrcdoc' | |
INFO: '[amp-ad-network-doubleclick-impl] network error, attempt adding of error parameter', Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1544577908&sz=320x50&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321003073&ga_cid=GA1.2.12345.54321&ga_hid=3073&dt=1582408994118&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=19&dtd=4&__amp_source_origin=about%3Asrcdoc | |
Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1544577908&sz=320x50&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321003073&ga_cid=GA1.2.12345.54321&ga_hid=3073&dt=1582408994118&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=19&dtd=4&__amp_source_origin=about%3Asrcdoc | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createExpectedError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:363:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/xhr-impl.js:111:22 | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● has correct format when width == "auto" | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: 'Unmatched GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1544577908&sz=320x50&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321002241&ga_cid=GA1.2.12345.54321&ga_hid=2241&dt=1582408994149&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=17&dtd=4&__amp_source_origin=about%3Asrcdoc' | |
INFO: '[amp-ad-network-doubleclick-impl] network error, attempt adding of error parameter', Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1544577908&sz=320x50&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321002241&ga_cid=GA1.2.12345.54321&ga_hid=2241&dt=1582408994149&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=17&dtd=4&__amp_source_origin=about%3Asrcdoc | |
Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1544577908&sz=320x50&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321002241&ga_cid=GA1.2.12345.54321&ga_hid=2241&dt=1582408994149&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=17&dtd=4&__amp_source_origin=about%3Asrcdoc | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createExpectedError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:363:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/xhr-impl.js:111:22 | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● has correct format with height/width override | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: 'Unmatched GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=2160836871&sz=123x456&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321008911&ga_cid=GA1.2.12345.54321&ga_hid=8911&dt=1582408994184&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=17&dtd=4&__amp_source_origin=about%3Asrcdoc' | |
INFO: '[amp-ad-network-doubleclick-impl] network error, attempt adding of error parameter', Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=2160836871&sz=123x456&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321008911&ga_cid=GA1.2.12345.54321&ga_hid=8911&dt=1582408994184&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=17&dtd=4&__amp_source_origin=about%3Asrcdoc | |
Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=2160836871&sz=123x456&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321008911&ga_cid=GA1.2.12345.54321&ga_hid=8911&dt=1582408994184&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=17&dtd=4&__amp_source_origin=about%3Asrcdoc | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createExpectedError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:363:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/xhr-impl.js:111:22 | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● has correct format with height/width override and multiSize | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: 'Unmatched GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1430243503&sz=123x456%7C1x2%7C3x4&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321003872&ga_cid=GA1.2.12345.54321&ga_hid=3872&dt=1582408994216&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=18&dtd=4&__amp_source_origin=about%3Asrcdoc' | |
INFO: '[amp-ad-network-doubleclick-impl] network error, attempt adding of error parameter', Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1430243503&sz=123x456%7C1x2%7C3x4&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321003872&ga_cid=GA1.2.12345.54321&ga_hid=3872&dt=1582408994216&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=18&dtd=4&__amp_source_origin=about%3Asrcdoc | |
Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1430243503&sz=123x456%7C1x2%7C3x4&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321003872&ga_cid=GA1.2.12345.54321&ga_hid=3872&dt=1582408994216&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=18&dtd=4&__amp_source_origin=about%3Asrcdoc | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createExpectedError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:363:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/xhr-impl.js:111:22 | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● has correct format with auto height/width and multiSize | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: 'Unmatched GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1430243503&sz=123x456%7C1x2%7C3x4&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321001274&ga_cid=GA1.2.12345.54321&ga_hid=1274&dt=1582408994248&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=17&dtd=5&__amp_source_origin=about%3Asrcdoc' | |
INFO: '[amp-ad-network-doubleclick-impl] network error, attempt adding of error parameter', Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1430243503&sz=123x456%7C1x2%7C3x4&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321001274&ga_cid=GA1.2.12345.54321&ga_hid=1274&dt=1582408994248&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=17&dtd=5&__amp_source_origin=about%3Asrcdoc | |
Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=1430243503&sz=123x456%7C1x2%7C3x4&output=html&impl=ifr&ifi=1&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321001274&ga_cid=GA1.2.12345.54321&ga_hid=1274&dt=1582408994248&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=17&dtd=5&__amp_source_origin=about%3Asrcdoc | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createExpectedError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:363:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/xhr-impl.js:111:22 | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● has correct sz with fluid as multi-size | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: 'Unmatched GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=466661430&sz=320x50%7C300x250&output=html&impl=ifr&ifi=1&fluid=height&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321005267&ga_cid=GA1.2.12345.54321&ga_hid=5267&dt=1582408994281&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=18&dtd=4&__amp_source_origin=about%3Asrcdoc' | |
INFO: '[amp-ad-network-doubleclick-impl] network error, attempt adding of error parameter', Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=466661430&sz=320x50%7C300x250&output=html&impl=ifr&ifi=1&fluid=height&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321005267&ga_cid=GA1.2.12345.54321&ga_hid=5267&dt=1582408994281&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=18&dtd=4&__amp_source_origin=about%3Asrcdoc | |
Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=466661430&sz=320x50%7C300x250&output=html&impl=ifr&ifi=1&fluid=height&msz=300x-1&psz=300x-1&fws=4&adf=2438287650&nhd=2&adx=12&ady=11&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321005267&ga_cid=GA1.2.12345.54321&ga_hid=5267&dt=1582408994281&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=18&dtd=4&__amp_source_origin=about%3Asrcdoc | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createExpectedError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:363:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/xhr-impl.js:111:22 | |
● should have the correct ifi numbers - no refresh | |
● should have google_preview parameter | |
● should cache getLocationQueryParameterValue | |
● has correct rc and ifi after refresh (skipped) | |
● has correct frc value | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
● should include identity | |
INFO: '[amp-ad-network-doubleclick-impl] Ad request suppressed due to unknown consent' | |
● should return empty string if unknown consentState | |
● should include npa=1 if unknown consent & explicit npa | |
● should include npa=1 if insufficient consent | |
● should not include npa, if sufficient consent | |
● should not include npa, if not required consent | |
● should include msz/psz/fws if in holdback control | |
● should include msz/psz by default | |
data-force-safeframe | |
● handles default | |
● case insensitive attribute name | |
● valid attribute: tRuE | |
● valid attribute: true | |
● valid attribute: TRUE | |
● valid attribute: 1 | |
WARN: '[amp-ad-network-doubleclick-impl] Ignoring invalid data-force-safeframe attribute: aTrUe' | |
● invalid attribute: aTrUe | |
WARN: '[amp-ad-network-doubleclick-impl] Ignoring invalid data-force-safeframe attribute: trueB' | |
● invalid attribute: trueB | |
WARN: '[amp-ad-network-doubleclick-impl] Ignoring invalid data-force-safeframe attribute: 0' | |
● invalid attribute: 0 | |
WARN: '[amp-ad-network-doubleclick-impl] Ignoring invalid data-force-safeframe attribute: 01' | |
● invalid attribute: 01 | |
WARN: '[amp-ad-network-doubleclick-impl] Ignoring invalid data-force-safeframe attribute: 10' | |
● invalid attribute: 10 | |
WARN: '[amp-ad-network-doubleclick-impl] Ignoring invalid data-force-safeframe attribute: false' | |
● invalid attribute: false | |
WARN: '[amp-ad-network-doubleclick-impl] Ignoring invalid data-force-safeframe attribute: ' | |
● invalid attribute: | |
WARN: '[amp-ad-network-doubleclick-impl] Ignoring invalid data-force-safeframe attribute: true' | |
● invalid attribute: true | |
WARN: '[amp-ad-network-doubleclick-impl] Ignoring invalid data-force-safeframe attribute: true ' | |
● invalid attribute: true | |
WARN: '[amp-ad-network-doubleclick-impl] Ignoring invalid data-force-safeframe attribute: true ' | |
● invalid attribute: true | |
#getPageParameters | |
● should include npa=1 for insufficient consent | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
#unlayoutCallback | |
● should reset state to null on non-FIE unlayoutCallback | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
● should not reset state to null on FIE unlayoutCallback | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
● should call #resetSlot, remove child iframe, but keep other children | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
● should call #unobserve on refreshManager | |
#getNetworkId | |
● should match expectations | |
#delayAdRequestEnabled | |
● should return false by default | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
#multi-size | |
● amp creative - should force iframe to match size of creative | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should force iframe to match size of creative | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● amp creative - should force iframe to match size of slot | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should force iframe to match size of slot | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
WARN: '[AMP-AD] Secondary width 201 can't be larger than the primary width.' | |
● should issue an ad request even with bad multi-size data attr | |
● should attempt resize for fluid request + fixed response case | |
Troubleshoot for AMP pages | |
● should emit post message | |
● should not emit post message | |
#getNonAmpCreativeRenderingMethod | |
● should return safeframe if fluid | |
● should return safeframe if force safeframe | |
INFO: '[amp-ad-network-doubleclick-impl] network error, attempt adding of error parameter', Error: xhr failure | |
Error: xhr failure | |
at Context.<anonymous> (http://localhost:9876/home/mdmower/source/amphtml/extensions/amp-ad-network-doubleclick-impl/0.1/test/test-amp-ad-network-doubleclick-impl.js:1488:33) | |
at callFn (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5432:21) | |
at Test.Runnable.run (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5419:7) | |
at Runner.runTest (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:6086:10) | |
at http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:6212:12 | |
at next (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5995:14) | |
at http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:6005:7 | |
at next (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5907:14) | |
at http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5968:7 | |
at done (http://localhost:9876/base/node_modules/mocha/mocha.js?2da0c5e1d780397cb6a08bf992db7d1371500f38:5372:5) | |
additional amp-ad-network-doubleclick-impl | |
#onNetworkFailure | |
● should append error parameter | |
centering | |
● centers iframe in slot when height && width | |
● centers iframe in slot when !height && !width | |
● centers iframe in slot when !height && width | |
● centers iframe in slot when height && !width | |
#fireDelayedImpressions | |
● should handle null impressions | |
WARN: '[amp-ad-network-doubleclick-impl] insecure impression url: http://f.com?a=b' | |
● should not include non-https | |
● should append amp-pixel w/o scrubReferer | |
● should append amp-pixel with scrubReferer | |
#idleRenderOutsideViewport | |
● should use experiment value | |
● should return false if using loading strategy | |
● should return false if invalid experiment value | |
● should return 12 if no experiment header | |
● should return renderOutsideViewport boolean | |
idle renderNonAmpCreative | |
● should throttle if idle render and non-AMP creative (skipped) | |
● should NOT throttle if idle experiment not enabled | |
● should NOT throttle if experiment throttle not enabled | |
● should NOT throttle if idle render and no previous | |
#getConsentPolicy | |
● should return null | |
#setPageLevelExperiments | |
● should select SRA experiments | |
● should force-select SRA experiment from URL experiment ID | |
should properly limit SRA traffic | |
● should allow by default | |
● should not allow if refresh meta | |
● should not allow if sra meta | |
● should not allow if block level refresh | |
#getPageviewStateTokensForAdRequest | |
● should return the tokens associated with instances that are not passed to it as an argument | |
#checksumVerification | |
● should call super if missing Algorithm header | |
● should properly validate checksum | |
● should fail validation if invalid checksum | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
DoubleClick Fast Fetch Fluid | |
● should start with height 0 | |
● should be fluid enabled | |
● should have a supported layout | |
● should NOT load delayed impression amp-pixels | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: 'Unmatched GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=4149354336&sz=320x50&output=html&impl=ifr&ifi=1&fluid=height&msz=285x-1&psz=285x-1&fws=4&adf=2438287650&nhd=2&adx=-10000&ady=-10000&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&psts=DUMMY_TOKEN_1%2CDUMMY_TOKEN_2&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321002623&ga_cid=GA1.2.12345.54321&ga_hid=2623&dt=1582409021727&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=12&dtd=1005&__amp_source_origin=about%3Asrcdoc' | |
INFO: '[amp-ad-network-doubleclick-impl] network error, attempt adding of error parameter', Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=4149354336&sz=320x50&output=html&impl=ifr&ifi=1&fluid=height&msz=285x-1&psz=285x-1&fws=4&adf=2438287650&nhd=2&adx=-10000&ady=-10000&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&psts=DUMMY_TOKEN_1%2CDUMMY_TOKEN_2&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321002623&ga_cid=GA1.2.12345.54321&ga_hid=2623&dt=1582409021727&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=12&dtd=1005&__amp_source_origin=about%3Asrcdoc | |
Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=4149354336&sz=320x50&output=html&impl=ifr&ifi=1&fluid=height&msz=285x-1&psz=285x-1&fws=4&adf=2438287650&nhd=2&adx=-10000&ady=-10000&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&psts=DUMMY_TOKEN_1%2CDUMMY_TOKEN_2&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321002623&ga_cid=GA1.2.12345.54321&ga_hid=2623&dt=1582409021727&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=12&dtd=1005&__amp_source_origin=about%3Asrcdoc | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createExpectedError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:363:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/xhr-impl.js:111:22 | |
● should contain sz=320x50 in ad request by default | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: 'Unmatched GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=566602077&sz=320x50%7C300x200%7C150x50&output=html&impl=ifr&ifi=1&fluid=height&msz=285x-1&psz=285x-1&fws=4&adf=2879757923&nhd=2&adx=-10000&ady=-10000&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&psts=DUMMY_TOKEN_1%2CDUMMY_TOKEN_2&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321001606&ga_cid=GA1.2.12345.54321&ga_hid=1606&dt=1582409022765&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=12&dtd=1005&__amp_source_origin=about%3Asrcdoc' | |
INFO: '[amp-ad-network-doubleclick-impl] network error, attempt adding of error parameter', Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=566602077&sz=320x50%7C300x200%7C150x50&output=html&impl=ifr&ifi=1&fluid=height&msz=285x-1&psz=285x-1&fws=4&adf=2879757923&nhd=2&adx=-10000&ady=-10000&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&psts=DUMMY_TOKEN_1%2CDUMMY_TOKEN_2&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321001606&ga_cid=GA1.2.12345.54321&ga_hid=1606&dt=1582409022765&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=12&dtd=1005&__amp_source_origin=about%3Asrcdoc | |
Error: XHR Failed fetching (https://securepubads.g.doubleclick.net/...): fetch-mock: No fallback response defined for GET to https://securepubads.g.doubleclick.net/gampad/ads?adk=566602077&sz=320x50%7C300x200%7C150x50&output=html&impl=ifr&ifi=1&fluid=height&msz=285x-1&psz=285x-1&fws=4&adf=2879757923&nhd=2&adx=-10000&ady=-10000&oid=2&gdfp_req=1&sfv=1-0-23&u_sd=1&psts=DUMMY_TOKEN_1%2CDUMMY_TOKEN_2&is_amp=3&_v=%24internalRuntimeVersion%24&d_imp=1&c=554321001606&ga_cid=GA1.2.12345.54321&ga_hid=1606&dt=1582409022765&biw=300&bih=150&u_aw=800&u_ah=600&u_cd=24&u_w=800&u_h=600&u_tz=-480&u_his=7&isw=300&ish=150&vis=1&scr_x=0&scr_y=0&bc=7&url=http%3A%2F%2Flocalhost%3A9876%2Fcontext.html&top=localhost&loc=about%3Asrcdoc&bdt=12&dtd=1005&__amp_source_origin=about%3Asrcdoc | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createExpectedError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:363:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/xhr-impl.js:111:22 | |
● should contain mulitple sizes in ad request | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● should style iframe/slot correctly on multi-size creative | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● should have an iframe child with initial size 0x0 | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should fire delayed impression ping | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[AMP-DOUBLECLICK-SAFEFRAME] Creative in viewport' | |
● should fire delayed impression ping, if creative partly visible | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should set height on iframe | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-ad-network-doubleclick-impl] insecure impression url: http://www.foo.co.uk' | |
● should fire impression for AMP fluid creative | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-ad-network-doubleclick-impl] Attempt to change size failed on fluid creative. Will re-attempt when slot is out of the viewport.' | |
WARN: '[amp-ad-network-doubleclick-impl] insecure impression url: http://www.foo.co.uk' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● should fire impression for AMP fluid creative, if partly visible | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-ad-network-doubleclick-impl] Attempt to change size failed on fluid creative. Will re-attempt when slot is out of the viewport.' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● should not fire impression for AMP fluid creative | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-ad-network-doubleclick-impl] Attempt to change size failed on fluid creative. Will re-attempt when slot is out of the viewport.' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● should set expansion re-attempt flag after initial failure | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
● should re-attempt expansion after initial failure | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● should set position: static when measuring height on AMP fluid | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-ad-network-doubleclick-impl] Attempt to change size failed on fluid creative. Will re-attempt when slot is out of the viewport.' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset.json' | |
WARN: 'Unmatched GET to https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json' | |
WARN: 'Unmatched GET to https://adservice.google.com/adsid/integrator.json?domain=localhost' | |
● should set position: absoltute back when resizing fails | |
DoubleClick Fast Fetch RTC | |
#mergeRtcResponses_ | |
● should handle array with undefined | |
● should properly merge RTC responses into jsonTargeting on impl | |
● should properly merge RTC responses from vendors | |
● should properly merge into existing json | |
● should properly merge into existing categoryExclusions | |
● should not allow duplicate categoryExclusions | |
● should send correct error value for MALFORMED_JSON_RESPONSE | |
● should send correct error value for DUPLICATE_URL | |
● should send correct error value for INSECURE_URL | |
● should send correct error value for MAX_CALLOUTS_EXCEEDED | |
● should send correct error value for NETWORK_FAILURE | |
● should send correct error value for UNKNOWN_VENDOR | |
● should send correct error value for TIMEOUT | |
● should send correct error value for MACRO_EXPAND_TIMEOUT | |
● should properly merge mix of success and errors | |
● should return null for empty array | |
rewriteRtcKeys | |
● should rewrite key names if vendor | |
● should not rewrite key names if vendor has disableKeyAppend | |
● should not rewrite key names if custom url callout | |
getCustomRealTimeConfigMacros | |
● should return correct macros (skipped) | |
● should return the same ADCID on multiple calls | |
WARN: '[AD-CID]', Error: cid timeout | |
Error: cid timeout | |
at createErrorVargs (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:714:13) | |
at Log.createError (http://localhost:9876/home/mdmower/source/amphtml/src/log.js:352:36) | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/timer-impl.js:142:23 | |
at http://localhost:9876/home/mdmower/source/amphtml/src/service/timer-impl.js:76:11 | |
● should respect timeout for adcid | |
● should respect timeout for referrer | |
● should handle TGT macro when targeting not set | |
DoubleClick Fast Fetch - Safeframe | |
connectMessagingChannel | |
● should handle setup message | |
getSafeframeNameAttr | |
● should return name attributes | |
● should not pass canonicalUrl if referrer policy same-origin | |
● should not pass canonicalUrl if referrer policy no-referrer | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should pass canonicalUrl domain if referrer policy origin | |
getCurrentGeometry | |
● should get current geometry when safeframe fills amp-ad | |
● should get geometry when safeframe does not fill amp-ad | |
ERROR: '[AMP-DOUBLECLICK-SAFEFRAME] Error: CANCELLED' | |
The test "DoubleClick Fast Fetch - Safeframe getCurrentGeometry should handle cancellation" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should handle cancellation | |
● should get geometry when scrolled | |
geometry updates | |
● should be sent when geometry changes occur | |
formatGeom | |
● should build proper geometry update | |
sendResizeResponse | |
● should handle cancellation | |
resizeAmpAdAndSafeframe | |
● should handle cancellation | |
handleFluidMessage | |
● should handle cancellation | |
Resizing | |
● expand_request should succeed if within amp-ad bounds | |
● expand_request should properly handle slot size change | |
● expand_request should succeed if expanding past amp-ad bounds and does not create reflow | |
● resizeAmpAdAndSafeframe should send error on rejection | |
● expand_request fails if expanding larger than viewport | |
● expand_request fails if invalid values sent | |
● expand_request should fail if expanding past amp-ad bounds and would create reflow | |
● should collapse safeframe on amp-ad resize failure | |
● should collapse safeframe on amp-ad resize success | |
● should send collapse failure message if already collapsed | |
● should send collapse failure message if not registered | |
● should resize safeframe on amp-ad resize success | |
Doubleclick SRA | |
#SRA enabled | |
● should be disabled by default | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
● should be enabled if meta tag present, and force refresh off | |
block parameter joining | |
● should join IUs | |
● should determine cookie opt out | |
● should combine adks | |
● should combine sizes | |
● should determine tagForChildDirectedTreatment | |
● should determine if ad test | |
● should combine targeting and exclusions | |
● should move common targeting into csp parameter | |
● should not use csp parameter if slot has no targeting | |
● should determine experiment ids | |
● should determine identity | |
● should combine force safeframe | |
● should combine page offsets | |
● should combine contained state | |
● should combine fluid state | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
#SRA AMP creative unlayoutCallback | |
● should not remove if not SRA | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
● should remove if SRA and has frame | |
WARN: '[AMP-AD] Secondary width 9999 can't be larger than the primary width. Secondary height 9999 can't be larger than the primary height.' | |
#constructSRABlockParameters | |
● should combine for SRA, forceSafeframe true | |
WARN: '[amp-ad-network-doubleclick-impl] Ignoring invalid data-force-safeframe attribute: 0' | |
WARN: '[AMP-AD] Secondary width 9999 can't be larger than the primary width. Secondary height 9999 can't be larger than the primary height.' | |
● should combine for SRA, forceSafeframe false | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-ad-network-doubleclick-impl] single block in network 1234' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 1' | |
WARN: '[amp-a4a] fallback to 3p' | |
#initiateSraRequests | |
● should not use SRA if single slot | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-ad-network-doubleclick-impl] single block in network 1234' | |
INFO: '[amp-ad-network-doubleclick-impl] single block in network 4567' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 1' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 2' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should not use SRA if single slot, multiple networks | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 1' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 2' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should correctly use SRA for multiple slots | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 1' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 2' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should correctly handle SRA response with nested headers | |
● should not send SRA request if slots are invalid | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-ad-network-doubleclick-impl] Ignoring instance without ad promise as likely invalid', <amp-ad type="doubleclick" height="320" width="50" data-slot="/1234/abc/def" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 50px; height: 320px;" data-test-invalid="true"></amp-ad> | |
INFO: '[amp-ad-network-doubleclick-impl] Ignoring instance without ad promise as likely invalid', <amp-ad type="doubleclick" height="320" width="50" data-slot="/1234/abc/def" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 50px; height: 320px;" data-test-invalid="true"></amp-ad> | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 1' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 2' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should send SRA request if more than 1 slot is valid | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-ad-network-doubleclick-impl] Ignoring instance without ad promise as likely invalid', <amp-ad type="doubleclick" height="320" width="50" data-slot="/1234/abc/def" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 50px; height: 320px;" data-test-invalid="true"></amp-ad> | |
INFO: '[amp-ad-network-doubleclick-impl] Ignoring instance without ad promise as likely invalid', <amp-ad type="doubleclick" height="320" width="50" data-slot="/1234/abc/def" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 50px; height: 320px;" data-test-invalid="true"></amp-ad> | |
INFO: '[amp-ad-network-doubleclick-impl] single block in network 1234' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 1' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should not send SRA request if only 1 slot is valid | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-ad-network-doubleclick-impl] single block in network 1234' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 1' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should send SRA request if only 1 slot and no recovery exp | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] doubleclick', 'No creative or URL available -- A4A can't render any ad' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] doubleclick', 'No creative or URL available -- A4A can't render any ad' | |
● should handle xhr failure by not sending subsequent request | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should handle xhr failure by via subsequent request if implicit | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 3' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 4' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] doubleclick', 'No creative or URL available -- A4A can't render any ad' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] doubleclick', 'No creative or URL available -- A4A can't render any ad' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should handle mixture of xhr and non xhr failures | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 1' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 2' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 3' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 4' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should correctly use SRA for multiple slots. multiple networks | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-a4a] upgradeDelay doubleclick: 0' | |
INFO: '[amp-ad-network-doubleclick-impl] single block in network 101' | |
INFO: '[amp-ad-network-doubleclick-impl] single block in network 202' | |
INFO: '[amp-ad-network-doubleclick-impl] Ignoring instance without ad promise as likely invalid', <amp-ad type="doubleclick" height="320" width="50" data-slot="/8901/abc/def" class="i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined amp-unresolved i-amphtml-unresolved" i-amphtml-layout="fixed" style="width: 50px; height: 320px;" data-test-invalid="true"></amp-ad> | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 1' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 2' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 3' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 4' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 7' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 8' | |
WARN: '[amp-ad-network-doubleclick-impl] SRA failed to include element 9' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] doubleclick', 'No creative or URL available -- A4A can't render any ad' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] doubleclick', 'No creative or URL available -- A4A can't render any ad' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
WARN: '[amp-a4a] fallback to 3p' | |
● should handle mixture of all possible scenarios | |
#sraBlockCallbackHandler | |
● should call top resolver with FetchResponse | |
● should handle multiple blocks | |
#getFlexibleAdSlotData | |
● should return the fixed width for FIXED layout | |
● should return 0 for FIXED layout and invalid width | |
● should return 0 for NODISPLAY layout | |
● should return 0 for FLEX_ITEM layout | |
● should return 0 for invalid layout | |
● should return the max-width, if present, for FILL layout | |
● should return parent's fixed width for FILL layout | |
● should return the max-width, if present, for FIXED_HEIGHT layout | |
● should return parent's fixed width for FIXED_HEIGHT layout | |
● should return the max-width, if present, for FLUID layout | |
● should return parent's fixed width for FLUID layout | |
● should return the max-width, if present, for RESPONSIVE layout | |
● should return parent's fixed width for RESPONSIVE layout | |
● should return the viewport width for CONTAINER layout | |
ERROR: 'The "width" attribute must be present and not "auto": [object HTMLElement]' | |
The test "#getFlexibleAdSlotData should return msz=-1 for non-fixed layouts" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should return msz=-1 for non-fixed layouts | |
● should have fwSignal=0 by default | |
● should have fwSignal=128 when ancestor is hidden | |
● should have fwSignal=4 when ancestor has overflow hidden | |
● should have parentStyle | |
WARN: '[AMP-AD-NETWORK-FAKE-IMPL] Only works with id starts with i-amphtml-demo-' | |
WARN: '[AMP-AD-NETWORK-FAKE-IMPL] Only works with id starts with i-amphtml-demo-' | |
amp-ad-network-fake-impl | |
● should not send ad request with valid id | |
● send ad request with invalid id | |
● reorders head and inserts metadata into creative | |
● handles html file with preexisting metadata | |
gmossp-a4a-config | |
● should pass a4a config predicate | |
● should pass a4a config predicate | |
● should fail a4a config predicate due to useRemoteHtml | |
● should fail a4a config predicate due to missing use-a4a | |
● should fail a4a config predicate due to missing src | |
● should fail a4a config predicate due to invalid src | |
amp-ad-network-gmossp-impl | |
#isValidElement | |
● should be valid | |
● should be valid | |
● should NOT be valid (impl tag name) | |
#getAdUrl | |
● should be valid | |
● should be valid | |
mytarget-a4a-config | |
● should pass a4a config predicate | |
● should fail a4a config predicate due to useRemoteHtml | |
● should fail a4a config predicate due to missing use-a4a | |
● should fail a4a config predicate due to missing data-ad-slot | |
● should fail a4a config predicate due to empty data-ad-slot | |
amp-ad-network-mytarget-impl | |
#isValidElement | |
● should be valid | |
● should NOT be valid (impl tag name) | |
#getRenderingMethod | |
● should be equal to "nameframe" | |
#getAdUrl | |
● should be valid | |
#getAdUrl with query parameters | |
● should add query parameters | |
● should encode query parameters | |
triplelift-a4a-config | |
● should pass a4a config predicate | |
● should fail a4a config predicate due to useRemoteHtml | |
● should fail a4a config predicate due to missing use-a4a | |
● should fail a4a config predicate due to missing src | |
● should fail a4a config predicate due to invalid src | |
amp-ad-network-triplelift-impl | |
#isValidElement | |
● should be valid | |
● should NOT be valid (impl tag name) | |
#getAdUrl | |
● should be valid | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
amp-ad-3p-impl | |
layoutCallback | |
● should create iframe and pass data via URL fragment | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should only layout once | |
ERROR: '[Storage] Failed to load store: TypeError: Cannot read property 'getItem' of null' | |
The test "amp-ad-3p-impl layoutCallback should only layout once" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should propagete CID to ad iframe | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should proceed w/o CID | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should propagate consent state to ad iframe | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should propagate null consent state to ad iframe | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should throw on position:fixed | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should throw on parent being position:fixed | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should allow position:fixed with whitelisted ad container | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should pass ad container info to child iframe via URL | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should use custom path | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should use default path if custom disabled | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
pause/resume | |
before layout | |
● should require unlayout before initialization | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should noop pause | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should noop resume | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
after layout | |
● should require unlayout if iframe is not pausable | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should NOT require unlayout if iframe is pausable | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should pause iframe | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should resume iframe | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
preconnectCallback | |
● should add preconnect and prefetch to DOM header | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should use remote html path for preload | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
ERROR: 'The test "amp-ad-3p-impl preconnectCallback should not use remote html path for preload if disabled" contains an "allowConsoleError" block that didn't result in a call to console.error.' | |
● should not use remote html path for preload if disabled | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
renderOutsideViewport | |
● should allow rendering within 3 viewports by default | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should reduce render range when prefer-viewability-over-views is set | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should only allow rendering one ad per second | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
● should only allow rendering one ad a time | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
#getIntersectionElementLayoutBox | |
● should not cache intersection box | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
full width responsive ad | |
should resize correctly | |
● should do nothing for non-responsive | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] #${this.getResource().getId()} Full width requested' | |
● should schedule a resize for responsive | |
INFO: '[amp-ad-3p-impl] Size change accepted: 300x250' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] #${this.getResource().getId()} Full width requested' | |
● should schedule a resize for matched content responsive | |
INFO: '[amp-ad-3p-impl] Size change accepted: 300x1131' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] #${this.getResource().getId()} Full width requested' | |
INFO: '[amp-ad-3p-impl] Size change accepted: 300x250' | |
should align correctly | |
● should change left margin for responsive | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] upgradeDelay _ping_: 0' | |
INFO: '[amp-ad-3p-impl] #${this.getResource().getId()} Full width requested' | |
INFO: '[amp-ad-3p-impl] Size change accepted: 300x250' | |
● should change right margin for responsive in RTL | |
#getLayoutPriority | |
with shadow AmpDoc | |
● should return priority of 1 | |
with single AmpDoc | |
● should return priority of 2 | |
Amp custom ad | |
● should get the correct full URLs | |
● should perform multiple requests if no `data-slot` | |
TemplateData | |
● templateData with child template | |
● templateData w/o child template | |
● templateData w/o child template or templateId | |
● should return priority of 0 (skipped) | |
● should return priority of 0 (skipped) | |
amp-ad-ui handler | |
applyNoContentUI | |
● should force collapse ad in sticky ad container | |
● should force collapse ad inside flying carpet, if it is the only and direct child of flying carpet | |
● should NOT force collapse ad inside flying carpet, if there is another element | |
● should NOT force collapse ad inside flying carpet, if it is not a direct child of flying carpet. | |
● should collapse ad amp-layout container if there is one | |
● should try to collapse element first | |
● should toggle fallback when collapse fail | |
● should apply default holder if not provided | |
updateSize function | |
● should calculate take consideration of padding | |
● should tolerate string input | |
● should reject on special case undefined sizes | |
● should reject on special case inside sticky ad | |
● should reject on attemptChangeSize reject | |
WARN: '[lru-cache] Trimming LRU cache' | |
amp-ad-xorigin-iframe-handler | |
init() returned promise | |
● should trigger render-start on message "bootstrap-loaded" if render-start is NOT implemented | |
● should trigger visibility on timeout | |
● should be immediately visible if it is A4A | |
if render-start is implemented | |
● should resolve on iframe.onload | |
● should resolve on message "render-start" | |
● should resolve and resize on message "render-start" w/ size | |
● should resolve on message "no-content" and remove non-master iframe (skipped) | |
ERROR: 'Missing resource prop on [object HTMLElement]' | |
The test "amp-ad-xorigin-iframe-handler init() returned promise if render-start is implemented should NOT remove master iframe on message "no-content"" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should NOT remove master iframe on message "no-content" | |
● should NOT resolve on message "bootstrap-loaded" (skipped) | |
● should not update "ini-load" signal implicitly | |
● should update "ini-load" signal on message | |
● should be able to use user-error API | |
Initialized iframe | |
● should be able to use embed-state API | |
● should be able to use embed-size API, change size deny | |
● should be able to use embed-size API, change size succeed | |
● should be able to use embed-size API to resize height only | |
● should be able to use send-positions API to send position | |
● should be able to use get-consent-state API | |
● should be not pausable w/o experiment | |
Initialized iframe with pausable-iframe | |
● should be configured pausable w/experiment | |
● should introspect as pausable w/experiment when supported | |
● should be hidden on pause | |
ERROR: 'The node must be attached to request ampdoc.' | |
The test "Ad loader amp-ad fails upgrade on A4A upgrade with loadElementClass error" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'The node must be attached to request ampdoc.' | |
The test "Ad loader amp-ad fails upgrade on A4A upgrade with loadElementClass error" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'The node must be attached to request ampdoc.' | |
The test "Ad loader amp-ad fails upgrade on A4A upgrade with loadElementClass error" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
Ad loader | |
amp-ad | |
● fails upgrade on A4A upgrade with loadElementClass error | |
● falls back to Delayed Fetch if remote.html is used | |
● uses Fast Fetch if just RTC is used | |
● uses Fast Fetch if remote.html and RTC are used | |
● uses Fast Fetch if remote.html is used but disabled | |
● upgrades to registered, A4A type network-specific element | |
● adds script to header for registered, A4A type | |
with consent-notification-id, upgradeCallback | |
● should block for notification dismissal | |
● should resolve once notification is dismissed | |
ERROR: 'Unknown ad type "zort"' | |
The test "Ad loader amp-ad #upgradeCallback fails upgrade on unregistered type" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
#upgradeCallback | |
● fails upgrade on unregistered type | |
● falls back to 3p for registered, non-A4A type | |
amp-embed | |
● fails upgrade on A4A upgrade with loadElementClass error | |
● falls back to Delayed Fetch if remote.html is used | |
● uses Fast Fetch if just RTC is used | |
● uses Fast Fetch if remote.html and RTC are used | |
● uses Fast Fetch if remote.html is used but disabled | |
● upgrades to registered, A4A type network-specific element | |
● adds script to header for registered, A4A type | |
with consent-notification-id, upgradeCallback | |
● should block for notification dismissal | |
● should resolve once notification is dismissed | |
ERROR: 'Unknown ad type "zort"' | |
The test "Ad loader amp-embed #upgradeCallback fails upgrade on unregistered type" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
#upgradeCallback | |
● fails upgrade on unregistered type | |
● falls back to 3p for registered, non-A4A type | |
concurrent-load | |
getAmpAdRenderOutsideViewport | |
● should return null if data-loading-strategy attribute does not exist | |
● should respect data-loading-strategy attribute | |
incrementLoadingAds | |
● should throttle ad loading one per second | |
● should throttle ad one a time | |
waitFor3pThrottle | |
● should block if incremented (skipped) | |
● should not block if never incremented | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: 'Unmatched GET to https://m.addthis.com/live/red_lojson/300lo.json?amp=1&bl=1&cb=0&colc=1582409036553&ct=1&dc=1&dp=localhost%3A9876&fp=%2Fcontext.html&fr=&gen=100&ln=en&lnlc=US&mk=&of=0&pd=0&pub=ra-5988ef04ee1db125&rb=0&sid=5e51a4d71a90d24d&skipb=1' | |
amp-addthis | |
● renders the iframe | |
● renders a placeholder with an amp-img | |
● fails when tag needs pub id | |
● fails when tag needs widget id | |
● fails when tag needs pub id and has empty product code | |
● fails when tag has pubId but not widget id or product code | |
● fails when tag has no pub id, widget id, or product code | |
● succeeds when tag has pub id and widget id | |
● succeeds when tag has pub id and product code | |
● succeeds when tag has just a product code | |
● removes the iframe after unlayoutCallback | |
● registers the frame with the configManager on layout | |
● unregisters the frame with the configManager on unlayoutCallback | |
● accepts and stores shareConfig data via custom attributes | |
● defaults to sharing ownerDocument's title and url | |
● registers a view at most once per "session" | |
● sends expected JSON config to the iframe after registering | |
● requests a config exactly once per pubId | |
● gets meta elements from document | |
● gets 0 meta elements from document when there are none | |
● gets details for meta tag with name in lower case | |
● gets keywords from meta tags | |
● can tell future dates from past dates | |
● gives id for iframe if floating tool loaded | |
● gets mode correctly based on attributes | |
● isPubId: pretty much knows if a thing is a pub id or not | |
● isProductCode: pretty much knows if a thing is a product code or not | |
● isWidgetId: pretty much knows if a thing is a widget id or not | |
● getWidgetOverload: self.element.getAttribute function argument | |
● getWidgetOverload: doesn't pass unknown params | |
● getWidgetOverload: only saves string, boolean, number | |
● getWidgetOverload: passes all params correctly | |
● getSessionId: returns a string of 16 characters containing 0-9 a-f | |
● createCUID: returns a string of 16 characters containing 0-9 a-f | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/bar' | |
amp-analytics | |
send hit | |
● sends a basic hit | |
● does not send a hit when config is not in a script tag | |
● does start initialization when requested | |
● does not send a hit when multiple child tags exist | |
● does not send a hit when script tag does not have a type attribute | |
● does not send a hit when json config is not valid | |
● does not send a hit when request is not provided | |
● does not send a hit when request type is not defined | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/bar&f1&baz' | |
● expands nested requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/bar&c1&baz' | |
● expand nested requests with vendor provided value | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/bar&b1' | |
● expands nested requests (3 levels) | |
● should tolerate invalid triggers | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/bar&/bar&/bar&&baz&baz&baz' | |
● expands recursive requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/bar&b1' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'b1' | |
● sends multiple requests per trigger | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/bar&ids=HTML_ATTR(div,id)' | |
● should not replace HTML_ATTR outside of amp-ad | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/cid=amp-WbVecdqTYm-pskiHHdpsQw' | |
● fills cid | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://e.com/start=1582409038662&duration=0' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://e.com/totalVisibleTime=0' | |
● fills internally provided trigger vars | |
● should create and destroy analytics group | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/magic' | |
● expands urls in config request | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test2=2' | |
● updates requestCount on each request | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test1=x&test2=test2' | |
expand variables | |
● expands trigger vars | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test1=x&test2=test2' | |
● expands config vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/title=My%20Test%20Title&ref=http%3A%2F%2Ffake.example%2F%3Ffoo%3Dbar' | |
● expands platform vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/My%20Test%20Title' | |
● expands url-replacements vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test1=trigger1&test2=config2' | |
● expands trigger vars with higher precedencethan config vars | |
● expands element level vars with higher precedencethan trigger vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test1=My%20Test%20Title&test2=428' | |
● expands config vars with higher precedencethan platform vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test?c1=config%201&t1=trigger%3D1&c2=config%262&t2=trigger%3F2' | |
● expands and encodes requests, config vars,and trigger vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test?c1=Config%2C%20The%20Barbarian,config%201&c2=config%262' | |
● encodes array vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test1=x&test2=http%3A%2F%2Ffake.example%2F%3Ffoo%3Dbar&title=My%20Test%20Title' | |
● expands url-replacements vars | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test1=_query_param_foo_' | |
● expands complex vars | |
expand selector | |
● expands selector with config variable | |
● expand selector value: .clazz | |
● expand selector value: a, div | |
● expand selector value: a .foo | |
● expand selector value: a #foo | |
● expand selector value: a > div | |
● expand selector value: div + p | |
● expand selector value: div ~ ul | |
● expand selector value: [target=_blank] | |
● expand selector value: [title~=flower] | |
● expand selector value: [lang|=en] | |
● expand selector value: a[href^="https"] | |
● expand selector value: a[href$=".pdf"] | |
● expand selector value: a[href="w3schools"] | |
● expand selector value: a:active | |
● expand selector value: p::after | |
● expand selector value: p:first-child | |
● expand selector value: p:lang(it) | |
● expand selector value: :not(p) | |
● expand selector value: p:nth-child(2) | |
● expands selector with platform variable | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/bar' | |
optout by function | |
● works for vendor config when optout returns false | |
● works for vendor config when optout returns true | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/bar' | |
● works for vendor config when optout is not defined | |
optout by id | |
● doesnt send hit when config optout id is found | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/bar' | |
● sends hit when config optout id is not found | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/helloworld?a=b&s.evar0=0&s.evar1=helloworld&foofoo=baz' | |
extraUrlParams | |
● are sent | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/helloworld?a=b&foofoo=baz&v0=0&v1=helloworld' | |
● are renamed by extraUrlParamsReplaceMap | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/helloworld?a=b&foofoo=baz&v0=0&v1=helloworld&c=d&v=e' | |
● are supported at trigger level | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/helloworld?s.evar0=0&s.evar1=helloworld&foofoo=baz&a=b' | |
● are supported as a var in URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/helloworld?a=b&foo=0' | |
● work when the value is an array | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
sampling | |
● allows a request through | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
● allows a request through based on url-replacements | |
● does not allow a request through | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
● works when sampleSpec is 100% | |
● works when sampleSpec is 0% | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
● works when sampleSpec is incomplete | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
● works for invalid threadhold (Infinity) | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
● works for invalid threadhold (NaN) | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
● works for invalid threadhold (-1) | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
enabled | |
● allows a request through for undefined "enabled" property | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
● allows a request based on a variable | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
● allows a request based on url-replacements | |
● does not allow a request through | |
● does not allow a request through with false | |
● does not allow a request through if a variable is missing | |
● does not allow a request through if a request param is missing | |
● does not allow a request through if a request param is falsey (0) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● does not allow a request through if a request param is falsey (false) | |
● does not allow a request through if a request param is falsey (null) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● does not allow a request through if a request param is falsey (NaN) | |
● does not allow a request through if a request param is falsey (undefined) | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
● allows a request based on a variable when enabled on tag level | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
● allows a request based on url-replacements when enabled on tag level | |
● does not allow a request through when enabled on tag level | |
● does not allow a request through if a variable is missing when enabled on tag level | |
● does not allow a request through if a request param is missing when enabled on tag level | |
● does not allow a request through if a request param is missing when enabled on tag level but enabled on trigger level | |
● does not allow a request through if enabled on tag level but variable is missing on trigger level | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/local' | |
data-consent-notification-id | |
● should resume fetch when consent is given | |
● should not fetch when consent is not given | |
● should not throw in resumeCallback/unlayoutCallback if consent rejected | |
Sandbox AMP Analytics Element | |
● should not add listener when eventType is not whitelist | |
● replace selector and selectionMethod when in scope | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test1=CLIENT_ID(analytics-abc)&CLIENT_ID(analytics-abc)=test2' | |
● expand vendor vars but not replace non whitelist variables | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/cid=CLIENT_ID(analytics-abc)' | |
● should not replace non whitelist variable | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/random=0.6046889072851387' | |
● should replace whitelist variable | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/cid=CLIENT_ID(analytics-abc)random=0.027917932210496765' | |
● should replace for multi whitelisted(or not) variables | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/VIEWER&%24internalRuntimeVersion%24&test1=x&test2=about%3Asrcdoc&test3=CLIENT_ID&url=about%3Asrcdoc' | |
● expands url-replacements vars | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/test1=1' | |
● allow a request sample through on non whitelist url variables | |
Linkers | |
● Initializes a new Linker. | |
iframe transport | |
● initialize iframe transport | |
parentPostMessage | |
● does send a hit when parentPostMessage is provided inabox | |
● does send a hit when parentPostMessage is provided for FIE | |
ERROR: '[AmpAnalytics <unknown id>] "on" and "request" attributes are required for data to be collected.' | |
The test "amp-analytics parentPostMessage does not send with parentPostMessage not inabox" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● does not send with parentPostMessage not inabox | |
● not send when request and parentPostMessage are not provided | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/bar' | |
● send when request and parentPostMessage are provided | |
getLayoutPriority | |
● is 1 for non-inabox | |
● is 0 for inabox | |
AnalyticsGroup | |
● should create group for the ampdoc root | |
● should reject trigger in a disallowed environment | |
● should reject trigger that fails to initialize | |
● should add "click" trigger | |
● should add "scroll" trigger | |
● should add "custom" trigger | |
● should add "render-start" trigger | |
● should add "ini-load" trigger | |
● should add "timer" trigger | |
● should add "visible" trigger | |
● should add "visible" trigger for hidden | |
AmpdocAnalyticsRoot | |
● should initialize correctly | |
● should add tracker, reuse and dispose | |
● should init with ampdoc signals | |
● should resolve ini-load signal | |
● should provide the correct rect for ini-load for main doc | |
● should provide the correct rect for ini-load for inabox | |
● should create visibility root | |
● should create correct visiblityManager | |
● should fallback to correct visibilityManager | |
● should create scroll manager | |
getElement | |
● should find :root | |
ERROR: 'Element ":host" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find :host, but always null" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element ":host" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find :host, but always null" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element ":host" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find :host, but always null" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element ":host" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find :host, but always null" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should find :host, but always null | |
● should find element by ID | |
ERROR: 'Element "#target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find element by ID" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "#target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find element by ID" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "#target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find element by ID" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "#target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find element by ID" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should find element by class | |
ERROR: 'Element ".target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find element by class" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element ".target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find element by class" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element ".target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find element by class" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element ".target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find element by class" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should find element by tag name | |
ERROR: 'Element "target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find element by tag name" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should find element by tag name" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should find element by selector | |
● should ensure that the element is contained by the root | |
ERROR: 'Element "#target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should ensure that the element is contained by the root" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element ".target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should ensure that the element is contained by the root" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should ensure that the element is contained by the root" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "#other" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should ensure that the element is contained by the root" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should ensure that the element is contained by the root" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "#target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should ensure that the element is contained by the root" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element ".target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should ensure that the element is contained by the root" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should ensure that the element is contained by the root" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "#other" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should ensure that the element is contained by the root" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should ensure that the element is contained by the root" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Element "#target" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should ensure that the element is contained by the root" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should find an AMP element for AMP search | |
ERROR: 'Element "#unknown" not found: ' | |
The test "AmpdocAnalyticsRoot getElement should allow not-found element for AMP search" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should allow not-found element for AMP search | |
ERROR: 'Element " #child " is required to be an AMP element' | |
The test "AmpdocAnalyticsRoot getElement should fail if the found element is not AMP for AMP search" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should fail if the found element is not AMP for AMP search | |
createSelectiveListener | |
● should never match host | |
● should match root | |
● should match direct target | |
● should match target via child | |
● should match scoped | |
● should match closest | |
● should NOT match nodes not in root | |
EmbedAnalyticsRoot | |
● should initialize correctly | |
● should add tracker, reuse and dispose | |
● should create and reuse trackers, but not if not in whitelist | |
● should init with embed signals | |
● should resolve ini-load signal | |
● should create visibility root | |
getElement | |
● should find :root | |
● should find :host | |
● should find element by ID | |
● should find element by class | |
createSelectiveListener | |
● should never match host | |
● should match root | |
● should match direct target | |
● should match target via child | |
● should NOT match nodes not in root | |
AnalyticsConfig | |
handles top level fields correctly | |
● propogates requestOrigin into each request object | |
● does not overwrite existing origin in request object | |
● handles empty string request origin | |
● handles undefined request origin | |
merges requests correctly | |
● inline and vendor both string | |
● inline and vendor string and object | |
● inline and vendor both object | |
WARN: '[lru-cache] Trimming LRU cache' | |
● inline and remote both string | |
mergeObjects | |
● merges objects correctly | |
vendor only configs | |
● succeeds for vendor optout config | |
ERROR: 'optout property is only available to vendor config.' | |
The test "AnalyticsConfig vendor only configs fails for inline optout config" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● fails for inline optout config | |
● succeeds for vendor iframePing config | |
ERROR: 'iframePing config is only available to vendor config.' | |
The test "AnalyticsConfig vendor only configs fails for inlined iframePing config" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● fails for inlined iframePing config | |
● succeeds for vendor iframe transport config | |
● fails for inlined iframe transport config | |
remote config | |
● fetches and merges remote config | |
● should not fetch remote config if sandboxed | |
● fetches and merges remote config with credentials | |
WARN: '[lru-cache] Trimming LRU cache' | |
should re-write configuration if configured | |
● should fully rewrite a configuration | |
● should resolve and send publisher enabled varGroups | |
● should resolve and send vendor enabled varGroups | |
● should not send configRewriter object if no vars are enabled | |
● should support amp-analytics-variables macros in varGroups | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should merge rewritten configuration and use vendor | |
● should ignore config rewriter if no url provided | |
● should ignore inlined config rewriter | |
expandConfigRequest | |
● expandConfigRequest function | |
WARN: '[AmpAnalytics analyticsId] Warning from analytics vendor%s%s: %s', ' test-vendor', '', 'I am a warning' | |
warning message | |
● shows the warning | |
WARN: '[AmpAnalytics analyticsId] Warning from analytics vendor%s%s: %s', ' test-vendor', '', '[object Object]' | |
● handles incorrect inputs | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[AmpAnalytics analyticsId] Warning from analytics vendor%s%s: %s', '', ' with remote config url www.vendorConfigLocation.com', 'The config you are working with has been deprecated' | |
● handles remote config | |
● propogates requestOrigin into each request object (skipped) | |
● does not overwrite existing origin in request object (skipped) | |
● handles empty string request origin (skipped) | |
● handles undefined request origin (skipped) | |
● inline and vendor both string (skipped) | |
● inline and vendor string and object (skipped) | |
● inline and vendor both object (skipped) | |
● inline and remote both string (skipped) | |
● merges objects correctly (skipped) | |
● succeeds for vendor optout config (skipped) | |
● fails for inline optout config (skipped) | |
● succeeds for vendor iframePing config (skipped) | |
● fails for inlined iframePing config (skipped) | |
● succeeds for vendor iframe transport config (skipped) | |
● fails for inlined iframe transport config (skipped) | |
● fetches and merges remote config (skipped) | |
● should not fetch remote config if sandboxed (skipped) | |
● fetches and merges remote config with credentials (skipped) | |
● should fully rewrite a configuration (skipped) | |
● should resolve and send publisher enabled varGroups (skipped) | |
● should resolve and send vendor enabled varGroups (skipped) | |
● should not send configRewriter object if no vars are enabled (skipped) | |
● should support amp-analytics-variables macros in varGroups (skipped) | |
● should merge rewritten configuration and use vendor (skipped) | |
● should ignore config rewriter if no url provided (skipped) | |
● should ignore inlined config rewriter (skipped) | |
● expandConfigRequest function (skipped) | |
● shows the warning (skipped) | |
● handles incorrect inputs (skipped) | |
● handles remote config (skipped) | |
amp-analytics.cookie-writer | |
write with condition | |
● Resolve when no config | |
● Resovle when config is invalid | |
● Resolve when element is in FIE | |
WARN: '[lru-cache] Trimming LRU cache' | |
● Resolve when in viewer | |
● Resolve when in inabox ad | |
● Resolve when disabled | |
● Resolve with nothing to write | |
● Resolve with invalid cookieValue (not object) | |
● Resolve when no value in cookieValue object | |
● Ignore reserved keys | |
WARN: '[lru-cache] Trimming LRU cache' | |
amp-analytics.cookie-writer value | |
● should read value from QUERY_PARAM and LINKER_PARAM | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should write cookie under eTLD+1 domain with right exp. | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should write cookie with custom expiration (number value) | |
● should write cookie with custom expiration (string value) | |
● should write cookie with custom expiration (decimal value) | |
WARN: '[amp-analytics/cookie-writer] cookieMaxAge %s less than or equal to 0, cookie will immediately expire', 0 | |
● should write cookie with custom expiration (zero value) | |
WARN: '[amp-analytics/cookie-writer] cookieMaxAge %s less than or equal to 0, cookie will immediately expire', -604800 | |
● should write cookie with custom expiration (negative value) | |
● should write cookie with default expiration (invalid string value) | |
● should not write empty cookie | |
● should not write cookie if macro is mal-formatted | |
CRC32 Implementation | |
● test #0: "" | |
● test #1: "The quick brown fox jumps over the lazy dog" | |
● test #2: "The quick brown fox jumps over the lazy dog." | |
● test #3: "hello" | |
● test #4: "world" | |
● test #5: "helloworld" | |
● test #6: "12345" | |
● test #7: "漢字" | |
● test #8: " spaces" | |
● test #9: "-_~c@@l~_-" | |
Events | |
AnalyticsEventType | |
● should match TRACKER_TYPES | |
ClickEventTracker | |
● should initalize, add listeners and dispose | |
● should require selector | |
● should add listener | |
● should add listener with default selection method | |
● should handle click on target | |
● should handle click on child | |
● should call multiple handlers | |
● should only stop on the first found target | |
● should expand data params | |
ScrollEventTracker | |
● should initalize, add listeners and dispose | |
● fires on scroll | |
● does not fire duplicates on scroll | |
● fails gracefully on bad scroll config | |
● normalizes boundaries correctly. | |
● fires events on normalized boundaries. | |
CustomEventTracker | |
● should initalize, add listeners and dispose | |
● should listen on custom events | |
● should support selector | |
● should differ custom event with same name different selector | |
● should buffer custom events early on | |
● should not not fire twice from observerable and buffer | |
● should buffer sandbox events in different list | |
● should keep sandbox buffer before handler is added | |
● should handle all events without duplicate trigger | |
AmpStoryEventTracker | |
● should initalize, add listeners, and dispose | |
● should listen on story events | |
● should buffer story events early on | |
● should not fire twice from observable and buffer | |
● should handle all events without duplicate trigger | |
● should fire event once when repeat option is false and event has not been fired before | |
● should not fire event when repeat option is false | |
● should fire event more than once when repeat option is absent | |
SignalTracker | |
● should initalize, add listeners and dispose | |
● should add doc listener | |
● should add root listener | |
● should add host listener equal to root | |
● should add target listener | |
IniLoadTracker | |
● should initalize, add listeners and dispose | |
● should add doc listener | |
● should add root listener | |
● should add host listener equal to root | |
● should add target listener | |
● should trigger via load-end as well | |
TimerEventTracker | |
● should initalize, add listeners and dispose | |
● should validate timerSpec | |
● timers start and stop by tracking different events | |
● timers started and stopped by the same event on the same target do not have race condition problems | |
● only fires when the timer interval exceeds the minimum | |
● fires on the appropriate interval | |
● stops firing after the maxTimerLength is exceeded | |
● should unlisten tracker | |
● should dispose all trackers | |
● should create events with timer vars | |
VisibilityTracker | |
● should initialize, add listeners and dispose | |
● should add doc listener | |
● should add root listener | |
● should add host listener and spec | |
● should add target listener | |
● should expand data params | |
● should pass func to get reportReady with "hidden" trigger | |
should wait on correct readyPromise | |
● with waitFor default value | |
● with waitFor NONE | |
● with waitFor INI_LOAD | |
● with waitFor RENDER_START | |
should create correct reportReadyPromise | |
● with viewer hidden | |
● with documentExit trigger on unload if pagehide is unsupported | |
● with documentExit trigger on pagehide | |
● with no trigger on unload if pagehide is supported | |
Unmeasurable with HostAPI | |
● element level selector is unmeasurable | |
● reportWhen documentExit is unmeasurable | |
iframe-transport-client | |
● fails to create iframeTransportClient if no window.name | |
● fails to create iframeTransportClient if window.name is missing sentinel | |
● fails to create iframeTransportClient if window.name is missing type | |
● sets sentinel from window.name.sentinel | |
● receives an event message | |
● requires onNewContextInstance | |
● calls onNewContextInstance | |
● Sets listener and baseMessage properly | |
● dispatches event | |
● sends response | |
ERROR: '[inabox-host] Error processing inabox message [object MessageEvent] TypeError: Cannot read property 'length' of undefined' | |
The test "amp-analytics.iframe-transport-message-queue is empty when first created " resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
amp-analytics.iframe-transport-message-queue | |
● is empty when first created | |
● is not ready until setIsReady() is called | |
● queues messages when not ready to send | |
● flushes the queue when ready to send | |
amp-analytics.iframe-transport | |
● creates one frame per vendor type | |
● enqueues event messages correctly | |
WARN: '[lru-cache] Trimming LRU cache' | |
● does not cause sentinel collisions | |
● correctly tracks usageCount and destroys iframes | |
● creates one PerformanceObserver per vendor type | |
● gets correct client lib URL in local/test mode | |
● gets correct client lib URL in prod mode | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[amp-analytics/iframe-transport] Long Task: Vendor: "some_other_vendor_type"' | |
The test "amp-analytics.iframe-transport logs poor performance of vendor iframe" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● logs poor performance of vendor iframe | |
InstrumentationService | |
● should create and dispose the ampdoc root | |
● should trigger a custom event on the ampdoc root | |
InstrumentationService in FIE | |
● should create and reuse embed root | |
● should create embed root for ampdoc-fie | |
Linker Manager | |
● registers anchor mutator if given valid linkers config | |
● does not register anchor mutator if no linkers config | |
● does not register anchor mutator if empty linkers config | |
INFO: '[amp-analytics/linker-manager] linker config for %s is not enabled and will be ignored.', 'testLinker1' | |
INFO: '[amp-analytics/linker-manager] linker config for %s is not enabled and will be ignored.', 'testLinker2' | |
● does not register anchor mutator if no linkers enabled | |
● does not register anchor mutator if not on proxy | |
● registers anchor mutator if not on proxy but proxyOnly=false | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should resolve vars and append to matching anchor | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should resolve element dependent vars and macros | |
● should not add params where linker value is empty | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should generate a param valid for ingestion 5 min later | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should respect proxyOnly config | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● proxyOnly should default to true | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should only add the linker param once | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
destination domains match | |
● should respect destinationDomains config | |
● should respect default destinationDomains config | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should accept wildcard domains | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should match all subdomain and w/o destinationDomains | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should match friendly domain as fallback | |
same domain matching | |
● should not add linker if same domain | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should add linker if subdomain is different but friendly | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should add linker if same domain is in destination domains | |
● should not add linker if href is fragment | |
● should not add linker if href is relative | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
when CID API enabled | |
● should add linker for Safari 12 | |
INFO: '[amp-analytics/linker-manager] linker config for %s is not enabled and will be ignored.', 'testLinker1' | |
● should only add one linker for auto opt-in | |
● should not add linker for not google analytics vendor | |
● should not add linker for Safari 11 | |
● should not add linker for Chrome | |
● should not add linker if experiment is off | |
form support | |
● should register the `beforeSubmit` callback | |
● should add hidden elements to form if not action-xhr | |
● if action-xhr and method=GET it should add linker-xhr attr | |
● if action-xhr and method=POST it should add linker-xhr attr | |
● should not add linker if no domain match | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should add multiple linker data to one form if not action-xhr | |
areFriendlyDomains | |
● should work | |
wildcard matching | |
● wildcard test: amp.foo.com, *.foo.com, true | |
● wildcard test: amp.foo.com.uk, *.foo.com, false | |
● wildcard test: amp.foo.com.uk, *.foo.com*, true | |
● wildcard test: foo.com, *.foo.com, false | |
● wildcard test: amp.foo.com, *.foo.co*, true | |
● wildcard test: me.foo.co.uk, *.foo.co*, true | |
● wildcard test: a.b.foo.com, *.foo.co*, true | |
LinkerReader | |
LinkerReader Service | |
● return null when no params | |
WARN: '[lru-cache] Trimming LRU cache' | |
● return null when no linker name | |
WARN: '[lru-cache] Trimming LRU cache' | |
● return null when linker name value is invalid | |
● return null when no linker id value | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● remove linker_param from url | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● return correct id value | |
WARN: '[lru-cache] Trimming LRU cache' | |
● returns same value when reading the same id | |
Linker | |
createLinker | |
● returns empty string if no pairs given | |
● returns empty string if pairs=null | |
● returns empty string if pairs=undefined | |
● generates param with checksum and version | |
● appends one key value pair | |
● appends many key value pairs | |
● encodes URL unsafe chars in values | |
● encodes * in values | |
● encodes unicode in values | |
● allows base64 chars in keys | |
● ignores invalid keys | |
● returns empty string if all keys are invalid | |
● works for Google Analytics generated Client ID | |
● works for AMP CID API generated Client ID | |
● works for AMP Viewer generated Client ID | |
parseLinker | |
● invalid value miss component | |
● invalid value miss value | |
● invalid value unsupported version number | |
● invalid keys value | |
● invalid value checksum not correct | |
● tolerate checksum with one minute offset | |
● works with multiple key value pairs | |
● decode URL correctly | |
● decodes * in values | |
● decodes unicode in values | |
● decodes base64 chars in keys | |
getMinOpacity | |
● amp element opacity value change | |
● amp element's parent opacity value lower than amp element | |
WARN: '[lru-cache] Trimming LRU cache' | |
Requests | |
● should replace dynamic bindings RESOURCE_TIMING | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace dynamic bindings CONSENT_STATE | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● COOKIE read cookie value | |
WARN: '[lru-cache] Trimming LRU cache' | |
RequestHandler | |
send with request origin | |
● should prepend request origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● handle trailing slash in request origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● handle trailing path in request origin | |
● handle empty requestOrigin | |
● handle undefined requestOrigin | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● handle baseUrl with no leading slash | |
WARN: '[lru-cache] Trimming LRU cache' | |
● prepend request origin to absolute baseUrl | |
WARN: '[lru-cache] Trimming LRU cache' | |
● handle relative request origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should expand request origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should expand nested request origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
batch | |
● should batch multiple send | |
● should work properly with no batch | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should preconnect | |
batch with batchInterval | |
● should support number | |
● should support array | |
ERROR: 'Invalid batchInterval value: invalid' | |
The test "Requests RequestHandler batch with batchInterval should check batchInterval is valid" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Invalid batchInterval value: invalid' | |
The test "Requests RequestHandler batch with batchInterval should check batchInterval is valid" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Invalid batchInterval value: 0.01 , interval value must be greater than 200 ms.' | |
The test "Requests RequestHandler batch with batchInterval should check batchInterval is valid" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Invalid batchInterval value: -1,5 , interval value must be greater than 200 ms.' | |
The test "Requests RequestHandler batch with batchInterval should check batchInterval is valid" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: 'Invalid batchInterval value: 1000,0.01 , interval value must be greater than 200 ms.' | |
The test "Requests RequestHandler batch with batchInterval should check batchInterval is valid" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should check batchInterval is valid | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should schedule send request with interval array | |
● should not schedule send request w/o trigger | |
● should schedule send independent of trigger immediate | |
reportWindow | |
● should accept reportWindow with number | |
● should stop bathInterval outside batch report window | |
● should stop send request outside batch report window | |
● should flush batch queue after batch report window | |
● should respect immediate trigger | |
batch segments | |
● should respect config extraUrlParam | |
● should respect trigger extraUrlParam | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should keep extraUrlParam | |
batch plugin | |
● should throw error when defined on non batched request | |
● should throw error with unsupported batchPlugin | |
expandPostMessage | |
● should expand | |
● should replace not append ${extraUrlParams} | |
resourceTiming | |
● should return empty if the performance API is not supported | |
● should return empty when resource timing is not supported | |
● should return empty when start time has passed 1s | |
WARN: '[ANALYTICS] resourceTimingSpec missing "resources" field' | |
● should return empty if resourceTimingSpec is empty | |
WARN: '[ANALYTICS] resourceTimingSpec is missing or has incomplete encoding options' | |
● should return empty if encoding spec is empty | |
WARN: '[ANALYTICS] resourceTimingSpec is missing or has incomplete encoding options' | |
● should return empty if encoding spec is missing delim | |
WARN: '[ANALYTICS] resourceTimingSpec is missing or has incomplete encoding options' | |
● should return empty if encoding spec is missing entry | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should serialize matching entries | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should serialize multiple matching entries | |
● should match against the first spec | |
● should accept empty per-resource specs | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should should only report resources if the host matches | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should should only report resources if the path matches | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should should only report resources if the query matches | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace ${key} and ${initiatorType} | |
● should replace ${startTime} and ${duration} | |
● should replace ${domainLookupTime} and ${tcpConnectTime} | |
● should replace ${serverResponseTime} and ${networkTransferTime} | |
● should replace ${transferSize}, ${encodedBodySize}, ${decodedBodySize} | |
● should use the base specified in encoding | |
WARN: '[ANALYTICS] resource timing variables only supports bases between 2 and 36' | |
● should reject invalid bases (over 36) | |
● should not replace other analytics variables | |
● should URL-encode the results | |
● should only include resources downloaded after `responseAfter` | |
WARN: '[ANALYTICS] resourceTimingSpec["responseAfter"] must be a number' | |
● should reject invalid (non-numeric) responseAfter fields | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should update responseAfter | |
● should not update responseAfter if greater | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should stop reporting after reaching the buffer limit | |
● should not report if resourceTimingSpec is done | |
ScrollManager | |
● should initalize, add listeners and dispose | |
● should add a viewport onChanged listener with scroll handlers, and dispose when there are none | |
● fires on scroll | |
● can remove specifc handlers | |
Transport serializers | |
● TransportSerializers sort in alphabetic order | |
Default tests for every serializer | |
● should handle empty batchSegment array | |
● should handler extraUrlParams with value null | |
● should properly encode segments | |
● should return a string | |
custom test | |
● has custom test | |
● run custom test | |
WARN: '[lru-cache] Trimming LRU cache' | |
amp-analytics.transport | |
● prefers beacon over xhrpost and image | |
● prefers xhrpost over image | |
● reluctantly uses image if nothing else is enabled | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test' | |
● falls back to image setting suppressWarnings to true | |
● falls back to image setting referrerPolicy | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test' | |
● falls back to xhrpost when enabled and beacon is not available | |
● falls back to image when beacon not found and xhr disabled | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test' | |
● falls back to image when beacon and xhr are not available | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://example.test/test' | |
WARN: '[amp-analytics/transport] Failed to send request', 'https://example.test/test', Object{} | |
● does not send a request when no transport methods are enabled | |
INFO: '[amp-analytics/transport] Empty request not sent: ', '' | |
● does not send a request when URL is empty | |
WARN: '[lru-cache] Trimming LRU cache' | |
● send single segment request | |
● send single segment request in batch | |
WARN: '[lru-cache] Trimming LRU cache' | |
● send single segment request useBody | |
● send single segment request useBody in batch | |
● send multi-segment request w/o batch (only 1st sent) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● send multi-segment request in batch | |
● send multi-segment request useBody in batch | |
● asserts that urls are https | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should NOT allow __amp_source_origin | |
WARN: '[lru-cache] Trimming LRU cache' | |
sendRequestUsingIframe | |
● should create and delete an iframe | |
● iframe asserts that urls are https | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● forbids same origin | |
iframe transport | |
● does not initialize transport iframe if not used | |
WARN: '[lru-cache] Trimming LRU cache' | |
● initialize iframe transport when used | |
● initialize iframe transport when used with inabox | |
WARN: '[lru-cache] Trimming LRU cache' | |
● send via iframe transport | |
amp-analytics.VariableService | |
encodeVars | |
● correctly encodes scalars and arrays | |
expand | |
● expands nested vars (encode once) | |
● expands nested vars (no encode) | |
● expands complicated string | |
● expands zeros | |
● drops unknown vars | |
● does not expand macros | |
● does not handle nested macros using ${} syntax | |
● supports macro args | |
● respect freeze variables | |
● expands array vars | |
● handles array with no vars | |
● handles empty var name | |
should handle recursive vars | |
● default to 2 recursions | |
● customize recursions to 5 | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
macros | |
● handles consecutive macros in inner arguments | |
WARN: '[lru-cache] Trimming LRU cache' | |
● handles consecutive macros w/o parens in inner arguments | |
WARN: '[lru-cache] Trimming LRU cache' | |
● handles string + macro as inner argument | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should not trim right of string before macro | |
WARN: '[lru-cache] Trimming LRU cache' | |
● default works without first arg | |
● default works without first arg length | |
WARN: '[lru-cache] Trimming LRU cache' | |
● hash works | |
WARN: '[lru-cache] Trimming LRU cache' | |
● substr works | |
WARN: '[lru-cache] Trimming LRU cache' | |
● substr works with number as input | |
WARN: '[lru-cache] Trimming LRU cache' | |
● trim works | |
WARN: '[lru-cache] Trimming LRU cache' | |
● toLowerCase works | |
WARN: '[lru-cache] Trimming LRU cache' | |
● toUpperCase works | |
WARN: '[lru-cache] Trimming LRU cache' | |
● not works (truth-y value) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● not works (false-y value) | |
WARN: '[lru-cache] Trimming LRU cache' | |
● base64 works | |
WARN: '[lru-cache] Trimming LRU cache' | |
● if works with true | |
● if works with other string | |
WARN: '[lru-cache] Trimming LRU cache' | |
● if works with false | |
● if works with empty string | |
● if works with null | |
● if works with undefined | |
● equals works (truth-y test) | |
● equals works (false-y test) | |
● equals works with if (truth-y test) | |
● equals works with if (false-y test) | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● chaining works | |
WARN: '[lru-cache] Trimming LRU cache' | |
● replaces common use case | |
WARN: '[lru-cache] Trimming LRU cache' | |
● replaces three args | |
WARN: '[lru-cache] Trimming LRU cache' | |
● replaces backticks optional | |
WARN: '[lru-cache] Trimming LRU cache' | |
● replaces not trimming spaces in backticks | |
WARN: '[lru-cache] Trimming LRU cache' | |
● replaces respecting space as arg | |
● replaces respecting backticks | |
● replace with no third arg | |
WARN: '[lru-cache] Trimming LRU cache' | |
● replaces LINKER_PARAM | |
WARN: '[lru-cache] Trimming LRU cache' | |
● "COOKIE" resolves cookie value | |
● COOKIE resolves to empty string in FIE | |
● COOKIE resolves to empty string when inabox | |
WARN: '[lru-cache] Trimming LRU cache' | |
● COOKIE resolves to empty string on cache | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace SCROLL_TOP | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace SCROLL_LEFT | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should replace FIRST_CONTENTFUL_PAINT | |
● should replace FIRST_VIEWPORT_READY | |
● should replace MAKE_BODY_VISIBLE | |
$MATCH | |
● handles default index | |
● matches full match | |
WARN: '[lru-cache] Trimming LRU cache' | |
● matches partial match | |
● matches 1st group match | |
● matches 2nd group match | |
● does not match non-matching group | |
● handles escaped regex chars | |
● handles no full match | |
● handles no group match | |
● handles large index | |
● handles negative index | |
● handles NaN index | |
getNameArgs: | |
● can parse abc | |
● can parse client id | |
● can parse client id() | |
● can parse client id (abc) | |
● can parse client id | |
and something | |
● can parse client id | |
clientId() | |
● can parse clientId | |
● can parse clientId | |
● can parse clientId | |
● can parse clientId | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
Should not contain iframe transport if not whitelisted | |
● test vendor: acquialift | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: adobeanalytics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: afsanalytics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: alexametrics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: amplitude | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: atinternet | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: baiduanalytics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: burt | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: byside | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: captainmetrics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: chartbeat | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: clicky | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: colanalytics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: comscore | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: cxense | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: deepbi | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: dynatrace | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: epica | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: euleriananalytics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: facebookpixel | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: gemius | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: googleadwords | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: googleanalytics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: gtag | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: ibeatanalytics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: infonline | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: iplabel | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: keen | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: kenshoo | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: krux | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: linkpulse | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: lotame | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: marinsoftware | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: mediametrie | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: mediarithmics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: mediator | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: memo | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: metrika | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: moat | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: mobify | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: mparticle | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: mpulse | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: navegg | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: newrelic | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: nielsen | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: nielsen-marketing-cloud | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: oewa | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: oewadirect | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: oracleInfinityAnalytics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: parsely | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: permutive | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: piStats | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: piano | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: pinpoll | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: pressboard | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: subscriptions-propensity | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: quantcast | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: rakam | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: reppublika | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: retargetly | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: segment | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: shinystat | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: simplereach | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: snowplow | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: snowplow_v2 | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: teaanalytics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: tealiumcollect | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: top100 | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: topmailru | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: treasuredata | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: umenganalytics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: upscore | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: vponanalytics | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: webengage | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: webtrekk | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● test vendor: webtrekk_v2 | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://us-east-1-decisionapi.lift.acquia.com/capture?account_id=xxxxxxxx&site_id=xxxxxxxx&ident=_client_id(tc_ptid)_&identsrc=amp&es=Amp&url=_canonical_url_&rurl=_document_referrer_&cttl=_title_&en=Content View' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://us-east-1-decisionapi.lift.acquia.com/capture?account_id=xxxxxxxx&site_id=xxxxxxxx' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://us-east-1-decisionapi.lift.acquia.com/capture?account_id=xxxxxxxx&site_id=xxxxxxxx&ident=_client_id(tc_ptid)_&identsrc=amp&es=Amp&url=_canonical_url_&rurl=_document_referrer_&cttl=_title_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://us-east-1-decisionapi.lift.acquia.com/capture?account_id=xxxxxxxx&site_id=xxxxxxxx&ident=_client_id(tc_ptid)_&identsrc=amp&es=Amp&url=_canonical_url_&rurl=_document_referrer_&cttl=_title_&en=Content View' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://us-east-1-decisionapi.lift.acquia.com/capture?account_id=xxxxxxxx&site_id=xxxxxxxx&ident=_client_id(tc_ptid)_&identsrc=amp&es=Amp&url=_canonical_url_&rurl=_document_referrer_&cttl=_title_&en=Click-Through' | |
vendor request tests | |
analytics vendor: acquialift | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: adobeanalytics test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/b/ss/!reportSuites/0/amp-1.0/s_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'vid=z_client_id(adobe_amp_id)_&ndh=0&ce=_document_charset_&pageName=_title_&g=_ampdoc_url_&r=_document_referrer_&bh=_available_screen_height_&bw=_available_screen_width_&c=_screen_color_depth_&j=amp&s=_screen_width_x_screen_height_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!host/b/ss/!reportSuites/0/amp-1.0/s_random_?vid=z_client_id(adobe_amp_id)_&ndh=0&ce=_document_charset_&pageName=_title_&g=_ampdoc_url_&r=_document_referrer_&bh=_available_screen_height_&bw=_available_screen_width_&c=_screen_color_depth_&j=amp&s=_screen_width_x_screen_height_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!host/b/ss/!reportSuites/0/amp-1.0/s_random_?vid=z_client_id(adobe_amp_id)_&ndh=0&ce=_document_charset_&pageName=_title_&g=_ampdoc_url_&r=_document_referrer_&bh=_available_screen_height_&bw=_available_screen_width_&c=_screen_color_depth_&j=amp&s=_screen_width_x_screen_height_&pe=lnk_o&pev1=!linkUrl&pev2=!linkName' | |
analytics vendor: adobeanalytics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//www.afsanalytics.com/cgi_bin/connect.cgi?usr=xxxxxxxxPauto&js=1&=1&title=_title_&url=_canonical_url_&refer=_document_referrer_&resolution=_screen_width_x_screen_height_&color=_screen_color_depth_&Tips=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//www.afsanalytics.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//www.afsanalytics.com/cgi_bin/' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//www.afsanalytics.com/cgi_bin/connect.cgi?usr=xxxxxxxxPauto&js=1&=1&title=_title_&url=_canonical_url_&refer=_document_referrer_&resolution=_screen_width_x_screen_height_&color=_screen_color_depth_&Tips=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//www.afsanalytics.com/cgi_bin/click.cgi?usr=xxxxxxxx&event=click&exit=clicked%20from%20AMP%20page' | |
analytics vendor: afsanalytics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://certify-amp.alexametrics.com/atrk.gif?account=!atrk_acct&domain=!domain&jsv=amp-_amp_version_&frame_height=_viewport_height_&frame_width=_viewport_width_&title=_title_&time=_timestamp_&time_zone_offset=_timezone_&screen_params=_screen_width_x_screen_height_x_screen_color_depth_&ref_url=_document_referrer_&host_url=_source_url_&random_number=_random_&user_cookie=_client_id(__auc)_&user_cookie_flag=0&user_lang=_browser_language_&_doc_url=_ampdoc_url_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://certify-amp.alexametrics.com/atrk.gif?account=!atrk_acct&domain=!domain' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://certify-amp.alexametrics.com/atrk.gif?account=!atrk_acct&domain=!domain&jsv=amp-_amp_version_&frame_height=_viewport_height_&frame_width=_viewport_width_&title=_title_&time=_timestamp_&time_zone_offset=_timezone_&screen_params=_screen_width_x_screen_height_x_screen_color_depth_&ref_url=_document_referrer_&host_url=_source_url_&random_number=_random_&user_cookie=_client_id(__auc)_&user_cookie_flag=0&user_lang=_browser_language_&_doc_url=_ampdoc_url_' | |
analytics vendor: alexametrics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: amplitude test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
INFO: '[amp-analytics/linker-manager] linker config for %s is not enabled and will be ignored.', 'amplitude' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.amplitude.com?api_key=!apiKey&device_id=_client_id(amplitude_amp_id)_&library=amp%2F_amp_version_&time=_timestamp_&language=_browser_language_&user_agent=_user_agent_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.amplitude.com/amp/event?api_key=!apiKey&device_id=_client_id(amplitude_amp_id)_&library=amp%2F_amp_version_&time=_timestamp_&language=_browser_language_&user_agent=_user_agent_' | |
analytics vendor: amplitude | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: atinternet test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!log.xiti.com/hit.xiti?s=!site&ts=_timestamp_&r=_screen_width_x_screen_height_x_screen_color_depth_&re=_available_screen_width_x_available_screen_height_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&medium=amp&&ref=_document_referrer_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!log.xiti.com/hit.xiti?s=!site&ts=_timestamp_&r=_screen_width_x_screen_height_x_screen_color_depth_&re=_available_screen_width_x_available_screen_height_&p=_title_&s2=!level2&medium=amp&&ref=_document_referrer_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!log.xiti.com/hit.xiti?s=!site&ts=_timestamp_&r=_screen_width_x_screen_height_x_screen_color_depth_&re=_available_screen_width_x_available_screen_height_&pclick=_title_&s2click=!level2&p=!label&s2=!level2Click&type=click&click=!type&medium=amp&&ref=_document_referrer_' | |
analytics vendor: atinternet | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: baiduanalytics test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hm.baidu.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hm.baidu.com/hm.gif?si=!token&nv=0&st=4&v=pixel-1.0&rnd=_timestamp_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hm.baidu.com/hm.gif?si=!token&nv=0&st=4&v=pixel-1.0&rnd=_timestamp_&et=0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hm.baidu.com/hm.gif?si=!token&nv=0&st=4&v=pixel-1.0&rnd=_timestamp_&ep=!category*!action*!label*!value&et=4&api=8_0' | |
analytics vendor: baiduanalytics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//ignore.c.richmetrics.com/imglog?e=ignore&pi=ignore|_page_view_id_|_canonical_path_|_client_id(burt-amp-user-id)_&ui=_client_id(burt-amp-user-id)_&v=amp&ts=_timestamp_&sn=1&type=pageping' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//ignore.c.richmetrics.com/imglog?e=ignore&pi=ignore|_page_view_id_|_canonical_path_|_client_id(burt-amp-user-id)_&ui=_client_id(burt-amp-user-id)_&v=amp&ts=_timestamp_&sn=2&type=page&ca=!category&sc=!subCategory&ln=_browser_language_&lr=_document_referrer_&eu=_source_url_&tz=_timezone_&pd=_scroll_width_x_scroll_height_&sd=_screen_width_x_screen_height_&wd=_available_screen_width_x_available_screen_height_&ws=_scroll_left_x_scroll_top_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//ignore.c.richmetrics.com/' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//ignore.c.richmetrics.com/imglog?e=ignore&pi=ignore|_page_view_id_|_canonical_path_|_client_id(burt-amp-user-id)_&ui=_client_id(burt-amp-user-id)_&v=amp&ts=_timestamp_&sn=1&' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//ignore.c.richmetrics.com/imglog?e=ignore&pi=ignore|_page_view_id_|_canonical_path_|_client_id(burt-amp-user-id)_&ui=_client_id(burt-amp-user-id)_&v=amp&ts=_timestamp_&sn=1&type=page&ca=!category&sc=!subCategory&ln=_browser_language_&lr=_document_referrer_&eu=_source_url_&tz=_timezone_&pd=_scroll_width_x_scroll_height_&sd=_screen_width_x_screen_height_&wd=_available_screen_width_x_available_screen_height_&ws=_scroll_left_x_scroll_top_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//ignore.c.richmetrics.com/imglog?e=ignore&pi=ignore|_page_view_id_|_canonical_path_|_client_id(burt-amp-user-id)_&ui=_client_id(burt-amp-user-id)_&v=amp&ts=_timestamp_&sn=1&type=pageping' | |
analytics vendor: burt | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//webcare.byside.com/BWA!webcareId/amp/pixel.php?webcare_id=!webcareId&bwch=!channel&lang=pt&fid=!fid&bwit=A&tuid=_client_id(byside_webcare_tuid)_&suid=&puid=_page_view_id_p_timestamp_&referrer=_document_referrer_&page=_source_url_&page=_ampdoc_url_&bwpt=_title_&bres=_viewport_width_x_viewport_height_&res=_screen_width_x_screen_height_&v=v20171116a&v=_amp_version_&viewer=_viewer_&ua=_user_agent_&r=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//webcare.byside.com/?webcare_id=!webcareId&bwch=!channel&lang=pt&fid=!fid&bwit=A&tuid=_client_id(byside_webcare_tuid)_&suid=&puid=_page_view_id_p_timestamp_&referrer=_document_referrer_&page=_source_url_&page=_ampdoc_url_&bwpt=_title_&bres=_viewport_width_x_viewport_height_&res=_screen_width_x_screen_height_&v=v20171116a&v=_amp_version_&viewer=_viewer_&ua=_user_agent_&r=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//webcare.byside.com/BWA!webcareId/amp/?webcare_id=!webcareId&bwch=!channel&lang=pt&fid=!fid&bwit=A&tuid=_client_id(byside_webcare_tuid)_&suid=&puid=_page_view_id_p_timestamp_&referrer=_document_referrer_&page=_source_url_&page=_ampdoc_url_&bwpt=_title_&bres=_viewport_width_x_viewport_height_&res=_screen_width_x_screen_height_&v=v20171116a&v=_amp_version_&viewer=_viewer_&ua=_user_agent_&r=_random_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//webcare.byside.com/BWA!webcareId/amp/pixel.php?webcare_id=!webcareId&bwch=!channel&lang=pt&fid=!fid&bwit=A&tuid=_client_id(byside_webcare_tuid)_&suid=&puid=_page_view_id_p_timestamp_&referrer=_document_referrer_&page=_source_url_&page=_ampdoc_url_&bwpt=_title_&bres=_viewport_width_x_viewport_height_&res=_screen_width_x_screen_height_&v=v20171116a&v=_amp_version_&viewer=_viewer_&ua=_user_agent_&r=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//webcare.byside.com/BWA!webcareId/amp/signal.php?event_id=!eventId&event_label=!eventLabel&fields=!fields&webcare_id=!webcareId&bwch=!channel&lang=pt&fid=!fid&bwit=A&tuid=_client_id(byside_webcare_tuid)_&suid=&puid=_page_view_id_p_timestamp_&referrer=_document_referrer_&page=_source_url_&page=_ampdoc_url_&bwpt=_title_&bres=_viewport_width_x_viewport_height_&res=_screen_width_x_screen_height_&v=v20171116a&v=_amp_version_&viewer=_viewer_&ua=_user_agent_&r=_random_' | |
analytics vendor: byside | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: captainmetrics test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://photon.captainmetrics.com/amp/?cId=_client_id(_cm_cid)_&sId=_hash(_page_view_id__client_id(_cm_cid)_)_&ts=_timestamp_&rand=_random_&pId=!projectId&V=_amp_version_&v=1&lang=_browser_language_&ua=_user_agent_&res=_screen_height_x_screen_width_&aRes=_available_screen_height_x_available_screen_width_&off=_timezone_&tz=_timezone_code_&lp=_source_url_&ref=_external_referrer_&Ref=_ampdoc_url_&pageId=_page_view_id_' | |
analytics vendor: captainmetrics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ping.chartbeat.net/ping?h=!domain&p=_canonical_path_&u=_client_id(_cb)_&d=_canonical_host_&g=!uid&g0=!sections&g1=!authors&g2=!zone&g3=!sponsorName&g4=!contentType&c=!totalTime&x=_scroll_top_&m=!maxScrollDepth&y=_scroll_height_&o=_scroll_width_&w=_viewport_height_&j=30&R=1&W=0&I=0&E=_total_engaged_time_&r=_document_referrer_&t=_page_view_id__client_id(_cb)_&b=_page_load_time_&i=_title_&T=_timestamp_&tz=_timezone_&sn=1&C=2&_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ping.chartbeat.net' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/ping?h=!domain&p=_canonical_path_&u=_client_id(_cb)_&d=_canonical_host_&g=!uid&g0=!sections&g1=!authors&g2=!zone&g3=!sponsorName&g4=!contentType&c=!totalTime&x=_scroll_top_&m=!maxScrollDepth&y=_scroll_height_&o=_scroll_width_&w=_viewport_height_&j=!decayTime&R=1&W=0&I=0&E=_total_engaged_time_&r=_document_referrer_&t=_page_view_id__client_id(_cb)_&b=_page_load_time_&i=_title_&T=_timestamp_&tz=_timezone_&sn=1&C=2' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ping.chartbeat.net/ping?h=!domain&p=_canonical_path_&u=_client_id(_cb)_&d=_canonical_host_&g=!uid&g0=!sections&g1=!authors&g2=!zone&g3=!sponsorName&g4=!contentType&c=!totalTime&x=_scroll_top_&m=!maxScrollDepth&y=_scroll_height_&o=_scroll_width_&w=_viewport_height_&j=!decayTime&R=1&W=0&I=0&E=_total_engaged_time_&r=_document_referrer_&t=_page_view_id__client_id(_cb)_&b=_page_load_time_&i=_title_&T=_timestamp_&tz=_timezone_&sn=1&C=2&_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ping.chartbeat.net/ping?h=!domain&p=_canonical_path_&u=_client_id(_cb)_&d=_canonical_host_&g=!uid&g0=!sections&g1=!authors&g2=!zone&g3=!sponsorName&g4=!contentType&c=!totalTime&x=_scroll_top_&m=!maxScrollDepth&y=_scroll_height_&o=_scroll_width_&w=_viewport_height_&j=!decayTime&R=1&W=0&I=0&E=_total_engaged_time_&r=_document_referrer_&t=_page_view_id__client_id(_cb)_&b=_page_load_time_&i=_title_&T=_timestamp_&tz=_timezone_&sn=1&C=2&_' | |
analytics vendor: chartbeat | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://in.getclicky.com/in.php?site_id=!site_id&type=ping&mime=!contentType&x=_random_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://in.getclicky.com/in.php?site_id=!site_id&res=_screen_width_x_screen_height_&lang=_browser_language_&secure=1&type=pageview&href=_canonical_path_&title=_title_&mime=!contentType&x=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://in.getclicky.com/in.php?site_id=!site_id' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&mime=!contentType&x=_random_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://in.getclicky.com/in.php?site_id=!site_id&res=_screen_width_x_screen_height_&lang=_browser_language_&secure=1&type=pageview&href=_canonical_path_&title=_title_&mime=!contentType&x=_random_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://in.getclicky.com/in.php?site_id=!site_id&type=ping&mime=!contentType&x=_random_' | |
analytics vendor: clicky | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ase.clmbtech.com/message?cid=!id&val_101=!id&val_101=_canonical_path_&ch=_canonical_host_&uuid=!uid&au=!authors&zo=!zone&sn=!sponsorName&ct=!contentType&st=_scroll_top_&sh=_scroll_height_&dct=!decayTime&tet=_total_engaged_time_&dr=_document_referrer_&plt=_page_load_time_&val_108=_title_&val_120=3' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ase.clmbtech.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ase.clmbtech.com/message' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ase.clmbtech.com/message?cid=!id&val_101=!id&val_101=_canonical_path_&ch=_canonical_host_&uuid=!uid&au=!authors&zo=!zone&sn=!sponsorName&ct=!contentType&st=_scroll_top_&sh=_scroll_height_&dct=!decayTime&tet=_total_engaged_time_&dr=_document_referrer_&plt=_page_load_time_&val_108=_title_&val_120=3' | |
analytics vendor: colanalytics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://sb.scorecardresearch.com/b?c1=2&c2=1000001&cs_ucfr=_if(_equals(_consent_state_%2Csufficient)_%2C1)__if(_equals(_consent_state_%2Cinsufficient)_%2C0)__if(_equals(_consent_state_%2C)_%2C)_&cs_amp_consent=_consent_state_&cs_pv=_page_view_id_&c12=_client_id(comScore)_&rn=_random_&c8=_title_&c7=_canonical_url_&c9=_document_referrer_&cs_c7amp=_ampdoc_url_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://sb.scorecardresearch.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://sb.scorecardresearch.com/b?' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://sb.scorecardresearch.com/b?c1=2&c2=1000001&cs_ucfr=_if(_equals(_consent_state_%2Csufficient)_%2C1)__if(_equals(_consent_state_%2Cinsufficient)_%2C0)__if(_equals(_consent_state_%2C)_%2C)_&cs_amp_consent=_consent_state_&cs_pv=_page_view_id_&c12=_client_id(comScore)_&rn=_random_&c8=_title_&c7=_canonical_url_&c9=_document_referrer_&cs_c7amp=_ampdoc_url_' | |
analytics vendor: comscore | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://scomcluster.cxense.com/Repo/rep.gif?ver=1&typ=pgv&sid=!siteId&ckp=_client_id(cX_P)_&loc=_source_url_&rnd=_random_&ref=_document_referrer_<m=_timestamp_&wsz=_screen_width_x_screen_height_&bln=_browser_language_&chs=_document_charset_&col=_screen_color_depth_&tzo=_timezone_&cp_cx_channel=amp' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://scomcluster.cxense.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://scomcluster.cxense.com/Repo/rep.gif' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://scomcluster.cxense.com/Repo/rep.gif?ver=1&typ=pgv&sid=!siteId&ckp=_client_id(cX_P)_&loc=_source_url_&rnd=_random_&ref=_document_referrer_<m=_timestamp_&wsz=_screen_width_x_screen_height_&bln=_browser_language_&chs=_document_charset_&col=_screen_color_depth_&tzo=_timezone_&cp_cx_channel=amp' | |
analytics vendor: cxense | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.deep.bi/v1/pixel/!datasetKey/p.gif?accessKey=!accessKey&gdpr=true&page_href=_source_url_&referrer_href=_document_referrer_&page_title=_title_&=true&event_type=page-open' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.deep.bi/v1/pixel/!datasetKey/p.gif?accessKey=!accessKey&gdpr=true&page_href=_source_url_&referrer_href=_document_referrer_&page_title=_title_&=true' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.deep.bi/v1/pixel/!datasetKey/p.gif?accessKey=!accessKey&gdpr=true&page_href=_source_url_&referrer_href=_document_referrer_&page_title=_title_&=true&event_type=page-open' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.deep.bi/v1/pixel/!datasetKey/p.gif?accessKey=!accessKey&gdpr=true&page_href=_source_url_&referrer_href=_document_referrer_&page_title=_title_&=true&event_type=event' | |
analytics vendor: deepbi | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!tenant.live.dynatrace.com:443/ampbf/!tenantpath?type=js&flavor=amp&v=1&a=1%7C1%7C_load_%7C_load_%7C-%7C_nav_timing(navigationStart)_%7C_nav_timing(domContentLoadedEventEnd)_%7C0%2C2%7C2%7C_onload_%7C_load_%7C-%7C_nav_timing(domContentLoadedEventStart)_%7C_nav_timing(domContentLoadedEventEnd)_%7C0&fId=_page_view_id_&vID=_client_id(rxVisitor)_&url=_source_url_&title=_title_&sw=_screen_width_&sh=_screen_height_&w=_viewport_width_&h=_viewport_height_&nt=a_nav_type_b_nav_timing(navigationStart)_c_nav_timing(navigationStart%2CredirectStart)_d_nav_timing(navigationStart%2CredirectEnd)_e_nav_timing(navigationStart%2CfetchStart)_f_nav_timing(navigationStart%2CdomainLookupStart)_g_nav_timing(navigationStart%2CdomainLookupEnd)_h_nav_timing(navigationStart%2CconnectStart)_i_nav_timing(navigationStart%2CconnectEnd)_j_nav_timing(navigationStart%2CsecureConnectionStart)_k_nav_timing(navigationStart%2CrequestStart)_l_nav_timing(navigationStart%2CresponseStart)_m_nav_timing(navigationStart%2CresponseEnd)_n_nav_timing(navigationStart%2CdomLoading)_o_nav_timing(navigationStart%2CdomInteractive)_p_nav_timing(navigationStart%2CdomContentLoadedEventStart)_q_nav_timing(navigationStart%2CdomContentLoadedEventEnd)_r_nav_timing(navigationStart%2CdomComplete)_s_nav_timing(navigationStart%2CloadEventStart)_t_nav_timing(navigationStart%2CloadEventEnd)_&app=ampapp&time=_timestamp_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!tenant.live.dynatrace.com:443/ampbf/!tenantpath' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!tenant.live.dynatrace.com:443/ampbf/!tenantpath?type=js&flavor=amp&v=1&a=1%7C1%7C_load_%7C_load_%7C-%7C_nav_timing(navigationStart)_%7C_nav_timing(domContentLoadedEventEnd)_%7C0%2C2%7C2%7C_onload_%7C_load_%7C-%7C_nav_timing(domContentLoadedEventStart)_%7C_nav_timing(domContentLoadedEventEnd)_%7C0&fId=_page_view_id_&vID=_client_id(rxVisitor)_&url=_source_url_&title=_title_&sw=_screen_width_&sh=_screen_height_&w=_viewport_width_&h=_viewport_height_&nt=a_nav_type_b_nav_timing(navigationStart)_c_nav_timing(navigationStart%2CredirectStart)_d_nav_timing(navigationStart%2CredirectEnd)_e_nav_timing(navigationStart%2CfetchStart)_f_nav_timing(navigationStart%2CdomainLookupStart)_g_nav_timing(navigationStart%2CdomainLookupEnd)_h_nav_timing(navigationStart%2CconnectStart)_i_nav_timing(navigationStart%2CconnectEnd)_j_nav_timing(navigationStart%2CsecureConnectionStart)_k_nav_timing(navigationStart%2CrequestStart)_l_nav_timing(navigationStart%2CresponseStart)_m_nav_timing(navigationStart%2CresponseEnd)_n_nav_timing(navigationStart%2CdomLoading)_o_nav_timing(navigationStart%2CdomInteractive)_p_nav_timing(navigationStart%2CdomContentLoadedEventStart)_q_nav_timing(navigationStart%2CdomContentLoadedEventEnd)_r_nav_timing(navigationStart%2CdomComplete)_s_nav_timing(navigationStart%2CloadEventStart)_t_nav_timing(navigationStart%2CloadEventEnd)_&app=ampapp&time=_timestamp_' | |
analytics vendor: dynatrace | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://cat.poder.io/api/v1/pixel/page?writeKey=!writeKey&context.library.name=amp&anonymousId=_client_id(epica_amp_id)_&context.locale=_browser_language_&context.page.path=_canonical_path_&context.page.url=_canonical_url_&context.page.referrer=_document_referrer_&context.page.title=_title_&context.screen.width=_screen_width_&context.screen.height=_screen_height_&name=!name' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://cat.poder.io/api/v1/pixel' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '?writeKey=!writeKey&context.library.name=amp&anonymousId=_client_id(epica_amp_id)_&context.locale=_browser_language_&context.page.path=_canonical_path_&context.page.url=_canonical_url_&context.page.referrer=_document_referrer_&context.page.title=_title_&context.screen.width=_screen_width_&context.screen.height=_screen_height_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://cat.poder.io/api/v1/pixel/page?writeKey=!writeKey&context.library.name=amp&anonymousId=_client_id(epica_amp_id)_&context.locale=_browser_language_&context.page.path=_canonical_path_&context.page.url=_canonical_url_&context.page.referrer=_document_referrer_&context.page.title=_title_&context.screen.width=_screen_width_&context.screen.height=_screen_height_&name=!name' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://cat.poder.io/api/v1/pixel/track?writeKey=!writeKey&context.library.name=amp&anonymousId=_client_id(epica_amp_id)_&context.locale=_browser_language_&context.page.path=_canonical_path_&context.page.url=_canonical_url_&context.page.referrer=_document_referrer_&context.page.title=_title_&context.screen.width=_screen_width_&context.screen.height=_screen_height_&event=!event' | |
analytics vendor: epica | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: euleriananalytics test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!analyticsHost' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '-/_random_?euid-amp=_client_id(etuix)_&url=_source_url_&' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!analyticsHost/col2/-/_random_?euid-amp=_client_id(etuix)_&url=_source_url_&rf=_external_referrer_&urlp=!pagePath&ss=_screen_width_x_screen_height_&sd=_screen_color_depth_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!analyticsHost/action/-/_random_?euid-amp=_client_id(etuix)_&url=_source_url_&eact=!actionCode&actr=!actionRef' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!analyticsHost/uparam/-/_random_?euid-amp=_client_id(etuix)_&url=_source_url_&euk!userParamKey=!userParamVal' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!analyticsHost/cflag2/-/_random_?euid-amp=_client_id(etuix)_&url=_source_url_&ecf0k=!cflagKey&ecf0v=!cflagVal' | |
analytics vendor: euleriananalytics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=PageView&id=PIXEL-ID' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=PageView&id=PIXEL-ID' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=!eventName&id=PIXEL-ID&cd[content_name]=!content_name' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=ViewContent&id=PIXEL-ID&cd[value]=!value&cd[currency]=!currency&cd[content_name]=!content_name&cd[content_type]=!content_type&cd[content_ids]=!content_ids' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=Search&id=PIXEL-ID&cd[value]=!value&cd[currency]=!currency&cd[content_category]=!content_category&cd[content_ids]=!content_ids&cd[search_string]=!search_string' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=AddToCart&id=PIXEL-ID&cd[value]=!value&cd[currency]=!currency&cd[content_name]=!content_name&cd[content_type]=!content_type&cd[content_ids]=!content_ids' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=AddToWishlist&id=PIXEL-ID&cd[value]=!value&cd[currency]=!currency&cd[content_name]=!content_name&cd[content_category]=!content_category&cd[content_ids]=!content_ids' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=InitiateCheckout&id=PIXEL-ID&cd[value]=!value&cd[currency]=!currency&cd[content_name]=!content_name&cd[content_category]=!content_category&cd[num_items]=!num_items&cd[content_ids]=!content_ids' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=AddPaymentInfo&id=PIXEL-ID&cd[value]=!value&cd[currency]=!currency&cd[content_category]=!content_category&cd[content_ids]=!content_ids' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=Purchase&id=PIXEL-ID&cd[value]=!value&cd[currency]=!currency&cd[content_name]=!content_name&cd[content_type]=!content_type&cd[content_ids]=!content_ids&cd[num_items]=!num_items' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=Lead&id=PIXEL-ID&cd[value]=!value&cd[currency]=!currency&cd[content_name]=!content_name&cd[content_category]=!content_category' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.facebook.com/tr?noscript=1&ev=CompleteRegistration&id=PIXEL-ID&cd[value]=!value&cd[currency]=!currency&cd[content_name]=!content_name&cd[status]=!status' | |
analytics vendor: facebookpixel | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!prefix.hit.gemius.pl/__timestamp_/redot.gif?l=91&id=!identifier&tz=_timezone_&col=_screen_color_depth_&screen=_screen_width_x_screen_height_&window=_viewport_width_x_viewport_height_&fr=1&href=_source_url_&ref=_document_referrer_&sarg=_canonical_url_&extra=gemamp%3D1%7Campid%3D_client_id(gemius)_%7C!extraparams&nc=0&et=view&hsrc=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!prefix.hit.gemius.pl/__timestamp_/redot.gif?l=91&id=!identifier&tz=_timezone_&col=_screen_color_depth_&screen=_screen_width_x_screen_height_&window=_viewport_width_x_viewport_height_&fr=1&href=_source_url_&ref=_document_referrer_&sarg=_canonical_url_&extra=gemamp%3D1%7Campid%3D_client_id(gemius)_%7C!extraparams&nc=0' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!prefix.hit.gemius.pl/__timestamp_/redot.gif?l=91&id=!identifier&tz=_timezone_&col=_screen_color_depth_&screen=_screen_width_x_screen_height_&window=_viewport_width_x_viewport_height_&fr=1&href=_source_url_&ref=_document_referrer_&sarg=_canonical_url_&extra=gemamp%3D1%7Campid%3D_client_id(gemius)_%7C!extraparams&nc=0&et=view&hsrc=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!prefix.hit.gemius.pl/__timestamp_/redot.gif?l=91&id=!identifier&tz=_timezone_&col=_screen_color_depth_&screen=_screen_width_x_screen_height_&window=_viewport_width_x_viewport_height_&fr=1&href=_source_url_&ref=_document_referrer_&sarg=_canonical_url_&extra=gemamp%3D1%7Campid%3D_client_id(gemius)_%7C!extraparams&nc=0&et=action&hsrc=3' | |
analytics vendor: gemius | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: googleadwords test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.googleadservices.com/pagead/conversion/' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://googleads.g.doubleclick.net/pagead/viewthroughconversion/' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '!googleConversionId/?cv=amp2&label=!googleConversionLabel&random=_random_&url=_source_url_&ref=_document_referrer_&fst=_page_view_id_&num=_counter(googleadwords)_&fmt=3&async=1&u_h=_screen_height_&u_w=_screen_width_&u_ah=_available_screen_height_&u_aw=_available_screen_width_&u_cd=_screen_color_depth_&u_tz=_timezone_&tiba=_title_&guid=ON&script=0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'value=!googleConversionValue¤cy_code=!googleConversionCurrency&bg=!googleConversionColor&hl=!googleConversionLanguage' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.googleadservices.com/pagead/conversion/!googleConversionId/?cv=amp2&label=!googleConversionLabel&random=_random_&url=_source_url_&ref=_document_referrer_&fst=_page_view_id_&num=_counter(googleadwords)_&fmt=3&async=1&u_h=_screen_height_&u_w=_screen_width_&u_ah=_available_screen_height_&u_aw=_available_screen_width_&u_cd=_screen_color_depth_&u_tz=_timezone_&tiba=_title_&guid=ON&script=0&value=!googleConversionValue¤cy_code=!googleConversionCurrency&bg=!googleConversionColor&hl=!googleConversionLanguage' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://googleads.g.doubleclick.net/pagead/viewthroughconversion/!googleConversionId/?cv=amp2&label=!googleConversionLabel&random=_random_&url=_source_url_&ref=_document_referrer_&fst=_page_view_id_&num=_counter(googleadwords)_&fmt=3&async=1&u_h=_screen_height_&u_w=_screen_width_&u_ah=_available_screen_height_&u_aw=_available_screen_width_&u_cd=_screen_color_depth_&u_tz=_timezone_&tiba=_title_&guid=ON&script=0' | |
analytics vendor: googleadwords | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com/collect?v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&_utmht=_timestamp_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!account&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_&t=adtiming&jid=&plt=_page_load_time_&dns=_domain_lookup_time_&tcp=_tcp_connect_time_&rrt=_redirect_time_&srt=_server_response_time_&pdt=_page_download_time_&clt=_content_load_time_&dit=_dom_interactive_time_&a=_page_view_id_&z=_random_&aae=true' | |
INFO: '[amp-analytics/linker-manager] linker config for %s is not enabled and will be ignored.', '_gl' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&_utmht=_timestamp_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!account&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&a=_page_view_id_&z=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com/r/collect?v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&_utmht=_timestamp_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!account&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_&t=pageview&jid=_random_&_r=1&a=_page_view_id_&z=_random_&aae=true' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com/collect?v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&_utmht=_timestamp_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!account&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_&t=event&jid=&ec=!eventCategory&ea=!eventAction&el=!eventLabel&ev=0&a=_page_view_id_&z=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com/collect?v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&_utmht=_timestamp_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!account&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_&t=social&jid=&sa=!socialAction&sn=!socialNetwork&st=!socialTarget&a=_page_view_id_&z=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com/collect?v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&_utmht=_timestamp_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!account&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_&t=!timingRequestType&jid=&plt=_page_load_time_&dns=_domain_lookup_time_&tcp=_tcp_connect_time_&rrt=_redirect_time_&srt=_server_response_time_&pdt=_page_download_time_&clt=_content_load_time_&dit=_dom_interactive_time_&a=_page_view_id_&z=_random_&aae=true' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com/collect?v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&_utmht=_timestamp_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!account&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_&t=exception&exd=!errorName-!errorMessage&a=_page_view_id_&z=_random_' | |
analytics vendor: googleanalytics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: gtag test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!trackingId&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&a=_page_view_id_&z=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&t=pageview&jid=_random_&gjid=_random_&_r=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com/r/collect?v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!trackingId&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_&t=pageview&jid=_random_&gjid=_random_&_r=1&a=_page_view_id_&z=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com/collect?v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!trackingId&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_&t=pageview&jid=_random_&gjid=_random_&_r=1&a=_page_view_id_&z=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com/collect?v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!trackingId&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_&t=event&jid=&a=_page_view_id_&z=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com/collect?v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!trackingId&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_&jid=&plt=_page_load_time_&dns=_domain_lookup_time_&tcp=_tcp_connect_time_&rrt=_redirect_time_&srt=_server_response_time_&pdt=_page_download_time_&clt=_content_load_time_&dit=_dom_interactive_time_&a=_page_view_id_&z=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.google-analytics.com/collect?v=1&_v=a1&ds=AMP&aip&_s=1&dt=_title_&sr=_screen_width_x_screen_height_&cid=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&tid=!trackingId&dl=_source_url_&dr=_external_referrer_&sd=_screen_color_depth_&ul=_browser_language_&de=_document_charset_&t=exception&exd=!errorName-!errorMessage&a=_page_view_id_&z=_random_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.googleadservices.com/pagead/conversion/' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://googleads.g.doubleclick.net/pagead/viewthroughconversion/' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '!conversionId/?cv=amp3&label=!conversionLabel&random=_random_&url=_source_url_&ref=_document_referrer_&fst=_page_view_id_&num=_counter(googleadwords)_&fmt=3&async=1&u_h=_screen_height_&u_w=_screen_width_&u_ah=_available_screen_height_&u_aw=_available_screen_width_&u_cd=_screen_color_depth_&u_tz=_timezone_&tiba=_title_&guid=ON&script=0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://www.googleadservices.com/pagead/conversion/!conversionId/?cv=amp3&label=!conversionLabel&random=_random_&url=_source_url_&ref=_document_referrer_&fst=_page_view_id_&num=_counter(googleadwords)_&fmt=3&async=1&u_h=_screen_height_&u_w=_screen_width_&u_ah=_available_screen_height_&u_aw=_available_screen_width_&u_cd=_screen_color_depth_&u_tz=_timezone_&tiba=_title_&guid=ON&script=0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://googleads.g.doubleclick.net/pagead/viewthroughconversion/!conversionId/?cv=amp3&label=!conversionLabel&random=_random_&url=_source_url_&ref=_document_referrer_&fst=_page_view_id_&num=_counter(googleadwords)_&fmt=3&async=1&u_h=_screen_height_&u_w=_screen_width_&u_ah=_available_screen_height_&u_aw=_available_screen_width_&u_cd=_screen_color_depth_&u_tz=_timezone_&tiba=_title_&guid=ON&script=0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ad.doubleclick.net/activity;src=!flSrc;type=!flType;cat=!flCat' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!flSrc.fls.doubleclick.net/activityi;src=!flSrc;type=!flType;cat=!flCat' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ad.doubleclick.net/ddm/clk/' | |
analytics vendor: gtag | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ibeat.indiatimes.com/ping-amp?url=_ampdoc_url_&sid=_client_id(_iibeat_session)_&ua=_user_agent_&ref=_document_referrer_&at=_incremental_engaged_time_&tt=!totalTime&pid=_page_view_id_&d=!d&ct=!ct&pt=!pt&au=!au&ag=!ag&aid=!aid&cn=_canonical_url_&ctIds=!ctIds' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ibeat.indiatimes.com' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ibeat.indiatimes.com/ping-amp?url=_ampdoc_url_&sid=_client_id(_iibeat_session)_&ua=_user_agent_&ref=_document_referrer_&at=_incremental_engaged_time_&tt=!totalTime&pid=_page_view_id_&d=!d&ct=!ct&pt=!pt&au=!au&ag=!ag&aid=!aid&cn=_canonical_url_&ctIds=!ctIds' | |
analytics vendor: ibeatanalytics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '!url?st=!st&sv=ke&ap=1&co=!co&cp=!cp&ps=!ps&host=_canonical_host_&path=_canonical_path_&type=pageview' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '!url?st=!st&ev=!ev&sv=ke&ap=1&co=!co&cp=!cp&ps=!ps&host=_canonical_host_&path=_canonical_path_&type=event' | |
analytics vendor: infonline | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://m.col.ip-label.net/coll/?T=notrackerID&m=2502|_nav_timing(navigationStart)_|2508|_nav_timing(domainLookupStart)_|2509|_nav_timing(domainLookupEnd)_|2510|_nav_timing(connectStart)_|2512|_nav_timing(connectEnd)_|2514|_nav_timing(responseStart)_|2515|_nav_timing(responseEnd)_|2517|_nav_timing(domInteractive)_|2520|_nav_timing(loadEventStart)_&ts=_timestamp_&ua=_user_agent_&d=!ipldim&i=!clientip&d[1]=!customdim&d[2]=!business&d[3]=!abtesting&d[4]=!infrastructure&d[5]=!customer&u=!urlgroup&w=_available_screen_width_&h=_available_screen_height_&r=_document_referrer_&l=_browser_language_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'm.col.ip-label.net' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://m.col.ip-label.net/coll/' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://m.col.ip-label.net/coll/?T=notrackerID&m=2502|_nav_timing(navigationStart)_|2508|_nav_timing(domainLookupStart)_|2509|_nav_timing(domainLookupEnd)_|2510|_nav_timing(connectStart)_|2512|_nav_timing(connectEnd)_|2514|_nav_timing(responseStart)_|2515|_nav_timing(responseEnd)_|2517|_nav_timing(domInteractive)_|2520|_nav_timing(loadEventStart)_&ts=_timestamp_&ua=_user_agent_&d=!ipldim&i=!clientip&d[1]=!customdim&d[2]=!business&d[3]=!abtesting&d[4]=!infrastructure&d[5]=!customer&u=!urlgroup&w=_available_screen_width_&h=_available_screen_height_&r=_document_referrer_&l=_browser_language_' | |
analytics vendor: iplabel | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.keen.io/3.0/projects/!projectId/events/pageviews?api_key=!writeKey&=true&docHostname=_ampdoc_hostname_&docUrl=_ampdoc_url_&Version=_amp_version_&backgroundState=_background_state_&backgroundedAtStart=!backgroundedAtStart&browserLanguage=_browser_language_&canonicalHost=_canonical_host_&canonicalHostname=_canonical_hostname_&canonicalPath=_canonical_path_&canonicalUrl=_canonical_url_&clientId=_client_id(cid)_&contentLoadTime=_content_load_time_&documentReferrer=_document_referrer_&domainLookupTime=_domain_lookup_time_&domInteractiveTime=_dom_interactive_time_&externalReferrer=_external_referrer_&incrementalEngagedTime=_incremental_engaged_time_&pageDownloadTime=_page_download_time_&pageLoadTime=_page_load_time_&screenHeight=_screen_height_&screenWidth=_screen_width_&screenColorDepth=_screen_color_depth_&scrollHeight=_scroll_height_&scrollWidth=_scroll_width_&scrollTop=_scroll_top_&scrollLeft=_scroll_left_&serverResponseTime=_server_response_time_×tamp=_timestamp_&timezone=_timezone_&title=_title_&totalEngagedTime=_total_engaged_time_&totalTime=23&userAgent=_user_agent_&viewportHeight=_viewport_height_&viewportWidth=_viewport_width_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.keen.io/3.0/projects/!projectId/events?amp=true&docHostname=_ampdoc_hostname_&docUrl=_ampdoc_url_&Version=_amp_version_&backgroundState=_background_state_&backgroundedAtStart=!backgroundedAtStart&browserLanguage=_browser_language_&canonicalHost=_canonical_host_&canonicalHostname=_canonical_hostname_&canonicalPath=_canonical_path_&canonicalUrl=_canonical_url_&clientId=_client_id(cid)_&contentLoadTime=_content_load_time_&documentReferrer=_document_referrer_&domainLookupTime=_domain_lookup_time_&domInteractiveTime=_dom_interactive_time_&externalReferrer=_external_referrer_&incrementalEngagedTime=_incremental_engaged_time_&pageDownloadTime=_page_download_time_&pageLoadTime=_page_load_time_&screenHeight=_screen_height_&screenWidth=_screen_width_&screenColorDepth=_screen_color_depth_&scrollHeight=_scroll_height_&scrollWidth=_scroll_width_&scrollTop=_scroll_top_&scrollLeft=_scroll_left_&serverResponseTime=_server_response_time_×tamp=_timestamp_&timezone=_timezone_&title=_title_&totalEngagedTime=_total_engaged_time_&totalTime=!totalTime&userAgent=_user_agent_&viewportHeight=_viewport_height_&viewportWidth=_viewport_width_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.keen.io/3.0/projects/!projectId/events/pageviews?api_key=!writeKey&=true&docHostname=_ampdoc_hostname_&docUrl=_ampdoc_url_&Version=_amp_version_&backgroundState=_background_state_&backgroundedAtStart=!backgroundedAtStart&browserLanguage=_browser_language_&canonicalHost=_canonical_host_&canonicalHostname=_canonical_hostname_&canonicalPath=_canonical_path_&canonicalUrl=_canonical_url_&clientId=_client_id(cid)_&contentLoadTime=_content_load_time_&documentReferrer=_document_referrer_&domainLookupTime=_domain_lookup_time_&domInteractiveTime=_dom_interactive_time_&externalReferrer=_external_referrer_&incrementalEngagedTime=_incremental_engaged_time_&pageDownloadTime=_page_download_time_&pageLoadTime=_page_load_time_&screenHeight=_screen_height_&screenWidth=_screen_width_&screenColorDepth=_screen_color_depth_&scrollHeight=_scroll_height_&scrollWidth=_scroll_width_&scrollTop=_scroll_top_&scrollLeft=_scroll_left_&serverResponseTime=_server_response_time_×tamp=_timestamp_&timezone=_timezone_&title=_title_&totalEngagedTime=_total_engaged_time_&totalTime=!totalTime&userAgent=_user_agent_&viewportHeight=_viewport_height_&viewportWidth=_viewport_width_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.keen.io/3.0/projects/!projectId/events/clicks?api_key=!writeKey&=true&docHostname=_ampdoc_hostname_&docUrl=_ampdoc_url_&Version=_amp_version_&backgroundState=_background_state_&backgroundedAtStart=!backgroundedAtStart&browserLanguage=_browser_language_&canonicalHost=_canonical_host_&canonicalHostname=_canonical_hostname_&canonicalPath=_canonical_path_&canonicalUrl=_canonical_url_&clientId=_client_id(cid)_&contentLoadTime=_content_load_time_&documentReferrer=_document_referrer_&domainLookupTime=_domain_lookup_time_&domInteractiveTime=_dom_interactive_time_&externalReferrer=_external_referrer_&incrementalEngagedTime=_incremental_engaged_time_&pageDownloadTime=_page_download_time_&pageLoadTime=_page_load_time_&screenHeight=_screen_height_&screenWidth=_screen_width_&screenColorDepth=_screen_color_depth_&scrollHeight=_scroll_height_&scrollWidth=_scroll_width_&scrollTop=_scroll_top_&scrollLeft=_scroll_left_&serverResponseTime=_server_response_time_×tamp=_timestamp_&timezone=_timezone_&title=_title_&totalEngagedTime=_total_engaged_time_&totalTime=!totalTime&userAgent=_user_agent_&viewportHeight=_viewport_height_&viewportWidth=_viewport_width_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.keen.io/3.0/projects/!projectId/events/!collection?api_key=!writeKey&=true&docHostname=_ampdoc_hostname_&docUrl=_ampdoc_url_&Version=_amp_version_&backgroundState=_background_state_&backgroundedAtStart=!backgroundedAtStart&browserLanguage=_browser_language_&canonicalHost=_canonical_host_&canonicalHostname=_canonical_hostname_&canonicalPath=_canonical_path_&canonicalUrl=_canonical_url_&clientId=_client_id(cid)_&contentLoadTime=_content_load_time_&documentReferrer=_document_referrer_&domainLookupTime=_domain_lookup_time_&domInteractiveTime=_dom_interactive_time_&externalReferrer=_external_referrer_&incrementalEngagedTime=_incremental_engaged_time_&pageDownloadTime=_page_download_time_&pageLoadTime=_page_load_time_&screenHeight=_screen_height_&screenWidth=_screen_width_&screenColorDepth=_screen_color_depth_&scrollHeight=_scroll_height_&scrollWidth=_scroll_width_&scrollTop=_scroll_top_&scrollLeft=_scroll_left_&serverResponseTime=_server_response_time_×tamp=_timestamp_&timezone=_timezone_&title=_title_&totalEngagedTime=_total_engaged_time_&totalTime=!totalTime&userAgent=_user_agent_&viewportHeight=_viewport_height_&viewportWidth=_viewport_width_' | |
analytics vendor: keen | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://amp.xg4ken.com/amp/v1/match?ampcid=_client_id(ken_amp_id)_&chcid=_query_param(gclid)_&tid=!tid&uid=!userId&domain=_canonical_hostname_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://amp.xg4ken.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'ampcid=_client_id(ken_amp_id)_&chcid=_query_param(gclid)_&tid=!tid&uid=!userId&domain=_canonical_hostname_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://amp.xg4ken.com/amp/v1/match?ampcid=_client_id(ken_amp_id)_&chcid=_query_param(gclid)_&tid=!tid&uid=!userId&domain=_canonical_hostname_' | |
analytics vendor: kenshoo | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: krux test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://beacon.krxd.net' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 't_navigation_type=0&t_dns=_domain_lookup_time_&t_tcp=_tcp_connect_time_&t_http_request=_server_response_time_&t_http_response=_page_download_time_&t_content_ready=_content_load_time_&t_window_load=_page_load_time_&t_redirect=_redirect_time_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'source=amp&confid=!confid&_kpid=!pubid&_kcp_s=!site&_kcp_sc=!section&_kcp_ssc=!subsection&_kcp_d=_canonical_host_&_kpref_=_document_referrer_&_kua_kx_amp_client_id=_client_id(_kuid_)_&_kua_kx_lang=_browser_language_&_kua_kx_tech_browser_language=_browser_language_&_kua_kx_tz=_timezone_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://beacon.krxd.net/pixel.gif?source=amp&confid=!confid&_kpid=!pubid&_kcp_s=!site&_kcp_sc=!section&_kcp_ssc=!subsection&_kcp_d=_canonical_host_&_kpref_=_document_referrer_&_kua_kx_amp_client_id=_client_id(_kuid_)_&_kua_kx_lang=_browser_language_&_kua_kx_tech_browser_language=_browser_language_&_kua_kx_tz=_timezone_&t_navigation_type=0&t_dns=_domain_lookup_time_&t_tcp=_tcp_connect_time_&t_http_request=_server_response_time_&t_http_response=_page_download_time_&t_content_ready=_content_load_time_&t_window_load=_page_load_time_&t_redirect=_redirect_time_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://beacon.krxd.net/event.gif?source=amp&confid=!confid&_kpid=!pubid&_kcp_s=!site&_kcp_sc=!section&_kcp_ssc=!subsection&_kcp_d=_canonical_host_&_kpref_=_document_referrer_&_kua_kx_amp_client_id=_client_id(_kuid_)_&_kua_kx_lang=_browser_language_&_kua_kx_tech_browser_language=_browser_language_&_kua_kx_tz=_timezone_&t_navigation_type=0&t_dns=_domain_lookup_time_&t_tcp=_tcp_connect_time_&t_http_request=_server_response_time_&t_http_response=_page_download_time_&t_content_ready=_content_load_time_&t_window_load=_page_load_time_&t_redirect=_redirect_time_&pageview=false' | |
analytics vendor: krux | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pp.lp4.io/p?i=!id&r=_document_referrer_&p=_canonical_url_&s=!section&t=!type&c=amp&mt=_title_&_t=amp&_r=_random_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pp.lp4.io/pl?i=!id&ct=_dom_interactive_time_&rt=_page_download_time_&pt=_page_load_time_&p=_canonical_url_&c=amp&t=!type&s=!section&_t=amp&_r=_random_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pp.lp4.io/u?i=!id&u=_client_id(_lp4_u)_&p=_canonical_url_&uActive=true&isPing=yes&c=amp&t=!type&s=!section&_t=amp&_r=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pp.lp4.io' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pp.lp4.io/p?i=!id&r=_document_referrer_&p=_canonical_url_&s=!section&t=!type&c=amp&mt=_title_&_t=amp&_r=_random_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pp.lp4.io/pl?i=!id&ct=_dom_interactive_time_&rt=_page_download_time_&pt=_page_load_time_&p=_canonical_url_&c=amp&t=!type&s=!section&_t=amp&_r=_random_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pp.lp4.io/u?i=!id&u=_client_id(_lp4_u)_&p=_canonical_url_&uActive=true&isPing=yes&c=amp&t=!type&s=!section&_t=amp&_r=_random_' | |
analytics vendor: linkpulse | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://bcp.crwdcntrl.net/amp?c=!account&pv=y' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://bcp.crwdcntrl.net/amp?c=!account&pv=y' | |
analytics vendor: lotame | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: marinsoftware test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://tracker.marinsm.com/tp' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'cid=!trackerId&Version=_amp_version_&ds=AMP&ref=_external_referrer_&page=_source_url_&uuid=_client_id(marin_amp_id)_&rnd=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://tracker.marinsm.com/tp?cid=!trackerId&Version=_amp_version_&ds=AMP&ref=_external_referrer_&page=_source_url_&uuid=_client_id(marin_amp_id)_&rnd=_random_&act=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://tracker.marinsm.com/tp?cid=!trackerId&Version=_amp_version_&ds=AMP&ref=_external_referrer_&page=_source_url_&uuid=_client_id(marin_amp_id)_&rnd=_random_&act=2&trans=UTM:I|!orderId|!marinConversionType|!productName|!category|!price|!quantity' | |
analytics vendor: marinsoftware | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://prof.estat.com/m/web/!serial?c=!level1&dom=_ampdoc_url_&enc=_document_charset_&l3=!level3&l4=!level4&n=_random_&p=!level2&r=_document_referrer_&sch=_screen_height_&scw=_screen_width_&tn=amp&v=1&vh=_available_screen_height_&vw=_available_screen_width_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://prof.estat.com/m/web' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://prof.estat.com/m/web/!serial?c=!level1&dom=_ampdoc_url_&enc=_document_charset_&l3=!level3&l4=!level4&n=_random_&p=!level2&r=_document_referrer_&sch=_screen_height_&scw=_screen_width_&tn=amp&v=1&vh=_available_screen_height_&vw=_available_screen_width_' | |
analytics vendor: mediametrie | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://events.mediarithmics.com/v1/visits/pixel?$site_token=!site_token&$url=_source_url_&$ev=%24page_view&$referrer=_document_referrer_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://events.mediarithmics.com' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://events.mediarithmics.com/v1/visits/pixel?$site_token=!site_token&$url=_source_url_&$ev=%24page_view&$referrer=_document_referrer_' | |
analytics vendor: mediarithmics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&e=s0' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&e=s1' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&e=s2' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&e=s3' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&e=v' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/init/?url=_canonical_url_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'vh=_viewport_height_&sh=_scroll_height_&st=_scroll_top_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&e=v' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&e=t&vh=_viewport_height_&sh=_scroll_height_&st=_scroll_top_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&e=s0' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&e=s1' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&e=s2' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '//collector.mediator.media/script/!mediator_id/amp/register/?url=_canonical_url_&ref=_document_referrer_&e=s3' | |
analytics vendor: mediator | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://elsa.memoinsights.com/t?amp=true&pid=!pid&title=_title_&url=_canonical_url_&date=!published_at&authors=!authors&referrer=_document_referrer_&page_url=_source_url_&user_id=_client_id(memo_amp_id)_&domain=_canonical_host_&v=amp&t=5000&e=5000' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://elsa.memoinsights.com/n?amp=true&pid=!pid&title=_title_&url=_canonical_url_&date=!published_at&authors=!authors&referrer=_document_referrer_&page_url=_source_url_&user_id=_client_id(memo_amp_id)_&domain=_canonical_host_&v=amp' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://elsa.memoinsights.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'amp=true&pid=!pid&title=_title_&url=_canonical_url_&date=!published_at&authors=!authors&referrer=_document_referrer_&page_url=_source_url_&user_id=_client_id(memo_amp_id)_&domain=_canonical_host_&v=amp' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://elsa.memoinsights.com/n?amp=true&pid=!pid&title=_title_&url=_canonical_url_&date=!published_at&authors=!authors&referrer=_document_referrer_&page_url=_source_url_&user_id=_client_id(memo_amp_id)_&domain=_canonical_host_&v=amp' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://elsa.memoinsights.com/t?amp=true&pid=!pid&title=_title_&url=_canonical_url_&date=!published_at&authors=!authors&referrer=_document_referrer_&page_url=_source_url_&user_id=_client_id(memo_amp_id)_&domain=_canonical_host_&v=amp&t=5000&e=5000' | |
analytics vendor: memo | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://mc.yandex.ru/watch/!counterId?browser-info=amp%3A1%3Az%3A_timezone_%3Ai%3A_timestamp_%3Arn%3A_random_%3Ala%3A_browser_language_%3Aen%3A_document_charset_%3Arqn%3A1%3As%3A_screen_width_x_screen_height_x_screen_color_depth_%3Aw%3A_available_screen_width_x_available_screen_height_%3Ads%3A_domain_lookup_time_%2C_tcp_connect_time_%2C_server_response_time_%2C_page_download_time_%2C_redirect_time_%2C_nav_timing(redirectStart%2CredirectEnd)_%2C_nav_redirect_count_%2C_nav_timing(domLoading%2CdomInteractive)_%2C_nav_timing(domContentLoadedEventStart%2CdomContentLoadedEventEnd)_%2C_nav_timing(navigationStart%2CdomComplete)_%2C_page_load_time_%2C_nav_timing(loadEventStart%2CloadEventEnd)_%2C_content_load_time_%3Auid%3A_client_id(_ym_uid)_%3Apvid%3A_page_view_id_%3At%3A_title_&site-info=!yaParams&page-url=_source_url_&page-ref=_document_referrer_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://mc.yandex.ru/watch/!counterId?browser-info=amp%3A1%3Az%3A_timezone_%3Ai%3A_timestamp_%3Arn%3A_random_%3Ala%3A_browser_language_%3Aen%3A_document_charset_%3Arqn%3A1%3As%3A_screen_width_x_screen_height_x_screen_color_depth_%3Aw%3A_available_screen_width_x_available_screen_height_%3Ads%3A_domain_lookup_time_%2C_tcp_connect_time_%2C_server_response_time_%2C_page_download_time_%2C_redirect_time_%2C_nav_timing(redirectStart%2CredirectEnd)_%2C_nav_redirect_count_%2C_nav_timing(domLoading%2CdomInteractive)_%2C_nav_timing(domContentLoadedEventStart%2CdomContentLoadedEventEnd)_%2C_nav_timing(navigationStart%2CdomComplete)_%2C_page_load_time_%2C_nav_timing(loadEventStart%2CloadEventEnd)_%2C_content_load_time_%3Auid%3A_client_id(_ym_uid)_%3Apvid%3A_page_view_id_%3At%3A_title_&site-info=!yaParams&page-url=_source_url_&page-ref=_document_referrer_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://mc.yandex.ru/watch/!counterId?browser-info=ar%3A1%3Anb%3A1%3Aamp%3A1%3Az%3A_timezone_%3Ai%3A_timestamp_%3Arn%3A_random_%3Ala%3A_browser_language_%3Aen%3A_document_charset_%3Arqn%3A1%3As%3A_screen_width_x_screen_height_x_screen_color_depth_%3Aw%3A_available_screen_width_x_available_screen_height_%3Ads%3A_domain_lookup_time_%2C_tcp_connect_time_%2C_server_response_time_%2C_page_download_time_%2C_redirect_time_%2C_nav_timing(redirectStart%2CredirectEnd)_%2C_nav_redirect_count_%2C_nav_timing(domLoading%2CdomInteractive)_%2C_nav_timing(domContentLoadedEventStart%2CdomContentLoadedEventEnd)_%2C_nav_timing(navigationStart%2CdomComplete)_%2C_page_load_time_%2C_nav_timing(loadEventStart%2CloadEventEnd)_%2C_content_load_time_%3Auid%3A_client_id(_ym_uid)_%3Apvid%3A_page_view_id_%3At%3A_title_&page-url=_source_url_&page-ref=_document_referrer_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://mc.yandex.ru/watch/!counterId?browser-info=ln%3A1%3Aamp%3A1%3Az%3A_timezone_%3Ai%3A_timestamp_%3Arn%3A_random_%3Ala%3A_browser_language_%3Aen%3A_document_charset_%3Arqn%3A1%3As%3A_screen_width_x_screen_height_x_screen_color_depth_%3Aw%3A_available_screen_width_x_available_screen_height_%3Ads%3A_domain_lookup_time_%2C_tcp_connect_time_%2C_server_response_time_%2C_page_download_time_%2C_redirect_time_%2C_nav_timing(redirectStart%2CredirectEnd)_%2C_nav_redirect_count_%2C_nav_timing(domLoading%2CdomInteractive)_%2C_nav_timing(domContentLoadedEventStart%2CdomContentLoadedEventEnd)_%2C_nav_timing(navigationStart%2CdomComplete)_%2C_page_load_time_%2C_nav_timing(loadEventStart%2CloadEventEnd)_%2C_content_load_time_%3Auid%3A_client_id(_ym_uid)_%3Apvid%3A_page_view_id_%3At%3A_title_&page-url=_source_url_&page-ref=_document_referrer_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://mc.yandex.ru/watch/!counterId?browser-info=ar%3A1%3Aamp%3A1%3Az%3A_timezone_%3Ai%3A_timestamp_%3Arn%3A_random_%3Ala%3A_browser_language_%3Aen%3A_document_charset_%3Arqn%3A1%3As%3A_screen_width_x_screen_height_x_screen_color_depth_%3Aw%3A_available_screen_width_x_available_screen_height_%3Ads%3A_domain_lookup_time_%2C_tcp_connect_time_%2C_server_response_time_%2C_page_download_time_%2C_redirect_time_%2C_nav_timing(redirectStart%2CredirectEnd)_%2C_nav_redirect_count_%2C_nav_timing(domLoading%2CdomInteractive)_%2C_nav_timing(domContentLoadedEventStart%2CdomContentLoadedEventEnd)_%2C_nav_timing(navigationStart%2CdomComplete)_%2C_page_load_time_%2C_nav_timing(loadEventStart%2CloadEventEnd)_%2C_content_load_time_%3Auid%3A_client_id(_ym_uid)_%3Apvid%3A_page_view_id_%3At%3A_title_&site-info=!yaParams&page-url=goal%3A%2F%2F_source_host_%2F!goalId&page-ref=_source_url_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://mc.yandex.ru' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://mc.yandex.ru/watch/!counterId' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'page-url=_source_url_&page-ref=_document_referrer_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'page-url=goal%3A%2F%2F_source_host_%2F!goalId&page-ref=_source_url_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'amp%3A1%3Az%3A_timezone_%3Ai%3A_timestamp_%3Arn%3A_random_%3Ala%3A_browser_language_%3Aen%3A_document_charset_%3Arqn%3A1%3As%3A_screen_width_x_screen_height_x_screen_color_depth_%3Aw%3A_available_screen_width_x_available_screen_height_%3Ads%3A_domain_lookup_time_%2C_tcp_connect_time_%2C_server_response_time_%2C_page_download_time_%2C_redirect_time_%2C_nav_timing(redirectStart%2CredirectEnd)_%2C_nav_redirect_count_%2C_nav_timing(domLoading%2CdomInteractive)_%2C_nav_timing(domContentLoadedEventStart%2CdomContentLoadedEventEnd)_%2C_nav_timing(navigationStart%2CdomComplete)_%2C_page_load_time_%2C_nav_timing(loadEventStart%2CloadEventEnd)_%2C_content_load_time_%3Auid%3A_client_id(_ym_uid)_%3Apvid%3A_page_view_id_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '_domain_lookup_time_%2C_tcp_connect_time_%2C_server_response_time_%2C_page_download_time_%2C_redirect_time_%2C_nav_timing(redirectStart%2CredirectEnd)_%2C_nav_redirect_count_%2C_nav_timing(domLoading%2CdomInteractive)_%2C_nav_timing(domContentLoadedEventStart%2CdomContentLoadedEventEnd)_%2C_nav_timing(navigationStart%2CdomComplete)_%2C_page_load_time_%2C_nav_timing(loadEventStart%2CloadEventEnd)_%2C_content_load_time_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'amp%3A1%3Az%3A_timezone_%3Ai%3A_timestamp_%3Arn%3A_random_%3Ala%3A_browser_language_%3Aen%3A_document_charset_%3Arqn%3A1%3As%3A_screen_width_x_screen_height_x_screen_color_depth_%3Aw%3A_available_screen_width_x_available_screen_height_%3Ads%3A_domain_lookup_time_%2C_tcp_connect_time_%2C_server_response_time_%2C_page_download_time_%2C_redirect_time_%2C_nav_timing(redirectStart%2CredirectEnd)_%2C_nav_redirect_count_%2C_nav_timing(domLoading%2CdomInteractive)_%2C_nav_timing(domContentLoadedEventStart%2CdomContentLoadedEventEnd)_%2C_nav_timing(navigationStart%2CdomComplete)_%2C_page_load_time_%2C_nav_timing(loadEventStart%2CloadEventEnd)_%2C_content_load_time_%3Auid%3A_client_id(_ym_uid)_%3Apvid%3A_page_view_id_%3At%3A_title_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 't%3A_title_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'site-info=!yaParams' | |
analytics vendor: metrika | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '{"type":"iframe","pcode":"!pcode","height":"!elementHeight","width":"300","x":"!elementX","y":"!elementY","requestCount":"1"}' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '{"type":"iframe","pcode":"!pcode","height":"!elementHeight","width":"300","x":"!elementX","y":"!elementY","requestCount":"2"}' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '{"type":"viewability","pcode":"!pcode","l0t":"!l0t","backgroundState":"_background_state_","intersectionRect":"!intersectionRect","intersectionRatio":"1","maxVisiblePercentage":"!maxVisiblePercentage","minVisiblePercentage":"!minVisiblePercentage","x":"!elementX","y":"!elementY","height":"!elementHeight","width":"300","viewportHeight":"_viewport_height_","viewportWidth":"_viewport_width_","opacity":"1","timeStamp":"_timestamp_","requestCount":"3"}' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '{"type":"viewability","pcode":"!pcode","l0t":"!l0t","backgroundState":"_background_state_","intersectionRect":"!intersectionRect","intersectionRatio":"1","maxVisiblePercentage":"!maxVisiblePercentage","minVisiblePercentage":"!minVisiblePercentage","x":"!elementX","y":"!elementY","height":"!elementHeight","width":"300","viewportHeight":"_viewport_height_","viewportWidth":"_viewport_width_","opacity":"1","timeStamp":"_timestamp_","requestCount":"4"}' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '{"type":"load","pcode":"!pcode","l0t":"!l0t","acctType":"!acctType","adType":"!adType","qs":"!qs","element":{"src":"HTML_ATTR(img,src,width)","viewer":"_viewer_"},"document":{"AMPDocumentHostname":"_ampdoc_hostname_","AMPDocumentURL":"_ampdoc_url_","canonicalHost":"_canonical_host_","canonicalHostname":"_canonical_hostname_","canonicalPath":"_canonical_path_","canonicalURL":"_canonical_url_","documentCharset":"_document_charset_","documentReferrer":"_document_referrer_","externalReferrer":"_external_referrer_","sourceURL":"_source_url_","sourceHost":"_source_host_","sourceHostname":"_source_hostname_","sourcePath":"_source_path_","title":"_title_","viewer":"_viewer_"},"device":{"availableScreenHeight":"_available_screen_height_","availableScreenWidth":"_available_screen_width_","browserLanguage":"_browser_language_","screenColorDepth":"_screen_color_depth_","screenHeight":"_screen_height_","screenWidth":"_screen_width_","scrollHeight":"_scroll_height_","scrollWidth":"_scroll_width_","scrollLeft":"_scroll_left_","scrollTop":"_scroll_top_","timezone":"_timezone_","userAgent":"_user_agent_","viewportHeight":"_viewport_height_","viewportWidth":"_viewport_width_"},"requestCount":"1","timeStamp":"_timestamp_"}' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '{"type":"unload","pcode":"!pcode","l0t":"!l0t","requestCount":"1","timeStamp":"_timestamp_"}' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '{"type":"click","pcode":"!pcode","l0t":"!l0t","requestCount":"1","timeStamp":"_timestamp_"}' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '{"type":"viewability","pcode":"!pcode","l0t":"!l0t","backgroundState":"_background_state_","intersectionRect":"!intersectionRect","intersectionRatio":"!intersectionRatio","maxVisiblePercentage":"!maxVisiblePercentage","minVisiblePercentage":"!minVisiblePercentage","x":"!elementX","y":"!elementY","height":"!elementHeight","width":"!elementWidth","viewportHeight":"_viewport_height_","viewportWidth":"_viewport_width_","opacity":"!opacity","timeStamp":"_timestamp_","requestCount":"1"}' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '{"type":"iframe","pcode":"!pcode","height":"!elementHeight","width":"!elementWidth","x":"!elementX","y":"!elementY","requestCount":"1"}' | |
analytics vendor: moat | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://engagement-collector.mobify.net/s.gif?slug=mobify-project-id×tamp_local=_timestamp_&channel=web&dimensions=%7b%22platform%22%3a%22AMP%22%2c%22client_id%22%3a%22_client_id(sandy-client-id)_%22%2c%22title%22%3a%22_title_%22%2c%22location%22%3a%22_source_url_%22%2c%22page%22%3a%22_source_path_%22%2c%22src_location%22%3a%22_ampdoc_url_%22%2c%22referrer%22%3a%22_document_referrer_%22%2c%22templateName%22%3a%22page-type%22%7d&data=%7b%22category%22%3a%22timing%22%2c%22action%22%3a%22ampStart%22%2c%22value%22%3a_nav_timing(navigationStart%2CdomLoading)_%7d' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://engagement-collector.mobify.net/s.gif?slug=mobify-project-id×tamp_local=_timestamp_&channel=web&dimensions=%7b%22platform%22%3a%22AMP%22%2c%22client_id%22%3a%22_client_id(sandy-client-id)_%22%2c%22title%22%3a%22_title_%22%2c%22location%22%3a%22_source_url_%22%2c%22page%22%3a%22_source_path_%22%2c%22src_location%22%3a%22_ampdoc_url_%22%2c%22referrer%22%3a%22_document_referrer_%22%2c%22templateName%22%3a%22page-type%22%7d&data=%7b%22category%22%3a%22timing%22%2c%22action%22%3a%22load%22%2c%22value%22%3a_page_load_time_%7d' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://engagement-collector.mobify.net/s.gif?slug=mobify-project-id×tamp_local=_timestamp_&channel=web&dimensions=%7b%22platform%22%3a%22AMP%22%2c%22client_id%22%3a%22_client_id(sandy-client-id)_%22%2c%22title%22%3a%22_title_%22%2c%22location%22%3a%22_source_url_%22%2c%22page%22%3a%22_source_path_%22%2c%22src_location%22%3a%22_ampdoc_url_%22%2c%22referrer%22%3a%22_document_referrer_%22%2c%22templateName%22%3a%22page-type%22%7d&data=%7b%22category%22%3a%22timing%22%2c%22action%22%3a%22DOMContentLoaded%22%2c%22value%22%3a_content_load_time_%7d' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://engagement-collector.mobify.net' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '%22platform%22%3a%22AMP%22%2c%22client_id%22%3a%22_client_id(sandy-client-id)_%22%2c%22title%22%3a%22_title_%22%2c%22location%22%3a%22_source_url_%22%2c%22page%22%3a%22_source_path_%22%2c%22src_location%22%3a%22_ampdoc_url_%22%2c%22referrer%22%3a%22_document_referrer_%22%2c%22templateName%22%3a%22page-type%22' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://engagement-collector.mobify.net/s.gif?slug=mobify-project-id×tamp_local=_timestamp_&channel=web&dimensions=%7b%22platform%22%3a%22AMP%22%2c%22client_id%22%3a%22_client_id(sandy-client-id)_%22%2c%22title%22%3a%22_title_%22%2c%22location%22%3a%22_source_url_%22%2c%22page%22%3a%22_source_path_%22%2c%22src_location%22%3a%22_ampdoc_url_%22%2c%22referrer%22%3a%22_document_referrer_%22%2c%22templateName%22%3a%22page-type%22%7d' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://engagement-collector.mobify.net/s.gif?slug=mobify-project-id×tamp_local=_timestamp_&channel=web&dimensions=%7b%22platform%22%3a%22AMP%22%2c%22client_id%22%3a%22_client_id(sandy-client-id)_%22%2c%22title%22%3a%22_title_%22%2c%22location%22%3a%22_source_url_%22%2c%22page%22%3a%22_source_path_%22%2c%22src_location%22%3a%22_ampdoc_url_%22%2c%22referrer%22%3a%22_document_referrer_%22%2c%22templateName%22%3a%22page-type%22%7d&data=%7b%22category%22%3a%22timing%22%2c%22action%22%3a%22ampStart%22%2c%22value%22%3a_nav_timing(navigationStart%2CdomLoading)_%7d' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://engagement-collector.mobify.net/s.gif?slug=mobify-project-id×tamp_local=_timestamp_&channel=web&dimensions=%7b%22platform%22%3a%22AMP%22%2c%22client_id%22%3a%22_client_id(sandy-client-id)_%22%2c%22title%22%3a%22_title_%22%2c%22location%22%3a%22_source_url_%22%2c%22page%22%3a%22_source_path_%22%2c%22src_location%22%3a%22_ampdoc_url_%22%2c%22referrer%22%3a%22_document_referrer_%22%2c%22templateName%22%3a%22page-type%22%7d&data=%7b%22action%22%3a%22pageview%22%7d' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://engagement-collector.mobify.net/s.gif?slug=mobify-project-id×tamp_local=_timestamp_&channel=web&dimensions=%7b%22platform%22%3a%22AMP%22%2c%22client_id%22%3a%22_client_id(sandy-client-id)_%22%2c%22title%22%3a%22_title_%22%2c%22location%22%3a%22_source_url_%22%2c%22page%22%3a%22_source_path_%22%2c%22src_location%22%3a%22_ampdoc_url_%22%2c%22referrer%22%3a%22_document_referrer_%22%2c%22templateName%22%3a%22page-type%22%7d&data=%7b%22category%22%3a%22timing%22%2c%22action%22%3a%22load%22%2c%22value%22%3a_page_load_time_%7d' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://engagement-collector.mobify.net/s.gif?slug=mobify-project-id×tamp_local=_timestamp_&channel=web&dimensions=%7b%22platform%22%3a%22AMP%22%2c%22client_id%22%3a%22_client_id(sandy-client-id)_%22%2c%22title%22%3a%22_title_%22%2c%22location%22%3a%22_source_url_%22%2c%22page%22%3a%22_source_path_%22%2c%22src_location%22%3a%22_ampdoc_url_%22%2c%22referrer%22%3a%22_document_referrer_%22%2c%22templateName%22%3a%22page-type%22%7d&data=%7b%22category%22%3a%22timing%22%2c%22action%22%3a%22DOMContentLoaded%22%2c%22value%22%3a_content_load_time_%7d' | |
analytics vendor: mobify | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: mparticle test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pixels.mparticle.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/v1/!apiKey/Pixel' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'et=Unknown&_id=_client_id(mparticle_amp_id)_&attrs_k=!eventAttributes_Keys&attrs_v=!eventAttributes_Values&ua_k=!userAttributes_Keys&ua_v=!userAttributes_Values&ui_t=!userIdentities_Types&ui_v=!userIdentities_Values&flags_k=!customFlags_Keys&flags_v=!customFlags_Values&ct=_timestamp_&dbg=!debug&lc=!location&av=!appVersion' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pixels.mparticle.com/v1/!apiKey/Pixel?dt=ScreenView&n=!pageName&hn=_ampdoc_url_&ttl=_title_&path=_canonical_path_&et=Unknown&_id=_client_id(mparticle_amp_id)_&attrs_k=!eventAttributes_Keys&attrs_v=!eventAttributes_Values&ua_k=!userAttributes_Keys&ua_v=!userAttributes_Values&ui_t=!userIdentities_Types&ui_v=!userIdentities_Values&flags_k=!customFlags_Keys&flags_v=!customFlags_Values&ct=_timestamp_&dbg=!debug&lc=!location&av=!appVersion' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pixels.mparticle.com/v1/!apiKey/Pixel?dt=AppEvent&n=!eventName&et=Unknown&_id=_client_id(mparticle_amp_id)_&attrs_k=!eventAttributes_Keys&attrs_v=!eventAttributes_Values&ua_k=!userAttributes_Keys&ua_v=!userAttributes_Values&ui_t=!userIdentities_Types&ui_v=!userIdentities_Values&flags_k=!customFlags_Keys&flags_v=!customFlags_Values&ct=_timestamp_&dbg=!debug&lc=!location&av=!appVersion' | |
analytics vendor: mparticle | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!beacon_url?h.d=!h.d&h.key=!h.key&h.t=!h.t&h.cr=!h.cr&rt.start=navigation&rt.si=_client_id(amp_mpulse)_&rt.ss=_timestamp_&rt.end=_timestamp_&t_resp=_nav_timing(navigationStart%2CresponseStart)_&t_page=_nav_timing(responseStart%2CloadEventStart)_&t_done=_nav_timing(navigationStart%2CloadEventStart)_&nt_nav_type=_nav_type_&nt_red_cnt=_nav_redirect_count_&nt_nav_st=_nav_timing(navigationStart)_&nt_red_st=_nav_timing(redirectStart)_&nt_red_end=_nav_timing(redirectEnd)_&nt_fet_st=_nav_timing(fetchStart)_&nt_dns_st=_nav_timing(domainLookupStart)_&nt_dns_end=_nav_timing(domainLookupEnd)_&nt_con_st=_nav_timing(connectStart)_&nt_ssl_st=_nav_timing(secureConnectionStart)_&nt_con_end=_nav_timing(connectEnd)_&nt_req_st=_nav_timing(requestStart)_&nt_res_st=_nav_timing(responseStart)_&nt_unload_st=_nav_timing(unloadEventStart)_&nt_unload_end=_nav_timing(unloadEventEnd)_&nt_domloading=_nav_timing(domLoading)_&nt_res_end=_nav_timing(responseEnd)_&nt_domint=_nav_timing(domInteractive)_&nt_domcontloaded_st=_nav_timing(domContentLoadedEventStart)_&nt_domcontloaded_end=_nav_timing(domContentLoadedEventEnd)_&nt_domcomp=_nav_timing(domComplete)_&nt_load_st=_nav_timing(loadEventStart)_&nt_load_end=_nav_timing(loadEventEnd)_&v=1&http.initiator=amp&u=_source_url_&.u=_ampdoc_url_&r2=_document_referrer_&scr.xy=_screen_width_x_screen_height_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!beacon_url?h.d=!h.d&h.key=!h.key&h.t=!h.t&h.cr=!h.cr&rt.start=navigation&rt.si=_client_id(amp_mpulse)_&rt.ss=_timestamp_&rt.end=_timestamp_&t_resp=_nav_timing(navigationStart%2CresponseStart)_&t_page=_nav_timing(responseStart%2CloadEventStart)_&t_done=_nav_timing(navigationStart%2CloadEventStart)_&nt_nav_type=_nav_type_&nt_red_cnt=_nav_redirect_count_&nt_nav_st=_nav_timing(navigationStart)_&nt_red_st=_nav_timing(redirectStart)_&nt_red_end=_nav_timing(redirectEnd)_&nt_fet_st=_nav_timing(fetchStart)_&nt_dns_st=_nav_timing(domainLookupStart)_&nt_dns_end=_nav_timing(domainLookupEnd)_&nt_con_st=_nav_timing(connectStart)_&nt_ssl_st=_nav_timing(secureConnectionStart)_&nt_con_end=_nav_timing(connectEnd)_&nt_req_st=_nav_timing(requestStart)_&nt_res_st=_nav_timing(responseStart)_&nt_unload_st=_nav_timing(unloadEventStart)_&nt_unload_end=_nav_timing(unloadEventEnd)_&nt_domloading=_nav_timing(domLoading)_&nt_res_end=_nav_timing(responseEnd)_&nt_domint=_nav_timing(domInteractive)_&nt_domcontloaded_st=_nav_timing(domContentLoadedEventStart)_&nt_domcontloaded_end=_nav_timing(domContentLoadedEventEnd)_&nt_domcomp=_nav_timing(domComplete)_&nt_load_st=_nav_timing(loadEventStart)_&nt_load_end=_nav_timing(loadEventEnd)_&v=1&http.initiator=amp&u=_source_url_&.u=_ampdoc_url_&r2=_document_referrer_&scr.xy=_screen_width_x_screen_height_' | |
analytics vendor: mpulse | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://amp.navdmp.com/amp?aid=_client_id(navegg_id)_&url=_canonical_url_&ref=_document_referrer_&tit=_title_&lan=_browser_language_&acc=!account&v=7' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://amp.navdmp.com/amp?aid=_client_id(navegg_id)_&url=_canonical_url_&ref=_document_referrer_&tit=_title_&lan=_browser_language_&acc=!account&v=7' | |
analytics vendor: navegg | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://bam.nr-data.net/amp?appId=!appId&licenseKey=!licenseKey&Url=_ampdoc_url_&canonicalUrl=_canonical_url_&timeToDomContentLoadedEventEnd=_nav_timing(domContentLoadedEventEnd)_&timeToDomInteractive=_nav_timing(domInteractive)_&timeToDomComplete=_nav_timing(domComplete)_&timeToDomLoading=_nav_timing(domLoading)_&timeToResponseStart=_nav_timing(responseStart)_&timeToResponseEnd=_nav_timing(responseEnd)_&timeToLoadEventStart=_nav_timing(loadEventStart)_&timeToLoadEventEnd=_nav_timing(loadEventEnd)_&timeToConnectStart=_nav_timing(connectStart)_&timeToConnectEnd=_nav_timing(connectEnd)_&timeToFetchStart=_nav_timing(fetchStart)_&timeToRequestStart=_nav_timing(requestStart)_&timeToUnloadEventStart=_nav_timing(unloadEventStart)_&timeToUnloadEventEnd=_nav_timing(unloadEventEnd)_&timeToDomainLookupStart=_nav_timing(domainLookupStart)_&timeToDomainLookupEnd=_nav_timing(domainLookupEnd)_&timeToRedirectStart=_nav_timing(redirectStart)_&timeToRedirectEnd=_nav_timing(redirectEnd)_&timeToSecureConnection=_nav_timing(secureConnectionStart)_×tamp=_timestamp_&Version=_amp_version_&pageLoadTime=_page_load_time_' | |
analytics vendor: newrelic | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!prefixuaid-linkage.imrworldwide.com/cgi-bin/gn?prd=session&c13=asid,P!apid&sessionId=_client_id(imrworldwide)___page_view_id_&pingtype=4&enc=false&c61=createtm,_timestamp_&rnd=_random_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!prefixcloudapi.imrworldwide.com/nmapi/v2/!apid/_client_id(imrworldwide)___page_view_id_/a?b=%7B%22devInfo%22%3A%7B%22devId%22%3A%22_client_id(imrworldwide)___page_view_id_%22%2C%22apn%22%3A%22!apn%22%2C%22apv%22%3A%22!apv%22%2C%22apid%22%3A%22!apid%22%7D%2C%22metadata%22%3A%7B%22static%22%3A%7B%22type%22%3A%22static%22%2C%22section%22%3A%22!section%22%2C%22assetid%22%3A%22_page_view_id_%22%2C%22segA%22%3A%22!segA%22%2C%22segB%22%3A%22!segB%22%2C%22segC%22%3A%22!segC%22%2C%22adModel%22%3A%220%22%2C%22dataSrc%22%3A%22cms%22%7D%2C%22content%22%3A%7B%7D%2C%22ad%22%3A%7B%7D%7D%2C%22event%22%3A%22playhead%22%2C%22position%22%3A%22_timestamp_%22%2C%22data%22%3A%7B%22hidden%22%3A%22_background_state_%22%2C%22blur%22%3A%22_background_state_%22%2C%22position%22%3A%22_timestamp_%22%7D%2C%22type%22%3A%22static%22%2C%22utc%22%3A%22_timestamp_%22%2C%22index%22%3A%222%22%2C%22pageURL%22%3A%22_ampdoc_url_%22%7D' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!prefixuaid-linkage.imrworldwide.com/cgi-bin/gn?prd=session&c13=asid,P!apid&sessionId=_client_id(imrworldwide)___page_view_id_&pingtype=4&enc=false&c61=createtm,_timestamp_&rnd=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!prefixcloudapi.imrworldwide.com/nmapi/v2/!apid/_client_id(imrworldwide)___page_view_id_/a?b=%7B%22devInfo%22%3A%7B%22devId%22%3A%22_client_id(imrworldwide)___page_view_id_%22%2C%22apn%22%3A%22!apn%22%2C%22apv%22%3A%22!apv%22%2C%22apid%22%3A%22!apid%22%7D%2C%22metadata%22%3A%7B%22static%22%3A%7B%22type%22%3A%22static%22%2C%22section%22%3A%22!section%22%2C%22assetid%22%3A%22_page_view_id_%22%2C%22segA%22%3A%22!segA%22%2C%22segB%22%3A%22!segB%22%2C%22segC%22%3A%22!segC%22%2C%22adModel%22%3A%220%22%2C%22dataSrc%22%3A%22cms%22%7D%2C%22content%22%3A%7B%7D%2C%22ad%22%3A%7B%7D%7D%2C%22event%22%3A%22playhead%22%2C%22position%22%3A%22_timestamp_%22%2C%22data%22%3A%7B%22hidden%22%3A%22_background_state_%22%2C%22blur%22%3A%22_background_state_%22%2C%22position%22%3A%22_timestamp_%22%7D%2C%22type%22%3A%22static%22%2C%22utc%22%3A%22_timestamp_%22%2C%22index%22%3A%221%22%2C%22pageURL%22%3A%22_ampdoc_url_%22%7D' | |
analytics vendor: nielsen | |
● test requests | |
WARN: '[AmpAnalytics <unknown id>] request against destroyed embed: ', 'hidden' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://loadeu.exelator.com/load/?p=!pubId&g=!siteId&j=0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'loadeu.exelator.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'load/' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://loadeu.exelator.com/load/?p=!pubId&g=!siteId&j=0' | |
analytics vendor: nielsen-marketing-cloud | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '!url?s=!s&=1&cp=!cp&host=_canonical_host_&path=_canonical_path_' | |
analytics vendor: oewa | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!s.oewabox.at/j0=,,,r=_canonical_url_;+,amp=1+cp=!cp+ssl=1+hn=_canonical_host_;;;?lt=_page_view_id_&x=_screen_width_x_screen_height_x24&c=_client_id(oewa)_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!s.oewabox.at/j0=,,,r=_canonical_url_;+,amp=1+cp=!cp+ssl=1+hn=_canonical_host_;;;?lt=_page_view_id_&x=_screen_width_x_screen_height_x24&c=_client_id(oewa)_' | |
analytics vendor: oewadirect | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://dc.oracleinfinity.io/!guid/dcs.gif?dcssip=_source_host_&dcsuri=_source_path_&WT.ti=_title_&dcsdat=_timestamp_&dcsref=_document_referrer_&WT.es=_source_host__source_path_&WT.bs=_available_screen_width_x_available_screen_height_&WT.sr=_screen_width_x_screen_height_&WT.cd=_screen_color_depth_&WT.ul=_browser_language_&WT.le=_document_charset_&WT.js=Yes&WT.co_f=_client_id(WT_AMP)_&ora.tv_amp=1.0.0&ora.amp_ver=_amp_version_&dcscfg=3&WT.dl=0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://dc.oracleinfinity.io/!guid/dcs.gif?' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'dcssip=_source_host_&dcsuri=_source_path_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&dcsref=_document_referrer_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.es=_source_host__source_path_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.ti=_title_&dcsdat=_timestamp_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'dcssip=_source_host_&dcsuri=_source_path_&WT.ti=_title_&dcsdat=_timestamp_&dcsref=_document_referrer_&WT.es=_source_host__source_path_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.bs=_available_screen_width_x_available_screen_height_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.sr=_screen_width_x_screen_height_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.cd=_screen_color_depth_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.bs=_available_screen_width_x_available_screen_height_&WT.sr=_screen_width_x_screen_height_&WT.cd=_screen_color_depth_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.ul=_browser_language_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.le=_document_charset_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.ul=_browser_language_&WT.le=_document_charset_&WT.js=Yes' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.co_f=_client_id(WT_AMP)_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&ora.tv_amp=1.0.0&ora.amp_ver=_amp_version_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.co_f=_client_id(WT_AMP)_&ora.tv_amp=1.0.0&ora.amp_ver=_amp_version_&dcscfg=3' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://dc.oracleinfinity.io/!guid/dcs.gif?dcssip=_source_host_&dcsuri=_source_path_&WT.ti=_title_&dcsdat=_timestamp_&dcsref=_document_referrer_&WT.es=_source_host__source_path_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.bs=_available_screen_width_x_available_screen_height_&WT.sr=_screen_width_x_screen_height_&WT.cd=_screen_color_depth_&WT.ul=_browser_language_&WT.le=_document_charset_&WT.js=Yes&WT.co_f=_client_id(WT_AMP)_&ora.tv_amp=1.0.0&ora.amp_ver=_amp_version_&dcscfg=3' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&WT.dl=0' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://dc.oracleinfinity.io/!guid/dcs.gif?dcssip=_source_host_&dcsuri=_source_path_&WT.ti=_title_&dcsdat=_timestamp_&dcsref=_document_referrer_&WT.es=_source_host__source_path_&WT.bs=_available_screen_width_x_available_screen_height_&WT.sr=_screen_width_x_screen_height_&WT.cd=_screen_color_depth_&WT.ul=_browser_language_&WT.le=_document_charset_&WT.js=Yes&WT.co_f=_client_id(WT_AMP)_&ora.tv_amp=1.0.0&ora.amp_ver=_amp_version_&dcscfg=3&WT.dl=0' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://dc.oracleinfinity.io/!guid/dcs.gif?dcssip=_source_host_&dcsuri=_source_path_&WT.ti=_title_&dcsdat=_timestamp_&dcsref=_document_referrer_&WT.es=_source_host__source_path_&WT.bs=_available_screen_width_x_available_screen_height_&WT.sr=_screen_width_x_screen_height_&WT.cd=_screen_color_depth_&WT.ul=_browser_language_&WT.le=_document_charset_&WT.js=Yes&WT.co_f=_client_id(WT_AMP)_&ora.tv_amp=1.0.0&ora.amp_ver=_amp_version_&dcscfg=3&WT.dl=0' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'a[href$=".pdf"]' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', ',a[href$=".xls"]' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', ',a[href$=".ppt"]' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', ',a[href$=".zip"]' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', ',a[href$=".txt"]' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', ',a[href$=".rtf"]' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', ',a[href$=".xml"]' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'a[href$=".pdf"],a[href$=".xls"],a[href$=".ppt"],a[href$=".zip"],a[href$=".txt"],a[href$=".rtf"],a[href$=".xml"]' | |
analytics vendor: oracleInfinityAnalytics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://srv.pixel.parsely.com/plogger/?rand=_timestamp_&idsite=!apikey&url=_ampdoc_url_&urlref=_document_referrer_&screen=_screen_width_x_screen_height_%7C_available_screen_width_x_available_screen_height_%7C_screen_color_depth_&title=_title_&date=_timestamp_&id=_client_id(_parsely_visitor)_&action=pageview&metadata={"canonical_url":"_canonical_url_"}' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://srv.pixel.parsely.com/plogger/?rand=_timestamp_&idsite=!apikey&url=_ampdoc_url_&urlref=_document_referrer_&screen=_screen_width_x_screen_height_%7C_available_screen_width_x_available_screen_height_%7C_screen_color_depth_&title=_title_&date=_timestamp_&id=_client_id(_parsely_visitor)_&action=heartbeat&tt=_total_engaged_time_&inc=_incremental_engaged_time(parsely-js)_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://srv.pixel.parsely.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://srv.pixel.parsely.com/plogger/?rand=_timestamp_&idsite=!apikey&url=_ampdoc_url_&urlref=_document_referrer_&screen=_screen_width_x_screen_height_%7C_available_screen_width_x_available_screen_height_%7C_screen_color_depth_&title=_title_&date=_timestamp_&id=_client_id(_parsely_visitor)_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://srv.pixel.parsely.com/plogger/?rand=_timestamp_&idsite=!apikey&url=_ampdoc_url_&urlref=_document_referrer_&screen=_screen_width_x_screen_height_%7C_available_screen_width_x_available_screen_height_%7C_screen_color_depth_&title=_title_&date=_timestamp_&id=_client_id(_parsely_visitor)_&action=pageview&metadata={"canonical_url":"_canonical_url_"}' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://srv.pixel.parsely.com/plogger/?rand=_timestamp_&idsite=!apikey&url=_ampdoc_url_&urlref=_document_referrer_&screen=_screen_width_x_screen_height_%7C_available_screen_width_x_available_screen_height_%7C_screen_color_depth_&title=_title_&date=_timestamp_&id=_client_id(_parsely_visitor)_&action=heartbeat&tt=_total_engaged_time_&inc=_incremental_engaged_time(parsely-js)_' | |
analytics vendor: parsely | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!namespace.amp.permutive.com/track?k=!key&i=_client_id(_ga)_&it=amp&e=PageviewEngagement&_ep_completion=0.25&_ep_client.type=amp&_ep_client.title=_title_&_ep_client.domain=_canonical_host_&_ep_client.url=_canonical_url_&_ep_client.referrer=_document_referrer_&_ep_client.user_agent=_user_agent_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!namespace.amp.permutive.com/track?k=!key&i=_client_id(_ga)_&it=amp&e=PageviewEngagement&_ep_completion=0.25&_ep_client.type=amp&_ep_client.title=_title_&_ep_client.domain=_canonical_host_&_ep_client.url=_canonical_url_&_ep_client.referrer=_document_referrer_&_ep_client.user_agent=_user_agent_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!namespace.amp.permutive.com/track?k=!key&i=_client_id(_ga)_&it=amp&e=PageviewEngagement&_ep_completion=0.25&_ep_client.type=amp&_ep_client.title=_title_&_ep_client.domain=_canonical_host_&_ep_client.url=_canonical_url_&_ep_client.referrer=_document_referrer_&_ep_client.user_agent=_user_agent_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!namespace.amp.permutive.com/track?k=!key&i=_client_id(_ga)_&it=amp&e=PageviewEngagement&_ep_completion=0.25&_ep_client.type=amp&_ep_client.title=_title_&_ep_client.domain=_canonical_host_&_ep_client.url=_canonical_url_&_ep_client.referrer=_document_referrer_&_ep_client.user_agent=_user_agent_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!namespace.amp.permutive.com/track?k=!key&i=_client_id(_ga)_&it=amp&e=Pageview&_ep_isp_info=%24ip_isp_info&_ep_geo_info=%24ip_geo_info&_ep_client.type=amp&_ep_client.title=_title_&_ep_client.domain=_canonical_host_&_ep_client.url=_canonical_url_&_ep_client.referrer=_document_referrer_&_ep_client.user_agent=_user_agent_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!namespace.amp.permutive.com/track?k=!key&i=_client_id(_ga)_&it=amp&_ep_client.type=amp&_ep_client.title=_title_&_ep_client.domain=_canonical_host_&_ep_client.url=_canonical_url_&_ep_client.referrer=_document_referrer_&_ep_client.user_agent=_user_agent_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!namespace.amp.permutive.com/track?k=!key&i=_client_id(_ga)_&it=amp&e=Pageview&_ep_isp_info=%24ip_isp_info&_ep_geo_info=%24ip_geo_info&_ep_client.type=amp&_ep_client.title=_title_&_ep_client.domain=_canonical_host_&_ep_client.url=_canonical_url_&_ep_client.referrer=_document_referrer_&_ep_client.user_agent=_user_agent_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!namespace.amp.permutive.com/track?k=!key&i=_client_id(_ga)_&it=amp&e=PageviewEngagement&_ep_engaged_time=5&_ep_client.type=amp&_ep_client.title=_title_&_ep_client.domain=_canonical_host_&_ep_client.url=_canonical_url_&_ep_client.referrer=_document_referrer_&_ep_client.user_agent=_user_agent_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!namespace.amp.permutive.com/track?k=!key&i=_client_id(_ga)_&it=amp&e=PageviewEngagement&_ep_completion=0.25&_ep_client.type=amp&_ep_client.title=_title_&_ep_client.domain=_canonical_host_&_ep_client.url=_canonical_url_&_ep_client.referrer=_document_referrer_&_ep_client.user_agent=_user_agent_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!namespace.amp.permutive.com/track?k=!key&i=_client_id(_ga)_&it=amp&e=!event&_ep_client.type=amp&_ep_client.title=_title_&_ep_client.domain=_canonical_host_&_ep_client.url=_canonical_url_&_ep_client.referrer=_document_referrer_&_ep_client.user_agent=_user_agent_' | |
analytics vendor: permutive | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://events.pi-stats.com/eventsamp/?e=PageLoad&pid=!property&url=_ampdoc_url_&cnt=!cntId&lang=!language&ref=_document_referrer_&id=_client_id(piStatsDEVICEID)_&ua=_user_agent_&ctype=web&blang=_browser_language_&v=2.0&dist=Javascript&eventtype=pageview' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://events.pi-stats.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://events.pi-stats.com/eventsamp/?e=PageLoad&pid=!property&url=_ampdoc_url_&cnt=!cntId&lang=!language&ref=_document_referrer_&id=_client_id(piStatsDEVICEID)_&ua=_user_agent_&ctype=web&blang=_browser_language_&v=2.0&dist=Javascript' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://events.pi-stats.com/eventsamp/?e=PageLoad&pid=!property&url=_ampdoc_url_&cnt=!cntId&lang=!language&ref=_document_referrer_&id=_client_id(piStatsDEVICEID)_&ua=_user_agent_&ctype=web&blang=_browser_language_&v=2.0&dist=Javascript&eventtype=pageview' | |
analytics vendor: piStats | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: piano test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api-v3.tinypass.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/api/v3' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&pageview_id=_page_view_id_&rand=_random_&_client_id=_client_id_&aid=!aid' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api-v3.tinypass.com/api/v3/page/track?url=_canonical_url_&referer=_document_referrer_&content_created=!contentCreated&content_author=!contentAuthor&content_section=!contentSection&timezone_offset=_timezone_&tags=!tags&_url=_ampdoc_url_&screen=_screen_width_x_screen_height_&pageview_id=_page_view_id_&rand=_random_&_client_id=_client_id_&aid=!aid' | |
analytics vendor: piano | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pa.pinpoll.com/v1?url=_source_url_&sourceHost=_source_host_&sourceHostname=_source_hostname_&sourcePath=_source_path_&canonicalUrl=_canonical_url_&platform=AMP&title=_title_&referrer=_document_referrer_&screenHeight=_screen_height_&screenWidth=_screen_width_&screenColorDepth=_screen_color_depth_&ua=_user_agent_&clientId=_client_id(pinpoll)_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pa.pinpoll.com/v1?url=_source_url_&sourceHost=_source_host_&sourceHostname=_source_hostname_&sourcePath=_source_path_&canonicalUrl=_canonical_url_&platform=AMP&title=_title_&referrer=_document_referrer_&screenHeight=_screen_height_&screenWidth=_screen_width_&screenColorDepth=_screen_color_depth_&ua=_user_agent_&clientId=_client_id(pinpoll)_' | |
analytics vendor: pinpoll | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://adserver.pressboard.ca/track/attention-amp?&=1&url=_canonical_url_&referrer=_document_referrer_&ts=_timestamp_&ua=_user_agent_&rand=_random_&uid=_client_id(_pressboardmedia)_&mid=!mediaId&cid=!campaignId&sid=!storyRequestId&geoid=!geoNameId&cn=!country&rg=!region&ct=!city&dbi=!dbInstance&tz=!timeZoneOffset&hbt=1&pvid=_page_view_id_&asurl=_source_url_&ash=_scroll_height_&asnh=_screen_height_&aasnh=_available_screen_height_&avh=_viewport_height_&ast=_scroll_top_&atet=_total_engaged_time_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://adserver.pressboard.ca' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&=1&url=_canonical_url_&referrer=_document_referrer_&ts=_timestamp_&ua=_user_agent_&rand=_random_&uid=_client_id(_pressboardmedia)_&mid=!mediaId&cid=!campaignId&sid=!storyRequestId&geoid=!geoNameId&cn=!country&rg=!region&ct=!city&dbi=!dbInstance&tz=!timeZoneOffset' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&hbt=1&pvid=_page_view_id_&asurl=_source_url_&ash=_scroll_height_&asnh=_screen_height_&aasnh=_available_screen_height_&avh=_viewport_height_&ast=_scroll_top_&atet=_total_engaged_time_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://adserver.pressboard.ca/track/attention-amp?&=1&url=_canonical_url_&referrer=_document_referrer_&ts=_timestamp_&ua=_user_agent_&rand=_random_&uid=_client_id(_pressboardmedia)_&mid=!mediaId&cid=!campaignId&sid=!storyRequestId&geoid=!geoNameId&cn=!country&rg=!region&ct=!city&dbi=!dbInstance&tz=!timeZoneOffset&hbt=1&pvid=_page_view_id_&asurl=_source_url_&ash=_scroll_height_&asnh=_screen_height_&aasnh=_available_screen_height_&avh=_viewport_height_&ast=_scroll_top_&atet=_total_engaged_time_' | |
analytics vendor: pressboard | |
● test requests | |
WARN: '[AmpAnalytics <unknown id>] request against destroyed embed: ', 'timer' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'u_tz=240&v=1&cookie=_client_id(__gads)_&cdm=!sourceHostName&_amp_source_origin=_source_host_&extrainfo=' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pubads.g.doubleclick.net/subopt/data?u_tz=240&v=1&cookie=_client_id(__gads)_&cdm=!sourceHostName&_amp_source_origin=_source_host_&extrainfo=' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pubads.g.doubleclick.net/subopt/data?u_tz=240&v=1&cookie=_client_id(__gads)_&cdm=!sourceHostName&_amp_source_origin=_source_host_&extrainfo=%7B%22product%22%3A%20%5B!products%5D%7D&states=!publicationId%3A!state' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pubads.g.doubleclick.net/subopt/data?u_tz=240&v=1&cookie=_client_id(__gads)_&cdm=!sourceHostName&_amp_source_origin=_source_host_&extrainfo=!data&events=!publicationId%3A!event' | |
analytics vendor: subscriptions-propensity | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pixel.quantserve.com/pixel;r=_random_;a=!pcode;labels=!labels;fpan=;fpa=_client_id(__qca)_;ns=0;ce=1;cm=;je=0;sr=_screen_width_x_screen_height_x_screen_color_depth_;enc=n;et=_timestamp_;ref=_document_referrer_;url=_canonical_url_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pixel.quantserve.com/pixel' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://pixel.quantserve.com/pixel;r=_random_;a=!pcode;labels=!labels;fpan=;fpa=_client_id(__qca)_;ns=0;ce=1;cm=;je=0;sr=_screen_width_x_screen_height_x_screen_color_depth_;enc=n;et=_timestamp_;ref=_document_referrer_;url=_canonical_url_' | |
analytics vendor: quantcast | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: rakam test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '?api.api_key=!writeKey&prop._platform=amp&prop._device_id=_client_id(rakam_device_id)_&prop.locale=_browser_language_&prop.path=_canonical_path_&prop.url=_canonical_url_&prop.color_depth=_screen_color_depth_&prop._referrer=_document_referrer_&prop.title=_title_&prop.timezone=_timezone_&prop._time=_timestamp_&prop.resolution=_screen_width_ × _screen_height_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!apiEndpoint/event/pixel?api.api_key=!writeKey&prop._platform=amp&prop._device_id=_client_id(rakam_device_id)_&prop.locale=_browser_language_&prop.path=_canonical_path_&prop.url=_canonical_url_&prop.color_depth=_screen_color_depth_&prop._referrer=_document_referrer_&prop.title=_title_&prop.timezone=_timezone_&prop._time=_timestamp_&prop.resolution=_screen_width_ × _screen_height_&collection=!pageViewName' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!apiEndpoint/event/pixel?api.api_key=!writeKey&prop._platform=amp&prop._device_id=_client_id(rakam_device_id)_&prop.locale=_browser_language_&prop.path=_canonical_path_&prop.url=_canonical_url_&prop.color_depth=_screen_color_depth_&prop._referrer=_document_referrer_&prop.title=_title_&prop.timezone=_timezone_&prop._time=_timestamp_&prop.resolution=_screen_width_ × _screen_height_&collection=!collection' | |
analytics vendor: rakam | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: reppublika test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://t5.mindtake.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '/tag/cid/' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'Service=!service&Category=!category&Url=_source_url_&Device=!device&uid=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://t5.mindtake.com/tag/cid/!code/track.gif?Service=!service&Category=!category&Url=_source_url_&Device=!device&uid=_random_' | |
analytics vendor: reppublika | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.retargetly.com/api?id=!accountId&src=!sourceId&url=_source_url_&n=_title_&ref=_document_referrer_&ua=_user_agent_&random=_random_&bl=_browser_language_&source=amp' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.retargetly.com' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.retargetly.com/api?id=!accountId&src=!sourceId&url=_source_url_&n=_title_&ref=_document_referrer_&ua=_user_agent_&random=_random_&bl=_browser_language_&source=amp' | |
analytics vendor: retargetly | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
INFO: '[amp-analytics/linker-manager] linker config for %s is not enabled and will be ignored.', 'segment' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.segment.io/v1/pixel/page?writeKey=!writeKey&context.library.name=amp&anonymousId=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&context.locale=_browser_language_&context.page.path=_canonical_path_&context.page.url=_canonical_url_&context.page.referrer=_document_referrer_&context.page.title=_title_&context.screen.width=_screen_width_&context.screen.height=_screen_height_&name=!name' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.segment.io/v1/pixel' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '?writeKey=!writeKey&context.library.name=amp&anonymousId=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&context.locale=_browser_language_&context.page.path=_canonical_path_&context.page.url=_canonical_url_&context.page.referrer=_document_referrer_&context.page.title=_title_&context.screen.width=_screen_width_&context.screen.height=_screen_height_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.segment.io/v1/pixel/page?writeKey=!writeKey&context.library.name=amp&anonymousId=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&context.locale=_browser_language_&context.page.path=_canonical_path_&context.page.url=_canonical_url_&context.page.referrer=_document_referrer_&context.page.title=_title_&context.screen.width=_screen_width_&context.screen.height=_screen_height_&name=!name' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://api.segment.io/v1/pixel/track?writeKey=!writeKey&context.library.name=amp&anonymousId=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&context.locale=_browser_language_&context.page.path=_canonical_path_&context.page.url=_canonical_url_&context.page.referrer=_document_referrer_&context.page.title=_title_&context.screen.width=_screen_width_&context.screen.height=_screen_height_&event=!event' | |
analytics vendor: segment | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://amp.shinystat.com/cgi-bin/shinyamp.cgi?AMP=1&RM=_random_&USER=!account&PAG=!page&HR=_source_url_&REFER=_document_referrer_&RES=_screen_width_X_screen_height_&COLOR=_screen_color_depth_&CID=_client_id(AMP_CID)_&PAGID=_page_view_id_&TITL=_title_&RQC=1&VIE=_viewer_&PLT=_page_load_time_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://amp.shinystat.com/cgi-bin/shinyamp.cgi' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'AMP=1&RM=_random_&USER=!account&PAG=!page&HR=_source_url_&REFER=_document_referrer_&RES=_screen_width_X_screen_height_&COLOR=_screen_color_depth_&CID=_client_id(AMP_CID)_&PAGID=_page_view_id_&TITL=_title_&RQC=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&VIE=_viewer_&PLT=_page_load_time_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&SSXL=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&LINK=!outboundLink' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://amp.shinystat.com/cgi-bin/shinyamp.cgi?AMP=1&RM=_random_&USER=!account&PAG=!page&HR=_source_url_&REFER=_document_referrer_&RES=_screen_width_X_screen_height_&COLOR=_screen_color_depth_&CID=_client_id(AMP_CID)_&PAGID=_page_view_id_&TITL=_title_&RQC=1&VIE=_viewer_&PLT=_page_load_time_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://amp.shinystat.com/cgi-bin/shinyamp.cgi?AMP=1&RM=_random_&USER=!account&PAG=!page&HR=_source_url_&REFER=_document_referrer_&RES=_screen_width_X_screen_height_&COLOR=_screen_color_depth_&CID=_client_id(AMP_CID)_&PAGID=_page_view_id_&TITL=_title_&RQC=1&SSXL=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://amp.shinystat.com/cgi-bin/shinyamp.cgi?AMP=1&RM=_random_&USER=!account&PAG=!page&HR=_source_url_&REFER=_document_referrer_&RES=_screen_width_X_screen_height_&COLOR=_screen_color_depth_&CID=_client_id(AMP_CID)_&PAGID=_page_view_id_&TITL=_title_&RQC=1&LINK=!outboundLink' | |
analytics vendor: shinystat | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://edge.simplereach.com/t?amp=true&pid=!pid&title=_title_&url=_canonical_url_&date=!published_at&authors=!authors&channels=!categories&tags=!tags&referrer=_document_referrer_&page_url=_source_url_&user_id=_client_id(sr_amp_id)_&domain=_canonical_host_&article_id=!article_id&ignore_metadata=!ignore_metadata&t=5000&e=5000' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://edge.simplereach.com/n?amp=true&pid=!pid&title=_title_&url=_canonical_url_&date=!published_at&authors=!authors&channels=!categories&tags=!tags&referrer=_document_referrer_&page_url=_source_url_&user_id=_client_id(sr_amp_id)_&domain=_canonical_host_&article_id=!article_id&ignore_metadata=!ignore_metadata' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://edge.simplereach.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'amp=true&pid=!pid&title=_title_&url=_canonical_url_&date=!published_at&authors=!authors&channels=!categories&tags=!tags&referrer=_document_referrer_&page_url=_source_url_&user_id=_client_id(sr_amp_id)_&domain=_canonical_host_&article_id=!article_id&ignore_metadata=!ignore_metadata' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://edge.simplereach.com/n?amp=true&pid=!pid&title=_title_&url=_canonical_url_&date=!published_at&authors=!authors&channels=!categories&tags=!tags&referrer=_document_referrer_&page_url=_source_url_&user_id=_client_id(sr_amp_id)_&domain=_canonical_host_&article_id=!article_id&ignore_metadata=!ignore_metadata' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://edge.simplereach.com/t?amp=true&pid=!pid&title=_title_&url=_canonical_url_&date=!published_at&authors=!authors&channels=!categories&tags=!tags&referrer=_document_referrer_&page_url=_source_url_&user_id=_client_id(sr_amp_id)_&domain=_canonical_host_&article_id=!article_id&ignore_metadata=!ignore_metadata&t=5000&e=5000' | |
analytics vendor: simplereach | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: snowplow test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'amp-0.3' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!collectorHost/i?url=_canonical_url_&page=_title_&res=_screen_width_x_screen_height_&stm=_timestamp_&tz=_timezone_code_&aid=!appId&p=web&tv=amp-0.3&cd=_screen_color_depth_&cs=_document_charset_&duid=_client_id(_sp_id)_&lang=_browser_language_&refr=_document_referrer_&vp=_viewport_width_x_viewport_height_&ds=_scroll_width_x_scroll_height_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!collectorHost/i?url=_canonical_url_&page=_title_&res=_screen_width_x_screen_height_&stm=_timestamp_&tz=_timezone_code_&aid=!appId&p=web&tv=amp-0.3&cd=_screen_color_depth_&cs=_document_charset_&duid=_client_id(_sp_id)_&lang=_browser_language_&refr=_document_referrer_&vp=_viewport_width_x_viewport_height_&ds=_scroll_width_x_scroll_height_&e=pv' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!collectorHost/i?url=_canonical_url_&page=_title_&res=_screen_width_x_screen_height_&stm=_timestamp_&tz=_timezone_code_&aid=!appId&p=web&tv=amp-0.3&cd=_screen_color_depth_&cs=_document_charset_&duid=_client_id(_sp_id)_&lang=_browser_language_&refr=_document_referrer_&vp=_viewport_width_x_viewport_height_&ds=_scroll_width_x_scroll_height_&e=se&se_ca=!structEventCategory&se_ac=!structEventAction&se_la=!structEventLabel&se_pr=!structEventProperty&se_va=!structEventValue' | |
analytics vendor: snowplow | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: snowplow_v2 test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
INFO: '[amp-analytics/linker-manager] linker config for %s is not enabled and will be ignored.', 'linker' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!collectorHost/i?p=web&tv=amp-1.0.0&url=_ampdoc_url_&page=_title_&res=_screen_width_x_screen_height_&dtm=_timestamp_&tz=_timezone_code_&aid=!appId&cd=_screen_color_depth_&cs=_document_charset_&lang=_browser_language_&refr=_document_referrer_&vp=_viewport_width_x_viewport_height_&ua=_user_agent_&ds=_scroll_width_x_scroll_height_&uid=!userId&co=%7B%22schema%22%3A%22iglu%3Acom.snowplowanalytics.snowplow%2Fcontexts%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%5B%7B%22schema%22%3A%22iglu%3Adev.amp.snowplow%2Famp_id%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%7B%22ampClientId%22%3A%22_client_id(_sp_id)_%22%2C%20%22domainUserid%22%3A%20%22_cookie(_sp_duid)_%22%2C%20%22userId%22%3A%20%22!userId%22%7D%7D%2C_replace(!customContexts%2C%5E%2C*(.%2B%3F)%2C*%24%2C%241%2C)_%7B%22schema%22%3A%22iglu%3Adev.amp.snowplow%2Famp_web_page%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%7B%22ampPageViewId%22%3A%22_page_view_id_64_%22%7D%7D%5D%7D' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!collectorHost/i?p=web&tv=amp-1.0.0&e=pv&url=_ampdoc_url_&page=_title_&res=_screen_width_x_screen_height_&dtm=_timestamp_&tz=_timezone_code_&aid=!appId&cd=_screen_color_depth_&cs=_document_charset_&lang=_browser_language_&refr=_document_referrer_&vp=_viewport_width_x_viewport_height_&ua=_user_agent_&ds=_scroll_width_x_scroll_height_&uid=!userId&co=%7B%22schema%22%3A%22iglu%3Acom.snowplowanalytics.snowplow%2Fcontexts%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%5B%7B%22schema%22%3A%22iglu%3Adev.amp.snowplow%2Famp_id%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%7B%22ampClientId%22%3A%22_client_id(_sp_id)_%22%2C%20%22domainUserid%22%3A%20%22_cookie(_sp_duid)_%22%2C%20%22userId%22%3A%20%22!userId%22%7D%7D%2C_replace(!customContexts%2C%5E%2C*(.%2B%3F)%2C*%24%2C%241%2C)_%7B%22schema%22%3A%22iglu%3Adev.amp.snowplow%2Famp_web_page%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%7B%22ampPageViewId%22%3A%22_page_view_id_64_%22%7D%7D%5D%7D' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!collectorHost/i?p=web&tv=amp-1.0.0&e=se&se_ca=!structEventCategory&se_ac=!structEventAction&se_la=!structEventLabel&se_pr=!structEventProperty&se_va=_if(!structEventValue%2C!structEventValue%2Cnull)_&url=_ampdoc_url_&page=_title_&res=_screen_width_x_screen_height_&dtm=_timestamp_&tz=_timezone_code_&aid=!appId&cd=_screen_color_depth_&cs=_document_charset_&lang=_browser_language_&refr=_document_referrer_&vp=_viewport_width_x_viewport_height_&ua=_user_agent_&ds=_scroll_width_x_scroll_height_&uid=!userId&co=%7B%22schema%22%3A%22iglu%3Acom.snowplowanalytics.snowplow%2Fcontexts%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%5B%7B%22schema%22%3A%22iglu%3Adev.amp.snowplow%2Famp_id%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%7B%22ampClientId%22%3A%22_client_id(_sp_id)_%22%2C%20%22domainUserid%22%3A%20%22_cookie(_sp_duid)_%22%2C%20%22userId%22%3A%20%22!userId%22%7D%7D%2C_replace(!customContexts%2C%5E%2C*(.%2B%3F)%2C*%24%2C%241%2C)_%7B%22schema%22%3A%22iglu%3Adev.amp.snowplow%2Famp_web_page%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%7B%22ampPageViewId%22%3A%22_page_view_id_64_%22%7D%7D%5D%7D' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!collectorHost/i?p=web&tv=amp-1.0.0&e=pp&pp_mix=_scroll_left_&pp_miy=_scroll_top_&url=_ampdoc_url_&page=_title_&res=_screen_width_x_screen_height_&dtm=_timestamp_&tz=_timezone_code_&aid=!appId&cd=_screen_color_depth_&cs=_document_charset_&lang=_browser_language_&refr=_document_referrer_&vp=_viewport_width_x_viewport_height_&ua=_user_agent_&ds=_scroll_width_x_scroll_height_&uid=!userId&co=%7B%22schema%22%3A%22iglu%3Acom.snowplowanalytics.snowplow%2Fcontexts%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%5B%7B%22schema%22%3A%22iglu%3Adev.amp.snowplow%2Famp_id%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%7B%22ampClientId%22%3A%22_client_id(_sp_id)_%22%2C%20%22domainUserid%22%3A%20%22_cookie(_sp_duid)_%22%2C%20%22userId%22%3A%20%22!userId%22%7D%7D%2C_replace(!customContexts%2C%5E%2C*(.%2B%3F)%2C*%24%2C%241%2C)_%7B%22schema%22%3A%22iglu%3Adev.amp.snowplow%2Famp_web_page%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%7B%22ampPageViewId%22%3A%22_page_view_id_64_%22%7D%7D%5D%7D' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!collectorHost/i?p=web&tv=amp-1.0.0&e=ue&ue_pr=%7B%22schema%22%3A%22iglu%3Acom.snowplowanalytics.snowplow%2Funstruct_event%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%7B%22schema%22%3A%22iglu%3A!customEventSchemaVendor%2F!customEventSchemaName%2Fjsonschema%2F!customEventSchemaVersion%22%2C%22data%22%3A!customEventSchemaData%7D%7D&url=_ampdoc_url_&page=_title_&res=_screen_width_x_screen_height_&dtm=_timestamp_&tz=_timezone_code_&aid=!appId&cd=_screen_color_depth_&cs=_document_charset_&lang=_browser_language_&refr=_document_referrer_&vp=_viewport_width_x_viewport_height_&ua=_user_agent_&ds=_scroll_width_x_scroll_height_&uid=!userId&co=%7B%22schema%22%3A%22iglu%3Acom.snowplowanalytics.snowplow%2Fcontexts%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%5B%7B%22schema%22%3A%22iglu%3Adev.amp.snowplow%2Famp_id%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%7B%22ampClientId%22%3A%22_client_id(_sp_id)_%22%2C%20%22domainUserid%22%3A%20%22_cookie(_sp_duid)_%22%2C%20%22userId%22%3A%20%22!userId%22%7D%7D%2C_replace(!customContexts%2C%5E%2C*(.%2B%3F)%2C*%24%2C%241%2C)_%7B%22schema%22%3A%22iglu%3Adev.amp.snowplow%2Famp_web_page%2Fjsonschema%2F1-0-0%22%2C%22data%22%3A%7B%22ampPageViewId%22%3A%22_page_view_id_64_%22%7D%7D%5D%7D' | |
analytics vendor: snowplow_v2 | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: teaanalytics test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!channel/v1/amp' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'user.user_unique_id=_client_id(__tea_sdk__user_unique_id)_&header.app_id=!app_id&header.language=_browser_language_&header.screen_height=_screen_height_&header.screen_width=_screen_width_&header.resolution=_screen_height_x_screen_width_&header.tz_offset=_timezone_&header.tz_name=_timezone_code_&header.referrer=_document_referrer_&header.custom.user_agent=_user_agent_&event.local_time_ms=_timestamp_&event.params._staging_flag=!debug&verbose=!debug' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!channel/v1/amp?user.user_unique_id=_client_id(__tea_sdk__user_unique_id)_&header.app_id=!app_id&header.language=_browser_language_&header.screen_height=_screen_height_&header.screen_width=_screen_width_&header.resolution=_screen_height_x_screen_width_&header.tz_offset=_timezone_&header.tz_name=_timezone_code_&header.referrer=_document_referrer_&header.custom.user_agent=_user_agent_&event.local_time_ms=_timestamp_&event.params._staging_flag=!debug&verbose=!debug&rnd=_random_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!channel/v1/amp?user.user_unique_id=_client_id(__tea_sdk__user_unique_id)_&header.app_id=!app_id&header.language=_browser_language_&header.screen_height=_screen_height_&header.screen_width=_screen_width_&header.resolution=_screen_height_x_screen_width_&header.tz_offset=_timezone_&header.tz_name=_timezone_code_&header.referrer=_document_referrer_&header.custom.user_agent=_user_agent_&event.local_time_ms=_timestamp_&event.params._staging_flag=!debug&verbose=!debug&rnd=_random_&event=predefine_pageview&event.params.url=_source_url_&event.params.url_path=_source_path_&event.params.title=_title_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!channel/v1/amp?user.user_unique_id=_client_id(__tea_sdk__user_unique_id)_&header.app_id=!app_id&header.language=_browser_language_&header.screen_height=_screen_height_&header.screen_width=_screen_width_&header.resolution=_screen_height_x_screen_width_&header.tz_offset=_timezone_&header.tz_name=_timezone_code_&header.referrer=_document_referrer_&header.custom.user_agent=_user_agent_&event.local_time_ms=_timestamp_&event.params._staging_flag=!debug&verbose=!debug&rnd=_random_' | |
analytics vendor: teaanalytics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://collect.tealiumiq.com/event/?tealium_account=TEALIUM_ACCOUNT&tealium_profile=TEALIUM_PROFILE&tealium_datasource=TEALIUM_DATASOURCE&tealium_visitor_id=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&url=_source_url_&doc_url=_ampdoc_url_&domain=_source_host_&pathname=_source_path_&_hostname=_ampdoc_hostname_&canonical_hostname=_canonical_hostname_&title=_title_&viewport_width=_available_screen_width_&viewport_height=_available_screen_height_×tamp=_timestamp_&tz=_timezone_&lang=_browser_language_&tealium_event=screen_view&_version=_amp_version_&_request_count=1&referrer=_document_referrer_&screen_size=_screen_width_x_screen_height_&content_load_ms=_content_load_time_&page_view_id=_page_view_id_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://collect.tealiumiq.com' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://collect.tealiumiq.com/event/?tealium_account=TEALIUM_ACCOUNT&tealium_profile=TEALIUM_PROFILE&tealium_datasource=TEALIUM_DATASOURCE&tealium_visitor_id=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&url=_source_url_&doc_url=_ampdoc_url_&domain=_source_host_&pathname=_source_path_&_hostname=_ampdoc_hostname_&canonical_hostname=_canonical_hostname_&title=_title_&viewport_width=_available_screen_width_&viewport_height=_available_screen_height_×tamp=_timestamp_&tz=_timezone_&lang=_browser_language_&tealium_event=!tealium_event&_version=_amp_version_&_request_count=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'tealium_account=TEALIUM_ACCOUNT&tealium_profile=TEALIUM_PROFILE&tealium_datasource=TEALIUM_DATASOURCE&tealium_visitor_id=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'url=_source_url_&doc_url=_ampdoc_url_&domain=_source_host_&pathname=_source_path_&_hostname=_ampdoc_hostname_&canonical_hostname=_canonical_hostname_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'title=_title_&viewport_width=_available_screen_width_&viewport_height=_available_screen_height_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'timestamp=_timestamp_&tz=_timezone_&lang=_browser_language_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://collect.tealiumiq.com/event/?tealium_account=TEALIUM_ACCOUNT&tealium_profile=TEALIUM_PROFILE&tealium_datasource=TEALIUM_DATASOURCE&tealium_visitor_id=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&url=_source_url_&doc_url=_ampdoc_url_&domain=_source_host_&pathname=_source_path_&_hostname=_ampdoc_hostname_&canonical_hostname=_canonical_hostname_&title=_title_&viewport_width=_available_screen_width_&viewport_height=_available_screen_height_×tamp=_timestamp_&tz=_timezone_&lang=_browser_language_&tealium_event=!tealium_event&_version=_amp_version_&_request_count=1&referrer=_document_referrer_&screen_size=_screen_width_x_screen_height_&content_load_ms=_content_load_time_&page_view_id=_page_view_id_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://collect.tealiumiq.com/event/?tealium_account=TEALIUM_ACCOUNT&tealium_profile=TEALIUM_PROFILE&tealium_datasource=TEALIUM_DATASOURCE&tealium_visitor_id=_client_id(AMP_ECID_GOOGLE%2C%2C_ga)_&url=_source_url_&doc_url=_ampdoc_url_&domain=_source_host_&pathname=_source_path_&_hostname=_ampdoc_hostname_&canonical_hostname=_canonical_hostname_&title=_title_&viewport_width=_available_screen_width_&viewport_height=_available_screen_height_×tamp=_timestamp_&tz=_timezone_&lang=_browser_language_&tealium_event=!tealium_event&_version=_amp_version_&_request_count=1&scroll_y=_scroll_top_&scroll_x=_scroll_left_' | |
analytics vendor: tealiumcollect | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://kraken.rambler.ru/cnt/?pid=!pid&rid=_page_view_id_&v=1.0.0&rn=_random_&ruid=_client_id(ruid)_&ct=amp&et=pv&pt=_title_&rf=_document_referrer_&en=_document_charset_&la=_browser_language_&tz=_timezone_&sr=_screen_width_x_screen_height_&cd=_screen_color_depth_-bit&bs=_scroll_width_x_scroll_height_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://kraken.rambler.ru' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://kraken.rambler.ru/cnt/?pid=!pid&rid=_page_view_id_&v=1.0.0&rn=_random_&ruid=_client_id(ruid)_&ct=amp' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://kraken.rambler.ru/cnt/?pid=!pid&rid=_page_view_id_&v=1.0.0&rn=_random_&ruid=_client_id(ruid)_&ct=amp&et=pv&pt=_title_&rf=_document_referrer_&en=_document_charset_&la=_browser_language_&tz=_timezone_&sr=_screen_width_x_screen_height_&cd=_screen_color_depth_-bit&bs=_scroll_width_x_scroll_height_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&sr=_screen_width_x_screen_height_&cd=_screen_color_depth_-bit&bs=_scroll_width_x_scroll_height_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&pt=_title_&rf=_document_referrer_&en=_document_charset_&la=_browser_language_&tz=_timezone_' | |
analytics vendor: top100 | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://top-fwz1.mail.ru/counter?js=13;id=!id;u=_source_url_;r=_document_referrer_;s=_screen_width_*_screen_height_;vp=_viewport_width_*_viewport_height_;st=!start;gender=!gender;age=!age;pid=!pid;userid=!userid;device=!device;params=!params;_=_random_;title=_title_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://top-fwz1.mail.ru/counter?js=13;id=!id;u=_source_url_;r=_document_referrer_;s=_screen_width_*_screen_height_;vp=_viewport_width_*_viewport_height_;st=!start;gender=!gender;age=!age;pid=!pid;userid=!userid;device=!device;params=!params;_=_random_;title=_title_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://top-fwz1.mail.ru/tracker?js=13;id=!id;u=_source_url_;r=_document_referrer_;s=_screen_width_*_screen_height_;vp=_viewport_width_*_viewport_height_;st=!start;gender=!gender;age=!age;pid=!pid;userid=!userid;device=!device;params=!params;_=_random_;title=_title_;e=RG%3A!value%2F!goal' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://top-fwz1.mail.ru/tracker?js=13;id=!id;u=_source_url_;r=_document_referrer_;s=_screen_width_*_screen_height_;vp=_viewport_width_*_viewport_height_;st=!start;gender=!gender;age=!age;pid=!pid;userid=!userid;device=!device;params=!params;_=_random_;e=CE%3A!value%2F!category%3B!action%3B!label' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://top-fwz1.mail.ru' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'js=13;id=!id;u=_source_url_;r=_document_referrer_;s=_screen_width_*_screen_height_;vp=_viewport_width_*_viewport_height_;st=!start;gender=!gender;age=!age;pid=!pid;userid=!userid;device=!device;params=!params;_=_random_' | |
analytics vendor: topmailru | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: treasuredata test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://in.treasuredata.com/postback/v3/event/!database' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'td_write_key=!writeKey&td_global_id=td_global_id&td_client_id=_client_id(_td)_&td_charset=_document_charset_&td_language=_browser_language_&td_color=_screen_color_depth_&td_screen=_screen_width_x_scroll_height_&td_viewport=_available_screen_width_x_available_screen_height_&td_title=_title_&td_url=_source_url_&td_user_agent=_user_agent_&td_host=_source_host_&td_path=_source_path_&td_referrer=_document_referrer_&td_ip=td_ip' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://in.treasuredata.com/postback/v3/event/!database/events?td_write_key=!writeKey&td_global_id=td_global_id&td_client_id=_client_id(_td)_&td_charset=_document_charset_&td_language=_browser_language_&td_color=_screen_color_depth_&td_screen=_screen_width_x_scroll_height_&td_viewport=_available_screen_width_x_available_screen_height_&td_title=_title_&td_url=_source_url_&td_user_agent=_user_agent_&td_host=_source_host_&td_path=_source_path_&td_referrer=_document_referrer_&td_ip=td_ip' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://in.treasuredata.com/postback/v3/event/!database/events?td_write_key=!writeKey&td_global_id=td_global_id&td_client_id=_client_id(_td)_&td_charset=_document_charset_&td_language=_browser_language_&td_color=_screen_color_depth_&td_screen=_screen_width_x_scroll_height_&td_viewport=_available_screen_width_x_available_screen_height_&td_title=_title_&td_url=_source_url_&td_user_agent=_user_agent_&td_host=_source_host_&td_path=_source_path_&td_referrer=_document_referrer_&td_ip=td_ip' | |
analytics vendor: treasuredata | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://b.cnzz.com/utrack?&_siteid=!siteid&_distinct_id=_client_id(umeng_amp_id)_&_t=_timestamp_&_s=google&_b=web&_r=_external_referrer_&_h=_screen_height_&_w=_screen_width_&_ivt=!initial_view_time&_ename=$w_page_view&_eprops=!eventProps' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://b.cnzz.com/utrack?&_siteid=!siteid&_distinct_id=_client_id(umeng_amp_id)_&_t=_timestamp_&_s=google&_b=web&_r=_external_referrer_&_h=_screen_height_&_w=_screen_width_&_ivt=!initial_view_time' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://b.cnzz.com/utrack?&_siteid=!siteid&_distinct_id=_client_id(umeng_amp_id)_&_t=_timestamp_&_s=google&_b=web&_r=_external_referrer_&_h=_screen_height_&_w=_screen_width_&_ivt=!initial_view_time&_ename=$w_page_view&_eprops=!eventProps' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://b.cnzz.com/utrack?&_siteid=!siteid&_distinct_id=_client_id(umeng_amp_id)_&_t=_timestamp_&_s=google&_b=web&_r=_external_referrer_&_h=_screen_height_&_w=_screen_width_&_ivt=!initial_view_time&_ename=!eventName&_eprops=!eventProps' | |
analytics vendor: umenganalytics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hit-pool.upscore.com/amp?u_id=_client_id(upscore)_&hit_id=_page_view_id_&scTop=_scroll_top_&scHeight=_scroll_height_&vHeight=_viewport_height_&domain=!domain&load=_dom_interactive_time_×pent=_total_engaged_time_&author=!author&creator=!creator&o_id=!object_id&o_type=!object_type&pubdate=!pubdate&ref=_document_referrer_§ion=!section&url=_canonical_url_&agent=_user_agent_&location=_amp_geo(ISOCountry)_&c_keys=!customKeys&c_values=!customValues&type=init' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hit-pool.upscore.com/amp?' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'u_id=_client_id(upscore)_&hit_id=_page_view_id_&scTop=_scroll_top_&scHeight=_scroll_height_&vHeight=_viewport_height_&domain=!domain&load=_dom_interactive_time_×pent=_total_engaged_time_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'author=!author&creator=!creator&o_id=!object_id&o_type=!object_type&pubdate=!pubdate&ref=_document_referrer_§ion=!section&url=_canonical_url_&agent=_user_agent_&location=_amp_geo(ISOCountry)_&c_keys=!customKeys&c_values=!customValues' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hit-pool.upscore.com/amp?u_id=_client_id(upscore)_&hit_id=_page_view_id_&scTop=_scroll_top_&scHeight=_scroll_height_&vHeight=_viewport_height_&domain=!domain&load=_dom_interactive_time_×pent=_total_engaged_time_&type=final' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hit-pool.upscore.com/amp?u_id=_client_id(upscore)_&hit_id=_page_view_id_&scTop=_scroll_top_&scHeight=_scroll_height_&vHeight=_viewport_height_&domain=!domain&load=_dom_interactive_time_×pent=_total_engaged_time_&type=pulse' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hit-pool.upscore.com/amp?u_id=_client_id(upscore)_&hit_id=_page_view_id_&scTop=_scroll_top_&scHeight=_scroll_height_&vHeight=_viewport_height_&domain=!domain&load=_dom_interactive_time_×pent=_total_engaged_time_&author=!author&creator=!creator&o_id=!object_id&o_type=!object_type&pubdate=!pubdate&ref=_document_referrer_§ion=!section&url=_canonical_url_&agent=_user_agent_&location=_amp_geo(ISOCountry)_&c_keys=!customKeys&c_values=!customValues&type=init' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hit-pool.upscore.com/amp?url=_canonical_url_&video_id=!video_id' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'ct=!currentTime&d=!duration' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hit-pool.upscore.com/amp?url=_canonical_url_&video_id=!video_id&e=video_start&ct=!currentTime&d=!duration&video_name=!video_name&video_thumb=!video_thumbnail' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hit-pool.upscore.com/amp?url=_canonical_url_&video_id=!video_id&e=video_pause&ct=!currentTime&d=!duration' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hit-pool.upscore.com/amp?url=_canonical_url_&video_id=!video_id&e=video_stop&ct=!currentTime&d=!duration' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://hit-pool.upscore.com/amp?url=_canonical_url_&video_id=!video_id&e=video_position&ct=!currentTime&d=!duration' | |
analytics vendor: upscore | |
● test requests | |
WARN: '[AmpAnalytics <unknown id>] request against destroyed embed: ', 'timer' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ids-dmp.vpadn.com/set?t=_timestamp_&dn=&ctid=_client_id(vpadn-ctid)_&is_amp=1&page_id=_page_view_id_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://tags-dmp.vpadn.com/et?t=_timestamp_&sdkn=j&sdkv=1.2.0&lk=!licence_key&en=UTF-8&ctid=_client_id(vpadn-ctid)_&ev=page_view&pl=%7B%22title%22%3A%22_title_%22%2C%22current%22%3A%22_canonical_url_%22%2C%22previous%22%3A%22_document_referrer_%22%7D&is_amp=1&page_id=_page_view_id_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://tags-dmp.vpadn.com?is_amp=1&page_id=_page_view_id_' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://ids-dmp.vpadn.com/set?t=_timestamp_&dn=&ctid=_client_id(vpadn-ctid)_&is_amp=1&page_id=_page_view_id_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://tags-dmp.vpadn.com/et?t=_timestamp_&sdkn=j&sdkv=1.2.0&lk=!licence_key&en=UTF-8&ctid=_client_id(vpadn-ctid)_&ev=element_interact&pl={"name":"!category","action":"!action","value":"_document_referrer_"}&is_amp=1&page_id=_page_view_id_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://tags-dmp.vpadn.com/et?t=_timestamp_&sdkn=j&sdkv=1.2.0&lk=!licence_key&en=UTF-8&ctid=_client_id(vpadn-ctid)_&ev=!ev_name&pl=!payload&is_amp=1&page_id=_page_view_id_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://tags-dmp.vpadn.com/et?t=_timestamp_&sdkn=j&sdkv=1.2.0&lk=!licence_key&en=UTF-8&ctid=_client_id(vpadn-ctid)_&ev=element_interact&pl={"name":"!category","action":"!action","value":"!label"}&is_amp=1&page_id=_page_view_id_' | |
analytics vendor: vponanalytics | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://c.!region.webengage.com/amp?licenseCode=!licenseCode&luid=_client_id(we_luid)_&pageUrl=_canonical_url_&pageTitle=_title_&referrer=_document_referrer_&vh=_viewport_height_&vw=_viewport_width_&category=application&eventName=Page Viewed&isAmp=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://c.!region.webengage.com/amp?licenseCode=!licenseCode&luid=_client_id(we_luid)_&pageUrl=_canonical_url_&pageTitle=_title_&referrer=_document_referrer_&vh=_viewport_height_&vw=_viewport_width_&category=application&isAmp=1' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://c.!region.webengage.com/amp?licenseCode=!licenseCode&luid=_client_id(we_luid)_&pageUrl=_canonical_url_&pageTitle=_title_&referrer=_document_referrer_&vh=_viewport_height_&vw=_viewport_width_&category=application&eventName=Page Viewed&isAmp=1' | |
analytics vendor: webengage | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: webtrekk test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '?p=432,!contentId,1,_screen_width_x_screen_height_,_screen_color_depth_,1,_timestamp_,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&pu=_source_url_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&cp1=!pageParameter1&cp2=!pageParameter2&cp3=!pageParameter3&cp4=!pageParameter4&cp5=!pageParameter5&cp6=!pageParameter6&cp7=!pageParameter7&cp8=!pageParameter8&cp9=!pageParameter9&cp10=!pageParameter10' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&cg1=!pageCategory1&cg2=!pageCategory2&cg3=!pageCategory3&cg4=!pageCategory4&cg5=!pageCategory5&cg6=!pageCategory6&cg7=!pageCategory7&cg8=!pageCategory8&cg9=!pageCategory9&cg10=!pageCategory10' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt?p=432,!contentId,1,_screen_width_x_screen_height_,_screen_color_depth_,1,_timestamp_,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_&cp1=!pageParameter1&cp2=!pageParameter2&cp3=!pageParameter3&cp4=!pageParameter4&cp5=!pageParameter5&cp6=!pageParameter6&cp7=!pageParameter7&cp8=!pageParameter8&cp9=!pageParameter9&cp10=!pageParameter10&cg1=!pageCategory1&cg2=!pageCategory2&cg3=!pageCategory3&cg4=!pageCategory4&cg5=!pageCategory5&cg6=!pageCategory6&cg7=!pageCategory7&cg8=!pageCategory8&cg9=!pageCategory9&cg10=!pageCategory10&pu=_source_url_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&ck1=!actionParameter1&ck2=!actionParameter2&ck3=!actionParameter3&ck4=!actionParameter4&ck5=!actionParameter5' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt?p=432,!contentId,1,_screen_width_x_screen_height_,_screen_color_depth_,1,_timestamp_,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_&ct=!actionName&ck1=!actionParameter1&ck2=!actionParameter2&ck3=!actionParameter3&ck4=!actionParameter4&ck5=!actionParameter5&pu=_source_url_' | |
analytics vendor: webtrekk | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
ERROR: '[AmpAnalytics <unknown id>] No triggers were found in the config. No analytics data will be sent.' | |
The test "amp-analytics vendor request tests analytics vendor: webtrekk_v2 test requests" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '?p=440,_title_,1,_screen_width_x_screen_height_,_screen_color_depth_,1,' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', ',_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '?p=440,_title_,1,_screen_width_x_screen_height_,_screen_color_depth_,1,_timestamp_,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&pu=_source_url_&eor=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt?p=440,_title_,1,_screen_width_x_screen_height_,_screen_color_depth_,1,_timestamp_,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_&&cp570=_page_load_time_&pu=_source_url_&eor=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt?p=440,_title_,1,_screen_width_x_screen_height_,_screen_color_depth_,1,_timestamp_,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_&ct=webtrekk_ignore&&pu=_source_url_&eor=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt?p=440,_title_,1,_screen_width_x_screen_height_,_screen_color_depth_,1,_timestamp_,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_&ct=webtrekk_ignore&ck540=!verticalScrollBoundary&pu=_source_url_&eor=1' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt?p=440,_title_,1,_screen_width_x_screen_height_,_screen_color_depth_,1,,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_&mi=!id' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', '&mt1=!currentTime&mt2=!duration&&pu=_source_url_&eor=1&x=!playedTotal' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt?p=440,_title_,1,_screen_width_x_screen_height_,_screen_color_depth_,1,,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_&mi=!id&mk=play&mt1=!currentTime&mt2=!duration&&pu=_source_url_&eor=1&x=!playedTotal' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt?p=440,_title_,1,_screen_width_x_screen_height_,_screen_color_depth_,1,,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_&mi=!id&mk=pause&mt1=!currentTime&mt2=!duration&&pu=_source_url_&eor=1&x=!playedTotal' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt?p=440,_title_,1,_screen_width_x_screen_height_,_screen_color_depth_,1,,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_&mi=!id&mk=pos&mt1=!currentTime&mt2=!duration&&pu=_source_url_&eor=1&x=!playedTotal' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[amp-analytics/transport] Response unparseable or failed to send image request', 'https://!trackDomain/!trackId/wt?p=440,_title_,1,_screen_width_x_screen_height_,_screen_color_depth_,1,,_document_referrer_,_viewport_width_x_viewport_height_,0&tz=_timezone_&eid=_client_id(amp-wt3-eid)_&la=_browser_language_&mi=!id&mk=eof&mt1=!currentTime&mt2=!duration&&pu=_source_url_&eor=1&x=!playedTotal' | |
analytics vendor: webtrekk_v2 | |
● test requests | |
WARN: '[lru-cache] Trimming LRU cache' | |
VisibilityManagerForMapp | |
● should initialize correctly | |
● should resolve root layout box | |
● should switch visibility based on VisibilityInterface trigger | |
● should switch root model to no-visibility on dispose | |
● should not support listen on element | |
● should protect from invalid intersection values | |
● listen on root integrated | |
VisibilityManagerForDoc | |
● should initialize correctly backgrounded | |
● should initialize correctly foregrounded | |
● should resolve root layout box | |
● should resolve root layout box for in-a-box | |
● should switch visibility based on viewer for main doc | |
● should switch visibility for in-a-box | |
● should switch root model to no-visibility on dispose | |
ERROR: '[amp-analytics/visibility-manager] visiblePercentageThresholds entry invalid min/max value' | |
The test "VisibilityManagerForDoc create correct number of models" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: '[amp-analytics/visibility-manager] visiblePercentageThresholds entry invalid min/max value' | |
The test "VisibilityManagerForDoc create correct number of models" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: '[amp-analytics/visibility-manager] visiblePercentageThresholds entry length is not 2' | |
The test "VisibilityManagerForDoc create correct number of models" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
ERROR: '[amp-analytics/visibility-manager] visiblePercentageThresholds entry is not valid number' | |
The test "VisibilityManagerForDoc create correct number of models" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● create correct number of models | |
● creates model for 0 percent and 100 percent | |
● does not allow min==max, when they are neither 0 nor 100 | |
● should dispose everything | |
● should polyfill and dispose intersection observer | |
● should support polyfill on non-amp root element | |
● should listen on root | |
● should listen on root with ready signal | |
● should pass func to create readyReportPromise to model | |
● should unlisten root | |
● should listen on a element | |
● should protect from invalid intersection values | |
● should listen on a element with different specs | |
● should listen on a resource | |
● should dispose with parent | |
● should remove from parent when disposed | |
● should initialize correctly backgrounded | |
● should initialize correctly in foreground | |
● should resolve root layout box | |
● should ask parent to observe host element | |
● should delegate observation to parent | |
● should depend on parent for visibility | |
VisibilityManager integrated | |
● should execute "visible" trigger with simple spec | |
● should wait for readyPromise with readyReportPromise | |
● should wait for readyReportPromise with reportWhen | |
● should wait for readyReportPromise with reportWhen and never meets visiblePercentageMin | |
● should accumulate timings and wait for readyReportPromise with reportWhen and high minTotalVisibleTime | |
● should wait for readyReportPromise when missing readyPromise | |
● should execute "visible" trigger with percent range | |
● should trigger "visible" with no duration condition | |
● should trigger "visible" with duration condition | |
● should populate "backgrounded" and "backgroundedAtStart" | |
scroll depth | |
● should correctly update maxScrollDepth | |
VisibilityManager in shadow runtime | |
● should create a visibility manager for a shadow doc | |
● should create a visibility manager for a FIE | |
VisibilityModel | |
config | |
● should parse visiblePercentageMin | |
● should parse visiblePercentageMax | |
● should parse totalTimeMin | |
● should parse totalTimeMax | |
● should parse continuousTimeMin | |
● should parse continuousTimeMax | |
● should parse repeat | |
structure | |
● should dispose fully | |
● should update on any visibility event | |
● should NOT update when started visible | |
● should NOT update when started invisible | |
● should update visibility and ready | |
● should default export var state | |
● should export full state | |
● should reset on repeat | |
● should not reset scroll depths on repeat | |
update monitor | |
● conditions not met only | |
● conditions not met and cannot schedule | |
● conditions not met, schedule for total time | |
● conditions not met, schedule for continuous time | |
● conditions not met, schedule timeout again | |
● conditions not met, schedule w/o total time | |
● conditions not met, schedule w/o continuous time | |
● conditions not met -> invisible | |
● conditions met | |
● conditions met, wait to reset | |
● conditions not met, reset | |
with reportReadyPromise | |
● conditions met, send when report ready | |
● conditions met, but no longer met when ready to report | |
with reportWhen | |
● should trigger event with reportWhen, test case #0 | |
● should trigger event with reportWhen, test case #1 | |
● should trigger event with reportWhen, test case #2 | |
tracking math | |
● should register "seen" values | |
● should ignore "load visibility" after timeout | |
● should match default visibility position | |
● should NOT allow invalid values | |
● should match custom visibility position | |
● should transition to visible and stay visible | |
● should transition to invisible and back to visible | |
● should yield based on position only | |
● should yield based on total time only | |
● should yield based on continuous time only | |
end-to-end events | |
● should trigger for visibility percent only | |
● should only update load-time visibility once | |
● should fire with totalTimeMin condition | |
● should fire with continuousTimeMin condition | |
● should fire with totalTimeMin and visiblePercentageMin | |
● should fire with continuousTimeMin=1k and totalTimeMin=2k | |
● should fire with continuousTimeMin=1k and visPercentageMin=50 | |
● should fire for visiblePercentageMin=visiblePercentageMax=100 | |
● should fire for visiblePercentageMin=visiblePercentageMax=0 | |
end to end event repeat | |
● should wait for repeat interval | |
● should wait for not match to fire again w/o interval | |
scroll depth | |
● should correctly update initialScrollDepth | |
amp-anim | |
● should propagate ARIA attributes | |
● should propagate src and srcset | |
● should set src to placeholder on unlayout and reset on layout | |
● should clear srcset if missing on relayout | |
● should propagate the object-fit attribute | |
● should not propagate the object-fit attribute if invalid | |
● should propagate the object-position attribute | |
● should not propagate the object-position attribute if invalid | |
AmpAnimation | |
in top-level doc | |
● should load and parse config | |
ERROR: '"<script type=application/json>" must be present' | |
The test "AmpAnimation in top-level doc should fail without config" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should fail without config | |
ERROR: 'failed to parse animation script: Unexpected token b in JSON at position 0 [object HTMLElement]' | |
The test "AmpAnimation in top-level doc should fail with malformed config" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should fail with malformed config | |
● should default trigger to none | |
● should parse visibility trigger | |
ERROR: 'Only allowed value for "trigger" is "visibility": [object HTMLElement]' | |
The test "AmpAnimation in top-level doc should fail on invalid trigger" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should fail on invalid trigger | |
● should update visibility from viewer | |
● should update visibility when paused | |
● should not activate w/o visibility trigger | |
● should activate with visibility trigger | |
● should trigger animation, but not start when invisible | |
● should trigger animation and start when visible | |
● should resume/pause when visibility changes | |
● should NOT resume/pause when visible, but not triggered | |
● should NOT resume when visible if paused by an action | |
● should create runner | |
● should finish animation and runner | |
● should pause/resume animation and runner | |
● should finish when animation is complete | |
● should resize from ampdoc viewport | |
● should cancel running animation on resize and schedule restart | |
● should ignore not-triggered animation on resize | |
● should cancel and NOT restart hidden animation on resize | |
● should ignore start when not triggered | |
● should ignore start when not triggered | |
actions | |
● should trigger activate | |
● should trigger start | |
● should create runner with args | |
● should trigger but not start if not visible | |
● should trigger restart | |
● should trigger pause after start | |
● should ignore pause before start | |
● should trigger resume after start follwed by pause | |
● should ignore resume before start | |
● should toggle pause/resume after start | |
● should ignore toggle pause/resume before start | |
● should seek-to (time) regardless of start | |
● should seek-to (percent) regardless of start | |
● should clamp percent (upper) seekTo | |
● should clamp percent (lower) seekTo | |
● should trigger reverse after start | |
● should ignore reverse before start | |
● should trigger finish after start | |
● should trigger cancel after start | |
● should set paused by action properly | |
● should set paused by action flag (skipped) | |
in FIE | |
● should update visibility from embed | |
● should find target in the embed only via selector | |
ERROR: '[amp-animation] string targets are deprecated' | |
The test "AmpAnimation in FIE should find target in the embed only via target" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should find target in the embed only via target | |
● should take resize from embed's window | |
CSS parse | |
● should parse empty string as null | |
● should parse string | |
● should parse ident | |
● should parse number | |
● should parse percent | |
● should parse length | |
● should parse angle | |
● should parse time | |
● should parse url | |
● should parse hexcolor | |
● should parse a function | |
● should parse a translate() | |
● should parse a concat of functions | |
● should allow two-way concatenation | |
● should parse a dimension function | |
● should parse a num-convert function | |
● should parse a rand function | |
● should parse an index function | |
● should parse a length function | |
● should parse a var() | |
● should parse a calc() | |
CSS resolve | |
● should not resolve value for a const | |
● should resolve value for a non-const | |
● should resolve a const concat node | |
● should resolve a var concat node | |
● should resolve a null concat node | |
● should resolve a number node | |
● should resolve a percent node w/o dimension | |
● should resolve a percent node w/dimension | |
url | |
● should always consider as non-const | |
● should resolve an absolute HTTPS URL | |
● should resolve an data URL | |
● should resolve an empty URL | |
● should re-resolve an HTTP url | |
● should re-resolve a relative url | |
● should fail when context resolution fails | |
length | |
● should always consider as const | |
● should resolve a px-length node | |
● should resolve a em-length node | |
● should resolve a rem-length node | |
● should disallow a real-length node | |
● should resolve a percent-length in w-direction | |
● should resolve a percent-length in h-direction | |
● should resolve a percent-length in unknown direction | |
vw-length | |
● should resolve a vw-length node | |
● should resolve a vh-length node | |
● should resolve a vmin-length node | |
● should resolve a vmax-length node | |
angle | |
● should always consider as const | |
● should resolve a rad-angle node | |
● should resolve a deg-length node | |
● should resolve a grad-length node | |
time | |
● should always consider as const | |
● should resolve a milliseconds node | |
● should resolve a seconds node | |
function | |
● should resolve a const-arg function | |
● should resolve a var-arg function | |
● should norm function | |
● should push a dimension when specified | |
● should resolve a var-arg function with nulls | |
translate | |
● should always consider as const | |
● should resolve 2d translate | |
● should resolve abbreviated 2d translate | |
● should resolve translateX | |
● should resolve translateY | |
● should resolve translateZ | |
● should resolve translate3d | |
● should resolve translate with null args to null | |
dimension | |
● should always consider as non-const | |
● should be always a non-const and no css | |
● should resolve width on the current node | |
● should resolve height on the current node | |
● should resolve width on the selected node | |
● should resolve height on the selected node | |
● should resolve width on the selected closest node | |
● should resolve height on the selected closest node | |
num-convert | |
● should always consider as non-const | |
● should always be a non-const and no css | |
● should resolve num from a number | |
● should resolve num from a zero | |
● should resolve num from a length | |
● should resolve num from a zero length | |
● should resolve num from a time | |
● should resolve num from a percent | |
● should resolve num from an expression | |
● should resolve num with a null arg | |
● should resolve num from a string | |
● should resolve num from a non-parseable string | |
rand | |
● should always consider as non-const | |
● should always be a non-const and no css | |
● should resolve a no-arg rand | |
● should rand two numbers | |
● should rand two numbers in opposite direction | |
● should rand two same-unit values - length | |
● should rand two same-unit values - times | |
● should rand two same-unit values - percent | |
● should resolve both parts | |
● should resolve to null with null args | |
● should only allow numerics | |
● should only allow same-type | |
● should normalize units | |
index | |
● should always consider as non-const | |
● should always be a non-const and no css | |
● should resolve a no-arg | |
● should combine with calc | |
● should always consider as non-const | |
● should always be a non-const and no css | |
● should resolve a no-arg | |
● should combine with calc | |
var | |
● should always consider as non-const | |
● should resolve a var node | |
● should resolve a var node and normalize | |
● should resolve a var node with def | |
● should resolve a var node by fallback to def | |
● should resolve a var node with def as var | |
● should resolve a var node w/o fallback to def | |
calc | |
● should always consider as non-const | |
● should resolve a single-value calc | |
sum | |
● should add two same-unit values | |
● should add two same-unit values and normalize | |
● should add two same-unit values - times | |
● should subtract two same-unit values | |
● should resolve both parts | |
● should resolve to null with null args | |
● should only allow numerics | |
● should only allow same-type | |
● should normalize units | |
● should resolve left as percent | |
● should resolve right as percent | |
● should normalize the non-percent part | |
● should resolve with dimension function | |
product | |
● should only allow numerics | |
● should multiply with right number | |
● should multiply with left number | |
● should multiply for non-norm | |
● should multiply for time | |
● should require at least one number | |
● should divide with right number | |
● should divide for non-norm | |
● should divide for time | |
● should only allow number denominator | |
● should resolve divide-by-zero as null | |
● should resolve both parts | |
● should resolve to null for null args | |
extractKeyframes | |
discovery | |
● should tolerate documents w/o stylesheets | |
● should ignore keyframes in amp-boilerplate | |
● should ignore keyframes in amp-runtime and amp-extension | |
● should find simplest keyframes in amp-custom | |
● should find simplest keyframes in amp-keyframes | |
● should replace easing property | |
● should remove vendor prefixes | |
● should support different offsets | |
● should select the latest keyframes | |
● should scan in media CSS | |
● should check media in CSS | |
● should scan in supports CSS | |
● should check supports in CSS | |
MeasureScanner | |
● should parse/validate timing duration | |
● should parse/validate timing delay | |
● should parse/validate timing iterations | |
● should warn if timing is fractional | |
● should parse/validate timing easing | |
● should parse/validate timing direction | |
● should parse/validate timing fill | |
● should merge timing | |
● should accept multi-animation object | |
● should accept multi-animation array | |
● should accept multi-animation array with some disabled elements | |
● should accept multi-animation array with all disabled elements | |
● should accept switch-animation with first match | |
● should accept switch-animation with second match | |
● should accept switch-animation with no matches | |
● should propagate vars | |
● should calculate vars based on parent and same context | |
● should override vars in subtargets with index | |
● should accept keyframe animation | |
● should parse object keyframe | |
● should parse object keyframe w/partial offsets | |
● should parse object keyframe with parsing | |
● should parse object w/partial keyframe with parsing | |
● should passthrough service props in a partial object keyframe | |
● should parse array keyframe | |
● should parse array keyframe w/partial offsets | |
● should parse array keyframe w/non-zero offset | |
● should propagate partial properties into implicit 0-offset | |
● should propagate partial properties into explicit 0-offset | |
● should parse array keyframe with parsing | |
● should parse width/height functions | |
● should parse rand function | |
● should parse num function | |
● should fail when cannot discover style keyframes | |
● should discover style keyframes | |
● should polyfill partial style keyframes | |
● should check media in top animation | |
● should check media in sub-animations | |
● should check supports in top animation | |
● should check supports in sub-animations | |
● should interprete absent CSS/supports as false | |
● should check media AND supports | |
● should find targets by selector | |
● should find targets by complex selector | |
ERROR: '[amp-animation] string targets are deprecated' | |
The test "MeasureScanner should find target by ID" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should find target by ID | |
● should allow not-found targets | |
● should require any target spec | |
● should not allow both selector and target spec | |
● should build keyframe for multiple targets | |
● should resolve index() for multiple targets | |
● should resolve length() correctly | |
● should be able to resolve animation with args | |
composite animations | |
● should fail when animation cannot be found | |
● should fail when animation reference is not an amp-animation | |
ERROR: 'Recursive animations are not allowed: "animation2"' | |
The test "MeasureScanner composite animations should fail the recursive animation" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should fail the recursive animation | |
● should resolve animation w/o target | |
● should combine animations | |
● should NOT override the target | |
● should NOT override the target in nested animations | |
● should multiply animations by selector | |
● should propagate vars | |
● should propagate vars and index by selector from parent | |
● should propagate vars and index by selector from child | |
CSS evaluations | |
● should measure styles | |
● should extract vars | |
● should use cache | |
● should NOT parse CSS for simple values | |
● should evaluate CSS for non-normalized values | |
● should evaluate CSS for complex values | |
● should require target for CSS that need element context | |
● should resolve simple time CSS w/o evaluation | |
● should resolve time CSS with evaluation | |
● should resolve invalid time CSS to null | |
● should resolve simple number CSS w/o evaluation | |
● should resolve number CSS with evaluation | |
● should resolve invalid number CSS to null | |
● should read a var (skipped) | |
● should disallow recursive vars | |
● should propagate dimension | |
● should resolve viewport size, with cache | |
● should resolve current index | |
● should resolve current and root font size | |
● should resolve current element size | |
● should resolve the selected element size | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should resolve a valid URL | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should NOT resolve an invalid URL | |
createRunner | |
● should unblock non-AMP elements immediately | |
● should block AMP elements (skipped) | |
NativeWebAnimationRunner | |
● should call init on all animations and stay in IDLE state | |
● should call start on all animations | |
● should fail to init twice | |
● should set vars on start | |
● should complete all animations are complete | |
● should pause all animations | |
● should only allow pause when started | |
● should resume all animations | |
● should not resume partially finished animations | |
● should only allow resume when started | |
● should reverse all animations | |
● should only allow reverse when started | |
● should finish all animations | |
● should ignore finish when not started | |
● should cancel all animations | |
● should ignore cancel when not started | |
● should seek all animations | |
● should seek percent all animations | |
total duration | |
● single request, 0 total | |
● single request, 0 iteration | |
● single request, 1 iteration | |
● single request, multiple iterations | |
● single request, multiple iterations with iterationStart | |
● single request, infinite iteration | |
● multiple requests - 0 total | |
● multiple requests - bigger by duration | |
● multiple requests - bigger by iteration | |
● multiple request, infinite iteration | |
amp-apester-media-utils | |
● Extract element tags as empty array when there is no element | |
● Extract element tags when tags are defined | |
● Extract element tags when tags are defined | |
● Extract title works well with no dl json | |
● Extract title works well with dl json | |
● Extract title cuts | |
● Extract title works with few jsonLd | |
● Should return empty array if there is no meta tags | |
● Should not return array with meta tags | |
● Should return array with meta tags | |
● Should not extract title when there is meta keywords | |
● Should extract title when there is no meta keywords | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
amp-apester-media | |
● renders | |
● propagates aria label to placeholder image | |
WARN: '[lru-cache] Trimming LRU cache' | |
● render playlist | |
● renders responsively | |
● removes iframe after unlayoutCallback | |
● requires media-id or channel-token | |
amp-apester-media-monetization | |
● Should show a companion display ad | |
● Should show an SR companion ad below | |
● Should show an SR companion ad above | |
● Should show an SR companion above with display companion | |
● Should not show ads if disabled amp companion ads | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
amp-app-banner | |
Choosing platform | |
● should upgrade to AmpIosAppBanner on iOS | |
WARN: '[lru-cache] Trimming LRU cache' | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should upgrade to AmpAndroidAppBanner on Android | |
INFO: '[amp-app-banner] Only iOS or Android platforms are currently supported.' | |
● should not upgrade if platform not supported | |
INFO: '[amp-app-banner] Only iOS or Android platforms are currently supported.' | |
non-supported platform | |
● should remove the banner | |
iOS | |
Embedded | |
Safari | |
● should preconnect to app store | |
● should show banner and set up correctly (skipped) | |
● should throw if open button is missing | |
● should remove banner if already dismissed (skipped) | |
● should remove banner if meta is not provided | |
● should parse meta content and setup hrefs | |
● should parse meta content and setup hrefs if app-argument is not provided | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should parse meta content and validate app-argument url | |
● should hide banner if embedded but viewer does not support navigateTo | |
Chrome | |
● should preconnect to app store | |
● should show banner and set up correctly (skipped) | |
● should throw if open button is missing | |
● should remove banner if already dismissed (skipped) | |
● should remove banner if meta is not provided | |
● should parse meta content and setup hrefs | |
● should parse meta content and setup hrefs if app-argument is not provided | |
● should parse meta content and validate app-argument url | |
● should hide banner if embedded but viewer does not support navigateTo | |
Firefox | |
● should preconnect to app store | |
● should show banner and set up correctly (skipped) | |
● should throw if open button is missing | |
● should remove banner if already dismissed (skipped) | |
● should remove banner if meta is not provided | |
● should parse meta content and setup hrefs | |
● should parse meta content and setup hrefs if app-argument is not provided | |
● should parse meta content and validate app-argument url | |
● should hide banner if embedded but viewer does not support navigateTo | |
Non-embedded | |
Safari | |
● should NOT show banner (skipped) | |
Chrome | |
● should preconnect to app store | |
● should show banner and set up correctly (skipped) | |
● should throw if open button is missing | |
● should remove banner if already dismissed (skipped) | |
● should remove banner if meta is not provided | |
● should parse meta content and setup hrefs | |
● should parse meta content and setup hrefs if app-argument is not provided | |
● should parse meta content and validate app-argument url | |
Firefox | |
● should preconnect to app store | |
● should show banner and set up correctly (skipped) | |
● should throw if open button is missing | |
● should remove banner if already dismissed (skipped) | |
● should remove banner if meta is not provided | |
● should parse meta content and setup hrefs | |
● should parse meta content and setup hrefs if app-argument is not provided | |
● should parse meta content and validate app-argument url | |
Android | |
Embedded | |
Chrome | |
● should preconnect to play store and preload manifest | |
● should preconnect to play store and preload origin-manifest | |
● should show banner and set up correctly | |
● should throw if open button is missing | |
● should remove banner if already dismissed (skipped) | |
● should remove banner if manifest is not provided | |
● should parse manifest and set hrefs | |
● should parse origin manifest and set hrefs | |
● should hide banner if embedded but viewer does not support navigateTo | |
ERROR: 'TypeError: Cannot read property '__AMP_TOP' of null' | |
The test "amp-app-banner Android Embedded Chrome should hide banner if embedded but viewer does not support navigateTo" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
Firefox | |
● should preconnect to play store and preload manifest | |
● should preconnect to play store and preload origin-manifest | |
● should show banner and set up correctly | |
● should throw if open button is missing | |
● should remove banner if already dismissed (skipped) | |
● should remove banner if manifest is not provided | |
● should parse manifest and set hrefs | |
● should parse origin manifest and set hrefs | |
● should hide banner if embedded but viewer does not support navigateTo | |
ERROR: 'TypeError: Cannot read property '__AMP_TOP' of null' | |
The test "amp-app-banner Android Embedded Firefox should hide banner if embedded but viewer does not support navigateTo" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
Non-embedded | |
Chrome | |
● should NOT show banner (skipped) | |
Firefox | |
● should preconnect to play store and preload manifest | |
● should preconnect to play store and preload origin-manifest | |
● should show banner and set up correctly | |
● should throw if open button is missing | |
● should remove banner if already dismissed (skipped) | |
● should remove banner if manifest is not provided | |
● should parse manifest and set hrefs | |
● should parse origin manifest and set hrefs | |
Windows Edge | |
● Embedded should NOT show banner | |
INFO: '[amp-app-banner] Only iOS or Android platforms are currently supported.' | |
● Non-embedded should NOT show banner | |
INFO: '[amp-app-banner] Only iOS or Android platforms are currently supported.' | |
Abstract App Banner | |
● should setup click listener | |
● should create dismiss button and setup click listener | |
WARN: '[lru-cache] Trimming LRU cache' | |
amp-audio | |
● should load audio through attribute | |
● should not preload audio | |
● should only preload audio metadata | |
● should attach `<audio>` element and execute relevant actions for layout="nodisplay" | |
WARN: '[lru-cache] Trimming LRU cache' | |
● should load audio through sources | |
● should set its dimensions to the browser natural | |
● should set its natural dimension only if not specified | |
● should fallback when not available | |
● should propagate ARIA attributes | |
● should play/pause when `play`/`pause` actions are called | |
WARN: '[amp-audio] <amp-story> elements do not support actions on <amp-audio> elements' | |
WARN: '[amp-audio] <amp-story> elements do not support actions on <amp-audio> elements' | |
● should not play/pause when `amp-audio` is a direct descendant of `amp-story` | |
WARN: '[lru-cache] Trimming LRU cache' | |
ad-network-config | |
● should return null for unknown type | |
INFO: '[amp-auto-ads] unable to fulfill ad strategy' | |
amp-strategy | |
● should call placeAd with correct parameters | |
● should place an ad in the first placement only with correct attributes | |
● should place the second ad when placing the first one fails | |
INFO: '[amp-auto-ads] unable to fulfill ad strategy' | |
● should place an ad in the first placement only when second placement too close. | |
● should place an ad in the first placement and second placement when sufficiently far apart. | |
● should place an ad in the first placement only when already an ad on the page. | |
INFO: '[amp-auto-ads] unable to fulfill ad strategy' | |
● should report unable to place either ad | |
ad-tracker | |
● should return the correct ad count | |
● should find position is too near when close to ad above | |
● should find position is too near when close to ad below | |
● should find position is too near when inside ad | |
● should find position is not too near an ad | |
● should use the initial min ad spacing | |
● should use a subsequent ad spacing when an existing ad present | |
● should use a subsequent ad spacing when two existing ads present | |
● should change min spacing as ads added | |
● should add an ad to the tracker | |
getExistingAds | |
● should find all the amp-ads in the DOM | |
getAdConstraintsFromConfigObj | |
● should get from pixel values | |
● should get from viewport values | |
● should handle no subsequentMinSpacing | |
WARN: '[amp-auto-ads] Invalid initial min spacing' | |
● should return null when initialMinSpacing unparsable | |
WARN: '[amp-auto-ads] Invalid initial min spacing' | |
● should return null when initialMinSpacing negative | |
WARN: '[amp-auto-ads] Invalid subsequent min spacing' | |
● should return null when subsequentMinSpacing unparsable | |
WARN: '[amp-auto-ads] Invalid subsequent min spacing' | |
● should return null when subsequentMinSpacing negative | |
WARN: '[amp-auto-ads] No subsequentMinSpacing adCount specified' | |
● should return null when no adCount | |
WARN: '[amp-auto-ads] No maxAdCount specified' | |
● should return null when no maxAdCount | |
adsense-network-config | |
AdSense | |
● should generate the config fetch URL | |
● should report responsive-enabled | |
● should truncate the URL if it's too long (skipped) | |
● should generate the attributes | |
● should add data-ad-host to attributes if set on ampAutoAdsElem | |
● should add data-ad-host-channel to attributes if set on ampAutoAdsElem | |
● should add data-ad-host-channel to attributes only if also data-ad-host is present | |
● should get the default ad constraints | |
amp-auto-ads | |
● should wait for viewer visible | |
WARN: '[CustomElement] Cannot resize element and overflow is not available', <amp-ad width="100vw" height="0" layout="fixed" class="i-amphtml-layout-awaiting-size i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined" data-auto-format="rspv" data-full-width="" type="_ping_" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-_ping_-impl" style="width: 100vw; height: 0px;"><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
● should insert three ads on page using config | |
WARN: '[amp-auto-ads] Attribute not whitlisted: bad-name' | |
WARN: '[CustomElement] Cannot resize element and overflow is not available', <amp-ad width="100vw" height="0" layout="fixed" class="i-amphtml-layout-awaiting-size i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined" data-auto-format="rspv" data-full-width="" type="_ping_" data-custom-att-1="val-1" data-custom-att-2="val-2" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-_ping_-impl" style="width: 100vw; height: 0px;"><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
● should insert ads with the config provided attributes | |
WARN: '[CustomElement] Cannot resize element and overflow is not available', <amp-ad layout="fixed-height" height="0" width="auto" class="i-amphtml-layout-awaiting-size i-amphtml-element i-amphtml-layout-fixed-height i-amphtml-layout-size-defined" type="_ping_" data-slot="null" json="null" i-amphtml-layout="fixed-height" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-_ping_-impl" style="height: 0px;"></amp-ad> | |
● should override ad network type with config provided attribute | |
● should fetch a config from the correct URL | |
ERROR: '[Resource] failed to build: amp-auto-ads#1 Error: Missing type attribute' | |
The test "amp-auto-ads should throw an error if no type" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should throw an error if no type | |
ERROR: '[Resource] failed to build: amp-auto-ads#1 Error: No AdNetworkConfig for type: unknowntype' | |
The test "amp-auto-ads should not try and fetch config if unknown type" resulted in a call to console.error. (See above line.) | |
⤷ If the error is not expected, fix the code that generated the error. | |
⤷ If the error is expected (and synchronous), use the following pattern to wrap the test code that generated the error: | |
'allowConsoleError(() => { <code that generated the error> });' | |
⤷ If the error is expected (and asynchronous), use the following pattern at the top of the test: | |
'expectAsyncConsoleError(<string or regex>[, <number of times the error message repeats>]);' | |
● should not try and fetch config if unknown type | |
ERROR: 'The test "amp-auto-ads should not try and fetch config if experiment off" contains an "allowConsoleError" block that didn't result in a call to console.error.' | |
● should not try and fetch config if experiment off | |
WARN: '[amp-auto-ads] a reason' | |
WARN: '[CustomElement] Cannot resize element and overflow is not available', <amp-ad width="100vw" height="0" layout="fixed" class="i-amphtml-layout-awaiting-size i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined" data-auto-format="rspv" data-full-width="" type="_ping_" i-amphtml-layout="fixed" data-amp-slot-index="1" data-a4a-upgrade-type="amp-ad-network-_ping_-impl" style="width: 100vw; height: 0px;"><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
● should still run ad strategies even when noConfigReason present. | |
WARN: '[CustomElement] Cannot resize element and overflow is not available', <amp-ad width="100vw" height="0" layout="fixed" class="i-amphtml-layout-awaiting-size i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined" data-auto-format="rspv" data-full-width="" type="_ping_" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-_ping_-impl" style="width: 100vw; height: 0px;"><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
INFO: '[amp-auto-ads] unable to fulfill ad strategy' | |
Anchor Ad | |
● should not insert anchor ad if not opted in | |
WARN: '[CustomElement] Cannot resize element and overflow is not available', <amp-ad width="100vw" height="0" layout="fixed" class="i-amphtml-layout-awaiting-size i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined" data-auto-format="rspv" data-full-width="" type="_ping_" i-amphtml-layout="fixed" data-amp-slot-index="1" data-a4a-upgrade-type="amp-ad-network-_ping_-impl" style="width: 100vw; height: 0px;"><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
● should insert three ads plus anchor ad | |
INFO: '[amp-auto-ads] No placements in config' | |
INFO: '[amp-auto-ads] unable to fulfill ad strategy' | |
● should insert anchor anchor ad only | |
WARN: '[CustomElement] Cannot resize element and overflow is not available', <amp-ad width="100vw" height="0" layout="fixed" class="i-amphtml-layout-awaiting-size i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined" data-auto-format="rspv" data-full-width="" type="_ping_" i-amphtml-layout="fixed" data-amp-slot-index="1" data-a4a-upgrade-type="amp-ad-network-_ping_-impl" style="width: 100vw; height: 0px;"><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
● should insert three ads with base attribute and anchor anchor ad with provided anchor ad attributes. | |
WARN: '[CustomElement] Cannot resize element and overflow is not available', <amp-ad width="100vw" height="0" layout="fixed" class="i-amphtml-layout-awaiting-size i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined" data-auto-format="rspv" data-full-width="" type="_ping_" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-_ping_-impl" style="width: 100vw; height: 0px;"><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
ad constraints | |
● should insert 3 ads when using the default ad contraints | |
WARN: '[CustomElement] Cannot resize element and overflow is not available', <amp-ad width="100vw" height="0" layout="fixed" class="i-amphtml-layout-awaiting-size i-amphtml-element i-amphtml-notbuilt amp-notbuilt i-amphtml-layout-fixed i-amphtml-layout-size-defined" data-auto-format="rspv" data-full-width="" type="_ping_" i-amphtml-layout="fixed" data-amp-slot-index="0" data-a4a-upgrade-type="amp-ad-network-_ping_-impl" style="width: 100vw; height: 0px;"><div class="i-amphtml-loading-container i-amphtml-fill-content | |
amp-hidden"><div></div></div></amp-ad> | |
● should insert 4 ads when using the config ad constraints | |
anchor-ad-strategy | |
run | |
● should insert sticky ad if opted in | |
● should not insert sticky ad if not opted in anchor ad | |
WARN: '[amp-auto-ads] Auto ads may not work because of already existing <amp-sticky-ad>.' | |
● should not insert sticky ad if exists one | |
WARN: '[amp-auto-ads] attributes property not an object' | |
attributes | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment