Bug 1450526 - Part 5: Add test for pseudo element. r?pbro draft
authorDaisuke Akatsuka <dakatsuka@mozilla.com>
Mon, 21 May 2018 18:53:42 +0900
changeset 797675 0f27044e62d2049cebcee614243aaed187c6e64a
parent 797674 28a601d02714988e4c17db3f690a3d3a5cc31e7e
child 797708 ea3970a2cf9b7abac859c556fe25bb1cd9b097e7
child 797956 530de0be012d33481efb94396411d8c90007237e
child 797966 e6ca4f9405d94cb5da715345ab48b785e648961a
child 797969 f07f6c63f27b705df4544ce0f9c6abb36b36ab13
push id110532
push userbmo:dakatsuka@mozilla.com
push dateMon, 21 May 2018 10:23:12 +0000
reviewerspbro
bugs1450526
milestone62.0a1
Bug 1450526 - Part 5: Add test for pseudo element. r?pbro MozReview-Commit-ID: 2BihXbtTmKo
devtools/client/inspector/animation/test/browser.ini
devtools/client/inspector/animation/test/browser_animation_pseudo-element.js
devtools/client/inspector/animation/test/doc_pseudo.html
--- a/devtools/client/inspector/animation/test/browser.ini
+++ b/devtools/client/inspector/animation/test/browser.ini
@@ -2,16 +2,17 @@
 tags = devtools
 subsuite = devtools
 support-files =
   doc_custom_playback_rate.html
   doc_frame_script.js
   doc_multi_easings.html
   doc_multi_keyframes.html
   doc_multi_timings.html
+  doc_pseudo.html
   doc_simple_animation.html
   head.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/frame-script-utils.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor-registry.js
@@ -39,16 +40,17 @@ support-files =
 [browser_animation_keyframes-graph_keyframe-marker.js]
 [browser_animation_keyframes-progress-bar.js]
 [browser_animation_logic_auto-stop.js]
 [browser_animation_logic_avoid-updating-during-hiding.js]
 [browser_animation_logic_mutations.js]
 [browser_animation_pause-resume-button.js]
 [browser_animation_pause-resume-button_spacebar.js]
 [browser_animation_playback-rate-selector.js]
+[browser_animation_pseudo-element.js]
 [browser_animation_rewind-button.js]
 [browser_animation_summary-graph_animation-name.js]
 [browser_animation_summary-graph_compositor.js]
 [browser_animation_summary-graph_computed-timing-path.js]
 [browser_animation_summary-graph_computed-timing-path_different-timescale.js]
 [browser_animation_summary-graph_delay-sign.js]
 [browser_animation_summary-graph_end-delay-sign.js]
 [browser_animation_summary-graph_effect-timing-path.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/animation/test/browser_animation_pseudo-element.js
@@ -0,0 +1,79 @@
+/* Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test for pseudo element.
+
+const TEST_DATA = [
+  {
+    expectedTargetLabel: "::before",
+    expectedAnimationNameLabel: "body",
+  },
+  {
+    expectedTargetLabel: "::before",
+    expectedAnimationNameLabel: "div-before",
+  },
+  {
+    expectedTargetLabel: "::after",
+    expectedAnimationNameLabel: "div-after",
+  },
+];
+
+add_task(async function() {
+  await addTab(URL_ROOT + "doc_pseudo.html");
+  const { animationInspector, inspector, panel } = await openAnimationInspector();
+
+  info("Checking count of animation item for pseudo elements");
+  is(panel.querySelectorAll(".animation-list .animation-item").length, TEST_DATA.length,
+    `Count of animation item should be ${ TEST_DATA.length }`);
+
+  info("Checking content of each animation item");
+  const animationItemEls = panel.querySelectorAll(".animation-list .animation-item");
+
+  for (let i = 0; i < animationItemEls.length; i++) {
+    const testData = TEST_DATA[i];
+    info(`Checking pseudo element for ${ testData.expectedTargetLabel }`);
+    const animationItemEl = animationItemEls[i];
+
+    info("Checking text content of animation target");
+    const animationTargetEl =
+      animationItemEl.querySelector(".animation-list .animation-item .animation-target");
+    is(animationTargetEl.textContent, testData.expectedTargetLabel,
+      `Text content of animation target[${ i }] should be ${ testData.expectedTarget }`);
+
+    info("Checking text content of animation name");
+    const animationNameEl = animationItemEl.querySelector(".animation-name");
+    is(animationNameEl.textContent, testData.expectedAnimationNameLabel,
+      `The animation name should be ${ testData.expectedAnimationNameLabel }`);
+  }
+
+  info("Checking whether node is selected correctly " +
+       "when click on the first inspector icon on Reps component");
+  await clickOnTargetNode(animationInspector, panel, 0);
+
+  info("Checking count of animation item");
+  is(panel.querySelectorAll(".animation-list .animation-item").length, 1,
+    "Count of animation item should be 1");
+
+  info("Checking content of animation item");
+  is(panel.querySelector(".animation-list .animation-item .animation-name").textContent,
+     TEST_DATA[0].expectedAnimationNameLabel,
+     `The animation name should be ${ TEST_DATA[0].expectedAnimationNameLabel }`);
+
+  info("Select <body> again to reset the animation list");
+  await selectNodeAndWaitForAnimations("body", inspector);
+
+  info("Checking whether node is selected correctly " +
+       "when click on the second inspector icon on Reps component");
+  await clickOnTargetNode(animationInspector, panel, 1);
+
+  info("Checking count of animation item");
+  is(panel.querySelectorAll(".animation-list .animation-item").length, 1,
+     "Count of animation item should be 1");
+
+  info("Checking content of animation item");
+  is(panel.querySelector(".animation-list .animation-item .animation-name").textContent,
+     TEST_DATA[1].expectedAnimationNameLabel,
+     `The animation name should be ${ TEST_DATA[1].expectedAnimationNameLabel }`);
+});
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/animation/test/doc_pseudo.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8">
+    <style>
+    body::before {
+      animation: body 10s infinite;
+      background-color: lime;
+      content: "body-before";
+      width: 100px;
+    }
+
+    .div-before::before {
+      animation: div-before 10s infinite;
+      background-color: lime;
+      content: "div-before";
+      width: 100px;
+    }
+
+    .div-after::after {
+      animation: div-after 10s infinite;
+      background-color: lime;
+      content: "div-after";
+      width: 100px;
+    }
+
+    @keyframes body {
+      from {
+        opacity: 0;
+      }
+      to {
+        opacity: 1;
+      }
+    }
+
+    @keyframes div-before {
+      from {
+        opacity: 1;
+      }
+      to {
+        opacity: 0;
+      }
+    }
+
+    @keyframes div-after {
+      from {
+        opacity: 1;
+      }
+      50% {
+        opacity: 0.9;
+      }
+      to {
+        opacity: 0;
+      }
+    }
+    </style>
+  </head>
+  <body>
+    <div class="div-before"></div>
+    <div class="div-after"></div>
+  </body>
+</html>