summaryrefslogtreecommitdiff
path: root/browser/fuel/test/browser_ApplicationPrefs.js
blob: 23ac5dc48ba78a72dcc6b1963efc15dddbf05a8f (plain)
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// The various properties that we'll be testing
var testdata = {
  missing: "fuel.fuel-test-missing",
  dummy: "fuel.fuel-test",
  string: "browser.active_color",
  integer: "permissions.default.image",
  boolean: "browser.underline_anchors"
};

function test() {
  // test getting nonexistent values
  var itemValue = Application.prefs.getValue(testdata.missing, "default");
  is(itemValue, "default", "Check 'Application.prefs.getValue' for nonexistent item");

  is(Application.prefs.get(testdata.missing), null, "Check 'Application.prefs.get' for nonexistent item");

  // test setting and getting a value
  Application.prefs.setValue(testdata.dummy, "dummy");
  itemValue = Application.prefs.getValue(testdata.dummy, "default");
  is(itemValue, "dummy", "Check 'Application.prefs.getValue' for existing item");

  // test for overwriting an existing value
  Application.prefs.setValue(testdata.dummy, "smarty");
  itemValue = Application.prefs.getValue(testdata.dummy, "default");
  is(itemValue, "smarty", "Check 'Application.prefs.getValue' for overwritten item");

  // test setting and getting a value
  Application.prefs.get(testdata.dummy).value = "dummy2";
  itemValue = Application.prefs.get(testdata.dummy).value;
  is(itemValue, "dummy2", "Check 'Application.prefs.get().value' for existing item");

  // test resetting a pref [since there is no default value, the pref should disappear]
  Application.prefs.get(testdata.dummy).reset();
  itemValue = Application.prefs.getValue(testdata.dummy, "default");
  is(itemValue, "default", "Check 'Application.prefs.getValue' for reset pref");

  // test to see if a non-existant property exists
  ok(!Application.prefs.has(testdata.dummy), "Check non-existant property for existence");

  // PREF: string browser.active_color == #EE0000

  // test to see if an existing string property exists
  ok(Application.prefs.has(testdata.string), "Check existing string property for existence");

  // test accessing a non-existant string property
  var val = Application.prefs.getValue(testdata.dummy, "default");
  is(val, "default", "Check non-existant string property for expected value");

  // test accessing an existing string property
  var val = Application.prefs.getValue(testdata.string, "default");
  is(val, "#EE0000", "Check existing string property for expected value");

  // test manipulating an existing string property
  Application.prefs.setValue(testdata.string, "#EF0000");
  var val = Application.prefs.getValue(testdata.string, "default");
  is(val, "#EF0000", "Set existing string property");

  // test getting the type of an existing string property
  var type = Application.prefs.get(testdata.string).type;
  is(type, "String", "Check 'Application.prefs.get().type' for string pref");

  // test resetting an existing string property
  Application.prefs.get(testdata.string).reset();
  var val = Application.prefs.getValue(testdata.string, "default");
  is(val, "#EE0000", "Reset existing string property");

  // PREF: integer permissions.default.image == 1

  // test to see if an existing integer property exists
  ok(Application.prefs.has(testdata.integer), "Check existing integer property for existence");

  // test accessing a non-existant integer property
  var val = Application.prefs.getValue(testdata.dummy, 0);
  is(val, 0, "Check non-existant integer property for expected value");

  // test accessing an existing integer property
  var val = Application.prefs.getValue(testdata.integer, 0);
  is(val, 1, "Check existing integer property for expected value");

  // test manipulating an existing integer property
  Application.prefs.setValue(testdata.integer, 0);
  var val = Application.prefs.getValue(testdata.integer, 1);
  is(val, 0, "Set existing integer property");

  // test getting the type of an existing integer property
  var type = Application.prefs.get(testdata.integer).type;
  is(type, "Number", "Check 'Application.prefs.get().type' for integer pref");

  // test resetting an existing integer property
  Application.prefs.get(testdata.integer).reset();
  var val = Application.prefs.getValue(testdata.integer, 0);
  is(val, 1, "Reset existing integer property");

  // PREF: boolean browser.underline_anchors == true

  // test to see if an existing boolean property exists
  ok(Application.prefs.has(testdata.boolean), "Check existing boolean property for existence");

  // test accessing a non-existant boolean property
  var val = Application.prefs.getValue(testdata.dummy, true);
  ok(val, "Check non-existant boolean property for expected value");

  // test accessing an existing boolean property
  var val = Application.prefs.getValue(testdata.boolean, false);
  ok(val, "Check existing boolean property for expected value");

  // test manipulating an existing boolean property
  Application.prefs.setValue(testdata.boolean, false);
  var val = Application.prefs.getValue(testdata.boolean, true);
  ok(!val, "Set existing boolean property");

  // test getting the type of an existing boolean property
  var type = Application.prefs.get(testdata.boolean).type;
  is(type, "Boolean", "Check 'Application.prefs.get().type' for boolean pref");

  // test resetting an existing boolean property
  Application.prefs.get(testdata.boolean).reset();
  var val = Application.prefs.getValue(testdata.boolean, false);
  ok(val, "Reset existing string property for expected value");

  // test getting all preferences
  var allPrefs = Application.prefs.all;
  ok(allPrefs.length >= 800, "Check 'Application.prefs.all' for the right number of preferences");
  ok(allPrefs[0].name.length > 0, "Check 'Application.prefs.all' for a valid name in the starting preference");

  // test the value of the preference root
  is(Application.prefs.root, "", "Check the Application preference root");

  // test for user changed preferences
  ok(Application.prefs.get("browser.shell.checkDefaultBrowser").modified, "A single preference is marked as modified.");
  ok(!Application.prefs.get(testdata.string).modified, "A single preference is marked as not modified.");

  // test for a locked preference
  var pref = Application.prefs.get(testdata.string);
  ok(!pref.locked, "A single preference should not be locked.");

  pref.locked = true;
  ok(pref.locked, "A single preference should be locked.");

  try {
    prev.value = "test value";

    ok(false, "A locked preference could be modified.");
  } catch(e){
    ok(true, "A locked preference should not be able to be modified.");
  }

  pref.locked = false;
  ok(!pref.locked, "A single preference is unlocked.");

  // check for change event when setting a value
  waitForExplicitFinish();
  Application.prefs.events.addListener("change", onPrefChange);
  Application.prefs.setValue("fuel.fuel-test", "change event");
}

function onPrefChange(evt) {
  is(evt.data, testdata.dummy, "Check 'Application.prefs.setValue' fired a change event");
  Application.prefs.events.removeListener("change", onPrefChange);

  // We are removing the old listener after adding the new listener so we can test that
  // removing a listener does not remove all listeners
  Application.prefs.get("fuel.fuel-test").events.addListener("change", onPrefChangeDummy);
  Application.prefs.get("fuel.fuel-test").events.addListener("change", onPrefChange2);
  Application.prefs.get("fuel.fuel-test").events.removeListener("change", onPrefChangeDummy);

  Application.prefs.setValue("fuel.fuel-test", "change event2");
}

function onPrefChange2(evt) {
  is(evt.data, testdata.dummy, "Check 'Application.prefs.setValue' fired a change event for a single preference");
  Application.prefs.events.removeListener("change", onPrefChange2);

  finish();
}

function onPrefChangeDummy(evt) {
  ok(false, "onPrefChangeDummy shouldn't be invoked!");
}