| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014 The Native Client Authors. All rights reserved. | 2 * Copyright (c) 2014 The Native Client Authors. All rights reserved. |
| 3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
| 4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 'use strict'; | 7 'use strict'; |
| 8 | 8 |
| 9 // Utilities to allow googletest style tests of apps / extensions. | 9 // Utilities to allow googletest style tests of apps / extensions. |
| 10 | 10 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 */ | 80 */ |
| 81 chrometest.resetExtension = function() { | 81 chrometest.resetExtension = function() { |
| 82 var port = chrometest.newTestPort(); | 82 var port = chrometest.newTestPort(); |
| 83 var count = null; | 83 var count = null; |
| 84 port.postMessage({'name': 'reset'}); | 84 port.postMessage({'name': 'reset'}); |
| 85 return port.wait().then(function(msg) { | 85 return port.wait().then(function(msg) { |
| 86 ASSERT_EQ('resetReply', msg.name); | 86 ASSERT_EQ('resetReply', msg.name); |
| 87 port.disconnect(); | 87 port.disconnect(); |
| 88 return msg.count; | 88 return msg.count; |
| 89 }); | 89 }); |
| 90 } | 90 }; |
| 91 | 91 |
| 92 /** | 92 /** |
| 93 * Get a list of all loaded extensions. | 93 * Get a list of all loaded extensions. |
| 94 * | 94 * |
| 95 * This exposes the result of chrome.management.getAll for use by tests. | 95 * This exposes the result of chrome.management.getAll for use by tests. |
| 96 * @returns {Promise.Array.<ExtensionInfo>}. | 96 * @returns {Promise.Array.<ExtensionInfo>}. |
| 97 */ | 97 */ |
| 98 chrometest.getAllExtensions = function() { | 98 chrometest.getAllExtensions = function() { |
| 99 var port = chrometest.newTestPort(); | 99 var port = chrometest.newTestPort(); |
| 100 port.postMessage({'name': 'getAllExtensions'}); | 100 port.postMessage({'name': 'getAllExtensions'}); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 var r = new XMLHttpRequest(); | 225 var r = new XMLHttpRequest(); |
| 226 r.open('GET', url, false); | 226 r.open('GET', url, false); |
| 227 r.onload = function() { | 227 r.onload = function() { |
| 228 if (r.readyState == 4) { | 228 if (r.readyState == 4) { |
| 229 if (r.status == 200) { | 229 if (r.status == 200) { |
| 230 resolve(r.responseText); | 230 resolve(r.responseText); |
| 231 } else { | 231 } else { |
| 232 reject(r.status); | 232 reject(r.status); |
| 233 } | 233 } |
| 234 } | 234 } |
| 235 } | 235 }; |
| 236 r.send(); | 236 r.send(); |
| 237 }); | 237 }); |
| 238 }; | 238 }; |
| 239 | 239 |
| 240 /** | 240 /** |
| 241 * Sleep for a duration. | 241 * Sleep for a duration. |
| 242 * @param {float} ms Timeout in milliseconds. | 242 * @param {float} ms Timeout in milliseconds. |
| 243 * @return {Promise} A promise to wait. | 243 * @return {Promise} A promise to wait. |
| 244 */ | 244 */ |
| 245 chrometest.sleep = function(ms) { | 245 chrometest.sleep = function(ms) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 273 return chrometest.httpGet('/_command?test_count=' + testCount); | 273 return chrometest.httpGet('/_command?test_count=' + testCount); |
| 274 }; | 274 }; |
| 275 | 275 |
| 276 /** | 276 /** |
| 277 * Notify the test harness that a test has begun. | 277 * Notify the test harness that a test has begun. |
| 278 * @param {string} name The full name of the test. | 278 * @param {string} name The full name of the test. |
| 279 * @return {Promise} A promise to do it. | 279 * @return {Promise} A promise to do it. |
| 280 */ | 280 */ |
| 281 chrometest.beginTest_ = function(name) { | 281 chrometest.beginTest_ = function(name) { |
| 282 return chrometest.resetExtension().then(function(count) { | 282 return chrometest.resetExtension().then(function(count) { |
| 283 if (count != 0) { | 283 if (count !== 0) { |
| 284 throw new Error( | 284 throw new Error( |
| 285 'Test extension connections from the last test remain active!'); | 285 'Test extension connections from the last test remain active!'); |
| 286 } | 286 } |
| 287 console.log('[ RUN ] ' + name); | 287 console.log('[ RUN ] ' + name); |
| 288 chrometest.passed_ = true; | 288 chrometest.passed_ = true; |
| 289 chrometest.currentTestName_ = name; | 289 chrometest.currentTestName_ = name; |
| 290 return chrometest.httpGet( | 290 return chrometest.httpGet( |
| 291 '/_command?name=' + encodeURIComponent(name) + | 291 '/_command?name=' + encodeURIComponent(name) + |
| 292 '&start=1'); | 292 '&start=1'); |
| 293 }).then(function(result) { | 293 }).then(function(result) { |
| 294 chrometest.startTime_ = new Date(); | 294 chrometest.startTime_ = new Date(); |
| 295 }); | 295 }); |
| 296 }; | 296 }; |
| 297 | 297 |
| 298 /** | 298 /** |
| 299 * Notify the test harness that a test has ended. | 299 * Notify the test harness that a test has ended. |
| 300 * @return {Promise} A promise to do it. | 300 * @return {Promise} A promise to do it. |
| 301 */ | 301 */ |
| 302 chrometest.endTest_ = function() { | 302 chrometest.endTest_ = function() { |
| 303 return chrometest.resetExtension().then(function(count) { | 303 return chrometest.resetExtension().then(function(count) { |
| 304 EXPECT_EQ(0, count, | 304 EXPECT_EQ(0, count, |
| 305 'all connection to the test extension should be closed'); | 305 'all connection to the test extension should be closed'); |
| 306 var endTime = new Date(); | 306 var endTime = new Date(); |
| 307 var duration = endTime.getTime() - chrometest.startTime_.getTime(); | 307 var duration = endTime.getTime() - chrometest.startTime_.getTime(); |
| 308 duration = chrometest.formatDuration(duration); | 308 duration = chrometest.formatDuration(duration); |
| 309 var name = chrometest.currentTestName_; | 309 var name = chrometest.currentTestName_; |
| 310 var resultMsg; |
| 311 var result; |
| 310 if (chrometest.passed_) { | 312 if (chrometest.passed_) { |
| 311 var resultMsg = ' OK'; | 313 resultMsg = ' OK'; |
| 312 var result = 1; | 314 result = 1; |
| 313 } else { | 315 } else { |
| 314 var resultMsg = ' FAILED '; | 316 resultMsg = ' FAILED '; |
| 315 var result = 0; | 317 result = 0; |
| 316 } | 318 } |
| 317 console.log('[ ' + resultMsg + ' ] ' + name + ' (' + duration + ')'); | 319 console.log('[ ' + resultMsg + ' ] ' + name + ' (' + duration + ')'); |
| 318 chrometest.startTime_ = null; | 320 chrometest.startTime_ = null; |
| 319 chrometest.currentTest_ = null; | 321 chrometest.currentTest_ = null; |
| 320 chrometest.currentTestName_ = null; | 322 chrometest.currentTestName_ = null; |
| 321 return chrometest.httpGet( | 323 return chrometest.httpGet( |
| 322 '/_command?name=' + encodeURIComponent(name) + '&' + | 324 '/_command?name=' + encodeURIComponent(name) + '&' + |
| 323 'duration=' + encodeURIComponent(duration) + '&' + | 325 'duration=' + encodeURIComponent(duration) + '&' + |
| 324 'result=' + result); | 326 'result=' + result); |
| 325 }); | 327 }); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 /** | 431 /** |
| 430 * Check if a string matches a googletest style filter. | 432 * Check if a string matches a googletest style filter. |
| 431 * A filter consists of zero or more ':' separated positive wildcard | 433 * A filter consists of zero or more ':' separated positive wildcard |
| 432 * strings, followed optionally by a '-' and zero or more ':' separated | 434 * strings, followed optionally by a '-' and zero or more ':' separated |
| 433 * negative wildcard strings. | 435 * negative wildcard strings. |
| 434 * @param string filter A googletest style filter string. | 436 * @param string filter A googletest style filter string. |
| 435 * @param string s A string to match. | 437 * @param string s A string to match. |
| 436 */ | 438 */ |
| 437 chrometest.filterMatch = function(filter, s) { | 439 chrometest.filterMatch = function(filter, s) { |
| 438 var parts = filter.split('-'); | 440 var parts = filter.split('-'); |
| 441 var positive; |
| 442 var negative; |
| 439 if (parts.length == 1) { | 443 if (parts.length == 1) { |
| 440 var positive = parts[0].split(':'); | 444 positive = parts[0].split(':'); |
| 441 var negative = []; | 445 negative = []; |
| 442 } else if (parts.length == 2) { | 446 } else if (parts.length == 2) { |
| 443 var positive = parts[0].split(':'); | 447 positive = parts[0].split(':'); |
| 444 var negative = parts[1].split(':'); | 448 negative = parts[1].split(':'); |
| 445 } else { | 449 } else { |
| 446 // Treat ill-formated filters as non-matches. | 450 // Treat ill-formated filters as non-matches. |
| 447 return false; | 451 return false; |
| 448 } | 452 } |
| 449 if (positive.length == 1 && positive[0] == '') { | 453 if (positive.length == 1 && positive[0] === '') { |
| 450 positive = ['*']; | 454 positive = ['*']; |
| 451 } | 455 } |
| 452 if (negative.length == 1 && negative[0] == '') { | 456 if (negative.length == 1 && negative[0] === '') { |
| 453 negative = []; | 457 negative = []; |
| 454 } | 458 } |
| 455 for (var i = 0; i < positive.length; i++) { | 459 for (var i = 0; i < positive.length; i++) { |
| 456 if (!chrometest.wildcardMatch(positive[i], s)) { | 460 if (!chrometest.wildcardMatch(positive[i], s)) { |
| 457 return false; | 461 return false; |
| 458 } | 462 } |
| 459 } | 463 } |
| 460 for (var i = 0; i < negative.length; i++) { | 464 for (var i = 0; i < negative.length; i++) { |
| 461 if (chrometest.wildcardMatch(negative[i], s)) { | 465 if (chrometest.wildcardMatch(negative[i], s)) { |
| 462 return false; | 466 return false; |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 706 // - A global name makes use through multiple tests convenient. | 710 // - A global name makes use through multiple tests convenient. |
| 707 // - Using an existing naming convention makes use and intent clear. | 711 // - Using an existing naming convention makes use and intent clear. |
| 708 // - ALL CAPS highlights the testing constructs visually. | 712 // - ALL CAPS highlights the testing constructs visually. |
| 709 | 713 |
| 710 | 714 |
| 711 // TEST Types | 715 // TEST Types |
| 712 // ---------- | 716 // ---------- |
| 713 | 717 |
| 714 /** | 718 /** |
| 715 * Register a test case using a fixture class. | 719 * Register a test case using a fixture class. |
| 716 * @param {string} fixtureClass The test fixture class object. | 720 * @param {string} FixtureClass The test fixture class object. |
| 717 * @param {string} testName The name of the test. | 721 * @param {string} testName The name of the test. |
| 718 * @param {function()} testFunc Called to run the test, may return | 722 * @param {function()} testFunc Called to run the test, may return |
| 719 * a Promise. | 723 * a Promise. |
| 720 * @param {string} opt_caseName Optional name for the case, otherwise the | 724 * @param {string} opt_caseName Optional name for the case, otherwise the |
| 721 * fixtureClass class name is used. | 725 * FixtureClass class name is used. |
| 722 */ | 726 */ |
| 723 function TEST_F(fixtureClass, testName, testFunc, opt_caseName) { | 727 function TEST_F(FixtureClass, testName, testFunc, opt_caseName) { |
| 724 if (opt_caseName == undefined) { | 728 if (opt_caseName === undefined) { |
| 725 opt_caseName = fixtureClass.name; | 729 opt_caseName = FixtureClass.name; |
| 726 } | 730 } |
| 727 var fullName = opt_caseName + '.' + testName; | 731 var fullName = opt_caseName + '.' + testName; |
| 728 chrometest.tests_.push({ | 732 chrometest.tests_.push({ |
| 729 'name': fullName, | 733 'name': fullName, |
| 730 'call': function() { | 734 'call': function() { |
| 731 return Promise.resolve().then(function() { | 735 return Promise.resolve().then(function() { |
| 732 return chrometest.beginTest_(fullName); | 736 return chrometest.beginTest_(fullName); |
| 733 }).then(function() { | 737 }).then(function() { |
| 734 chrometest.currentTest_ = new fixtureClass(); | 738 chrometest.currentTest_ = new FixtureClass(); |
| 735 return Promise.resolve().then(function() { | 739 return Promise.resolve().then(function() { |
| 736 return chrometest.currentTest_.setUp(); | 740 return chrometest.currentTest_.setUp(); |
| 737 }).then(function() { | 741 }).then(function() { |
| 738 return Promise.resolve().then(function() { | 742 return Promise.resolve().then(function() { |
| 739 return testFunc.call(chrometest.currentTest_); | 743 return testFunc.call(chrometest.currentTest_); |
| 740 }).catch(function(error) { | 744 }).catch(function(error) { |
| 741 chrometest.fail(); | 745 chrometest.fail(); |
| 742 return chrometest.error(chrometest.formatError(error)); | 746 return chrometest.error(chrometest.formatError(error)); |
| 743 }); | 747 }); |
| 744 }).then(function() { | 748 }).then(function() { |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 842 chrometest.expect(a > b, 'Expected ' + a + ' > ' + b + ' when ' + context); | 846 chrometest.expect(a > b, 'Expected ' + a + ' > ' + b + ' when ' + context); |
| 843 } | 847 } |
| 844 | 848 |
| 845 function EXPECT_LE(a, b, context) { | 849 function EXPECT_LE(a, b, context) { |
| 846 chrometest.expect(a <= b, 'Expected ' + a + ' <= ' + b + ' when ' + context); | 850 chrometest.expect(a <= b, 'Expected ' + a + ' <= ' + b + ' when ' + context); |
| 847 } | 851 } |
| 848 | 852 |
| 849 function EXPECT_GE(a, b, context) { | 853 function EXPECT_GE(a, b, context) { |
| 850 chrometest.expect(a >= b, 'Expected ' + a + ' >= ' + b + ' when ' + context); | 854 chrometest.expect(a >= b, 'Expected ' + a + ' >= ' + b + ' when ' + context); |
| 851 } | 855 } |
| OLD | NEW |