зеркало из https://github.com/mozilla/brackets.git
Launch UI tests in new, clean window
Add utility methods to SpecRunnerUtils.js to setup and teardown new brackets window when running UI-dependent tests. Add loadProject utility to load testWindow projects. Update ProjectManager and FileCommandHandlers tests to use new utilities.
This commit is contained in:
Родитель
eb6b7d8c53
Коммит
575bf29022
|
@ -173,5 +173,4 @@ define(function(require, exports, module) {
|
|||
// Internal Use Only
|
||||
exports._reset = _reset;
|
||||
exports._setStorageKey = _setStorageKey;
|
||||
exports._PREFERENCES_KEY = PREFERENCES_KEY;
|
||||
});
|
|
@ -9,7 +9,7 @@ define(function(require, exports, module) {
|
|||
|
||||
// Unique key for unit testing
|
||||
var PreferencesManager = require("PreferencesManager");
|
||||
PreferencesManager.setStorageKey( SpecRunnerUtils.TEST_PREFERENCES_KEY );
|
||||
PreferencesManager._setStorageKey( SpecRunnerUtils.TEST_PREFERENCES_KEY );
|
||||
|
||||
// Load test specs
|
||||
require("spec/Editor-test.js");
|
||||
|
|
|
@ -7,31 +7,25 @@ define(function(require, exports, module) {
|
|||
, SpecRunnerUtils = require("./SpecRunnerUtils.js");
|
||||
;
|
||||
|
||||
// FIXME (jasonsj): these tests are ommitted when launching in the main app window
|
||||
if (window.opener) {
|
||||
|
||||
describe("FileCommandHandlers", function() {
|
||||
|
||||
var testPath = SpecRunnerUtils.getTestPath("/spec/FileCommandHandlers-test-files");
|
||||
var TEST_JS_CONTENT = 'var myContent="This is awesome!";';
|
||||
var TEST_JS_NEW_CONTENT = "hello world";
|
||||
|
||||
beforeEach(function() {
|
||||
// this.app = window.open(SpecRunnerUtils.getBracketsSourceRoot() + "/index.html");
|
||||
// TODO: this will only work if run from the main Brackets window (not from jasmine.sh)
|
||||
this.app = window.opener;
|
||||
SpecRunnerUtils.beforeTestWindow( this, function( testWindow ) {
|
||||
this.testWindow = testWindow;
|
||||
|
||||
// Load module instances from brackets.test
|
||||
CommandManager = this.app.brackets.test.CommandManager;
|
||||
Commands = this.app.brackets.test.Commands;
|
||||
FileCommandHandlers = this.app.brackets.test.FileCommandHandlers;
|
||||
|
||||
this.app.location.reload();
|
||||
this.testPath = SpecRunnerUtils.getTestPath("/spec/FileCommandHandlers-test-files");
|
||||
var isReady = false;
|
||||
$(this.app.document).ready(function() {
|
||||
isReady = true;
|
||||
CommandManager = testWindow.brackets.test.CommandManager;
|
||||
Commands = testWindow.brackets.test.Commands;
|
||||
FileCommandHandlers = testWindow.brackets.test.FileCommandHandlers;
|
||||
});
|
||||
waitsFor(function() { return isReady; }, 5000);
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
SpecRunnerUtils.afterTestWindow();
|
||||
});
|
||||
|
||||
// TODO (jasonsj): test Commands.FILE_NEW. Current implementation of
|
||||
|
@ -51,7 +45,7 @@ define(function(require, exports, module) {
|
|||
waitsFor(function() { return didClose && !gotError; }, 1000);
|
||||
|
||||
runs(function() {
|
||||
expect(this.app.$("#main-toolbar .title").text()).toBe("Untitled");
|
||||
expect(this.testWindow.$("#main-toolbar .title").text()).toBe("Untitled");
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -59,7 +53,7 @@ define(function(require, exports, module) {
|
|||
var didOpen = false, didClose = false, gotError = false;
|
||||
|
||||
runs(function() {
|
||||
CommandManager.execute(Commands.FILE_OPEN, this.testPath + "/test.js")
|
||||
CommandManager.execute(Commands.FILE_OPEN, testPath + "/test.js")
|
||||
.done(function() { didOpen = true; })
|
||||
.fail(function() { gotError = true; });
|
||||
});
|
||||
|
@ -74,7 +68,7 @@ define(function(require, exports, module) {
|
|||
waitsFor(function() { return didClose && !gotError; }, 1000);
|
||||
|
||||
runs(function() {
|
||||
expect(this.app.$("#main-toolbar .title").text()).toBe("Untitled");
|
||||
expect(this.testWindow.$("#main-toolbar .title").text()).toBe("Untitled");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -84,7 +78,7 @@ define(function(require, exports, module) {
|
|||
var didOpen = false, gotError = false;
|
||||
|
||||
runs(function() {
|
||||
CommandManager.execute(Commands.FILE_OPEN, this.testPath + "/test.js")
|
||||
CommandManager.execute(Commands.FILE_OPEN, testPath + "/test.js")
|
||||
.done(function() { didOpen = true; })
|
||||
.fail(function() { gotError = true; });
|
||||
});
|
||||
|
@ -99,7 +93,7 @@ define(function(require, exports, module) {
|
|||
describe("Save File", function() {
|
||||
it("should save changes", function() {
|
||||
var didOpen = false, didSave = false, gotError = false;
|
||||
var filePath = this.testPath + "/test.js";
|
||||
var filePath = testPath + "/test.js";
|
||||
var editor = FileCommandHandlers.getEditor();
|
||||
|
||||
runs(function() {
|
||||
|
@ -147,7 +141,7 @@ define(function(require, exports, module) {
|
|||
var didOpen = false, gotError = false;
|
||||
|
||||
runs(function() {
|
||||
CommandManager.execute(Commands.FILE_OPEN, this.testPath + "/test.js")
|
||||
CommandManager.execute(Commands.FILE_OPEN, testPath + "/test.js")
|
||||
.done(function() { didOpen = true; })
|
||||
.fail(function() { gotError = true; });
|
||||
});
|
||||
|
@ -169,7 +163,7 @@ define(function(require, exports, module) {
|
|||
var didOpen = false, gotError = false;
|
||||
|
||||
runs(function() {
|
||||
CommandManager.execute(Commands.FILE_OPEN, this.testPath + "/test.js")
|
||||
CommandManager.execute(Commands.FILE_OPEN, testPath + "/test.js")
|
||||
.done(function() { didOpen = true; })
|
||||
.fail(function() { gotError = true; });
|
||||
});
|
||||
|
@ -199,7 +193,7 @@ define(function(require, exports, module) {
|
|||
var didOpen = false, gotError = false;
|
||||
|
||||
runs(function() {
|
||||
CommandManager.execute(Commands.FILE_OPEN, this.testPath + "/test.js")
|
||||
CommandManager.execute(Commands.FILE_OPEN, testPath + "/test.js")
|
||||
.done(function() { didOpen = true; })
|
||||
.fail(function() { gotError = true; });
|
||||
});
|
||||
|
@ -223,5 +217,4 @@ define(function(require, exports, module) {
|
|||
|
||||
// TODO (jasonsj): experiment with mocks instead of real UI
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -5,33 +5,20 @@ define(function(require, exports, module) {
|
|||
, SpecRunnerUtils = require("./SpecRunnerUtils.js")
|
||||
;
|
||||
|
||||
// FIXME (jasonsj): these tests are ommitted when launching in the main app window
|
||||
if (window.opener) { // (function(){
|
||||
|
||||
describe("ProjectManager", function() {
|
||||
|
||||
var testPath = SpecRunnerUtils.getTestPath("/spec/ProjectManager-test-files");
|
||||
|
||||
beforeEach(function() {
|
||||
this.app = window.opener;
|
||||
|
||||
SpecRunnerUtils.beforeTestWindow( this, function( testWindow ) {
|
||||
// Load module instances from brackets.test
|
||||
ProjectManager = this.app.brackets.test.ProjectManager;
|
||||
PreferencesManager = this.app.brackets.test.PreferencesManager;
|
||||
|
||||
// Temporarily use test key in the main app window
|
||||
this.oldKey = PreferencesManager._setStorageKey( SpecRunnerUtils.TEST_PREFERENCES_KEY );
|
||||
|
||||
this.app.location.reload();
|
||||
this.testPath = SpecRunnerUtils.getTestPath("/spec/ProjectManager-test-files");
|
||||
var isReady = false;
|
||||
$(this.app.document).ready(function() {
|
||||
isReady = true;
|
||||
ProjectManager = testWindow.brackets.test.ProjectManager;
|
||||
PreferencesManager = testWindow.brackets.test.PreferencesManager;
|
||||
});
|
||||
waitsFor(function() { return isReady; }, 5000);
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
// restore main app window preferences key
|
||||
PreferencesManager._setStorageKey( this.oldKey );
|
||||
SpecRunnerUtils.afterTestWindow();
|
||||
});
|
||||
|
||||
describe("createNewItem", function() {
|
||||
|
@ -39,21 +26,18 @@ define(function(require, exports, module) {
|
|||
it("should create a new file with a given name", function() {
|
||||
var didCreate = false, gotError = false;
|
||||
|
||||
runs(function() {
|
||||
ProjectManager.loadProject(this.testPath);
|
||||
});
|
||||
waitsFor(function() { return ProjectManager.getProjectRoot() }, "loadProject() timeout", 1000);
|
||||
SpecRunnerUtils.loadProject( testPath );
|
||||
|
||||
runs(function() {
|
||||
// skip rename
|
||||
ProjectManager.createNewItem(this.testPath, "Untitled.js", true)
|
||||
ProjectManager.createNewItem(testPath, "Untitled.js", true)
|
||||
.done(function() { didCreate = true; })
|
||||
.fail(function() { gotError = true; });
|
||||
});
|
||||
waitsFor(function() { return didCreate && !gotError; }, "ProjectManager.createNewItem() timeout", 1000);
|
||||
|
||||
var error, stat, complete = false;
|
||||
var filePath = this.testPath + "/Untitled.js";
|
||||
var filePath = testPath + "/Untitled.js";
|
||||
runs(function() {
|
||||
brackets.fs.stat(filePath, function(err, _stat) {
|
||||
error = err;
|
||||
|
@ -87,14 +71,11 @@ define(function(require, exports, module) {
|
|||
it("should fail when a file already exists", function() {
|
||||
var didCreate = false, gotError = false;
|
||||
|
||||
runs(function() {
|
||||
ProjectManager.loadProject(this.testPath);
|
||||
});
|
||||
waitsFor(function() { return ProjectManager.getProjectRoot() }, "loadProject() timeout", 1000);
|
||||
SpecRunnerUtils.loadProject( testPath );
|
||||
|
||||
runs(function() {
|
||||
// skip rename
|
||||
ProjectManager.createNewItem(this.testPath, "file.js", true)
|
||||
ProjectManager.createNewItem(testPath, "file.js", true)
|
||||
.done(function() { didCreate = true; })
|
||||
.fail(function() { gotError = true; });
|
||||
});
|
||||
|
@ -109,14 +90,11 @@ define(function(require, exports, module) {
|
|||
it("should fail when a file name matches a directory that already exists", function() {
|
||||
var didCreate = false, gotError = false;
|
||||
|
||||
runs(function() {
|
||||
ProjectManager.loadProject(this.testPath);
|
||||
});
|
||||
waitsFor(function() { return ProjectManager.getProjectRoot() }, "loadProject() timeout", 1000);
|
||||
SpecRunnerUtils.loadProject( testPath );
|
||||
|
||||
runs(function() {
|
||||
// skip rename
|
||||
ProjectManager.createNewItem(this.testPath, "directory", true)
|
||||
ProjectManager.createNewItem(testPath, "directory", true)
|
||||
.done(function() { didCreate = true; })
|
||||
.fail(function() { gotError = true; });
|
||||
});
|
||||
|
@ -134,10 +112,7 @@ define(function(require, exports, module) {
|
|||
var len = chars.length;
|
||||
var charAt, didCreate, gotError;
|
||||
|
||||
runs(function() {
|
||||
ProjectManager.loadProject(this.testPath);
|
||||
});
|
||||
waitsFor(function() { return ProjectManager.getProjectRoot() }, "loadProject() timeout", 1000);
|
||||
SpecRunnerUtils.loadProject( testPath );
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
didCreate = false;
|
||||
|
@ -146,7 +121,7 @@ define(function(require, exports, module) {
|
|||
|
||||
runs(function() {
|
||||
// skip rename
|
||||
ProjectManager.createNewItem(this.testPath, "file" + charAt + ".js", true)
|
||||
ProjectManager.createNewItem(testPath, "file" + charAt + ".js", true)
|
||||
.done(function() { didCreate = true; })
|
||||
.fail(function() { gotError = true; });
|
||||
});
|
||||
|
@ -161,6 +136,4 @@ define(function(require, exports, module) {
|
|||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
define(function(require, exports, module) {
|
||||
|
||||
var TEST_PREFERENCES_KEY = "com.adobe.brackets.test.preferences";
|
||||
var TEST_PREFERENCES_KEY = "com.adobe.brackets.test.preferences"
|
||||
, testWindow;
|
||||
|
||||
function getTestRoot() {
|
||||
// /path/to/brackets/test/SpecRunner.html
|
||||
|
@ -23,9 +24,72 @@ define(function(require, exports, module) {
|
|||
return path.join("/");
|
||||
}
|
||||
|
||||
function beforeTestWindow(spec, callback) {
|
||||
var isReady = false;
|
||||
|
||||
runs(function() {
|
||||
testWindow = window.open( getBracketsSourceRoot() + "/index.html" );
|
||||
});
|
||||
|
||||
waitsFor(function() {
|
||||
return testWindow.brackets && testWindow.brackets.test;
|
||||
}, 5000);
|
||||
|
||||
runs(function() {
|
||||
// all test windows should use unit test preferences
|
||||
testWindow.brackets.test.PreferencesManager._setStorageKey( TEST_PREFERENCES_KEY );
|
||||
|
||||
// callback allows specs to query the testWindow before they run
|
||||
callback.call( spec, testWindow );
|
||||
|
||||
isReady = true;
|
||||
});
|
||||
|
||||
waitsFor(function() { return isReady; }, 5000);
|
||||
}
|
||||
|
||||
function afterTestWindow() {
|
||||
// debug-only to see testWindow state before closing
|
||||
// waits(500);
|
||||
|
||||
runs(function() {
|
||||
testWindow.close();
|
||||
});
|
||||
}
|
||||
|
||||
function loadProject( path ) {
|
||||
var isReady = false
|
||||
, projectTreeContainer;
|
||||
|
||||
runs(function() {
|
||||
// find the project tree in the testWindow
|
||||
projectTreeContainer = testWindow.$("#project-files-container");
|
||||
|
||||
// begin loading project path
|
||||
testWindow.brackets.test.ProjectManager.loadProject(path);
|
||||
});
|
||||
|
||||
// wait for file system to finish loading
|
||||
waitsFor(function() {
|
||||
return testWindow.brackets.test.ProjectManager.getProjectRoot().fullPath === path;
|
||||
}, "loadProject() timeout", 1000);
|
||||
|
||||
// listen for "loaded.jstree" to signal ready state
|
||||
runs(function() {
|
||||
projectTreeContainer.bind("loaded.jstree", function(event, data){
|
||||
isReady = true;
|
||||
});
|
||||
});
|
||||
|
||||
waitsFor(function() { return isReady; }, "jstree timeout", 1000);
|
||||
}
|
||||
|
||||
exports.TEST_PREFERENCES_KEY = TEST_PREFERENCES_KEY;
|
||||
|
||||
exports.getTestRoot = getTestRoot;
|
||||
exports.getTestPath = getTestPath;
|
||||
exports.getBracketsSourceRoot = getBracketsSourceRoot;
|
||||
exports.beforeTestWindow = beforeTestWindow;
|
||||
exports.afterTestWindow = afterTestWindow;
|
||||
exports.loadProject = loadProject;
|
||||
});
|
||||
|
|
Загрузка…
Ссылка в новой задаче