Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Test the functionality of the BreakpointActorMap object.
const {
BreakpointActorMap,
} = require("resource://devtools/server/actors/utils/breakpoint-actor-map.js");
function run_test() {
test_get_actor();
test_set_actor();
test_delete_actor();
test_find_actors();
test_duplicate_actors();
}
function test_get_actor() {
const bpStore = new BreakpointActorMap();
const location = {
generatedSourceActor: { actor: "actor1" },
generatedLine: 3,
};
const columnLocation = {
generatedSourceActor: { actor: "actor2" },
generatedLine: 5,
generatedColumn: 15,
};
// Shouldn't have breakpoint
Assert.equal(
null,
bpStore.getActor(location),
"Breakpoint not added and shouldn't exist."
);
bpStore.setActor(location, {});
Assert.ok(
!!bpStore.getActor(location),
"Breakpoint added but not found in Breakpoint Store."
);
bpStore.deleteActor(location);
Assert.equal(
null,
bpStore.getActor(location),
"Breakpoint removed but still exists."
);
// Same checks for breakpoint with a column
Assert.equal(
null,
bpStore.getActor(columnLocation),
"Breakpoint with column not added and shouldn't exist."
);
bpStore.setActor(columnLocation, {});
Assert.ok(
!!bpStore.getActor(columnLocation),
"Breakpoint with column added but not found in Breakpoint Store."
);
bpStore.deleteActor(columnLocation);
Assert.equal(
null,
bpStore.getActor(columnLocation),
"Breakpoint with column removed but still exists in Breakpoint Store."
);
}
function test_set_actor() {
// Breakpoint with column
const bpStore = new BreakpointActorMap();
let location = {
generatedSourceActor: { actor: "actor1" },
generatedLine: 10,
generatedColumn: 9,
};
bpStore.setActor(location, {});
Assert.ok(
!!bpStore.getActor(location),
"We should have the column breakpoint we just added"
);
// Breakpoint without column (whole line breakpoint)
location = {
generatedSourceActor: { actor: "actor2" },
generatedLine: 103,
};
bpStore.setActor(location, {});
Assert.ok(
!!bpStore.getActor(location),
"We should have the whole line breakpoint we just added"
);
}
function test_delete_actor() {
// Breakpoint with column
const bpStore = new BreakpointActorMap();
let location = {
generatedSourceActor: { actor: "actor1" },
generatedLine: 10,
generatedColumn: 9,
};
bpStore.setActor(location, {});
bpStore.deleteActor(location);
Assert.equal(
bpStore.getActor(location),
null,
"We should not have the column breakpoint anymore"
);
// Breakpoint without column (whole line breakpoint)
location = {
generatedSourceActor: { actor: "actor2" },
generatedLine: 103,
};
bpStore.setActor(location, {});
bpStore.deleteActor(location);
Assert.equal(
bpStore.getActor(location),
null,
"We should not have the whole line breakpoint anymore"
);
}
function test_find_actors() {
const bps = [
{ generatedSourceActor: { actor: "actor1" }, generatedLine: 10 },
{
generatedSourceActor: { actor: "actor1" },
generatedLine: 10,
generatedColumn: 3,
},
{
generatedSourceActor: { actor: "actor1" },
generatedLine: 10,
generatedColumn: 10,
},
{
generatedSourceActor: { actor: "actor1" },
generatedLine: 23,
generatedColumn: 89,
},
{
generatedSourceActor: { actor: "actor2" },
generatedLine: 10,
generatedColumn: 1,
},
{
generatedSourceActor: { actor: "actor2" },
generatedLine: 20,
generatedColumn: 5,
},
{
generatedSourceActor: { actor: "actor2" },
generatedLine: 30,
generatedColumn: 34,
},
{
generatedSourceActor: { actor: "actor2" },
generatedLine: 40,
generatedColumn: 56,
},
];
const bpStore = new BreakpointActorMap();
for (const bp of bps) {
bpStore.setActor(bp, bp);
}
// All breakpoints
let bpSet = new Set(bps);
for (const bp of bpStore.findActors()) {
bpSet.delete(bp);
}
Assert.equal(bpSet.size, 0, "Should be able to iterate over all breakpoints");
// Breakpoints by URL
bpSet = new Set(
bps.filter(bp => {
return bp.generatedSourceActor.actorID === "actor1";
})
);
for (const bp of bpStore.findActors({
generatedSourceActor: { actorID: "actor1" },
})) {
bpSet.delete(bp);
}
Assert.equal(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.generatedSourceActor.actorID === "actor1" && bp.generatedLine === 10
);
})
);
let first = true;
for (const bp of bpStore.findActors({
generatedSourceActor: { actorID: "actor1" },
generatedLine: 10,
})) {
if (first) {
Assert.equal(
bp.generatedColumn,
undefined,
"Should always get the whole line breakpoint first"
);
first = false;
} else {
Assert.notEqual(
bp.generatedColumn,
undefined,
"Should not get the whole line breakpoint any time other than first."
);
}
bpSet.delete(bp);
}
Assert.equal(
bpSet.size,
0,
"Should be able to filter the iteration by url and line"
);
}
function test_duplicate_actors() {
const bpStore = new BreakpointActorMap();
// Breakpoint with column
let location = {
generatedSourceActor: { actorID: "foo-actor" },
generatedLine: 10,
generatedColumn: 9,
};
bpStore.setActor(location, {});
bpStore.setActor(location, {});
Assert.equal(bpStore.size, 1, "We should have only 1 column breakpoint");
bpStore.deleteActor(location);
// Breakpoint without column (whole line breakpoint)
location = {
generatedSourceActor: { actorID: "foo-actor" },
generatedLine: 15,
};
bpStore.setActor(location, {});
bpStore.setActor(location, {});
Assert.equal(bpStore.size, 1, "We should have only 1 whole line breakpoint");
bpStore.deleteActor(location);
}