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