OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * @fileoverview Framework for running JavaScript tests of Polymer elements. | 6 * @fileoverview Framework for running JavaScript tests of Polymer elements. |
7 */ | 7 */ |
8 | 8 |
9 /** | 9 /** |
10 * Test fixture for Polymer element testing. | 10 * Test fixture for Polymer element testing. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
53 this.preloadTime = window.performance.now(); | 53 this.preloadTime = window.performance.now(); |
54 testing.Test.prototype.preLoad.call(this); | 54 testing.Test.prototype.preLoad.call(this); |
55 }, | 55 }, |
56 | 56 |
57 /** @override */ | 57 /** @override */ |
58 setUp: function() { | 58 setUp: function() { |
59 testing.Test.prototype.setUp.call(this); | 59 testing.Test.prototype.setUp.call(this); |
60 | 60 |
61 // List of imported URLs for debugging purposes. | 61 // List of imported URLs for debugging purposes. |
62 PolymerTest.importUrls_ = []; | 62 PolymerTest.importUrls_ = []; |
63 PolymerTest.scriptUrls_ = []; | |
63 | 64 |
64 // Importing a URL like "chrome://md-settings/foo" redirects to the base | 65 // Importing a URL like "chrome://md-settings/foo" redirects to the base |
65 // ("chrome://md-settings") page, which due to how browsePreload works can | 66 // ("chrome://md-settings") page, which due to how browsePreload works can |
66 // result in duplicate imports. Wrap document.registerElement so failures | 67 // result in duplicate imports. Wrap document.registerElement so failures |
67 // caused by re-registering Polymer elements are caught; otherwise Chrome | 68 // caused by re-registering Polymer elements are caught; otherwise Chrome |
68 // simply throws "Script error" which is unhelpful. | 69 // simply throws "Script error" which is unhelpful. |
69 var originalRegisterElement = document.registerElement; | 70 var originalRegisterElement = document.registerElement; |
70 document.registerElement = function() { | 71 document.registerElement = function() { |
71 try { | 72 try { |
72 return originalRegisterElement.apply(document, arguments); | 73 return originalRegisterElement.apply(document, arguments); |
73 } catch (e) { | 74 } catch (e) { |
74 var msg = | 75 var msg = |
75 'If the call to document.registerElement failed because a type ' + | 76 'If the call to document.registerElement failed because a type ' + |
76 'is already registered, perhaps you have loaded a script twice. ' + | 77 'is already registered, perhaps you have loaded a script twice. ' + |
77 'Incorrect resource URLs can redirect to base WebUI pages; make ' + | 78 'Incorrect resource URLs can redirect to base WebUI pages; make ' + |
78 'sure the following URLs are correct and unique:\n'; | 79 'sure the following URLs are correct and unique:\n'; |
79 for (var i = 0; i < PolymerTest.importUrls_.length; i++) | 80 for (var i = 0; i < PolymerTest.importUrls_.length; i++) |
80 msg += ' ' + PolymerTest.importUrls_[i] + '\n'; | 81 msg += ' ' + PolymerTest.importUrls_[i] + '\n'; |
82 for (var i = 0; i < PolymerTest.scriptUrls_.length; i++) | |
83 msg += ' ' + PolymerTest.scriptUrls_[i] + '\n'; | |
81 console.error(msg); | 84 console.error(msg); |
82 | 85 |
83 // Mocha will handle the error. | 86 // Mocha will handle the error. |
84 throw e; | 87 throw e; |
85 } | 88 } |
86 }; | 89 }; |
87 | 90 |
88 // Import Polymer and iron-test-helpers before running tests. | 91 // Import Polymer and iron-test-helpers before running tests. |
89 suiteSetup(function() { | 92 suiteSetup(function() { |
90 var promises = []; | 93 var promises = []; |
91 if (typeof Polymer != 'function') { | 94 if (typeof Polymer != 'function') { |
92 promises.push( | 95 promises.push( |
93 PolymerTest.importHtml( | 96 PolymerTest.importHtml( |
94 'chrome://resources/polymer/v1_0/polymer/polymer.html')); | 97 'chrome://resources/polymer/v1_0/polymer/polymer.html')); |
95 } | 98 } |
96 if (typeof TestHelpers != 'object') { | 99 if (typeof MockInteractions != 'object') { |
100 // Avoid importing the HTML file because iron-test-helpers assumes it is | |
101 // not being imported separately alongside a vulcanized Polymer. | |
97 promises.push( | 102 promises.push( |
98 PolymerTest.importHtml( | 103 PolymerTest.loadScript( |
99 'chrome://resources/polymer/v1_0/iron-test-helpers/' + | 104 'chrome://resources/polymer/v1_0/iron-test-helpers/' + |
100 'iron-test-helpers.html')); | 105 'mock-interactions.js')); |
101 } | 106 } |
102 return Promise.all(promises); | 107 return Promise.all(promises); |
103 }); | 108 }); |
104 }, | 109 }, |
105 | 110 |
106 /** @override */ | 111 /** @override */ |
107 runTest: function(testBody) { | 112 runTest: function(testBody) { |
108 this.runTime = window.performance.now(); | 113 this.runTime = window.performance.now(); |
109 testing.Test.prototype.runTest.call(this, testBody); | 114 testing.Test.prototype.runTest.call(this, testBody); |
110 }, | 115 }, |
(...skipping 23 matching lines...) Expand all Loading... | |
134 var promise = new Promise(function(resolve, reject) { | 139 var promise = new Promise(function(resolve, reject) { |
135 link.onload = resolve; | 140 link.onload = resolve; |
136 link.onerror = reject; | 141 link.onerror = reject; |
137 }); | 142 }); |
138 link.href = src; | 143 link.href = src; |
139 document.head.appendChild(link); | 144 document.head.appendChild(link); |
140 return promise; | 145 return promise; |
141 }; | 146 }; |
142 | 147 |
143 /** | 148 /** |
149 * Loads the script file. | |
150 * @param {string} src The URL to load. | |
151 * @return {Promise} A promise that is resolved/rejected on success/failure. | |
Dan Beam
2016/01/12 20:12:59
nit: !Promise
michaelpg
2016/01/12 20:16:16
Done.
| |
152 */ | |
153 PolymerTest.loadScript = function(src) { | |
154 PolymerTest.scriptUrls_.push(src); | |
155 var script = document.createElement('script'); | |
156 var promise = new Promise(function(resolve, reject) { | |
157 script.onload = resolve; | |
158 script.onerror = reject; | |
159 }); | |
160 script.src = src; | |
161 document.head.appendChild(script); | |
162 return promise; | |
163 }; | |
164 | |
165 /** | |
144 * Removes all content from the body. | 166 * Removes all content from the body. |
145 */ | 167 */ |
146 PolymerTest.clearBody = function() { | 168 PolymerTest.clearBody = function() { |
147 document.body.innerHTML = ''; | 169 document.body.innerHTML = ''; |
148 }; | 170 }; |
149 | 171 |
150 /** | 172 /** |
151 * Helper function to return the list of extra libraries relative to basePath. | 173 * Helper function to return the list of extra libraries relative to basePath. |
152 */ | 174 */ |
153 PolymerTest.getLibraries = function(basePath) { | 175 PolymerTest.getLibraries = function(basePath) { |
154 // Ensure basePath ends in '/'. | 176 // Ensure basePath ends in '/'. |
155 if (basePath.length && basePath[basePath.length - 1] != '/') | 177 if (basePath.length && basePath[basePath.length - 1] != '/') |
156 basePath += '/'; | 178 basePath += '/'; |
157 | 179 |
158 return PolymerTest.prototype.extraLibraries.map(function(library) { | 180 return PolymerTest.prototype.extraLibraries.map(function(library) { |
159 return basePath + library; | 181 return basePath + library; |
160 }); | 182 }); |
161 }; | 183 }; |
OLD | NEW |