Skip to content

Instantly share code, notes, and snippets.

@mdmower
Created February 23, 2020 17:15
Show Gist options
  • Save mdmower/d2252c6dc06d096687c56a6368a30c41 to your computer and use it in GitHub Desktop.
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.
[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&amp_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&amp_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/&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_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp_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&amp=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&amp=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_&amp_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_&amp_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_&amppage=_ampdoc_url_&bwpt=_title_&bres=_viewport_width_x_viewport_height_&res=_screen_width_x_screen_height_&v=v20171116a&ampv=_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_&amppage=_ampdoc_url_&bwpt=_title_&bres=_viewport_width_x_viewport_height_&res=_screen_width_x_screen_height_&v=v20171116a&ampv=_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_&amppage=_ampdoc_url_&bwpt=_title_&bres=_viewport_width_x_viewport_height_&res=_screen_width_x_screen_height_&v=v20171116a&ampv=_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_&amppage=_ampdoc_url_&bwpt=_title_&bres=_viewport_width_x_viewport_height_&res=_screen_width_x_screen_height_&v=v20171116a&ampv=_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_&amppage=_ampdoc_url_&bwpt=_title_&bres=_viewport_width_x_viewport_height_&res=_screen_width_x_screen_height_&v=v20171116a&ampv=_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&ampV=_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_&ampRef=_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_&ltm=_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_&ltm=_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_&amp=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_&amp=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_&amp=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_&amp=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&currency_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&currency_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&amp=true&ampdocHostname=_ampdoc_hostname_&ampdocUrl=_ampdoc_url_&ampVersion=_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_&timestamp=_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&ampdocHostname=_ampdoc_hostname_&ampdocUrl=_ampdoc_url_&ampVersion=_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_&timestamp=_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&amp=true&ampdocHostname=_ampdoc_hostname_&ampdocUrl=_ampdoc_url_&ampVersion=_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_&timestamp=_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&amp=true&ampdocHostname=_ampdoc_hostname_&ampdocUrl=_ampdoc_url_&ampVersion=_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_&timestamp=_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&amp=true&ampdocHostname=_ampdoc_hostname_&ampdocUrl=_ampdoc_url_&ampVersion=_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_&timestamp=_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&ampVersion=_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&ampVersion=_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&ampVersion=_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&timestamp_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&timestamp_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&timestamp_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&timestamp_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&timestamp_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&timestamp_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&timestamp_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&timestamp_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&amp_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&amp_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&amp_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_&amp.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_&amp.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&ampUrl=_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)_&timestamp=_timestamp_&ampVersion=_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&amp=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_&ampid=_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_&ampid=_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_&ampid=_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_&ampid=_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_&ampid=_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_&amp_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&amp_url=_ampdoc_url_&screen=_screen_width_x_screen_height_&pageview_id=_page_view_id_&rand=_random_&amp_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?&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', '&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'
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?&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_&ampdoc_url=_ampdoc_url_&domain=_source_host_&pathname=_source_path_&amp_hostname=_ampdoc_hostname_&canonical_hostname=_canonical_hostname_&title=_title_&viewport_width=_available_screen_width_&viewport_height=_available_screen_height_&timestamp=_timestamp_&tz=_timezone_&lang=_browser_language_&tealium_event=screen_view&amp_version=_amp_version_&amp_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_&ampdoc_url=_ampdoc_url_&domain=_source_host_&pathname=_source_path_&amp_hostname=_ampdoc_hostname_&canonical_hostname=_canonical_hostname_&title=_title_&viewport_width=_available_screen_width_&viewport_height=_available_screen_height_&timestamp=_timestamp_&tz=_timezone_&lang=_browser_language_&tealium_event=!tealium_event&amp_version=_amp_version_&amp_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_&ampdoc_url=_ampdoc_url_&domain=_source_host_&pathname=_source_path_&amp_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_&ampdoc_url=_ampdoc_url_&domain=_source_host_&pathname=_source_path_&amp_hostname=_ampdoc_hostname_&canonical_hostname=_canonical_hostname_&title=_title_&viewport_width=_available_screen_width_&viewport_height=_available_screen_height_&timestamp=_timestamp_&tz=_timezone_&lang=_browser_language_&tealium_event=!tealium_event&amp_version=_amp_version_&amp_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_&ampdoc_url=_ampdoc_url_&domain=_source_host_&pathname=_source_path_&amp_hostname=_ampdoc_hostname_&canonical_hostname=_canonical_hostname_&title=_title_&viewport_width=_available_screen_width_&viewport_height=_available_screen_height_&timestamp=_timestamp_&tz=_timezone_&lang=_browser_language_&tealium_event=!tealium_event&amp_version=_amp_version_&amp_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_&timespent=_total_engaged_time_&author=!author&creator=!creator&o_id=!object_id&o_type=!object_type&pubdate=!pubdate&ref=_document_referrer_&section=!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_&timespent=_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_&section=!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_&timespent=_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_&timespent=_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_&timespent=_total_engaged_time_&author=!author&creator=!creator&o_id=!object_id&o_type=!object_type&pubdate=!pubdate&ref=_document_referrer_&section=!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