browser/components/shell/test/unit/test_421977.js

changeset 0
6474c204b198
     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 +}

mercurial