diff options
Diffstat (limited to 'devtools/client/memory/test/unit/test_action_diffing_05.js')
-rw-r--r-- | devtools/client/memory/test/unit/test_action_diffing_05.js | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/devtools/client/memory/test/unit/test_action_diffing_05.js b/devtools/client/memory/test/unit/test_action_diffing_05.js new file mode 100644 index 000000000..e4a1491ac --- /dev/null +++ b/devtools/client/memory/test/unit/test_action_diffing_05.js @@ -0,0 +1,112 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that we recompute census diffs at the appropriate times. + +const { + diffingState, + snapshotState, + censusDisplays, + viewState, +} = require("devtools/client/memory/constants"); +const { + setCensusDisplayAndRefresh, +} = require("devtools/client/memory/actions/census-display"); +const { + toggleDiffing, + selectSnapshotForDiffingAndRefresh, +} = require("devtools/client/memory/actions/diffing"); +const { + setFilterStringAndRefresh, +} = require("devtools/client/memory/actions/filter"); +const { + takeSnapshot, + readSnapshot, +} = require("devtools/client/memory/actions/snapshot"); +const { changeView } = require("devtools/client/memory/actions/view"); + +function run_test() { + run_next_test(); +} + +add_task(function* () { + let front = new StubbedMemoryFront(); + let heapWorker = new HeapAnalysesClient(); + yield front.attach(); + let store = Store(); + const { getState, dispatch } = store; + dispatch(changeView(viewState.CENSUS)); + + yield dispatch(setCensusDisplayAndRefresh(heapWorker, + censusDisplays.allocationStack)); + equal(getState().censusDisplay.inverted, false, + "not inverted at start"); + + equal(getState().diffing, null, "not diffing by default"); + + const s1 = yield dispatch(takeSnapshot(front, heapWorker)); + const s2 = yield dispatch(takeSnapshot(front, heapWorker)); + const s3 = yield dispatch(takeSnapshot(front, heapWorker)); + dispatch(readSnapshot(heapWorker, s1)); + dispatch(readSnapshot(heapWorker, s2)); + dispatch(readSnapshot(heapWorker, s3)); + yield waitUntilSnapshotState(store, [snapshotState.READ, + snapshotState.READ, + snapshotState.READ]); + + yield dispatch(toggleDiffing()); + dispatch(selectSnapshotForDiffingAndRefresh(heapWorker, + getState().snapshots[0])); + dispatch(selectSnapshotForDiffingAndRefresh(heapWorker, + getState().snapshots[1])); + yield waitUntilState(store, + state => state.diffing.state === diffingState.TOOK_DIFF); + + const shouldTriggerRecompute = [ + { + name: "toggling inversion", + func: () => dispatch(setCensusDisplayAndRefresh( + heapWorker, + censusDisplays.invertedAllocationStack)) + }, + { + name: "filtering", + func: () => dispatch(setFilterStringAndRefresh("scr", heapWorker)) + }, + { + name: "changing displays", + func: () => + dispatch(setCensusDisplayAndRefresh(heapWorker, + censusDisplays.coarseType)) + } + ]; + + for (let { name, func } of shouldTriggerRecompute) { + dumpn(`Testing that "${name}" triggers a diff recompute`); + func(); + + yield waitUntilState(store, + state => + state.diffing.state === diffingState.TAKING_DIFF); + ok(true, "triggered diff recompute."); + + yield waitUntilState(store, + state => + state.diffing.state === diffingState.TOOK_DIFF); + ok(true, "And then the diff should complete."); + ok(getState().diffing.census, "And we should have a census."); + ok(getState().diffing.census.report, + "And that census should have a report."); + equal(getState().diffing.census.display, + getState().censusDisplay, + "And that census should have the correct display"); + equal(getState().diffing.census.filter, getState().filter, + "And that census should have the correct filter"); + equal(getState().diffing.census.display.inverted, + getState().censusDisplay.inverted, + "And that census should have the correct inversion"); + } + + heapWorker.destroy(); + yield front.detach(); +}); |