Skip to content

Commit e41a52a

Browse files
committed
test: code inspection integ tests
1 parent bd655fb commit e41a52a

4 files changed

Lines changed: 115 additions & 244 deletions

File tree

src/language/CodeInspection.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ define(function (require, exports, module) {
575575

576576
let fixIDCounter = 1;
577577
let documentFixes = new Map(), lastDocumentScanTimeStamp;
578-
function _registerNewFix(editor, fix) {
578+
function _registerNewFix(editor, fix, providerName) {
579579
if(!editor || !fix || !fix.rangeOffset) {
580580
return null;
581581
}
@@ -586,6 +586,7 @@ define(function (require, exports, module) {
586586
documentFixes.clear();
587587
}
588588
fixIDCounter++;
589+
fix.providerName = providerName;
589590
documentFixes.set(`${fixIDCounter}`, fix);
590591
return fixIDCounter;
591592
}
@@ -617,7 +618,7 @@ define(function (require, exports, module) {
617618
if (_shouldMarkTokenAtPosition(editor, error)) {
618619
let mark;
619620
const markOptions = _getMarkOptions(error);
620-
const fixID = _registerNewFix(editor, error.fix);
621+
const fixID = _registerNewFix(editor, error.fix, resultProvider.provider.name);
621622
if(fixID) {
622623
markOptions.metadata = fixID;
623624
error.fix.id = fixID;
@@ -1008,7 +1009,12 @@ define(function (require, exports, module) {
10081009
function _fixProblem(fixID) {
10091010
const fixDetails = documentFixes.get(fixID);
10101011
const editor = EditorManager.getCurrentFullEditor();
1011-
if(!editor || !fixDetails || editor.document.lastChangeTimestamp !== lastDocumentScanTimeStamp) {
1012+
const maxOffset = editor.document.getText().length;
1013+
if(fixDetails.rangeOffset.start < 0 || fixDetails.rangeOffset.end < 0 ||
1014+
fixDetails.rangeOffset.start > maxOffset || fixDetails.rangeOffset.end < maxOffset ){
1015+
Dialogs.showErrorDialog(Strings.CANNOT_FIX_TITLE,
1016+
StringUtils.format(Strings.CANNOT_FIX_INVALID_MESSAGE, fixDetails.providerName));
1017+
} else if(!editor || !fixDetails || editor.document.lastChangeTimestamp !== lastDocumentScanTimeStamp) {
10121018
Dialogs.showErrorDialog(Strings.CANNOT_FIX_TITLE, Strings.CANNOT_FIX_MESSAGE);
10131019
} else {
10141020
const from = editor.posFromIndex(fixDetails.rangeOffset.start),

src/nls/root/strings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@ define({
426426
"FIX": "Fix",
427427
"CANNOT_FIX_TITLE": "Failed to Apply Fix",
428428
"CANNOT_FIX_MESSAGE": "The document has been modified since the fix was prepared. Please try again.",
429+
"CANNOT_FIX_INVALID_MESSAGE": "Invalid Fix supplied by {0}",
429430
"LINTER_TIMED_OUT": "{0} has timed out after waiting for {1} ms",
430431
"LINTER_FAILED": "{0} terminated with error: {1}",
431432

test/spec/CodeInspection-fix-integ-test.js

Lines changed: 1 addition & 237 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,6 @@ define(function (require, exports, module) {
127127
await SpecRunnerUtils.closeTestWindow();
128128
}, 30000);
129129

130-
131-
// Tooltip is panel title, plus an informational message when there are problems.
132-
function buildTooltip(title) {
133-
return StringUtils.format(Strings.STATUSBAR_CODE_INSPECTION_TOOLTIP, title);
134-
}
135-
136130
async function _openProjectFile(fileName) {
137131
await awaitsForDone(SpecRunnerUtils.openProjectFiles([fileName]), "opening "+ fileName);
138132
}
@@ -187,237 +181,7 @@ define(function (require, exports, module) {
187181
});
188182

189183
// todo fix one, fix all, fix one undo, fix all undo, quick view error click, quick view fix click
184+
// todo invalid fixes test, doc changed after fix dialog
190185

191-
// it("should show errors underline under text in editor", async function () {
192-
// let codeInspector = createCodeInspector("javascript linter", failLintResult());
193-
// CodeInspection.register("javascript", codeInspector);
194-
//
195-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["errors.js"]), "open test file", 5000);
196-
//
197-
// expect($("#problems-panel").is(":visible")).toBe(true);
198-
// let marks = EditorManager.getActiveEditor().getAllMarks("codeInspector");
199-
// expect(marks.length).toBe(1);
200-
// expect(marks[0].className).toBe("editor-text-fragment-warn");
201-
// });
202-
//
203-
// function _hasClass(marks, className) {
204-
// let errorFound = false;
205-
// for(let mark of marks) {
206-
// if(mark.className === className){
207-
// errorFound = true;
208-
// break;
209-
// }
210-
// }
211-
// return errorFound;
212-
// }
213-
214-
// it("should display two expanded, collapsible sections in the errors panel when two linters have errors", async function () {
215-
// var codeInspector1 = createCodeInspector("javascript linter 1", failLintResult());
216-
// var codeInspector2 = createCodeInspector("javascript linter 2", failLintResult());
217-
// CodeInspection.register("javascript", codeInspector1);
218-
// CodeInspection.register("javascript", codeInspector2);
219-
//
220-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["errors.js"]), "open test file", 5000);
221-
//
222-
// var $inspectorSections = $(".inspector-section");
223-
// expect($inspectorSections.length).toEqual(2);
224-
// expect($inspectorSections[0].innerHTML.lastIndexOf("javascript linter 1 (1)")).not.toBe(-1);
225-
// expect($inspectorSections[1].innerHTML.lastIndexOf("javascript linter 2 (1)")).not.toBe(-1);
226-
//
227-
// var $expandedInspectorSections = $inspectorSections.find(".expanded");
228-
// expect($expandedInspectorSections.length).toEqual(2);
229-
// });
230-
//
231-
// it("should display no header section when only one linter has errors", async function () {
232-
// var codeInspector1 = createCodeInspector("javascript linter 1", failLintResult()),
233-
// codeInspector2 = createCodeInspector("javascript linter 2", {errors: []}), // 1st way of reporting 0 errors
234-
// codeInspector3 = createCodeInspector("javascript linter 3", null); // 2nd way of reporting 0 errors
235-
// CodeInspection.register("javascript", codeInspector1);
236-
// CodeInspection.register("javascript", codeInspector2);
237-
// CodeInspection.register("javascript", codeInspector3);
238-
//
239-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["errors.js"]), "open test file", 5000);
240-
//
241-
// expect($("#problems-panel").is(":visible")).toBe(true);
242-
// expect($(".inspector-section").is(":visible")).toBeFalsy();
243-
// });
244-
//
245-
// it("should only display header sections for linters with errors", async function () {
246-
// var codeInspector1 = createCodeInspector("javascript linter 1", failLintResult()),
247-
// codeInspector2 = createCodeInspector("javascript linter 2", {errors: []}), // 1st way of reporting 0 errors
248-
// codeInspector3 = createCodeInspector("javascript linter 3", null), // 2nd way of reporting 0 errors
249-
// codeInspector4 = createCodeInspector("javascript linter 4", failLintResult());
250-
// CodeInspection.register("javascript", codeInspector1);
251-
// CodeInspection.register("javascript", codeInspector2);
252-
// CodeInspection.register("javascript", codeInspector3);
253-
// CodeInspection.register("javascript", codeInspector4);
254-
//
255-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["errors.js"]), "open test file", 5000);
256-
//
257-
// expect($("#problems-panel").is(":visible")).toBe(true);
258-
//
259-
// var $inspectorSections = $(".inspector-section");
260-
// expect($inspectorSections.length).toEqual(2);
261-
// expect($inspectorSections[0].innerHTML.indexOf("javascript linter 1 (1)")).not.toBe(-1);
262-
// expect($inspectorSections[1].innerHTML.indexOf("javascript linter 4 (1)")).not.toBe(-1);
263-
// });
264-
//
265-
// it("status icon should toggle Errors panel when errors present", async function () {
266-
// var codeInspector = createCodeInspector("javascript linter", failLintResult());
267-
// CodeInspection.register("javascript", codeInspector);
268-
//
269-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["errors.js"]), "open test file");
270-
//
271-
// toggleJSLintResults(false);
272-
// toggleJSLintResults(true);
273-
// });
274-
//
275-
// it("status icon should not toggle Errors panel when no errors present", async function () {
276-
// var codeInspector = createCodeInspector("javascript linter", successfulLintResult());
277-
// CodeInspection.register("javascript", codeInspector);
278-
//
279-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["no-errors.js"]), "open test file");
280-
//
281-
// toggleJSLintResults(false);
282-
// toggleJSLintResults(false);
283-
// });
284-
//
285-
// it("should show the error count and the name of the linter in the panel title for one error", async function () {
286-
// var codeInspector = createCodeInspector("JavaScript Linter", failLintResult());
287-
// CodeInspection.register("javascript", codeInspector);
288-
//
289-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["errors.js"]), "open test file");
290-
//
291-
// var $problemPanelTitle = $("#problems-panel .title").text();
292-
// expect($problemPanelTitle).toBe(StringUtils.format(Strings.SINGLE_ERROR, "JavaScript Linter", "errors.js"));
293-
//
294-
// var $statusBar = $("#status-inspection");
295-
// expect($statusBar.is(":visible")).toBe(true);
296-
//
297-
// var tooltip = $statusBar.attr("title");
298-
// var expectedTooltip = buildTooltip(StringUtils.format(Strings.SINGLE_ERROR, "JavaScript Linter", "errors.js"), 1);
299-
// expect(tooltip).toBe(expectedTooltip);
300-
// });
301-
//
302-
// it("should show the error count and the name of the linter in the panel title and tooltip for multiple errors", async function () {
303-
// var lintResult = {
304-
// errors: [
305-
// {
306-
// pos: { line: 1, ch: 3 },
307-
// message: "Some errors here and there",
308-
// type: CodeInspection.Type.WARNING
309-
// },
310-
// {
311-
// pos: { line: 1, ch: 5 },
312-
// message: "Some errors there and there and over there",
313-
// type: CodeInspection.Type.WARNING
314-
// }
315-
// ]
316-
// };
317-
//
318-
// var codeInspector = createCodeInspector("JavaScript Linter", lintResult);
319-
// CodeInspection.register("javascript", codeInspector);
320-
//
321-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["errors.js"]), "open test file");
322-
//
323-
// var $problemPanelTitle = $("#problems-panel .title").text();
324-
// expect($problemPanelTitle).toBe(StringUtils.format(Strings.MULTIPLE_ERRORS, 2, "JavaScript Linter", "errors.js"));
325-
//
326-
// var $statusBar = $("#status-inspection");
327-
// expect($statusBar.is(":visible")).toBe(true);
328-
//
329-
// var tooltip = $statusBar.attr("title");
330-
// var expectedTooltip = buildTooltip(StringUtils.format(Strings.MULTIPLE_ERRORS, 2, "JavaScript Linter", "errors.js"), 2);
331-
// expect(tooltip).toBe(expectedTooltip);
332-
// });
333-
//
334-
// it("should show the generic panel title if more than one inspector reported problems", async function () {
335-
// var lintResult = failLintResult();
336-
//
337-
// var codeInspector1 = createCodeInspector("JavaScript Linter1", lintResult);
338-
// CodeInspection.register("javascript", codeInspector1);
339-
// var codeInspector2 = createCodeInspector("JavaScript Linter2", lintResult);
340-
// CodeInspection.register("javascript", codeInspector2);
341-
//
342-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["errors.js"]), "open test file");
343-
//
344-
// var $problemPanelTitle = $("#problems-panel .title").text();
345-
// expect($problemPanelTitle).toBe(StringUtils.format(Strings.ERRORS_PANEL_TITLE_MULTIPLE, 2, "errors.js"));
346-
//
347-
// var $statusBar = $("#status-inspection");
348-
// expect($statusBar.is(":visible")).toBe(true);
349-
//
350-
// var tooltip = $statusBar.attr("title");
351-
// // tooltip will contain + in the title if the inspection was aborted
352-
// var expectedTooltip = buildTooltip(StringUtils.format(Strings.ERRORS_PANEL_TITLE_MULTIPLE, 2, "errors.js"), 2);
353-
// expect(tooltip).toBe(expectedTooltip);
354-
// });
355-
//
356-
// it("should show no problems tooltip in status bar for multiple inspectors", async function () {
357-
// var codeInspector = createCodeInspector("JavaScript Linter1", successfulLintResult());
358-
// CodeInspection.register("javascript", codeInspector);
359-
// codeInspector = createCodeInspector("JavaScript Linter2", successfulLintResult());
360-
// CodeInspection.register("javascript", codeInspector);
361-
//
362-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["errors.js"]), "open test file");
363-
//
364-
// var $statusBar = $("#status-inspection");
365-
// expect($statusBar.is(":visible")).toBe(true);
366-
//
367-
// var tooltip = $statusBar.attr("title");
368-
// var expectedTooltip = buildTooltip(Strings.NO_ERRORS_MULTIPLE_PROVIDER, 0);
369-
// expect(tooltip).toBe(expectedTooltip);
370-
// });
371-
//
372-
// it("should show no problems tooltip in status bar for 1 inspector", async function () {
373-
// var codeInspector = createCodeInspector("JavaScript Linter1", successfulLintResult());
374-
// CodeInspection.register("javascript", codeInspector);
375-
//
376-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["errors.js"]), "open test file");
377-
//
378-
// var $statusBar = $("#status-inspection");
379-
// expect($statusBar.is(":visible")).toBe(true);
380-
//
381-
// var tooltip = $statusBar.attr("title");
382-
// var expectedTooltip = buildTooltip(StringUtils.format(Strings.NO_ERRORS, "JavaScript Linter1"), 0);
383-
// expect(tooltip).toBe(expectedTooltip);
384-
// });
385-
//
386-
// it("should handle missing or negative line numbers gracefully (https://github.com/adobe/brackets/issues/6441)", async function () {
387-
// var codeInspector1 = createCodeInspector("NoLineNumberLinter", {
388-
// errors: [
389-
// {
390-
// pos: { line: -1, ch: 0 },
391-
// message: "Some errors here and there",
392-
// type: CodeInspection.Type.WARNING
393-
// }
394-
// ]
395-
// });
396-
//
397-
// var codeInspector2 = createCodeInspector("NoLineNumberLinter2", {
398-
// errors: [
399-
// {
400-
// pos: { line: "all", ch: 0 },
401-
// message: "Some errors here and there",
402-
// type: CodeInspection.Type.WARNING
403-
// }
404-
// ]
405-
// });
406-
// CodeInspection.register("javascript", codeInspector1);
407-
// CodeInspection.register("javascript", codeInspector2);
408-
//
409-
// await awaitsForDone(SpecRunnerUtils.openProjectFiles(["errors.js"]), "open test file");
410-
//
411-
// await awaits(100);
412-
// var $problemPanelTitle = $("#problems-panel .title").text();
413-
// expect($problemPanelTitle).toBe(StringUtils.format(Strings.ERRORS_PANEL_TITLE_MULTIPLE, 2, "errors.js"));
414-
//
415-
// var $statusBar = $("#status-inspection");
416-
// expect($statusBar.is(":visible")).toBe(true);
417-
//
418-
// var tooltip = $statusBar.attr("title");
419-
// var expectedTooltip = buildTooltip(StringUtils.format(Strings.ERRORS_PANEL_TITLE_MULTIPLE, 2, "errors.js"), 2);
420-
// expect(tooltip).toBe(expectedTooltip);
421-
// });
422186
});
423187
});

0 commit comments

Comments
 (0)