michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: const source = "about:mozilla"; michael@0: let mWindow, wrapMenuItem, syntaxMenuItem; michael@0: michael@0: // Check the default values are set. michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: registerCleanupFunction(function() { michael@0: SpecialPowers.clearUserPref("view_source.tab_size"); michael@0: SpecialPowers.clearUserPref("view_source.wrap_long_lines"); michael@0: SpecialPowers.clearUserPref("view_source.syntax_highlight"); michael@0: }); michael@0: michael@0: openViewSourceWindow(source, function(aWindow) { michael@0: mWindow = aWindow; michael@0: wrapMenuItem = aWindow.document.getElementById('menu_wrapLongLines'); michael@0: syntaxMenuItem = aWindow.document.getElementById('menu_highlightSyntax'); michael@0: michael@0: // Strip checked="false" attributes, since we're not interested in them. michael@0: if (wrapMenuItem.getAttribute("checked") == "false") michael@0: wrapMenuItem.removeAttribute("checked"); michael@0: if (syntaxMenuItem.getAttribute("checked") == "false") michael@0: syntaxMenuItem.removeAttribute("checked"); michael@0: michael@0: is(wrapMenuItem.hasAttribute("checked"), false, "Wrap menu item not checked by default"); michael@0: is(syntaxMenuItem.hasAttribute("checked"), true, "Syntax menu item checked by default"); michael@0: checkStyle(aWindow, "-moz-tab-size", 4); michael@0: checkStyle(aWindow, "white-space", "pre"); michael@0: michael@0: test1(); michael@0: }); michael@0: } michael@0: michael@0: // Check that the Wrap Long Lines menu item works. michael@0: function test1() { michael@0: simulateClick(wrapMenuItem); michael@0: michael@0: is(wrapMenuItem.hasAttribute("checked"), true, "Wrap menu item checked"); michael@0: is(SpecialPowers.getBoolPref("view_source.wrap_long_lines"), true, "Wrap pref set"); michael@0: checkStyle(mWindow, "white-space", "pre-wrap"); michael@0: test2(); michael@0: } michael@0: michael@0: function test2() { michael@0: simulateClick(wrapMenuItem); michael@0: michael@0: is(wrapMenuItem.hasAttribute("checked"), false, "Wrap menu item unchecked"); michael@0: is(SpecialPowers.getBoolPref("view_source.wrap_long_lines"), false, "Wrap pref set"); michael@0: checkStyle(mWindow, "white-space", "pre"); michael@0: test3(); michael@0: } michael@0: michael@0: // Check that the Syntax Highlighting menu item works. michael@0: function test3() { michael@0: mWindow.gBrowser.addEventListener("pageshow", function test3Handler() { michael@0: mWindow.gBrowser.removeEventListener("pageshow", test3Handler, false); michael@0: is(syntaxMenuItem.hasAttribute("checked"), false, "Syntax menu item unchecked"); michael@0: is(SpecialPowers.getBoolPref("view_source.syntax_highlight"), false, "Syntax highlighting pref set"); michael@0: michael@0: checkHighlight(mWindow, false); michael@0: test4(); michael@0: }, false); michael@0: michael@0: simulateClick(syntaxMenuItem); michael@0: } michael@0: michael@0: function test4() { michael@0: mWindow.gBrowser.addEventListener("pageshow", function test4Handler() { michael@0: mWindow.gBrowser.removeEventListener("pageshow", test4Handler, false); michael@0: is(syntaxMenuItem.hasAttribute("checked"), true, "Syntax menu item checked"); michael@0: is(SpecialPowers.getBoolPref("view_source.syntax_highlight"), true, "Syntax highlighting pref set"); michael@0: michael@0: checkHighlight(mWindow, true); michael@0: closeViewSourceWindow(mWindow, test5); michael@0: }, false); michael@0: michael@0: simulateClick(syntaxMenuItem); michael@0: } michael@0: michael@0: // Open a new view-source window to check prefs are obeyed. michael@0: function test5() { michael@0: SpecialPowers.setIntPref("view_source.tab_size", 2); michael@0: SpecialPowers.setBoolPref("view_source.wrap_long_lines", true); michael@0: SpecialPowers.setBoolPref("view_source.syntax_highlight", false); michael@0: michael@0: executeSoon(function() { michael@0: openViewSourceWindow(source, function(aWindow) { michael@0: wrapMenuItem = aWindow.document.getElementById('menu_wrapLongLines'); michael@0: syntaxMenuItem = aWindow.document.getElementById('menu_highlightSyntax'); michael@0: michael@0: // Strip checked="false" attributes, since we're not interested in them. michael@0: if (wrapMenuItem.getAttribute("checked") == "false") michael@0: wrapMenuItem.removeAttribute("checked"); michael@0: if (syntaxMenuItem.getAttribute("checked") == "false") michael@0: syntaxMenuItem.removeAttribute("checked"); michael@0: michael@0: is(wrapMenuItem.hasAttribute("checked"), true, "Wrap menu item checked"); michael@0: is(syntaxMenuItem.hasAttribute("checked"), false, "Syntax menu item unchecked"); michael@0: checkStyle(aWindow, "-moz-tab-size", 2); michael@0: checkStyle(aWindow, "white-space", "pre-wrap"); michael@0: checkHighlight(aWindow, false); michael@0: closeViewSourceWindow(aWindow, finish); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: // Simulate a menu item click, including toggling the checked state. michael@0: // This saves us from opening the menu and trying to click on the item, michael@0: // which doesn't work on Mac OS X. michael@0: function simulateClick(aMenuItem) { michael@0: if (aMenuItem.hasAttribute("checked")) michael@0: aMenuItem.removeAttribute("checked"); michael@0: else michael@0: aMenuItem.setAttribute("checked", "true"); michael@0: michael@0: aMenuItem.click(); michael@0: } michael@0: michael@0: function checkStyle(aWindow, aStyleProperty, aExpectedValue) { michael@0: let gBrowser = aWindow.gBrowser; michael@0: let computedStyle = gBrowser.contentWindow.getComputedStyle(gBrowser.contentDocument.body, null); michael@0: michael@0: is(computedStyle.getPropertyValue(aStyleProperty), aExpectedValue, "Correct value of " + aStyleProperty); michael@0: } michael@0: michael@0: function checkHighlight(aWindow, aExpected) { michael@0: let spans = aWindow.gBrowser.contentDocument.getElementsByTagName("span"); michael@0: is(Array.some(spans, function(aSpan) { michael@0: return aSpan.className != ""; michael@0: }), aExpected, "Syntax highlighting " + (aExpected ? "on" : "off")); michael@0: }