summaryrefslogtreecommitdiffstats
path: root/devtools/client/memory/test/xpcshell/test_action_diffing_03.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/memory/test/xpcshell/test_action_diffing_03.js')
-rw-r--r--devtools/client/memory/test/xpcshell/test_action_diffing_03.js147
1 files changed, 147 insertions, 0 deletions
diff --git a/devtools/client/memory/test/xpcshell/test_action_diffing_03.js b/devtools/client/memory/test/xpcshell/test_action_diffing_03.js
new file mode 100644
index 0000000000..8db0e8568b
--- /dev/null
+++ b/devtools/client/memory/test/xpcshell/test_action_diffing_03.js
@@ -0,0 +1,147 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test selecting snapshots for diffing.
+
+const {
+ diffingState,
+ snapshotState,
+ viewState,
+} = require("resource://devtools/client/memory/constants.js");
+const {
+ toggleDiffing,
+ selectSnapshotForDiffing,
+} = require("resource://devtools/client/memory/actions/diffing.js");
+const {
+ takeSnapshot,
+} = require("resource://devtools/client/memory/actions/snapshot.js");
+const {
+ changeView,
+} = require("resource://devtools/client/memory/actions/view.js");
+
+// We test that you (1) cannot select a snapshot that is not in a diffable
+// state, and (2) cannot select more than 2 snapshots for diffing. Both attempts
+// trigger assertion failures.
+EXPECTED_DTU_ASSERT_FAILURE_COUNT = 2;
+
+add_task(async function () {
+ const front = new StubbedMemoryFront();
+ const heapWorker = new HeapAnalysesClient();
+ await front.attach();
+ const store = Store();
+ const { getState, dispatch } = store;
+
+ dispatch(changeView(viewState.CENSUS));
+ equal(getState().diffing, null, "not diffing by default");
+
+ dispatch(takeSnapshot(front, heapWorker));
+ dispatch(takeSnapshot(front, heapWorker));
+ dispatch(takeSnapshot(front, heapWorker));
+
+ await waitUntilSnapshotState(store, [
+ snapshotState.SAVED,
+ snapshotState.SAVED,
+ snapshotState.SAVED,
+ ]);
+ dispatch(takeSnapshot(front));
+
+ // Start diffing.
+ dispatch(toggleDiffing());
+ ok(getState().diffing, "now diffing after toggling");
+ equal(getState().diffing.firstSnapshotId, null, "no first snapshot selected");
+ equal(
+ getState().diffing.secondSnapshotId,
+ null,
+ "no second snapshot selected"
+ );
+ equal(
+ getState().diffing.state,
+ diffingState.SELECTING,
+ "should be in diffing state SELECTING"
+ );
+
+ // Can't select a snapshot that is not in a diffable state.
+ equal(
+ getState().snapshots[3].state,
+ snapshotState.SAVING,
+ "the last snapshot is still in the process of being saved"
+ );
+ dumpn("Expecting exception:");
+ let threw = false;
+ try {
+ dispatch(selectSnapshotForDiffing(getState().snapshots[3]));
+ } catch (error) {
+ threw = true;
+ }
+ ok(
+ threw,
+ "Should not be able to select snapshots that aren't ready for diffing"
+ );
+
+ // Select first snapshot for diffing.
+ dispatch(selectSnapshotForDiffing(getState().snapshots[0]));
+ ok(getState().diffing, "now diffing after toggling");
+ equal(
+ getState().diffing.firstSnapshotId,
+ getState().snapshots[0].id,
+ "first snapshot selected"
+ );
+ equal(
+ getState().diffing.secondSnapshotId,
+ null,
+ "no second snapshot selected"
+ );
+ equal(
+ getState().diffing.state,
+ diffingState.SELECTING,
+ "should still be in diffing state SELECTING"
+ );
+
+ // Can't diff first snapshot with itself; this is a noop.
+ dispatch(selectSnapshotForDiffing(getState().snapshots[0]));
+ ok(getState().diffing, "still diffing");
+ equal(
+ getState().diffing.firstSnapshotId,
+ getState().snapshots[0].id,
+ "first snapshot still selected"
+ );
+ equal(
+ getState().diffing.secondSnapshotId,
+ null,
+ "still no second snapshot selected"
+ );
+ equal(
+ getState().diffing.state,
+ diffingState.SELECTING,
+ "should still be in diffing state SELECTING"
+ );
+
+ // Select second snapshot for diffing.
+ dispatch(selectSnapshotForDiffing(getState().snapshots[1]));
+ ok(getState().diffing, "still diffing");
+ equal(
+ getState().diffing.firstSnapshotId,
+ getState().snapshots[0].id,
+ "first snapshot still selected"
+ );
+ equal(
+ getState().diffing.secondSnapshotId,
+ getState().snapshots[1].id,
+ "second snapshot selected"
+ );
+
+ // Can't select more than two snapshots for diffing.
+ dumpn("Expecting exception:");
+ threw = false;
+ try {
+ dispatch(selectSnapshotForDiffing(getState().snapshots[2]));
+ } catch (error) {
+ threw = true;
+ }
+ ok(threw, "Can't select more than two snapshots for diffing");
+
+ heapWorker.destroy();
+ await front.detach();
+});