diff options
Diffstat (limited to 'browser/components/sessionstore/test/browser_393716.js')
-rw-r--r-- | browser/components/sessionstore/test/browser_393716.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_393716.js b/browser/components/sessionstore/test/browser_393716.js new file mode 100644 index 000000000..c59bdcc8b --- /dev/null +++ b/browser/components/sessionstore/test/browser_393716.js @@ -0,0 +1,71 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const URL = "about:config"; + +/** + * Bug 393716 - Basic tests for getTabState(), setTabState(), and duplicateTab(). + */ +add_task(function test_set_tabstate() { + let key = "Unique key: " + Date.now(); + let value = "Unique value: " + Math.random(); + + // create a new tab + let tab = gBrowser.addTab(URL); + ss.setTabValue(tab, key, value); + yield promiseBrowserLoaded(tab.linkedBrowser); + + // get the tab's state + yield TabStateFlusher.flush(tab.linkedBrowser); + let state = ss.getTabState(tab); + ok(state, "get the tab's state"); + + // verify the tab state's integrity + state = JSON.parse(state); + ok(state instanceof Object && state.entries instanceof Array && state.entries.length > 0, + "state object seems valid"); + ok(state.entries.length == 1 && state.entries[0].url == URL, + "Got the expected state object (test URL)"); + ok(state.extData && state.extData[key] == value, + "Got the expected state object (test manually set tab value)"); + + // clean up + gBrowser.removeTab(tab); +}); + +add_task(function test_set_tabstate_and_duplicate() { + let key2 = "key2"; + let value2 = "Value " + Math.random(); + let value3 = "Another value: " + Date.now(); + let state = { entries: [{ url: URL }], extData: { key2: value2 } }; + + // create a new tab + let tab = gBrowser.addTab(); + // set the tab's state + ss.setTabState(tab, JSON.stringify(state)); + yield promiseBrowserLoaded(tab.linkedBrowser); + + // verify the correctness of the restored tab + ok(ss.getTabValue(tab, key2) == value2 && tab.linkedBrowser.currentURI.spec == URL, + "the tab's state was correctly restored"); + + // add text data + yield setInputValue(tab.linkedBrowser, {id: "textbox", value: value3}); + + // duplicate the tab + let tab2 = ss.duplicateTab(window, tab); + yield promiseTabRestored(tab2); + + // verify the correctness of the duplicated tab + ok(ss.getTabValue(tab2, key2) == value2 && + tab2.linkedBrowser.currentURI.spec == URL, + "correctly duplicated the tab's state"); + let textbox = yield getInputValue(tab2.linkedBrowser, {id: "textbox"}); + is(textbox, value3, "also duplicated text data"); + + // clean up + gBrowser.removeTab(tab2); + gBrowser.removeTab(tab); +}); |