|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 const Ci = Components.interfaces; |
|
6 const Cr = Components.results; |
|
7 const Cc = Components.classes; |
|
8 const CC = Components.Constructor; |
|
9 |
|
10 var MutableArray = CC("@mozilla.org/array;1", "nsIMutableArray"); |
|
11 var SupportsString = CC("@mozilla.org/supports-string;1", "nsISupportsString"); |
|
12 |
|
13 function create_n_element_array(n) |
|
14 { |
|
15 var arr = new MutableArray(); |
|
16 for (let i=0; i<n; i++) { |
|
17 let str = new SupportsString(); |
|
18 str.data = "element " + i; |
|
19 arr.appendElement(str, false); |
|
20 } |
|
21 return arr; |
|
22 } |
|
23 |
|
24 function test_appending_null_actually_inserts() |
|
25 { |
|
26 var arr = new MutableArray(); |
|
27 do_check_eq(0, arr.length); |
|
28 arr.appendElement(null, false); |
|
29 do_check_eq(1, arr.length); |
|
30 } |
|
31 |
|
32 function test_object_gets_appended() |
|
33 { |
|
34 var arr = new MutableArray(); |
|
35 var str = new SupportsString(); |
|
36 str.data = "hello"; |
|
37 arr.appendElement(str, false); |
|
38 do_check_eq(1, arr.length); |
|
39 var obj = arr.queryElementAt(0, Ci.nsISupportsString); |
|
40 do_check_eq(str, obj); |
|
41 } |
|
42 |
|
43 function test_insert_at_beginning() |
|
44 { |
|
45 var arr = create_n_element_array(5); |
|
46 // just a sanity check |
|
47 do_check_eq(5, arr.length); |
|
48 var str = new SupportsString(); |
|
49 str.data = "hello"; |
|
50 arr.insertElementAt(str, 0, false); |
|
51 do_check_eq(6, arr.length); |
|
52 var obj = arr.queryElementAt(0, Ci.nsISupportsString); |
|
53 do_check_eq(str, obj); |
|
54 // check the data of all the other objects |
|
55 for (let i=1; i<arr.length; i++) { |
|
56 let obj = arr.queryElementAt(i, Ci.nsISupportsString); |
|
57 do_check_eq("element " + (i-1), obj.data); |
|
58 } |
|
59 } |
|
60 |
|
61 function test_replace_element() |
|
62 { |
|
63 var arr = create_n_element_array(5); |
|
64 // just a sanity check |
|
65 do_check_eq(5, arr.length); |
|
66 var str = new SupportsString(); |
|
67 str.data = "hello"; |
|
68 // replace first element |
|
69 arr.replaceElementAt(str, 0, false); |
|
70 do_check_eq(5, arr.length); |
|
71 var obj = arr.queryElementAt(0, Ci.nsISupportsString); |
|
72 do_check_eq(str, obj); |
|
73 // replace last element |
|
74 arr.replaceElementAt(str, arr.length - 1, false); |
|
75 do_check_eq(5, arr.length); |
|
76 obj = arr.queryElementAt(arr.length - 1, Ci.nsISupportsString); |
|
77 do_check_eq(str, obj); |
|
78 // replace after last element, should insert empty elements |
|
79 arr.replaceElementAt(str, 9, false); |
|
80 do_check_eq(10, arr.length); |
|
81 obj = arr.queryElementAt(9, Ci.nsISupportsString); |
|
82 do_check_eq(str, obj); |
|
83 // AFAIK there's no way to check the empty elements, since you can't QI them. |
|
84 } |
|
85 |
|
86 function test_clear() |
|
87 { |
|
88 var arr = create_n_element_array(5); |
|
89 // just a sanity check |
|
90 do_check_eq(5, arr.length); |
|
91 arr.clear(); |
|
92 do_check_eq(0, arr.length); |
|
93 } |
|
94 |
|
95 function test_enumerate() |
|
96 { |
|
97 var arr = create_n_element_array(5); |
|
98 do_check_eq(5, arr.length); |
|
99 var en = arr.enumerate(); |
|
100 var i = 0; |
|
101 while (en.hasMoreElements()) { |
|
102 let str = en.getNext(); |
|
103 do_check_true(str instanceof Ci.nsISupportsString); |
|
104 do_check_eq(str.data, "element " + i); |
|
105 i++; |
|
106 } |
|
107 do_check_eq(arr.length, i); |
|
108 } |
|
109 |
|
110 var tests = [ |
|
111 test_appending_null_actually_inserts, |
|
112 test_object_gets_appended, |
|
113 test_insert_at_beginning, |
|
114 test_replace_element, |
|
115 test_clear, |
|
116 test_enumerate, |
|
117 ]; |
|
118 |
|
119 function run_test() { |
|
120 for (var i = 0; i < tests.length; i++) |
|
121 tests[i](); |
|
122 } |