OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <html> |
| 3 <head> |
| 4 <meta charset="utf-8"> |
| 5 <title></title> |
| 6 <script src="../../webcomponentsjs/webcomponents.js"></script> |
| 7 <script src="../../web-component-tester/browser.js"></script> |
| 8 <script src="../../test-fixture/test-fixture-mocha.js"></script> |
| 9 |
| 10 <link rel="import" href="../../polymer/polymer.html"> |
| 11 <link rel="import" href="../../promise-polyfill/promise-polyfill.html"> |
| 12 <link rel="import" href="../../test-fixture/test-fixture.html"> |
| 13 <link rel="import" href="../iron-page-url.html"> |
| 14 </head> |
| 15 |
| 16 <body> |
| 17 <script> |
| 18 'use strict'; |
| 19 |
| 20 function getIframe() { |
| 21 return new Promise(function(resolve, reject) { |
| 22 var iframe = document.createElement('iframe'); |
| 23 var result = getMessageMatching(iframe, function(message) { |
| 24 return message.type === 'ready'; |
| 25 }); |
| 26 iframe.src = './initialization-iframe.html'; |
| 27 document.body.appendChild(iframe); |
| 28 iframe.addEventListener('error', reject); |
| 29 result.then(function() {resolve(iframe)}, reject); |
| 30 }); |
| 31 } |
| 32 |
| 33 function onMessage(iframe, callback) { |
| 34 var f = function(event) { |
| 35 if (event.source === iframe.contentWindow) { |
| 36 callback(event.data); |
| 37 } |
| 38 }; |
| 39 window.addEventListener('message', f, false); |
| 40 return function() { |
| 41 window.removeEventListener('message', f); |
| 42 } |
| 43 } |
| 44 |
| 45 function getMessageMatching(iframe, predicate) { |
| 46 var revoke = function() {}; |
| 47 var result = new Promise(function(resolve, reject) { |
| 48 revoke = onMessage(iframe, function(message) { |
| 49 if (predicate(message)) { |
| 50 resolve(message); |
| 51 } |
| 52 }); |
| 53 }); |
| 54 result.then(revoke, revoke); |
| 55 return result; |
| 56 } |
| 57 |
| 58 function getUrl(iframe) { |
| 59 var result = getMessageMatching(iframe, function(message) { |
| 60 return message.type === 'urlQueryResponse'; |
| 61 }) |
| 62 var revoke = function() {}; |
| 63 var result = new Promise(function(resolve, reject) { |
| 64 revoke = onMessage(iframe, resolve); |
| 65 }); |
| 66 result.then(revoke, revoke); |
| 67 iframe.contentWindow.postMessage({type: 'urlQuery'}, '*'); |
| 68 return result; |
| 69 } |
| 70 |
| 71 function timePasses(ms) { |
| 72 return new Promise(function(resolve) { |
| 73 window.setTimeout(function() { |
| 74 resolve(); |
| 75 }, ms); |
| 76 }); |
| 77 } |
| 78 |
| 79 suite('<iron-page-url>\'s initialization', function() { |
| 80 var iframe; |
| 81 var error; |
| 82 setup(function() { |
| 83 return getIframe().then(function(i) { |
| 84 iframe = i; |
| 85 function isError(m) {return m.type === 'error'} |
| 86 getMessageMatching(iframe, isError).then(function(m) { |
| 87 error = m.error; |
| 88 }); |
| 89 }); |
| 90 }); |
| 91 teardown(function() { |
| 92 if (iframe) { |
| 93 document.body.removeChild(iframe); |
| 94 } |
| 95 var e = error; |
| 96 iframe = null; |
| 97 error = null; |
| 98 if (e) { |
| 99 throw new Error('Error message from contained iframe: ' + e); |
| 100 } |
| 101 }); |
| 102 var cases = [ |
| 103 'default-before', 'attached-before', 'ready-before', |
| 104 'default-after', 'attached-after', 'ready-after', |
| 105 'default-below', 'attached-below', 'ready-below', |
| 106 'default-above', 'attached-above', 'ready-above', |
| 107 'default-container', 'attached-container', 'ready-container' |
| 108 ]; |
| 109 cases.forEach(function(caseName) { |
| 110 test('the url takes priority in ' + caseName + ' initialization', func
tion() { |
| 111 return getUrl(iframe).then(function(url) { |
| 112 expect(url.search).to.be.eq(''); |
| 113 iframe.contentWindow.postMessage({type: 'appendBody', tagName: cas
eName}, '*'); |
| 114 return timePasses(10).then(function() {return getUrl(iframe)}); |
| 115 }).then(function(url) { |
| 116 expect(url.search).to.be.eq(''); |
| 117 }); |
| 118 }); |
| 119 }); |
| 120 var expectedFailureCases = ['timeout-before', 'timeout-after', 'timeout-
below', 'timeout-above', 'timeout-container']; |
| 121 expectedFailureCases.forEach(function(caseName) { |
| 122 test('the url does not take priority in ' + caseName + ' initializatio
n', function() { |
| 123 return getUrl(iframe).then(function(url) { |
| 124 expect(url.search).to.be.eq(''); |
| 125 iframe.contentWindow.postMessage({type: 'appendBody', tagName: cas
eName}, '*'); |
| 126 return timePasses(60).then(function() {return getUrl(iframe)}); |
| 127 }).then(function(url) { |
| 128 expect(url.search).to.be.eq('?on-timeout'); |
| 129 }); |
| 130 }); |
| 131 }); |
| 132 }); |
| 133 </script> |
| 134 </body> |
| 135 </html> |
OLD | NEW |