1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/xpcom/tests/unit/test_nsIMutableArray.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,122 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +const Ci = Components.interfaces; 1.9 +const Cr = Components.results; 1.10 +const Cc = Components.classes; 1.11 +const CC = Components.Constructor; 1.12 + 1.13 +var MutableArray = CC("@mozilla.org/array;1", "nsIMutableArray"); 1.14 +var SupportsString = CC("@mozilla.org/supports-string;1", "nsISupportsString"); 1.15 + 1.16 +function create_n_element_array(n) 1.17 +{ 1.18 + var arr = new MutableArray(); 1.19 + for (let i=0; i<n; i++) { 1.20 + let str = new SupportsString(); 1.21 + str.data = "element " + i; 1.22 + arr.appendElement(str, false); 1.23 + } 1.24 + return arr; 1.25 +} 1.26 + 1.27 +function test_appending_null_actually_inserts() 1.28 +{ 1.29 + var arr = new MutableArray(); 1.30 + do_check_eq(0, arr.length); 1.31 + arr.appendElement(null, false); 1.32 + do_check_eq(1, arr.length); 1.33 +} 1.34 + 1.35 +function test_object_gets_appended() 1.36 +{ 1.37 + var arr = new MutableArray(); 1.38 + var str = new SupportsString(); 1.39 + str.data = "hello"; 1.40 + arr.appendElement(str, false); 1.41 + do_check_eq(1, arr.length); 1.42 + var obj = arr.queryElementAt(0, Ci.nsISupportsString); 1.43 + do_check_eq(str, obj); 1.44 +} 1.45 + 1.46 +function test_insert_at_beginning() 1.47 +{ 1.48 + var arr = create_n_element_array(5); 1.49 + // just a sanity check 1.50 + do_check_eq(5, arr.length); 1.51 + var str = new SupportsString(); 1.52 + str.data = "hello"; 1.53 + arr.insertElementAt(str, 0, false); 1.54 + do_check_eq(6, arr.length); 1.55 + var obj = arr.queryElementAt(0, Ci.nsISupportsString); 1.56 + do_check_eq(str, obj); 1.57 + // check the data of all the other objects 1.58 + for (let i=1; i<arr.length; i++) { 1.59 + let obj = arr.queryElementAt(i, Ci.nsISupportsString); 1.60 + do_check_eq("element " + (i-1), obj.data); 1.61 + } 1.62 +} 1.63 + 1.64 +function test_replace_element() 1.65 +{ 1.66 + var arr = create_n_element_array(5); 1.67 + // just a sanity check 1.68 + do_check_eq(5, arr.length); 1.69 + var str = new SupportsString(); 1.70 + str.data = "hello"; 1.71 + // replace first element 1.72 + arr.replaceElementAt(str, 0, false); 1.73 + do_check_eq(5, arr.length); 1.74 + var obj = arr.queryElementAt(0, Ci.nsISupportsString); 1.75 + do_check_eq(str, obj); 1.76 + // replace last element 1.77 + arr.replaceElementAt(str, arr.length - 1, false); 1.78 + do_check_eq(5, arr.length); 1.79 + obj = arr.queryElementAt(arr.length - 1, Ci.nsISupportsString); 1.80 + do_check_eq(str, obj); 1.81 + // replace after last element, should insert empty elements 1.82 + arr.replaceElementAt(str, 9, false); 1.83 + do_check_eq(10, arr.length); 1.84 + obj = arr.queryElementAt(9, Ci.nsISupportsString); 1.85 + do_check_eq(str, obj); 1.86 + // AFAIK there's no way to check the empty elements, since you can't QI them. 1.87 +} 1.88 + 1.89 +function test_clear() 1.90 +{ 1.91 + var arr = create_n_element_array(5); 1.92 + // just a sanity check 1.93 + do_check_eq(5, arr.length); 1.94 + arr.clear(); 1.95 + do_check_eq(0, arr.length); 1.96 +} 1.97 + 1.98 +function test_enumerate() 1.99 +{ 1.100 + var arr = create_n_element_array(5); 1.101 + do_check_eq(5, arr.length); 1.102 + var en = arr.enumerate(); 1.103 + var i = 0; 1.104 + while (en.hasMoreElements()) { 1.105 + let str = en.getNext(); 1.106 + do_check_true(str instanceof Ci.nsISupportsString); 1.107 + do_check_eq(str.data, "element " + i); 1.108 + i++; 1.109 + } 1.110 + do_check_eq(arr.length, i); 1.111 +} 1.112 + 1.113 +var tests = [ 1.114 + test_appending_null_actually_inserts, 1.115 + test_object_gets_appended, 1.116 + test_insert_at_beginning, 1.117 + test_replace_element, 1.118 + test_clear, 1.119 + test_enumerate, 1.120 +]; 1.121 + 1.122 +function run_test() { 1.123 + for (var i = 0; i < tests.length; i++) 1.124 + tests[i](); 1.125 +}