browser_se_programs-blackbox-01.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /* Any copyright is dedicated to the Public Domain.
  2. http://creativecommons.org/publicdomain/zero/1.0/ */
  3. /**
  4. * Tests if blackboxing a program works properly.
  5. */
  6. function* ifWebGLSupported() {
  7. let { target, debuggee, panel } = yield initShaderEditor(MULTIPLE_CONTEXTS_URL);
  8. let { gFront, EVENTS, ShadersListView, ShadersEditorsView } = panel.panelWin;
  9. once(panel.panelWin, EVENTS.SHADER_COMPILED).then(() => {
  10. ok(false, "No shaders should be publicly compiled during this test.");
  11. });
  12. reload(target);
  13. let [[firstProgramActor, secondProgramActor]] = yield promise.all([
  14. getPrograms(gFront, 2),
  15. once(panel.panelWin, EVENTS.SOURCES_SHOWN)
  16. ]);
  17. let vsEditor = yield ShadersEditorsView._getEditor("vs");
  18. let fsEditor = yield ShadersEditorsView._getEditor("fs");
  19. vsEditor.once("change", () => {
  20. ok(false, "The vertex shader source was unexpectedly changed.");
  21. });
  22. fsEditor.once("change", () => {
  23. ok(false, "The fragment shader source was unexpectedly changed.");
  24. });
  25. once(panel.panelWin, EVENTS.SOURCES_SHOWN).then(() => {
  26. ok(false, "No sources should be changed form this point onward.");
  27. });
  28. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
  29. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
  30. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
  31. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
  32. ok(!ShadersListView.selectedAttachment.isBlackBoxed,
  33. "The first program should not be blackboxed yet.");
  34. is(getBlackBoxCheckbox(panel, 0).checked, true,
  35. "The first blackbox checkbox should be initially checked.");
  36. ok(!ShadersListView.attachments[1].isBlackBoxed,
  37. "The second program should not be blackboxed yet.");
  38. is(getBlackBoxCheckbox(panel, 1).checked, true,
  39. "The second blackbox checkbox should be initially checked.");
  40. getBlackBoxCheckbox(panel, 0).click();
  41. ok(ShadersListView.selectedAttachment.isBlackBoxed,
  42. "The first program should now be blackboxed.");
  43. is(getBlackBoxCheckbox(panel, 0).checked, false,
  44. "The first blackbox checkbox should now be unchecked.");
  45. ok(!ShadersListView.attachments[1].isBlackBoxed,
  46. "The second program should still not be blackboxed.");
  47. is(getBlackBoxCheckbox(panel, 1).checked, true,
  48. "The second blackbox checkbox should still be checked.");
  49. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas1");
  50. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
  51. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas1");
  52. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
  53. ok(true, "The first program was correctly blackboxed.");
  54. getBlackBoxCheckbox(panel, 1).click();
  55. ok(ShadersListView.selectedAttachment.isBlackBoxed,
  56. "The first program should still be blackboxed.");
  57. is(getBlackBoxCheckbox(panel, 0).checked, false,
  58. "The first blackbox checkbox should still be unchecked.");
  59. ok(ShadersListView.attachments[1].isBlackBoxed,
  60. "The second program should now be blackboxed.");
  61. is(getBlackBoxCheckbox(panel, 1).checked, false,
  62. "The second blackbox checkbox should now be unchecked.");
  63. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas1");
  64. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas2");
  65. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas1");
  66. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas2");
  67. ok(true, "The second program was correctly blackboxed.");
  68. ShadersListView._onProgramMouseOver({ target: getItemLabel(panel, 0) });
  69. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas1");
  70. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas2");
  71. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas1");
  72. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas2");
  73. ok(true, "Highlighting shouldn't work while blackboxed (1).");
  74. ShadersListView._onProgramMouseOut({ target: getItemLabel(panel, 0) });
  75. ShadersListView._onProgramMouseOver({ target: getItemLabel(panel, 1) });
  76. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas1");
  77. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas2");
  78. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas1");
  79. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas2");
  80. ok(true, "Highlighting shouldn't work while blackboxed (2).");
  81. ShadersListView._onProgramMouseOut({ target: getItemLabel(panel, 1) });
  82. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas1");
  83. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas2");
  84. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas1");
  85. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 0, b: 0, a: 255 }, true, "#canvas2");
  86. ok(true, "Highlighting shouldn't work while blackboxed (3).");
  87. getBlackBoxCheckbox(panel, 0).click();
  88. getBlackBoxCheckbox(panel, 1).click();
  89. ok(!ShadersListView.selectedAttachment.isBlackBoxed,
  90. "The first program should now be unblackboxed.");
  91. is(getBlackBoxCheckbox(panel, 0).checked, true,
  92. "The first blackbox checkbox should now be rechecked.");
  93. ok(!ShadersListView.attachments[1].isBlackBoxed,
  94. "The second program should now be unblackboxed.");
  95. is(getBlackBoxCheckbox(panel, 1).checked, true,
  96. "The second blackbox checkbox should now be rechecked.");
  97. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
  98. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
  99. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
  100. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
  101. ok(true, "The two programs were correctly unblackboxed.");
  102. ShadersListView._onProgramMouseOver({ target: getItemLabel(panel, 0) });
  103. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 255, g: 0, b: 0, a: 255 }, true, "#canvas1");
  104. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
  105. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 255, g: 0, b: 0, a: 255 }, true, "#canvas1");
  106. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
  107. ok(true, "The first program was correctly highlighted.");
  108. ShadersListView._onProgramMouseOut({ target: getItemLabel(panel, 0) });
  109. ShadersListView._onProgramMouseOver({ target: getItemLabel(panel, 1) });
  110. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
  111. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 0, b: 64, a: 255 }, true, "#canvas2");
  112. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
  113. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 0, b: 64, a: 255 }, true, "#canvas2");
  114. ok(true, "The second program was correctly highlighted.");
  115. ShadersListView._onProgramMouseOut({ target: getItemLabel(panel, 1) });
  116. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
  117. yield ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
  118. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 255, g: 255, b: 0, a: 255 }, true, "#canvas1");
  119. yield ensurePixelIs(gFront, { x: 127, y: 127 }, { r: 0, g: 255, b: 255, a: 255 }, true, "#canvas2");
  120. ok(true, "The two programs were correctly unhighlighted.");
  121. yield teardown(panel);
  122. finish();
  123. }
  124. function getItemLabel(aPanel, aIndex) {
  125. return aPanel.panelWin.document.querySelectorAll(
  126. ".side-menu-widget-item-contents")[aIndex];
  127. }
  128. function getBlackBoxCheckbox(aPanel, aIndex) {
  129. return aPanel.panelWin.document.querySelectorAll(
  130. ".side-menu-widget-item-checkbox")[aIndex];
  131. }
  132. function once(aTarget, aEvent) {
  133. let deferred = promise.defer();
  134. aTarget.once(aEvent, deferred.resolve);
  135. return deferred.promise;
  136. }