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
|
"use strict";
const CASCADE_CID = "@mozilla.org/cascade-filter;1";
const CASCADE_IID = Ci.nsICascadeFilter;
const CascadeFilter = Components.Constructor(CASCADE_CID, CASCADE_IID);
add_task(function CascadeFilter_uninitialized() {
let filter = new CascadeFilter();
Assert.throws(
() => filter.has(""),
e => e.result === Cr.NS_ERROR_NOT_INITIALIZED,
"Cannot use has() if the filter is not initialized"
);
});
add_task(function CascadeFilter_with_setFilterData() {
let filter = new CascadeFilter();
Assert.throws(
() => filter.setFilterData(),
e => e.result === Cr.NS_ERROR_XPC_NOT_ENOUGH_ARGS,
"setFilterData without parameters should throw"
);
Assert.throws(
() => filter.setFilterData(null),
e => e.result === Cr.NS_ERROR_XPC_CANT_CONVERT_PRIMITIVE_TO_ARRAY,
"setFilterData with null parameter is invalid"
);
Assert.throws(
() => filter.setFilterData(new Uint8Array()),
e => e.result === Cr.NS_ERROR_INVALID_ARG,
"setFilterData with empty array is invalid"
);
// Test data based on rust_cascade's unit tests (bloom_v1_test_from_bytes),
// with two bytes in front to have a valid format.
const TEST_DATA = [1, 0, 1, 9, 0, 0, 0, 1, 0, 0, 0, 1, 0x41, 0];
Assert.throws(
() => filter.setFilterData(new Uint8Array(TEST_DATA.slice(1))),
e => e.result === Cr.NS_ERROR_INVALID_ARG,
"setFilterData with invalid data (missing head) is invalid"
);
Assert.throws(
() => filter.setFilterData(new Uint8Array(TEST_DATA.slice(0, -1))),
e => e.result === Cr.NS_ERROR_INVALID_ARG,
"setFilterData with invalid data (missing tail) is invalid"
);
filter.setFilterData(new Uint8Array(TEST_DATA));
Assert.equal(filter.has("this"), true, "has(this) should be true");
Assert.equal(filter.has("that"), true, "has(that) should be true");
Assert.equal(filter.has("other"), false, "has(other) should be false");
});
|