Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Tests the async reducer responding to the action `takeCensus(heapWorker, snapshot)`
*/
var {
snapshotState: states,
censusDisplays,
censusState,
viewState,
} = require("resource://devtools/client/memory/constants.js");
var actions = require("resource://devtools/client/memory/actions/snapshot.js");
var {
changeView,
} = require("resource://devtools/client/memory/actions/view.js");
// This tests taking a census on a snapshot that is still being read, which
// triggers an assertion failure.
EXPECTED_DTU_ASSERT_FAILURE_COUNT = 1;
add_task(async function () {
const front = new StubbedMemoryFront();
const heapWorker = new HeapAnalysesClient();
await front.attach();
const store = Store();
store.dispatch(changeView(viewState.CENSUS));
store.dispatch(actions.takeSnapshot(front));
await waitUntilState(store, () => {
const snapshots = store.getState().snapshots;
return snapshots.length === 1 && snapshots[0].state === states.SAVED;
});
let snapshot = store.getState().snapshots[0];
equal(snapshot.census, null, "No census data exists yet on the snapshot.");
// Test error case of wrong state.
store.dispatch(actions.takeCensus(heapWorker, snapshot.id));
await waitUntilState(store, () => store.getState().errors.length === 1);
dumpn("Found error: " + store.getState().errors[0]);
ok(
/Assertion failure/.test(store.getState().errors[0]),
"Error thrown when taking a census of a snapshot that has not been read."
);
store.dispatch(actions.readSnapshot(heapWorker, snapshot.id));
await waitUntilState(
store,
() => store.getState().snapshots[0].state === states.READ
);
store.dispatch(actions.takeCensus(heapWorker, snapshot.id));
await waitUntilCensusState(store, s => s.census, [censusState.SAVING]);
await waitUntilCensusState(store, s => s.census, [censusState.SAVED]);
snapshot = store.getState().snapshots[0];
ok(snapshot.census, "Snapshot has census after saved census");
ok(snapshot.census.report.children.length, "Census is in tree node form");
equal(
snapshot.census.display,
censusDisplays.coarseType,
"Snapshot stored correct display used for the census"
);
});