1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/components/shell/test/unit/test_421977.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,123 @@ 1.4 +const Cc = Components.classes; 1.5 +const Ci = Components.interfaces; 1.6 +const Cr = Components.results; 1.7 + 1.8 +const GCONF_BG_COLOR_KEY = "/desktop/gnome/background/primary_color"; 1.9 + 1.10 +var gShell; 1.11 +var gGConf; 1.12 + 1.13 +/** 1.14 + * Converts from a rgb numerical color valule (r << 16 | g << 8 | b) 1.15 + * into a hex string in #RRGGBB format. 1.16 + */ 1.17 +function colorToHex(aColor) { 1.18 + const rMask = 4294901760; 1.19 + const gMask = 65280; 1.20 + const bMask = 255; 1.21 + 1.22 + var r = (aColor & rMask) >> 16; 1.23 + var g = (aColor & gMask) >> 8; 1.24 + var b = (aColor & bMask); 1.25 + 1.26 + return "#" + [r, g, b].map(function(aInt) 1.27 + aInt.toString(16).replace(/^(.)$/, "0$1")) 1.28 + .join("").toUpperCase(); 1.29 +} 1.30 + 1.31 +/** 1.32 + * Converts a color string in #RRGGBB format to a rgb numerical color value 1.33 + * (r << 16 | g << 8 | b). 1.34 + */ 1.35 +function hexToColor(aString) { 1.36 + return parseInt(aString.substring(1,3), 16) << 16 | 1.37 + parseInt(aString.substring(3,5), 16) << 8 | 1.38 + parseInt(aString.substring(5,7), 16); 1.39 +} 1.40 + 1.41 +/** 1.42 + * Checks that setting the GConf background key to aGConfColor will 1.43 + * result in the Shell component returning a background color equals 1.44 + * to aExpectedShellColor in #RRGGBB format. 1.45 + */ 1.46 +function checkGConfToShellColor(aGConfColor, aExpectedShellColor) { 1.47 + 1.48 + gGConf.setString(GCONF_BG_COLOR_KEY, aGConfColor); 1.49 + var shellColor = colorToHex(gShell.desktopBackgroundColor); 1.50 + 1.51 + do_check_eq(shellColor, aExpectedShellColor); 1.52 +} 1.53 + 1.54 +/** 1.55 + * Checks that setting the background color (in #RRGGBB format) using the Shell 1.56 + * component will result in having a GConf key for the background color set to 1.57 + * aExpectedGConfColor. 1.58 + */ 1.59 +function checkShellToGConfColor(aShellColor, aExpectedGConfColor) { 1.60 + 1.61 + gShell.desktopBackgroundColor = hexToColor(aShellColor); 1.62 + var gconfColor = gGConf.getString(GCONF_BG_COLOR_KEY); 1.63 + 1.64 + do_check_eq(gconfColor, aExpectedGConfColor); 1.65 +} 1.66 + 1.67 +function run_test() { 1.68 + 1.69 + // This test is Linux specific for now 1.70 + if (!("@mozilla.org/gnome-gconf-service;1" in Cc)) 1.71 + return; 1.72 + 1.73 + try { 1.74 + // If GSettings is available, then the GConf tests 1.75 + // will fail 1.76 + var gsettings = Cc["@mozilla.org/gsettings-service;1"]. 1.77 + getService(Ci.nsIGSettingsService). 1.78 + getCollectionForSchema("org.gnome.desktop.background"); 1.79 + return; 1.80 + } catch(e) { } 1.81 + 1.82 + gGConf = Cc["@mozilla.org/gnome-gconf-service;1"]. 1.83 + getService(Ci.nsIGConfService); 1.84 + 1.85 + gShell = Cc["@mozilla.org/browser/shell-service;1"]. 1.86 + getService(Ci.nsIShellService); 1.87 + 1.88 + // Save the original background color so that we can restore it 1.89 + // after the test. 1.90 + var origGConfColor = gGConf.getString(GCONF_BG_COLOR_KEY); 1.91 + 1.92 + try { 1.93 + 1.94 + checkGConfToShellColor("#000", "#000000"); 1.95 + checkGConfToShellColor("#00f", "#0000FF"); 1.96 + checkGConfToShellColor("#b2f", "#BB22FF"); 1.97 + checkGConfToShellColor("#fff", "#FFFFFF"); 1.98 + 1.99 + checkGConfToShellColor("#000000", "#000000"); 1.100 + checkGConfToShellColor("#0000ff", "#0000FF"); 1.101 + checkGConfToShellColor("#b002f0", "#B002F0"); 1.102 + checkGConfToShellColor("#ffffff", "#FFFFFF"); 1.103 + 1.104 + checkGConfToShellColor("#000000000", "#000000"); 1.105 + checkGConfToShellColor("#00f00f00f", "#000000"); 1.106 + checkGConfToShellColor("#aaabbbccc", "#AABBCC"); 1.107 + checkGConfToShellColor("#fffffffff", "#FFFFFF"); 1.108 + 1.109 + checkGConfToShellColor("#000000000000", "#000000"); 1.110 + checkGConfToShellColor("#000f000f000f", "#000000"); 1.111 + checkGConfToShellColor("#00ff00ff00ff", "#000000"); 1.112 + checkGConfToShellColor("#aaaabbbbcccc", "#AABBCC"); 1.113 + checkGConfToShellColor("#111122223333", "#112233"); 1.114 + checkGConfToShellColor("#ffffffffffff", "#FFFFFF"); 1.115 + 1.116 + checkShellToGConfColor("#000000", "#000000000000"); 1.117 + checkShellToGConfColor("#0000FF", "#00000000ffff"); 1.118 + checkShellToGConfColor("#FFFFFF", "#ffffffffffff"); 1.119 + checkShellToGConfColor("#0A0B0C", "#0a0a0b0b0c0c"); 1.120 + checkShellToGConfColor("#A0B0C0", "#a0a0b0b0c0c0"); 1.121 + checkShellToGConfColor("#AABBCC", "#aaaabbbbcccc"); 1.122 + 1.123 + } finally { 1.124 + gGConf.setString(GCONF_BG_COLOR_KEY, origGConfColor); 1.125 + } 1.126 +}