diff options
Diffstat (limited to 'devtools/client/memory/test/unit/test_action-set-display-and-refresh-01.js')
-rw-r--r-- | devtools/client/memory/test/unit/test_action-set-display-and-refresh-01.js | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/devtools/client/memory/test/unit/test_action-set-display-and-refresh-01.js b/devtools/client/memory/test/unit/test_action-set-display-and-refresh-01.js new file mode 100644 index 000000000..570ffdf05 --- /dev/null +++ b/devtools/client/memory/test/unit/test_action-set-display-and-refresh-01.js @@ -0,0 +1,118 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + +/** + * Tests the task creator `setCensusDisplayAndRefreshAndRefresh()` for display + * changing. We test this rather than `setCensusDisplayAndRefresh` directly, as + * we use the refresh action in the app itself composed from + * `setCensusDisplayAndRefresh`. + */ + +let { censusDisplays, snapshotState: states, censusState, viewState } = require("devtools/client/memory/constants"); +let { setCensusDisplayAndRefresh } = require("devtools/client/memory/actions/census-display"); +let { takeSnapshotAndCensus, selectSnapshotAndRefresh } = require("devtools/client/memory/actions/snapshot"); +const { changeView } = require("devtools/client/memory/actions/view"); + +function run_test() { + run_next_test(); +} + +// We test setting an invalid display, which triggers an assertion failure. +EXPECTED_DTU_ASSERT_FAILURE_COUNT = 1; + +add_task(function* () { + let front = new StubbedMemoryFront(); + let heapWorker = new HeapAnalysesClient(); + yield front.attach(); + let store = Store(); + let { getState, dispatch } = store; + + dispatch(changeView(viewState.CENSUS)); + + // Test default display with no snapshots + equal(getState().censusDisplay.breakdown.by, "coarseType", + "default coarseType display selected at start."); + dispatch(setCensusDisplayAndRefresh(heapWorker, + censusDisplays.allocationStack)); + equal(getState().censusDisplay.breakdown.by, "allocationStack", + "display changed with no snapshots"); + + // Test invalid displays + ok(getState().errors.length === 0, "No error actions in the queue."); + dispatch(setCensusDisplayAndRefresh(heapWorker, {})); + yield waitUntilState(store, () => getState().errors.length === 1); + ok(true, "Emits an error action when passing in an invalid display object"); + + equal(getState().censusDisplay.breakdown.by, "allocationStack", + "current display unchanged when passing invalid display"); + + // Test new snapshots + dispatch(takeSnapshotAndCensus(front, heapWorker)); + yield waitUntilCensusState(store, snapshot => snapshot.census, + [censusState.SAVED]); + + equal(getState().snapshots[0].census.display, censusDisplays.allocationStack, + "New snapshot's census uses correct display"); + + // Updates when changing display during `SAVING` + dispatch(takeSnapshotAndCensus(front, heapWorker)); + yield waitUntilCensusState(store, snapshot => snapshot.census, + [censusState.SAVED, censusState.SAVING]); + dispatch(setCensusDisplayAndRefresh(heapWorker, censusDisplays.coarseType)); + yield waitUntilCensusState(store, snapshot => snapshot.census, + [censusState.SAVED, censusState.SAVED]); + equal(getState().snapshots[1].census.display, censusDisplays.coarseType, + "Changing display while saving a snapshot results in a census using the new display"); + + + // Updates when changing display during `SAVING_CENSUS` + dispatch(takeSnapshotAndCensus(front, heapWorker)); + yield waitUntilCensusState(store, snapshot => snapshot.census, + [censusState.SAVED, + censusState.SAVED, + censusState.SAVING]); + dispatch(setCensusDisplayAndRefresh(heapWorker, censusDisplays.allocationStack)); + yield waitUntilCensusState(store, snapshot => snapshot.census, + [censusState.SAVED, + censusState.SAVED, + censusState.SAVED]); + equal(getState().snapshots[2].census.display, censusDisplays.allocationStack, + "Display can be changed while saving census, stores updated display in snapshot"); + + // Updates census on currently selected snapshot when changing display + ok(getState().snapshots[2].selected, "Third snapshot currently selected"); + dispatch(setCensusDisplayAndRefresh(heapWorker, censusDisplays.coarseType)); + yield waitUntilState(store, state => state.snapshots[2].census.state === censusState.SAVING); + yield waitUntilState(store, state => state.snapshots[2].census.state === censusState.SAVED); + equal(getState().snapshots[2].census.display, censusDisplays.coarseType, + "Snapshot census updated when changing displays after already generating one census"); + + dispatch(setCensusDisplayAndRefresh(heapWorker, censusDisplays.allocationStack)); + yield waitUntilState(store, state => state.snapshots[2].census.state === censusState.SAVED); + equal(getState().snapshots[2].census.display, censusDisplays.allocationStack, + "Snapshot census updated when changing displays after already generating one census"); + + // Does not update unselected censuses. + ok(!getState().snapshots[1].selected, "Second snapshot selected currently"); + equal(getState().snapshots[1].census.display, censusDisplays.coarseType, + "Second snapshot using `coarseType` display still and not yet updated to correct display"); + + // Updates to current display when switching to stale snapshot. + dispatch(selectSnapshotAndRefresh(heapWorker, getState().snapshots[1].id)); + yield waitUntilCensusState(store, snapshot => snapshot.census, + [censusState.SAVED, + censusState.SAVING, + censusState.SAVED]); + yield waitUntilCensusState(store, snapshot => snapshot.census, + [censusState.SAVED, + censusState.SAVED, + censusState.SAVED]); + + ok(getState().snapshots[1].selected, "Second snapshot selected currently"); + equal(getState().snapshots[1].census.display, censusDisplays.allocationStack, + "Second snapshot using `allocationStack` display and updated to correct display"); + + heapWorker.destroy(); + yield front.detach(); +}); |