summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/unit/test_breakpoint-actor-map.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/server/tests/unit/test_breakpoint-actor-map.js')
-rw-r--r--devtools/server/tests/unit/test_breakpoint-actor-map.js180
1 files changed, 180 insertions, 0 deletions
diff --git a/devtools/server/tests/unit/test_breakpoint-actor-map.js b/devtools/server/tests/unit/test_breakpoint-actor-map.js
new file mode 100644
index 000000000..d1d149648
--- /dev/null
+++ b/devtools/server/tests/unit/test_breakpoint-actor-map.js
@@ -0,0 +1,180 @@
+/* -*- js-indent-level: 2; indent-tabs-mode: nil -*- */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test the functionality of the BreakpointActorMap object.
+
+const { BreakpointActorMap } = require("devtools/server/actors/script");
+
+function run_test() {
+ test_get_actor();
+ test_set_actor();
+ test_delete_actor();
+ test_find_actors();
+ test_duplicate_actors();
+}
+
+function test_get_actor() {
+ let bpStore = new BreakpointActorMap();
+ let location = {
+ originalSourceActor: { actor: "actor1" },
+ originalLine: 3
+ };
+ let columnLocation = {
+ originalSourceActor: { actor: "actor2" },
+ originalLine: 5,
+ originalColumn: 15
+ };
+
+ // Shouldn't have breakpoint
+ do_check_eq(null, bpStore.getActor(location),
+ "Breakpoint not added and shouldn't exist.");
+
+ bpStore.setActor(location, {});
+ do_check_true(!!bpStore.getActor(location),
+ "Breakpoint added but not found in Breakpoint Store.");
+
+ bpStore.deleteActor(location);
+ do_check_eq(null, bpStore.getActor(location),
+ "Breakpoint removed but still exists.");
+
+ // Same checks for breakpoint with a column
+ do_check_eq(null, bpStore.getActor(columnLocation),
+ "Breakpoint with column not added and shouldn't exist.");
+
+ bpStore.setActor(columnLocation, {});
+ do_check_true(!!bpStore.getActor(columnLocation),
+ "Breakpoint with column added but not found in Breakpoint Store.");
+
+ bpStore.deleteActor(columnLocation);
+ do_check_eq(null, bpStore.getActor(columnLocation),
+ "Breakpoint with column removed but still exists in Breakpoint Store.");
+}
+
+function test_set_actor() {
+ // Breakpoint with column
+ let bpStore = new BreakpointActorMap();
+ let location = {
+ originalSourceActor: { actor: "actor1" },
+ originalLine: 10,
+ originalColumn: 9
+ };
+ bpStore.setActor(location, {});
+ do_check_true(!!bpStore.getActor(location),
+ "We should have the column breakpoint we just added");
+
+ // Breakpoint without column (whole line breakpoint)
+ location = {
+ originalSourceActor: { actor: "actor2" },
+ originalLine: 103
+ };
+ bpStore.setActor(location, {});
+ do_check_true(!!bpStore.getActor(location),
+ "We should have the whole line breakpoint we just added");
+}
+
+function test_delete_actor() {
+ // Breakpoint with column
+ let bpStore = new BreakpointActorMap();
+ let location = {
+ originalSourceActor: { actor: "actor1" },
+ originalLine: 10,
+ originalColumn: 9
+ };
+ bpStore.setActor(location, {});
+ bpStore.deleteActor(location);
+ do_check_eq(bpStore.getActor(location), null,
+ "We should not have the column breakpoint anymore");
+
+ // Breakpoint without column (whole line breakpoint)
+ location = {
+ originalSourceActor: { actor: "actor2" },
+ originalLine: 103
+ };
+ bpStore.setActor(location, {});
+ bpStore.deleteActor(location);
+ do_check_eq(bpStore.getActor(location), null,
+ "We should not have the whole line breakpoint anymore");
+}
+
+function test_find_actors() {
+ let bps = [
+ { originalSourceActor: { actor: "actor1" }, originalLine: 10 },
+ { originalSourceActor: { actor: "actor1" }, originalLine: 10, originalColumn: 3 },
+ { originalSourceActor: { actor: "actor1" }, originalLine: 10, originalColumn: 10 },
+ { originalSourceActor: { actor: "actor1" }, originalLine: 23, originalColumn: 89 },
+ { originalSourceActor: { actor: "actor2" }, originalLine: 10, originalColumn: 1 },
+ { originalSourceActor: { actor: "actor2" }, originalLine: 20, originalColumn: 5 },
+ { originalSourceActor: { actor: "actor2" }, originalLine: 30, originalColumn: 34 },
+ { originalSourceActor: { actor: "actor2" }, originalLine: 40, originalColumn: 56 }
+ ];
+
+ let bpStore = new BreakpointActorMap();
+
+ for (let bp of bps) {
+ bpStore.setActor(bp, bp);
+ }
+
+ // All breakpoints
+
+ let bpSet = new Set(bps);
+ for (let bp of bpStore.findActors()) {
+ bpSet.delete(bp);
+ }
+ do_check_eq(bpSet.size, 0,
+ "Should be able to iterate over all breakpoints");
+
+ // Breakpoints by URL
+
+ bpSet = new Set(bps.filter(bp => { return bp.originalSourceActor.actorID === "actor1"; }));
+ for (let bp of bpStore.findActors({ originalSourceActor: { actorID: "actor1" } })) {
+ bpSet.delete(bp);
+ }
+ do_check_eq(bpSet.size, 0,
+ "Should be able to filter the iteration by url");
+
+ // Breakpoints by URL and line
+
+ bpSet = new Set(bps.filter(bp => { return bp.originalSourceActor.actorID === "actor1" && bp.originalLine === 10; }));
+ let first = true;
+ for (let bp of bpStore.findActors({ originalSourceActor: { actorID: "actor1" }, originalLine: 10 })) {
+ if (first) {
+ do_check_eq(bp.originalColumn, undefined,
+ "Should always get the whole line breakpoint first");
+ first = false;
+ } else {
+ do_check_neq(bp.originalColumn, undefined,
+ "Should not get the whole line breakpoint any time other than first.");
+ }
+ bpSet.delete(bp);
+ }
+ do_check_eq(bpSet.size, 0,
+ "Should be able to filter the iteration by url and line");
+}
+
+function test_duplicate_actors() {
+ let bpStore = new BreakpointActorMap();
+
+ // Breakpoint with column
+ let location = {
+ originalSourceActor: { actorID: "foo-actor" },
+ originalLine: 10,
+ originalColumn: 9
+ };
+ bpStore.setActor(location, {});
+ bpStore.setActor(location, {});
+ do_check_eq(bpStore.size, 1, "We should have only 1 column breakpoint");
+ bpStore.deleteActor(location);
+
+ // Breakpoint without column (whole line breakpoint)
+ location = {
+ originalSourceActor: { actorID: "foo-actor" },
+ originalLine: 15
+ };
+ bpStore.setActor(location, {});
+ bpStore.setActor(location, {});
+ do_check_eq(bpStore.size, 1, "We should have only 1 whole line breakpoint");
+ bpStore.deleteActor(location);
+}