summaryrefslogtreecommitdiffstats
path: root/devtools/client/shadereditor/test/browser_webgl-actor-test-13.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/shadereditor/test/browser_webgl-actor-test-13.js')
-rw-r--r--devtools/client/shadereditor/test/browser_webgl-actor-test-13.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/devtools/client/shadereditor/test/browser_webgl-actor-test-13.js b/devtools/client/shadereditor/test/browser_webgl-actor-test-13.js
new file mode 100644
index 000000000..f4730ba39
--- /dev/null
+++ b/devtools/client/shadereditor/test/browser_webgl-actor-test-13.js
@@ -0,0 +1,67 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Tests if multiple WebGL contexts are correctly handled.
+ */
+
+function* ifWebGLSupported() {
+ let { target, front } = yield initBackend(MULTIPLE_CONTEXTS_URL);
+ front.setup({ reload: true });
+
+ let [firstProgramActor, secondProgramActor] = yield getPrograms(front, 2);
+
+ isnot(firstProgramActor, secondProgramActor,
+ "Two distinct program actors were recevide from two separate contexts.");
+
+ let firstVertexShader = yield firstProgramActor.getVertexShader();
+ let firstFragmentShader = yield firstProgramActor.getFragmentShader();
+ let secondVertexShader = yield secondProgramActor.getVertexShader();
+ let secondFragmentShader = yield secondProgramActor.getFragmentShader();
+
+ isnot(firstVertexShader, secondVertexShader,
+ "The two programs should have distinct vertex shaders.");
+ isnot(firstFragmentShader, secondFragmentShader,
+ "The two programs should have distinct fragment shaders.");
+
+ let firstVertSource = yield firstVertexShader.getText();
+ let firstFragSource = yield firstFragmentShader.getText();
+ let secondVertSource = yield secondVertexShader.getText();
+ let secondFragSource = yield secondFragmentShader.getText();
+
+ is(firstVertSource, secondVertSource,
+ "The vertex shaders should have identical sources.");
+ is(firstFragSource, secondFragSource,
+ "The vertex shaders should have identical sources.");
+
+ yield ensurePixelIs(front, { x: 0, y: 0 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
+ yield ensurePixelIs(front, { x: 0, y: 0 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
+ yield ensurePixelIs(front, { x: 127, y: 127 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
+ yield ensurePixelIs(front, { x: 127, y: 127 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
+ ok(true, "The two canvases are correctly drawn.");
+
+ yield firstProgramActor.highlight([1, 0, 0, 1]);
+ yield ensurePixelIs(front, { x: 0, y: 0 }, { r: 255, g: 0, b: 0, a: 255 }, true, "#canvas1");
+ yield ensurePixelIs(front, { x: 0, y: 0 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
+ yield ensurePixelIs(front, { x: 127, y: 127 }, { r: 255, g: 0, b: 0, a: 255 }, true, "#canvas1");
+ yield ensurePixelIs(front, { x: 127, y: 127 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
+ ok(true, "The first canvas was correctly filled after highlighting.");
+
+ yield secondProgramActor.highlight([0, 1, 0, 1]);
+ yield ensurePixelIs(front, { x: 0, y: 0 }, { r: 255, g: 0, b: 0, a: 255 }, true, "#canvas1");
+ yield ensurePixelIs(front, { x: 0, y: 0 }, { r: 0, g: 255, b: 0, a: 255 }, true, "#canvas2");
+ yield ensurePixelIs(front, { x: 127, y: 127 }, { r: 255, g: 0, b: 0, a: 255 }, true, "#canvas1");
+ yield ensurePixelIs(front, { x: 127, y: 127 }, { r: 0, g: 255, b: 0, a: 255 }, true, "#canvas2");
+ ok(true, "The second canvas was correctly filled after highlighting.");
+
+ yield firstProgramActor.unhighlight();
+ yield secondProgramActor.unhighlight();
+ yield ensurePixelIs(front, { x: 0, y: 0 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
+ yield ensurePixelIs(front, { x: 0, y: 0 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
+ yield ensurePixelIs(front, { x: 127, y: 127 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
+ yield ensurePixelIs(front, { x: 127, y: 127 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
+ ok(true, "The two canvases were correctly filled after unhighlighting.");
+
+ yield removeTab(target.tab);
+ finish();
+}