Mypal/devtools/client/scratchpad/test/browser_scratchpad_restore.js
2021-02-04 16:48:36 +02:00

96 lines
2.3 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/* Call the iterator for each item in the list,
calling the final callback with all the results
after every iterator call has sent its result */
function asyncMap(items, iterator, callback)
{
let expected = items.length;
let results = [];
items.forEach(function (item) {
iterator(item, function (result) {
results.push(result);
if (results.length == expected) {
callback(results);
}
});
});
}
function test()
{
waitForExplicitFinish();
testRestore();
}
function testRestore()
{
let states = [
{
filename: "testfile",
text: "test1",
executionContext: 2
},
{
text: "text2",
executionContext: 1
},
{
text: "text3",
executionContext: 1
}
];
asyncMap(states, function (state, done) {
// Open some scratchpad windows
openScratchpad(done, {state: state, noFocus: true});
}, function (wins) {
// Then save the windows to session store
ScratchpadManager.saveOpenWindows();
// Then get their states
let session = ScratchpadManager.getSessionState();
// Then close them
wins.forEach(function (win) {
win.close();
});
// Clear out session state for next tests
ScratchpadManager.saveOpenWindows();
// Then restore them
let restoredWins = ScratchpadManager.restoreSession(session);
is(restoredWins.length, 3, "Three scratchad windows restored");
asyncMap(restoredWins, function (restoredWin, done) {
openScratchpad(function (aWin) {
let state = aWin.Scratchpad.getState();
aWin.close();
done(state);
}, {window: restoredWin, noFocus: true});
}, function (restoredStates) {
// Then make sure they were restored with the right states
ok(statesMatch(restoredStates, states),
"All scratchpad window states restored correctly");
// Yay, we're done!
finish();
});
});
}
function statesMatch(restoredStates, states)
{
return states.every(function (state) {
return restoredStates.some(function (restoredState) {
return state.filename == restoredState.filename
&& state.text == restoredState.text
&& state.executionContext == restoredState.executionContext;
});
});
}