/devtools/client/inspector/rules/test/browser_rules_pseudo_lock_options.js

https://github.com/rillian/firefox · JavaScript · 131 lines · 106 code · 21 blank · 4 comment · 3 complexity · 95577965b047fbc210416805e985900f MD5 · raw file

  1. /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
  2. /* Any copyright is dedicated to the Public Domain.
  3. http://creativecommons.org/publicdomain/zero/1.0/ */
  4. "use strict";
  5. // Tests that the rule view pseudo lock options work properly.
  6. const TEST_URI = `
  7. <style type='text/css'>
  8. div {
  9. color: red;
  10. }
  11. div:hover {
  12. color: blue;
  13. }
  14. div:active {
  15. color: yellow;
  16. }
  17. div:focus {
  18. color: green;
  19. }
  20. </style>
  21. <div>test div</div>
  22. `;
  23. add_task(function* () {
  24. yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
  25. let {inspector, view} = yield openRuleView();
  26. yield selectNode("div", inspector);
  27. yield assertPseudoPanelClosed(view);
  28. info("Toggle the pseudo class panel open");
  29. view.pseudoClassToggle.click();
  30. yield assertPseudoPanelOpened(view);
  31. info("Toggle each pseudo lock and check that the pseudo lock is added");
  32. yield togglePseudoClass(inspector, view.hoverCheckbox);
  33. yield assertPseudoAdded(inspector, view, ":hover", 3, 1);
  34. yield togglePseudoClass(inspector, view.hoverCheckbox);
  35. yield assertPseudoRemoved(inspector, view, 2);
  36. yield togglePseudoClass(inspector, view.activeCheckbox);
  37. yield assertPseudoAdded(inspector, view, ":active", 3, 1);
  38. yield togglePseudoClass(inspector, view.activeCheckbox);
  39. yield assertPseudoRemoved(inspector, view, 2);
  40. yield togglePseudoClass(inspector, view.focusCheckbox);
  41. yield assertPseudoAdded(inspector, view, ":focus", 3, 1);
  42. yield togglePseudoClass(inspector, view.focusCheckbox);
  43. yield assertPseudoRemoved(inspector, view, 2);
  44. info("Toggle all pseudo lock and check that the pseudo lock is added");
  45. yield togglePseudoClass(inspector, view.hoverCheckbox);
  46. yield togglePseudoClass(inspector, view.activeCheckbox);
  47. yield togglePseudoClass(inspector, view.focusCheckbox);
  48. yield assertPseudoAdded(inspector, view, ":focus", 5, 1);
  49. yield assertPseudoAdded(inspector, view, ":active", 5, 2);
  50. yield assertPseudoAdded(inspector, view, ":hover", 5, 3);
  51. yield togglePseudoClass(inspector, view.hoverCheckbox);
  52. yield togglePseudoClass(inspector, view.activeCheckbox);
  53. yield togglePseudoClass(inspector, view.focusCheckbox);
  54. yield assertPseudoRemoved(inspector, view, 2);
  55. info("Select a null element");
  56. yield view.selectElement(null);
  57. ok(!view.hoverCheckbox.checked && view.hoverCheckbox.disabled,
  58. ":hover checkbox is unchecked and disabled");
  59. ok(!view.activeCheckbox.checked && view.activeCheckbox.disabled,
  60. ":active checkbox is unchecked and disabled");
  61. ok(!view.focusCheckbox.checked && view.focusCheckbox.disabled,
  62. ":focus checkbox is unchecked and disabled");
  63. info("Toggle the pseudo class panel close");
  64. view.pseudoClassToggle.click();
  65. yield assertPseudoPanelClosed(view);
  66. });
  67. function* togglePseudoClass(inspector, pseudoClassOption) {
  68. info("Toggle the pseudoclass, wait for it to be applied");
  69. let onRefresh = inspector.once("rule-view-refreshed");
  70. pseudoClassOption.click();
  71. yield onRefresh;
  72. }
  73. function* assertPseudoAdded(inspector, view, pseudoClass, numRules,
  74. childIndex) {
  75. info("Check that the ruleview contains the pseudo-class rule");
  76. is(view.element.children.length, numRules,
  77. "Should have " + numRules + " rules.");
  78. is(getRuleViewRuleEditor(view, childIndex).rule.selectorText,
  79. "div" + pseudoClass, "rule view is showing " + pseudoClass + " rule");
  80. }
  81. function* assertPseudoRemoved(inspector, view, numRules) {
  82. info("Check that the ruleview no longer contains the pseudo-class rule");
  83. is(view.element.children.length, numRules,
  84. "Should have " + numRules + " rules.");
  85. is(getRuleViewRuleEditor(view, 1).rule.selectorText, "div",
  86. "Second rule is div");
  87. }
  88. function* assertPseudoPanelOpened(view) {
  89. info("Check the opened state of the pseudo class panel");
  90. ok(!view.pseudoClassPanel.hidden, "Pseudo Class Panel Opened");
  91. ok(!view.hoverCheckbox.disabled, ":hover checkbox is not disabled");
  92. ok(!view.activeCheckbox.disabled, ":active checkbox is not disabled");
  93. ok(!view.focusCheckbox.disabled, ":focus checkbox is not disabled");
  94. is(view.hoverCheckbox.getAttribute("tabindex"), "0",
  95. ":hover checkbox has a tabindex of 0");
  96. is(view.activeCheckbox.getAttribute("tabindex"), "0",
  97. ":active checkbox has a tabindex of 0");
  98. is(view.focusCheckbox.getAttribute("tabindex"), "0",
  99. ":focus checkbox has a tabindex of 0");
  100. }
  101. function* assertPseudoPanelClosed(view) {
  102. info("Check the closed state of the pseudo clas panel");
  103. ok(view.pseudoClassPanel.hidden, "Pseudo Class Panel Hidden");
  104. is(view.hoverCheckbox.getAttribute("tabindex"), "-1",
  105. ":hover checkbox has a tabindex of -1");
  106. is(view.activeCheckbox.getAttribute("tabindex"), "-1",
  107. ":active checkbox has a tabindex of -1");
  108. is(view.focusCheckbox.getAttribute("tabindex"), "-1",
  109. ":focus checkbox has a tabindex of -1");
  110. }