-
Notifications
You must be signed in to change notification settings - Fork 7.6k
Smallish cleanups to docs & unit tests; improve a few tests #3429
Changes from 3 commits
5dc6489
045fae6
f59be5a
7250b96
8d94d0d
98f23f2
9df7830
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -175,7 +175,7 @@ define(function (require, exports, module) { | |
/** | ||
* Resolves a language ID to a Language object. | ||
* File names have a higher priority than file extensions. | ||
* @param {!string} id Identifier for this language, use only letters a-z or digits 0-9 and _ inbetween (i.e. "cpp", "foo_bar", "c99") | ||
* @param {!string} id Identifier for this language: lowercase letters and digits with _ separators (e.g. "cpp", "foo_bar", "c99") | ||
* @return {Language} The language with the provided identifier or undefined | ||
*/ | ||
function getLanguage(id) { | ||
|
@@ -322,7 +322,7 @@ define(function (require, exports, module) { | |
|
||
/** | ||
* Sets the identifier for this language or prints an error to the console. | ||
* @param {!string} id Identifier for this language, use only letters a-z or digits 0-9, and _ inbetween (i.e. "cpp", "foo_bar", "c99") | ||
* @param {!string} id Identifier for this language: lowercase letters and digits with _ separators (e.g. "cpp", "foo_bar", "c99") | ||
* @return {boolean} Whether the ID was valid and set or not | ||
*/ | ||
Language.prototype._setId = function (id) { | ||
|
@@ -350,7 +350,7 @@ define(function (require, exports, module) { | |
|
||
/** | ||
* Sets the human-readable name of this language or prints an error to the console. | ||
* @param {!string} name Human-readable name of the language, as it's commonly referred to (i.e. "C++") | ||
* @param {!string} name Human-readable name of the language, as it's commonly referred to (e.g. "C++") | ||
* @return {boolean} Whether the name was valid and set or not | ||
*/ | ||
Language.prototype._setName = function (name) { | ||
|
@@ -373,7 +373,7 @@ define(function (require, exports, module) { | |
/** | ||
* Loads a mode and sets it for this language. | ||
* | ||
* @param {string|Array.<string>} mode CodeMirror mode (i.e. "htmlmixed"), optionally with a MIME mode defined by that mode ["clike", "text/x-c++src"] | ||
* @param {string|Array.<string>} mode CodeMirror mode (e.g. "htmlmixed"), optionally with a MIME mode defined by that mode ["clike", "text/x-c++src"] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This should be |
||
* Unless the mode is located in thirdparty/CodeMirror2/mode/<name>/<name>.js, you need to first load it yourself. | ||
* | ||
* @return {$.Promise} A promise object that will be resolved when the mode is loaded and set | ||
|
@@ -519,7 +519,7 @@ define(function (require, exports, module) { | |
/** | ||
* Sets the prefixes to use for line comments in this language or prints an error to the console. | ||
* @param {!string|Array.<string>} prefix Prefix string or an array of prefix strings | ||
* to use for line comments (i.e. "//" or ["//", "#"]) | ||
* to use for line comments (e.g. "//" or ["//", "#"]) | ||
* @return {boolean} Whether the syntax was valid and set or not | ||
*/ | ||
Language.prototype.setLineCommentSyntax = function (prefix) { | ||
|
@@ -637,13 +637,14 @@ define(function (require, exports, module) { | |
/** | ||
* Defines a language. | ||
* | ||
* @param {!string} id Unique identifier for this language, use only letters a-z or digits 0-9, and _ inbetween (i.e. "cpp", "foo_bar", "c99") | ||
* @param {!string} id Unique identifier for this language: lowercase letters and digits with _ separators (e.g. "cpp", "foo_bar", "c99") | ||
* @param {!Object} definition An object describing the language | ||
* @param {!string} definition.name Human-readable name of the language, as it's commonly referred to (i.e. "C++") | ||
* @param {Array.<string>} definition.fileExtensions List of file extensions used by this language (i.e. ["php", "php3"]) | ||
* @param {Array.<string>} definition.blockComment Array with two entries defining the block comment prefix and suffix (i.e. ["<!--", "-->"]) | ||
* @param {string|Array.<string>} definition.lineComment Line comment prefixes (i.e. "//" or ["//", "#"]) | ||
* @param {string|Array.<string>} definition.mode CodeMirror mode (i.e. "htmlmixed"), optionally with a MIME mode defined by that mode ["clike", "text/x-c++src"] | ||
* @param {!string} definition.name Human-readable name of the language, as it's commonly referred to (e.g. "C++") | ||
* @param {Array.<string>} definition.fileExtensions List of file extensions used by this language (e.g. ["php", "php3"]). May contain periods (e.g. ["coffee.md"]) | ||
* @param {Array.<string>} definition.fileNames List of file names (e.g. ["Makefile"] or ["package.json]) | ||
* @param {Array.<string>} definition.blockComment Array with two entries defining the block comment prefix and suffix (e.g. ["<!--", "-->"]) | ||
* @param {string|Array.<string>} definition.lineComment Line comment prefixes (e.g. "//" or ["//", "#"]) | ||
* @param {string|Array.<string>} definition.mode CodeMirror mode (e.g. "htmlmixed"), optionally with a MIME mode defined by that mode ["clike", "text/x-c++src"] | ||
* Unless the mode is located in thirdparty/CodeMirror2/mode/<name>/<name>.js, you need to first load it yourself. | ||
* | ||
* @return {$.Promise} A promise object that will be resolved with a Language object | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -253,13 +253,14 @@ define(function (require, exports, module) { | |
* Creates a new general purpose modal dialog using the default template and the template variables given | ||
* as parameters as described. | ||
* | ||
* @param {string} dlgClass A class name identifier for the dialog. | ||
* @param {string} dlgClass A class name identifier for the dialog. Typically one of DefaultDialogs.* | ||
* @param {string=} title The title of the dialog. Can contain HTML markup. If unspecified, the title | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could you update this 2 comments too, since you updated the others? It was my mistake, but we can fix it here. In both param descriptions it should that it Defaults to an empty string, instead of the JSON stuff. |
||
* in the JSON file is used unchanged. | ||
* @param {string=} message The message to display in the dialog. Can contain HTML markup. If | ||
* unspecified, the message in the JSON file is used. | ||
* @param {Array.<{className: string, id: string, text: string>=} buttons An array of buttons where each button | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I missed a |
||
* has a class, id and text property. The id is used in "data-button-id". It defaults to an Ok button | ||
* has a class, id and text property. The id is used in "data-button-id". Defaults to a single Ok button. | ||
* Typically className is one of DIALOG_BTN_CLASS_*, id is one of DIALOG_BTN_* | ||
* @return {Dialog} | ||
*/ | ||
function showModalDialog(dlgClass, title, message, buttons) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -56,7 +56,7 @@ define(function (require, exports, module) { | |
} | ||
|
||
describe("Editor", function () { | ||
var defaultContent = 'Brackets is going to be awesome!\n'; | ||
var defaultContent = "Brackets is going to be awesome!\n"; | ||
var myDocument, myEditor; | ||
|
||
function createTestEditor(content, languageId) { | ||
|
@@ -110,42 +110,15 @@ define(function (require, exports, module) { | |
myEditor._codeMirror.setValue("new content"); | ||
expect(changeFired).toBe(true); | ||
}); | ||
|
||
}); | ||
|
||
describe("File extension to mode mapping", function () { | ||
|
||
it("should switch to the HTML mode for files ending in .html", function () { | ||
// verify editor content | ||
var mode = LanguageManager.getLanguageForPath("c:/only/testing/the/path.html").getMode(); | ||
expect(mode).toSpecifyModeNamed("text/x-brackets-html"); | ||
}); | ||
|
||
it("should switch modes for UNIX absolute path", function () { | ||
// verify editor content | ||
var mode = LanguageManager.getLanguageForPath("/only/testing/the/path.css").getMode(); | ||
expect(mode).toSpecifyModeNamed(langNames.css.mode); | ||
}); | ||
|
||
it("should switch modes for relative path", function () { | ||
// verify editor content | ||
it("should set mode based on Document language", function () { | ||
createTestEditor(defaultContent, "html"); | ||
var mode = LanguageManager.getLanguageForPath("only/testing/the/path.css").getMode(); | ||
expect(mode).toSpecifyModeNamed(langNames.css.mode); | ||
}); | ||
|
||
it("should accept just a file name too", function () { | ||
// verify editor content | ||
var mode = LanguageManager.getLanguageForPath("path.js").getMode(); | ||
expect(mode).toSpecifyModeNamed(langNames.javascript.mode); | ||
}); | ||
|
||
it("should default to plain text for unknown file extensions", function () { | ||
// verify editor content | ||
var mode = LanguageManager.getLanguageForPath("test.foo").getMode(); | ||
|
||
// "unknown" mode uses it's MIME type instead | ||
expect(mode).toBe("text/plain"); | ||
var htmlLanguage = LanguageManager.getLanguage("html"); | ||
expect(myEditor.getModeForDocument()).toBe(htmlLanguage.getMode()); | ||
}); | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The tests above were just testing LanguageManager functionality. I simplified & moved those into LanguageManager-test, and in their place added a single test here to make sure the Document's language actually carries through to the Editor's mode (which the old tests never checked). |
||
}); | ||
|
||
describe("Focus", function () { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -247,7 +247,7 @@ define(function (require, exports, module) { | |
|
||
}); | ||
|
||
it("should handle simultaneous requests without doing extra work", function () { // #330 | ||
it("should handle identical simultaneous requests without doing extra work", function () { // #330 | ||
// Open a directory | ||
SpecRunnerUtils.loadProjectInTestWindow(testPath); | ||
|
||
|
@@ -263,7 +263,7 @@ define(function (require, exports, module) { | |
.done(function (result) { | ||
allFiles1 = result; | ||
}); | ||
promise2 = FileIndexManager.getFileInfoList("all") | ||
promise2 = FileIndexManager.getFileInfoList("all") // same request again | ||
.done(function (result) { | ||
allFiles2 = result; | ||
}); | ||
|
@@ -282,6 +282,41 @@ define(function (require, exports, module) { | |
}); | ||
}); | ||
|
||
it("should handle differing simultaneous requests without doing extra work", function () { // #330 | ||
// Open a directory | ||
SpecRunnerUtils.loadProjectInTestWindow(testPath); | ||
|
||
var projectRoot; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should join this var statements, and maybe move them to the top of the function too. |
||
var promise1, promise2; | ||
var allFiles1, allFiles2; | ||
runs(function () { | ||
projectRoot = ProjectManager.getProjectRoot(); | ||
spyOn(projectRoot, "createReader").andCallThrough(); | ||
|
||
// Kick off two index requests in parallel | ||
promise1 = FileIndexManager.getFileInfoList("all") | ||
.done(function (result) { | ||
allFiles1 = result; | ||
}); | ||
promise2 = FileIndexManager.getFileInfoList("css") // different request in parallel | ||
.done(function (result) { | ||
allFiles2 = result; | ||
}); | ||
|
||
waitsForDone(promise1, "First FileIndexManager.getFileInfoList()"); | ||
waitsForDone(promise2, "Second FileIndexManager.getFileInfoList()"); | ||
}); | ||
|
||
runs(function () { | ||
// Correct response to both promises | ||
expect(allFiles1.length).toEqual(8); | ||
expect(allFiles2.length).toEqual(3); | ||
|
||
// Didn't scan project tree twice | ||
expect(projectRoot.createReader.callCount).toBe(1); | ||
}); | ||
}); | ||
|
||
it("should match a specific filename and return the correct FileInfo", function () { | ||
// Open a directory | ||
SpecRunnerUtils.loadProjectInTestWindow(testPath); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This
for
and the next one should useArray.forEach