| Index: chrome/test/base/js2gtest.js
|
| diff --git a/chrome/test/base/js2gtest.js b/chrome/test/base/js2gtest.js
|
| index 8d0f7e734bb1eeb2a92629c2d24246998e86e7de..de09918abbc0fb1e37734bfd41ecc13bbc209b9d 100644
|
| --- a/chrome/test/base/js2gtest.js
|
| +++ b/chrome/test/base/js2gtest.js
|
| @@ -10,6 +10,7 @@
|
| * @see WebUI testing: http://goo.gl/ZWFXF
|
| * @see gtest documentation: http://goo.gl/Ujj3H
|
| * @see chrome/chrome_tests.gypi
|
| + * @see chrome/test/base/js2gtest.js
|
| * @see tools/gypv8sh.py
|
| */
|
|
|
| @@ -99,6 +100,23 @@ var needGenHeader = true;
|
| */
|
| var argHint = '// ' + this['arguments'].join(' ');
|
|
|
| +/**
|
| + * @type {Array<string>}
|
| + */
|
| +var pendingOutput = '';
|
| +
|
| +/**
|
| + * Adds a string followed by a newline to the pending output.
|
| + * If present, an initial newline character is stripped from the string.
|
| + * @param {string=} opt_string
|
| + */
|
| +function output(opt_string) {
|
| + opt_string = opt_string || '';
|
| + if (opt_string[0] == '\n')
|
| + opt_string = opt_string.substring(1);
|
| + pendingOutput += opt_string;
|
| + pendingOutput += '\n';
|
| +}
|
|
|
| /**
|
| * Generates the header of the cc file to stdout.
|
| @@ -108,10 +126,11 @@ function maybeGenHeader(testFixture) {
|
| if (!needGenHeader)
|
| return;
|
| needGenHeader = false;
|
| - print('// GENERATED FILE');
|
| - print(argHint);
|
| - print('// PLEASE DO NOT HAND EDIT!');
|
| - print();
|
| + output(`
|
| +// GENERATED FILE'
|
| +${argHint}
|
| +// PLEASE DO NOT HAND EDIT!
|
| +`);
|
|
|
| // Output some C++ headers based upon the |testType|.
|
| //
|
| @@ -122,31 +141,32 @@ function maybeGenHeader(testFixture) {
|
| // 'webui' - browser_tests harness, js2webui rule, WebUIBrowserTest
|
| // superclass.
|
| if (testType === 'extension') {
|
| - print('#include "chrome/test/base/extension_js_browser_test.h"');
|
| + output('#include "chrome/test/base/extension_js_browser_test.h"');
|
| testing.Test.prototype.typedefCppFixture = 'ExtensionJSBrowserTest';
|
| addSetPreloadInfo = false;
|
| testF = 'IN_PROC_BROWSER_TEST_F';
|
| } else if (testType === 'unit') {
|
| - print('#include "chrome/test/base/v8_unit_test.h"');
|
| + output('#include "chrome/test/base/v8_unit_test.h"');
|
| testing.Test.prototype.typedefCppFixture = 'V8UnitTest';
|
| testF = 'TEST_F';
|
| addSetPreloadInfo = false;
|
| } else {
|
| - print('#include "chrome/test/base/web_ui_browser_test.h"');
|
| + output('#include "chrome/test/base/web_ui_browser_test.h"');
|
| testing.Test.prototype.typedefCppFixture = 'WebUIBrowserTest';
|
| testF = 'IN_PROC_BROWSER_TEST_F';
|
| addSetPreloadInfo = true;
|
| }
|
| - print('#include "url/gurl.h"');
|
| - print('#include "testing/gtest/include/gtest/gtest.h"');
|
| + output(`
|
| +#include "url/gurl.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"`);
|
| // Add includes specified by test fixture.
|
| if (testFixture) {
|
| if (this[testFixture].prototype.testGenCppIncludes)
|
| this[testFixture].prototype.testGenCppIncludes();
|
| if (this[testFixture].prototype.commandLineSwitches)
|
| - print('#include "base/command_line.h"');
|
| + output('#include "base/command_line.h"');
|
| }
|
| - print();
|
| + output();
|
| }
|
|
|
|
|
| @@ -172,6 +192,16 @@ function includeFileToPaths(includeFile) {
|
| };
|
| }
|
|
|
| +/**
|
| + * Returns the content of a javascript file with a sourceURL comment
|
| + * appended to facilitate better stack traces.
|
| + * @param {string} path Relative path name.
|
| + * return {string}
|
| + */
|
| +function readJsFile(path) {
|
| + return read(path) + '\n//# sourceURL=' + path;
|
| +}
|
| +
|
|
|
| /**
|
| * Maps object names to the path to the file that provides them.
|
| @@ -205,7 +235,7 @@ if (depsFile) {
|
|
|
| // Read and eval the deps file. It should only contain goog.addDependency
|
| // calls.
|
| - eval(read(depsFile));
|
| + eval(readJsFile(depsFile));
|
| }
|
|
|
| /**
|
| @@ -272,7 +302,7 @@ function resolveClosureModuleDeps(deps) {
|
| */
|
| function GEN(code) {
|
| maybeGenHeader(null);
|
| - print(code);
|
| + output(code);
|
| }
|
|
|
| /**
|
| @@ -301,7 +331,7 @@ function GEN_BLOCK(commentEncodedCode) {
|
| function GEN_INCLUDE(includes) {
|
| for (var i = 0; i < includes.length; i++) {
|
| var includePaths = includeFileToPaths(includes[i]);
|
| - var js = read(includePaths.path);
|
| + var js = readJsFile(includePaths.path);
|
| pathStack.push(includePaths);
|
| ('global', eval)(js);
|
| pathStack.pop();
|
| @@ -324,7 +354,7 @@ function TEST_F(testFixture, testFunction, testBody) {
|
| var testGenPostamble = this[testFixture].prototype.testGenPostamble;
|
| var typedefCppFixture = this[testFixture].prototype.typedefCppFixture;
|
| var isAsyncParam = testType === 'unit' ? '' :
|
| - this[testFixture].prototype.isAsync + ', ';
|
| + this[testFixture].prototype.isAsync + ',\n ';
|
| var testShouldFail = this[testFixture].prototype.testShouldFail;
|
| var testPredicate = testShouldFail ? 'ASSERT_FALSE' : 'ASSERT_TRUE';
|
| var extraLibraries = genIncludes.concat(
|
| @@ -337,55 +367,68 @@ function TEST_F(testFixture, testFunction, testBody) {
|
| if (typedefCppFixture && !(testFixture in typedeffedCppFixtures)) {
|
| var switches = this[testFixture].prototype.commandLineSwitches;
|
| if (!switches || !switches.length || typedefCppFixture == 'V8UnitTest') {
|
| - print('typedef ' + typedefCppFixture + ' ' + testFixture + ';');
|
| + output(`
|
| +typedef ${typedefCppFixture} ${testFixture};
|
| +`);
|
| } else {
|
| // Make the testFixture a class inheriting from the base fixture.
|
| - print('class ' + testFixture + ' : public ' + typedefCppFixture + ' {');
|
| - print(' private:');
|
| + output(`
|
| +class ${testFixture} : public ${typedefCppFixture} {
|
| + private:`);
|
| // Override SetUpCommandLine and add each switch.
|
| - print(' void');
|
| - print(' SetUpCommandLine(base::CommandLine* command_line) override {');
|
| + output(`
|
| + void SetUpCommandLine(base::CommandLine* command_line) override {`);
|
| for (var i = 0; i < switches.length; i++) {
|
| - print(' command_line->AppendSwitchASCII(');
|
| - print(' "' + switches[i].switchName + '",');
|
| - print(' "' + (switches[i].switchValue || '') + '");');
|
| + output(`
|
| + command_line->AppendSwitchASCII(
|
| + "${switches[i].switchName}",
|
| + "${(switches[i].switchValue || '')}");`);
|
| }
|
| - print(' }');
|
| - print('};');
|
| + output(`
|
| + }
|
| +};
|
| +`);
|
| }
|
| typedeffedCppFixtures[testFixture] = typedefCppFixture;
|
| }
|
|
|
| - print(testF + '(' + testFixture + ', ' + testFunction + ') {');
|
| + output(`${testF}(${testFixture}, ${testFunction}) {`);
|
| for (var i = 0; i < extraLibraries.length; i++) {
|
| - print(' AddLibrary(base::FilePath(FILE_PATH_LITERAL("' +
|
| - extraLibraries[i].replace(/\\/g, '/') + '")));');
|
| + var libraryName = extraLibraries[i].replace(/\\/g, '/');
|
| + output(`
|
| + AddLibrary(base::FilePath(FILE_PATH_LITERAL(
|
| + "${libraryName}")));`);
|
| }
|
| - print(' AddLibrary(base::FilePath(FILE_PATH_LITERAL("' +
|
| - jsFileBase.replace(/\\/g, '/') + '")));');
|
| + output(`
|
| + AddLibrary(base::FilePath(FILE_PATH_LITERAL(
|
| + "${jsFileBase.replace(/\\/g, '/')}")));`);
|
| if (addSetPreloadInfo) {
|
| - print(' set_preload_test_fixture("' + testFixture + '");');
|
| - print(' set_preload_test_name("' + testFunction + '");');
|
| + output(`
|
| + set_preload_test_fixture("${testFixture}");
|
| + set_preload_test_name("${testFunction}");`);
|
| }
|
| if (testGenPreamble)
|
| testGenPreamble(testFixture, testFunction);
|
| if (browsePreload)
|
| - print(' BrowsePreload(GURL("' + browsePreload + '"));');
|
| + output(` BrowsePreload(GURL("${browsePreload}"));`);
|
| if (browsePrintPreload) {
|
| - print(' BrowsePrintPreload(GURL(WebUITestDataPathToURL(\n' +
|
| - ' FILE_PATH_LITERAL("' + browsePrintPreload + '"))));');
|
| + output(`
|
| + BrowsePrintPreload(GURL(WebUITestDataPathToURL(
|
| + FILE_PATH_LITERAL("${browsePrintPreload}"))));`);
|
| }
|
| - print(' ' + testPredicate + '(RunJavascriptTestF(' + isAsyncParam +
|
| - '"' + testFixture + '", ' +
|
| - '"' + testFunction + '"));');
|
| + output(`
|
| + ${testPredicate}(
|
| + RunJavascriptTestF(
|
| + ${isAsyncParam}"${testFixture}",
|
| + "${testFunction}"));`);
|
| if (testGenPostamble)
|
| testGenPostamble(testFixture, testFunction);
|
| - print('}');
|
| - print();
|
| + output('}\n');
|
| }
|
|
|
| // Now that generation functions are defined, load in |jsFile|.
|
| -var js = read(jsFile);
|
| +var js = readJsFile(jsFile);
|
| pathStack.push({path: jsFile, base: jsFileBase});
|
| eval(js);
|
| pathStack.pop();
|
| +print(pendingOutput);
|
|
|