()
| 107 | } |
| 108 | |
| 109 | function getFakeWindow() { |
| 110 | loadObservable = new Observable(); |
| 111 | const win = { |
| 112 | addEventListener(type, callback) { |
| 113 | loadObservable.add(callback); |
| 114 | }, |
| 115 | Object, |
| 116 | performance: { |
| 117 | timing: { |
| 118 | navigationStart: 100, |
| 119 | loadEventStart: 0, |
| 120 | }, |
| 121 | }, |
| 122 | removeEventListener(type, callback) { |
| 123 | loadObservable.remove(callback); |
| 124 | }, |
| 125 | document: { |
| 126 | nodeType: /* document */ 9, |
| 127 | querySelector: () => { |
| 128 | return {href: canonical}; |
| 129 | }, |
| 130 | getElementById: () => {}, |
| 131 | cookie: '', |
| 132 | documentElement: { |
| 133 | nodeType: /* element */ 1, |
| 134 | getRootNode() { |
| 135 | return win.document; |
| 136 | }, |
| 137 | hasAttribute: () => {}, |
| 138 | }, |
| 139 | }, |
| 140 | Math: { |
| 141 | random: () => 0.1234, |
| 142 | }, |
| 143 | crypto: { |
| 144 | getRandomValues: (array) => { |
| 145 | array[0] = 1; |
| 146 | array[1] = 2; |
| 147 | array[2] = 3; |
| 148 | array[15] = 15; |
| 149 | }, |
| 150 | }, |
| 151 | __AMP_SERVICES: { |
| 152 | 'viewport': {obj: {}, ctor: Object}, |
| 153 | 'cid': { |
| 154 | promise: Promise.resolve({ |
| 155 | get: (config) => |
| 156 | Promise.resolve('test-cid(' + config.scope + ')'), |
| 157 | }), |
| 158 | }, |
| 159 | }, |
| 160 | }; |
| 161 | win.document.defaultView = win; |
| 162 | win.document.documentElement.ownerDocument = win.document; |
| 163 | win.document.head = { |
| 164 | nodeType: /* element */ 1, |
| 165 | // Fake query selectors needed to bypass <meta> tag checks. |
| 166 | querySelector: () => null, |
no test coverage detected