diff options
Diffstat (limited to 'toolkit/components/viewsource/test/browser/browser_viewsourceprefs.js')
-rw-r--r-- | toolkit/components/viewsource/test/browser/browser_viewsourceprefs.js | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/toolkit/components/viewsource/test/browser/browser_viewsourceprefs.js b/toolkit/components/viewsource/test/browser/browser_viewsourceprefs.js new file mode 100644 index 000000000..7361a70a5 --- /dev/null +++ b/toolkit/components/viewsource/test/browser/browser_viewsourceprefs.js @@ -0,0 +1,136 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +var plaintextURL = "data:text/plain,hello+world"; +var htmlURL = "about:mozilla"; + +add_task(function* setup() { + registerCleanupFunction(function() { + SpecialPowers.clearUserPref("view_source.tab_size"); + SpecialPowers.clearUserPref("view_source.wrap_long_lines"); + SpecialPowers.clearUserPref("view_source.syntax_highlight"); + }); +}); + +add_task(function*() { + yield exercisePrefs(plaintextURL, false); + yield exercisePrefs(htmlURL, true); +}); + +var exercisePrefs = Task.async(function* (source, highlightable) { + let win = yield loadViewSourceWindow(source); + let wrapMenuItem = win.document.getElementById("menu_wrapLongLines"); + let syntaxMenuItem = win.document.getElementById("menu_highlightSyntax"); + + // Strip checked="false" attributes, since we're not interested in them. + if (wrapMenuItem.getAttribute("checked") == "false") { + wrapMenuItem.removeAttribute("checked"); + } + if (syntaxMenuItem.getAttribute("checked") == "false") { + syntaxMenuItem.removeAttribute("checked"); + } + + // Test the default states of these menu items. + is(wrapMenuItem.hasAttribute("checked"), false, + "Wrap menu item not checked by default"); + is(syntaxMenuItem.hasAttribute("checked"), true, + "Syntax menu item checked by default"); + + yield checkStyle(win, "-moz-tab-size", 4); + yield checkStyle(win, "white-space", "pre"); + + // Next, test that the Wrap Long Lines menu item works. + let prefReady = waitForPrefChange("view_source.wrap_long_lines"); + simulateClick(wrapMenuItem); + is(wrapMenuItem.hasAttribute("checked"), true, "Wrap menu item checked"); + yield prefReady; + is(SpecialPowers.getBoolPref("view_source.wrap_long_lines"), true, "Wrap pref set"); + + yield checkStyle(win, "white-space", "pre-wrap"); + + prefReady = waitForPrefChange("view_source.wrap_long_lines"); + simulateClick(wrapMenuItem); + is(wrapMenuItem.hasAttribute("checked"), false, "Wrap menu item unchecked"); + yield prefReady; + is(SpecialPowers.getBoolPref("view_source.wrap_long_lines"), false, "Wrap pref set"); + yield checkStyle(win, "white-space", "pre"); + + // Check that the Syntax Highlighting menu item works. + prefReady = waitForPrefChange("view_source.syntax_highlight"); + simulateClick(syntaxMenuItem); + is(syntaxMenuItem.hasAttribute("checked"), false, "Syntax menu item unchecked"); + yield prefReady; + is(SpecialPowers.getBoolPref("view_source.syntax_highlight"), false, "Syntax highlighting pref set"); + yield checkHighlight(win, false); + + prefReady = waitForPrefChange("view_source.syntax_highlight"); + simulateClick(syntaxMenuItem); + is(syntaxMenuItem.hasAttribute("checked"), true, "Syntax menu item checked"); + yield prefReady; + is(SpecialPowers.getBoolPref("view_source.syntax_highlight"), true, "Syntax highlighting pref set"); + yield checkHighlight(win, highlightable); + yield BrowserTestUtils.closeWindow(win); + + // Open a new view-source window to check that the prefs are obeyed. + SpecialPowers.setIntPref("view_source.tab_size", 2); + SpecialPowers.setBoolPref("view_source.wrap_long_lines", true); + SpecialPowers.setBoolPref("view_source.syntax_highlight", false); + + win = yield loadViewSourceWindow(source); + wrapMenuItem = win.document.getElementById("menu_wrapLongLines"); + syntaxMenuItem = win.document.getElementById("menu_highlightSyntax"); + + // Strip checked="false" attributes, since we're not interested in them. + if (wrapMenuItem.getAttribute("checked") == "false") { + wrapMenuItem.removeAttribute("checked"); + } + if (syntaxMenuItem.getAttribute("checked") == "false") { + syntaxMenuItem.removeAttribute("checked"); + } + + is(wrapMenuItem.hasAttribute("checked"), true, "Wrap menu item checked"); + is(syntaxMenuItem.hasAttribute("checked"), false, "Syntax menu item unchecked"); + yield checkStyle(win, "-moz-tab-size", 2); + yield checkStyle(win, "white-space", "pre-wrap"); + yield checkHighlight(win, false); + + SpecialPowers.clearUserPref("view_source.tab_size"); + SpecialPowers.clearUserPref("view_source.wrap_long_lines"); + SpecialPowers.clearUserPref("view_source.syntax_highlight"); + + yield BrowserTestUtils.closeWindow(win); +}); + +// Simulate a menu item click, including toggling the checked state. +// This saves us from opening the menu and trying to click on the item, +// which doesn't work on Mac OS X. +function simulateClick(aMenuItem) { + if (aMenuItem.hasAttribute("checked")) + aMenuItem.removeAttribute("checked"); + else + aMenuItem.setAttribute("checked", "true"); + + aMenuItem.click(); +} + +var checkStyle = Task.async(function* (win, styleProperty, expected) { + let browser = win.gBrowser; + let value = yield ContentTask.spawn(browser, styleProperty, function* (styleProperty) { + let style = content.getComputedStyle(content.document.body, null); + return style.getPropertyValue(styleProperty); + }); + is(value, expected, "Correct value of " + styleProperty); +}); + +var checkHighlight = Task.async(function* (win, expected) { + let browser = win.gBrowser; + let highlighted = yield ContentTask.spawn(browser, {}, function* () { + let spans = content.document.getElementsByTagName("span"); + return Array.some(spans, (span) => { + let style = content.getComputedStyle(span, null); + return style.getPropertyValue("color") !== "rgb(0, 0, 0)"; + }); + }); + is(highlighted, expected, "Syntax highlighting " + (expected ? "on" : "off")); +}); |