|
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 } |