| OLD | NEW |
| (Empty) |
| 1 /** | |
| 2 * @license | |
| 3 * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. | |
| 4 * This code may only be used under the BSD style license found at http://polyme
r.github.io/LICENSE.txt | |
| 5 * The complete set of authors may be found at http://polymer.github.io/AUTHORS.
txt | |
| 6 * The complete set of contributors may be found at http://polymer.github.io/CON
TRIBUTORS.txt | |
| 7 * Code distributed by Google as part of the polymer project is also | |
| 8 * subject to an additional IP rights grant found at http://polymer.github.io/PA
TENTS.txt | |
| 9 */ | |
| 10 | |
| 11 (function() { | |
| 12 var thisFile = 'lib/mocha-htmltest.js'; | |
| 13 var base = ''; | |
| 14 | |
| 15 mocha.htmlbase = function(htmlbase) { | |
| 16 base = htmlbase; | |
| 17 }; | |
| 18 | |
| 19 (function() { | |
| 20 var s$ = document.querySelectorAll('script[src]'); | |
| 21 Array.prototype.forEach.call(s$, function(s) { | |
| 22 var src = s.getAttribute('src'); | |
| 23 var re = new RegExp(thisFile + '[^\\\\]*'); | |
| 24 var match = src.match(re); | |
| 25 if (match) { | |
| 26 base = src.slice(0, -match[0].length); | |
| 27 } | |
| 28 }); | |
| 29 })(); | |
| 30 | |
| 31 var next, iframe; | |
| 32 | |
| 33 var listener = function(event) { | |
| 34 if (event.data === 'ok') { | |
| 35 next(); | |
| 36 } else if (event.data && event.data.error) { | |
| 37 // errors cannot be cloned via postMessage according to spec, so we re-err
orify them | |
| 38 throw new Error(event.data.error); | |
| 39 } | |
| 40 }; | |
| 41 | |
| 42 function htmlSetup() { | |
| 43 window.addEventListener("message", listener); | |
| 44 iframe = document.createElement('iframe'); | |
| 45 iframe.style.cssText = 'position: absolute; left: -9000em; width:768px; heig
ht: 1024px'; | |
| 46 document.body.appendChild(iframe); | |
| 47 } | |
| 48 | |
| 49 function htmlTeardown() { | |
| 50 window.removeEventListener('message', listener); | |
| 51 document.body.removeChild(iframe); | |
| 52 } | |
| 53 | |
| 54 function htmlTest(src) { | |
| 55 var basePath = calcBase(); | |
| 56 test(src, function(done) { | |
| 57 next = done; | |
| 58 var url = basePath + src; | |
| 59 var delimiter = url.indexOf('?') < 0 ? '?' : '&'; | |
| 60 var docSearch = location.search.slice(1); | |
| 61 iframe.src = url + delimiter + Math.random() + '&' + docSearch; | |
| 62 }); | |
| 63 }; | |
| 64 | |
| 65 function htmlSuite(inName, inFn) { | |
| 66 suite(inName, function() { | |
| 67 setup(htmlSetup); | |
| 68 teardown(htmlTeardown); | |
| 69 inFn(); | |
| 70 }); | |
| 71 }; | |
| 72 | |
| 73 function calcBase() { | |
| 74 var b = base; | |
| 75 var script = document._currentScript || | |
| 76 document.scripts[document.scripts.length - 1]; | |
| 77 if (script) { | |
| 78 var parts = script.src.split('/'); | |
| 79 parts.pop(); | |
| 80 b = parts.join('/') + '/'; | |
| 81 } | |
| 82 return b; | |
| 83 } | |
| 84 | |
| 85 window.htmlTest = htmlTest; | |
| 86 window.htmlSuite = htmlSuite; | |
| 87 })(); | |
| OLD | NEW |