summaryrefslogtreecommitdiffstats
path: root/devtools/client/shadereditor/test/browser_se_editors-error-gutter.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/shadereditor/test/browser_se_editors-error-gutter.js')
-rw-r--r--devtools/client/shadereditor/test/browser_se_editors-error-gutter.js156
1 files changed, 156 insertions, 0 deletions
diff --git a/devtools/client/shadereditor/test/browser_se_editors-error-gutter.js b/devtools/client/shadereditor/test/browser_se_editors-error-gutter.js
new file mode 100644
index 000000000..439d6074f
--- /dev/null
+++ b/devtools/client/shadereditor/test/browser_se_editors-error-gutter.js
@@ -0,0 +1,156 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Tests if error indicators are shown in the editor's gutter and text area
+ * when there's a shader compilation error.
+ */
+
+function* ifWebGLSupported() {
+ let { target, panel } = yield initShaderEditor(SIMPLE_CANVAS_URL);
+ let { gFront, EVENTS, ShadersEditorsView } = panel.panelWin;
+
+ reload(target);
+ yield promise.all([
+ once(gFront, "program-linked"),
+ once(panel.panelWin, EVENTS.SOURCES_SHOWN)
+ ]);
+
+ let vsEditor = yield ShadersEditorsView._getEditor("vs");
+ let fsEditor = yield ShadersEditorsView._getEditor("fs");
+
+ vsEditor.replaceText("vec3", { line: 7, ch: 22 }, { line: 7, ch: 26 });
+ let [, vertError] = yield onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED);
+ checkHasVertFirstError(true, vertError);
+ checkHasVertSecondError(false, vertError);
+ info("Error marks added in the vertex shader editor.");
+
+ vsEditor.insertText(" ", { line: 1, ch: 0 });
+ yield once(panel.panelWin, EVENTS.EDITOR_ERROR_MARKERS_REMOVED);
+ is(vsEditor.getText(1), " precision lowp float;", "Typed space.");
+ checkHasVertFirstError(false, vertError);
+ checkHasVertSecondError(false, vertError);
+ info("Error marks removed while typing in the vertex shader editor.");
+
+ [, vertError] = yield onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED);
+ checkHasVertFirstError(true, vertError);
+ checkHasVertSecondError(false, vertError);
+ info("Error marks were re-added after recompiling the vertex shader.");
+
+ fsEditor.replaceText("vec4", { line: 2, ch: 14 }, { line: 2, ch: 18 });
+ let [, fragError] = yield onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED);
+ checkHasVertFirstError(true, vertError);
+ checkHasVertSecondError(false, vertError);
+ checkHasFragError(true, fragError);
+ info("Error marks added in the fragment shader editor.");
+
+ fsEditor.insertText(" ", { line: 1, ch: 0 });
+ yield once(panel.panelWin, EVENTS.EDITOR_ERROR_MARKERS_REMOVED);
+ is(fsEditor.getText(1), " precision lowp float;", "Typed space.");
+ checkHasVertFirstError(true, vertError);
+ checkHasVertSecondError(false, vertError);
+ checkHasFragError(false, fragError);
+ info("Error marks removed while typing in the fragment shader editor.");
+
+ [, fragError] = yield onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED);
+ checkHasVertFirstError(true, vertError);
+ checkHasVertSecondError(false, vertError);
+ checkHasFragError(true, fragError);
+ info("Error marks were re-added after recompiling the fragment shader.");
+
+ vsEditor.replaceText("2", { line: 3, ch: 19 }, { line: 3, ch: 20 });
+ yield once(panel.panelWin, EVENTS.EDITOR_ERROR_MARKERS_REMOVED);
+ checkHasVertFirstError(false, vertError);
+ checkHasVertSecondError(false, vertError);
+ checkHasFragError(true, fragError);
+ info("Error marks removed while typing in the vertex shader editor again.");
+
+ [, vertError] = yield onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED);
+ checkHasVertFirstError(true, vertError);
+ checkHasVertSecondError(true, vertError);
+ checkHasFragError(true, fragError);
+ info("Error marks were re-added after recompiling the fragment shader again.");
+
+ yield teardown(panel);
+ finish();
+
+ function checkHasVertFirstError(bool, error) {
+ ok(error, "Vertex shader compiled with errors.");
+ isnot(error.link, "", "The linkage status should not be empty.");
+
+ let line = 7;
+ info("Checking first vertex shader error on line " + line + "...");
+
+ is(vsEditor.hasMarker(line, "errors", "error"), bool,
+ "Error is " + (bool ? "" : "not ") + "shown in the editor's gutter.");
+ is(vsEditor.hasLineClass(line, "error-line"), bool,
+ "Error style is " + (bool ? "" : "not ") + "applied to the faulty line.");
+
+ let parsed = ShadersEditorsView._errors.vs;
+ is(parsed.length >= 1, bool,
+ "There's " + (bool ? ">= 1" : "< 1") + " parsed vertex shader error(s).");
+
+ if (bool) {
+ is(parsed[0].line, line,
+ "The correct line was parsed.");
+ is(parsed[0].messages.length, 2,
+ "There are 2 parsed messages.");
+ ok(parsed[0].messages[0].includes("'constructor' : too many arguments"),
+ "The correct first message was parsed.");
+ ok(parsed[0].messages[1].includes("'assign' : cannot convert from"),
+ "The correct second message was parsed.");
+ }
+ }
+
+ function checkHasVertSecondError(bool, error) {
+ ok(error, "Vertex shader compiled with errors.");
+ isnot(error.link, "", "The linkage status should not be empty.");
+
+ let line = 8;
+ info("Checking second vertex shader error on line " + line + "...");
+
+ is(vsEditor.hasMarker(line, "errors", "error"), bool,
+ "Error is " + (bool ? "" : "not ") + "shown in the editor's gutter.");
+ is(vsEditor.hasLineClass(line, "error-line"), bool,
+ "Error style is " + (bool ? "" : "not ") + "applied to the faulty line.");
+
+ let parsed = ShadersEditorsView._errors.vs;
+ is(parsed.length >= 2, bool,
+ "There's " + (bool ? ">= 2" : "< 2") + " parsed vertex shader error(s).");
+
+ if (bool) {
+ is(parsed[1].line, line,
+ "The correct line was parsed.");
+ is(parsed[1].messages.length, 1,
+ "There is 1 parsed message.");
+ ok(parsed[1].messages[0].includes("'assign' : cannot convert from"),
+ "The correct message was parsed.");
+ }
+ }
+
+ function checkHasFragError(bool, error) {
+ ok(error, "Fragment shader compiled with errors.");
+ isnot(error.link, "", "The linkage status should not be empty.");
+
+ let line = 5;
+ info("Checking first vertex shader error on line " + line + "...");
+
+ is(fsEditor.hasMarker(line, "errors", "error"), bool,
+ "Error is " + (bool ? "" : "not ") + "shown in the editor's gutter.");
+ is(fsEditor.hasLineClass(line, "error-line"), bool,
+ "Error style is " + (bool ? "" : "not ") + "applied to the faulty line.");
+
+ let parsed = ShadersEditorsView._errors.fs;
+ is(parsed.length >= 1, bool,
+ "There's " + (bool ? ">= 2" : "< 1") + " parsed fragment shader error(s).");
+
+ if (bool) {
+ is(parsed[0].line, line,
+ "The correct line was parsed.");
+ is(parsed[0].messages.length, 1,
+ "There is 1 parsed message.");
+ ok(parsed[0].messages[0].includes("'constructor' : too many arguments"),
+ "The correct message was parsed.");
+ }
+ }
+}