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