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

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:884ee55d4684
1 const Cc = Components.classes;
2 const Ci = Components.interfaces;
3 const Cr = Components.results;
4
5 const GCONF_BG_COLOR_KEY = "/desktop/gnome/background/primary_color";
6
7 var gShell;
8 var gGConf;
9
10 /**
11 * Converts from a rgb numerical color valule (r << 16 | g << 8 | b)
12 * into a hex string in #RRGGBB format.
13 */
14 function colorToHex(aColor) {
15 const rMask = 4294901760;
16 const gMask = 65280;
17 const bMask = 255;
18
19 var r = (aColor & rMask) >> 16;
20 var g = (aColor & gMask) >> 8;
21 var b = (aColor & bMask);
22
23 return "#" + [r, g, b].map(function(aInt)
24 aInt.toString(16).replace(/^(.)$/, "0$1"))
25 .join("").toUpperCase();
26 }
27
28 /**
29 * Converts a color string in #RRGGBB format to a rgb numerical color value
30 * (r << 16 | g << 8 | b).
31 */
32 function hexToColor(aString) {
33 return parseInt(aString.substring(1,3), 16) << 16 |
34 parseInt(aString.substring(3,5), 16) << 8 |
35 parseInt(aString.substring(5,7), 16);
36 }
37
38 /**
39 * Checks that setting the GConf background key to aGConfColor will
40 * result in the Shell component returning a background color equals
41 * to aExpectedShellColor in #RRGGBB format.
42 */
43 function checkGConfToShellColor(aGConfColor, aExpectedShellColor) {
44
45 gGConf.setString(GCONF_BG_COLOR_KEY, aGConfColor);
46 var shellColor = colorToHex(gShell.desktopBackgroundColor);
47
48 do_check_eq(shellColor, aExpectedShellColor);
49 }
50
51 /**
52 * Checks that setting the background color (in #RRGGBB format) using the Shell
53 * component will result in having a GConf key for the background color set to
54 * aExpectedGConfColor.
55 */
56 function checkShellToGConfColor(aShellColor, aExpectedGConfColor) {
57
58 gShell.desktopBackgroundColor = hexToColor(aShellColor);
59 var gconfColor = gGConf.getString(GCONF_BG_COLOR_KEY);
60
61 do_check_eq(gconfColor, aExpectedGConfColor);
62 }
63
64 function run_test() {
65
66 // This test is Linux specific for now
67 if (!("@mozilla.org/gnome-gconf-service;1" in Cc))
68 return;
69
70 try {
71 // If GSettings is available, then the GConf tests
72 // will fail
73 var gsettings = Cc["@mozilla.org/gsettings-service;1"].
74 getService(Ci.nsIGSettingsService).
75 getCollectionForSchema("org.gnome.desktop.background");
76 return;
77 } catch(e) { }
78
79 gGConf = Cc["@mozilla.org/gnome-gconf-service;1"].
80 getService(Ci.nsIGConfService);
81
82 gShell = Cc["@mozilla.org/browser/shell-service;1"].
83 getService(Ci.nsIShellService);
84
85 // Save the original background color so that we can restore it
86 // after the test.
87 var origGConfColor = gGConf.getString(GCONF_BG_COLOR_KEY);
88
89 try {
90
91 checkGConfToShellColor("#000", "#000000");
92 checkGConfToShellColor("#00f", "#0000FF");
93 checkGConfToShellColor("#b2f", "#BB22FF");
94 checkGConfToShellColor("#fff", "#FFFFFF");
95
96 checkGConfToShellColor("#000000", "#000000");
97 checkGConfToShellColor("#0000ff", "#0000FF");
98 checkGConfToShellColor("#b002f0", "#B002F0");
99 checkGConfToShellColor("#ffffff", "#FFFFFF");
100
101 checkGConfToShellColor("#000000000", "#000000");
102 checkGConfToShellColor("#00f00f00f", "#000000");
103 checkGConfToShellColor("#aaabbbccc", "#AABBCC");
104 checkGConfToShellColor("#fffffffff", "#FFFFFF");
105
106 checkGConfToShellColor("#000000000000", "#000000");
107 checkGConfToShellColor("#000f000f000f", "#000000");
108 checkGConfToShellColor("#00ff00ff00ff", "#000000");
109 checkGConfToShellColor("#aaaabbbbcccc", "#AABBCC");
110 checkGConfToShellColor("#111122223333", "#112233");
111 checkGConfToShellColor("#ffffffffffff", "#FFFFFF");
112
113 checkShellToGConfColor("#000000", "#000000000000");
114 checkShellToGConfColor("#0000FF", "#00000000ffff");
115 checkShellToGConfColor("#FFFFFF", "#ffffffffffff");
116 checkShellToGConfColor("#0A0B0C", "#0a0a0b0b0c0c");
117 checkShellToGConfColor("#A0B0C0", "#a0a0b0b0c0c0");
118 checkShellToGConfColor("#AABBCC", "#aaaabbbbcccc");
119
120 } finally {
121 gGConf.setString(GCONF_BG_COLOR_KEY, origGConfColor);
122 }
123 }

mercurial