| const verifyEntries = (entries, filterOptions) => { |
| for (const filterOption of filterOptions) { |
| let countBeforeFiltering = entries.length; |
| |
| // Using negate of the condition so that the next filtering is applied on less entries. |
| entries = entries.filter( |
| e => !(e.entryType == filterOption['entryType'] && e.name.includes(filterOption['name']))); |
| |
| assert_equals( |
| countBeforeFiltering - entries.length, filterOption['expectedCount'], filterOption['failureMsg']); |
| } |
| } |
| |
| const createFilterOption = (name, entryType, expectedCount, msgPrefix, description = '') => { |
| if (description) { |
| description = ' ' + description; |
| } |
| |
| let failureMsg = |
| `${msgPrefix} should have ${expectedCount} ${entryType} entries for name ${name}` + description; |
| |
| return { |
| name: name, |
| entryType: entryType, |
| expectedCount: expectedCount, |
| failureMsg: failureMsg |
| }; |
| } |
| |
| const loadChildFrame = (src) => { |
| return new Promise(resolve => { |
| |
| const childFrame = document.createElement('iframe'); |
| |
| childFrame.addEventListener("load", resolve); |
| |
| childFrame.src = src; |
| |
| document.body.appendChild(childFrame); |
| }); |
| } |
| |
| const loadChildFrameAndGrandchildFrame = (src) => { |
| return new Promise(resolve => { |
| |
| const crossOriginChildFrame = document.createElement('iframe'); |
| |
| // Wait for the child frame to send a message. The child frame would send a message |
| // when it loads its child frame. |
| window.addEventListener('message', e => { |
| if (e.data == 'Load completed') { |
| resolve(); |
| } |
| }); |
| |
| crossOriginChildFrame.src = src; |
| |
| document.body.appendChild(crossOriginChildFrame) |
| }); |
| } |