tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_action-set-display-and-refresh-01.js (5748B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 /**
      7 * Tests the task creator `setCensusDisplayAndRefreshAndRefresh()` for display
      8 * changing. We test this rather than `setCensusDisplayAndRefresh` directly, as
      9 * we use the refresh action in the app itself composed from
     10 * `setCensusDisplayAndRefresh`.
     11 */
     12 
     13 const {
     14  censusDisplays,
     15  censusState,
     16  viewState,
     17 } = require("resource://devtools/client/memory/constants.js");
     18 const {
     19  setCensusDisplayAndRefresh,
     20 } = require("resource://devtools/client/memory/actions/census-display.js");
     21 const {
     22  takeSnapshotAndCensus,
     23  selectSnapshotAndRefresh,
     24 } = require("resource://devtools/client/memory/actions/snapshot.js");
     25 const {
     26  changeView,
     27 } = require("resource://devtools/client/memory/actions/view.js");
     28 
     29 // We test setting an invalid display, which triggers an assertion failure.
     30 EXPECTED_DTU_ASSERT_FAILURE_COUNT = 1;
     31 
     32 add_task(async function () {
     33  const front = new StubbedMemoryFront();
     34  const heapWorker = new HeapAnalysesClient();
     35  await front.attach();
     36  const store = Store();
     37  const { getState, dispatch } = store;
     38 
     39  dispatch(changeView(viewState.CENSUS));
     40 
     41  // Test default display with no snapshots
     42  equal(
     43    getState().censusDisplay.breakdown.by,
     44    "coarseType",
     45    "default coarseType display selected at start."
     46  );
     47  dispatch(
     48    setCensusDisplayAndRefresh(heapWorker, censusDisplays.allocationStack)
     49  );
     50  equal(
     51    getState().censusDisplay.breakdown.by,
     52    "allocationStack",
     53    "display changed with no snapshots"
     54  );
     55 
     56  // Test invalid displays
     57  Assert.strictEqual(
     58    getState().errors.length,
     59    0,
     60    "No error actions in the queue."
     61  );
     62  dispatch(setCensusDisplayAndRefresh(heapWorker, {}));
     63  await waitUntilState(store, () => getState().errors.length === 1);
     64  ok(true, "Emits an error action when passing in an invalid display object");
     65 
     66  equal(
     67    getState().censusDisplay.breakdown.by,
     68    "allocationStack",
     69    "current display unchanged when passing invalid display"
     70  );
     71 
     72  // Test new snapshots
     73  dispatch(takeSnapshotAndCensus(front, heapWorker));
     74  await waitUntilCensusState(store, snapshot => snapshot.census, [
     75    censusState.SAVED,
     76  ]);
     77 
     78  equal(
     79    getState().snapshots[0].census.display,
     80    censusDisplays.allocationStack,
     81    "New snapshot's census uses correct display"
     82  );
     83 
     84  // Updates when changing display during `SAVING`
     85  dispatch(takeSnapshotAndCensus(front, heapWorker));
     86  await waitUntilCensusState(store, snapshot => snapshot.census, [
     87    censusState.SAVED,
     88    censusState.SAVING,
     89  ]);
     90  dispatch(setCensusDisplayAndRefresh(heapWorker, censusDisplays.coarseType));
     91  await waitUntilCensusState(store, snapshot => snapshot.census, [
     92    censusState.SAVED,
     93    censusState.SAVED,
     94  ]);
     95  equal(
     96    getState().snapshots[1].census.display,
     97    censusDisplays.coarseType,
     98    "Changing display while saving a snapshot results " +
     99      "in a census using the new display"
    100  );
    101 
    102  // Updates when changing display during `SAVING_CENSUS`
    103  dispatch(takeSnapshotAndCensus(front, heapWorker));
    104  await waitUntilCensusState(store, snapshot => snapshot.census, [
    105    censusState.SAVED,
    106    censusState.SAVED,
    107    censusState.SAVING,
    108  ]);
    109  dispatch(
    110    setCensusDisplayAndRefresh(heapWorker, censusDisplays.allocationStack)
    111  );
    112  await waitUntilCensusState(store, snapshot => snapshot.census, [
    113    censusState.SAVED,
    114    censusState.SAVED,
    115    censusState.SAVED,
    116  ]);
    117  equal(
    118    getState().snapshots[2].census.display,
    119    censusDisplays.allocationStack,
    120    "Display can be changed while saving census, stores updated display in snapshot"
    121  );
    122 
    123  // Updates census on currently selected snapshot when changing display
    124  ok(getState().snapshots[2].selected, "Third snapshot currently selected");
    125  dispatch(setCensusDisplayAndRefresh(heapWorker, censusDisplays.coarseType));
    126  await waitUntilState(
    127    store,
    128    state => state.snapshots[2].census.state === censusState.SAVING
    129  );
    130  await waitUntilState(
    131    store,
    132    state => state.snapshots[2].census.state === censusState.SAVED
    133  );
    134  equal(
    135    getState().snapshots[2].census.display,
    136    censusDisplays.coarseType,
    137    "Snapshot census updated when changing displays " +
    138      "after already generating one census"
    139  );
    140 
    141  dispatch(
    142    setCensusDisplayAndRefresh(heapWorker, censusDisplays.allocationStack)
    143  );
    144  await waitUntilState(
    145    store,
    146    state => state.snapshots[2].census.state === censusState.SAVED
    147  );
    148  equal(
    149    getState().snapshots[2].census.display,
    150    censusDisplays.allocationStack,
    151    "Snapshot census updated when changing displays " +
    152      "after already generating one census"
    153  );
    154 
    155  // Does not update unselected censuses.
    156  ok(!getState().snapshots[1].selected, "Second snapshot selected currently");
    157  equal(
    158    getState().snapshots[1].census.display,
    159    censusDisplays.coarseType,
    160    "Second snapshot using `coarseType` display still and " +
    161      "not yet updated to correct display"
    162  );
    163 
    164  // Updates to current display when switching to stale snapshot.
    165  dispatch(selectSnapshotAndRefresh(heapWorker, getState().snapshots[1].id));
    166  await waitUntilCensusState(store, snapshot => snapshot.census, [
    167    censusState.SAVED,
    168    censusState.SAVING,
    169    censusState.SAVED,
    170  ]);
    171  await waitUntilCensusState(store, snapshot => snapshot.census, [
    172    censusState.SAVED,
    173    censusState.SAVED,
    174    censusState.SAVED,
    175  ]);
    176 
    177  ok(getState().snapshots[1].selected, "Second snapshot selected currently");
    178  equal(
    179    getState().snapshots[1].census.display,
    180    censusDisplays.allocationStack,
    181    "Second snapshot using `allocationStack` display and updated to correct display"
    182  );
    183 
    184  heapWorker.destroy();
    185  await front.detach();
    186 });