163 lines
4.8 KiB
JavaScript
163 lines
4.8 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
const { BiMap } = ChromeUtils.importESModule(
|
|
"chrome://remote/content/shared/BiMap.sys.mjs"
|
|
);
|
|
|
|
add_task(function test_BiMap_constructor() {
|
|
const bimap = new BiMap();
|
|
ok(bimap, "BiMap instance created");
|
|
});
|
|
|
|
add_task(function test_BiMap_clear() {
|
|
const bimap = new BiMap();
|
|
const obj1 = { foo: "bar" };
|
|
const obj2 = { baz: "qux" };
|
|
|
|
const id1 = bimap.getOrInsert(obj1);
|
|
const id2 = bimap.getOrInsert(obj2);
|
|
|
|
ok(bimap.hasId(id1), "First id exists before clear");
|
|
ok(bimap.hasId(id2), "Second id exists before clear");
|
|
|
|
bimap.clear();
|
|
|
|
ok(!bimap.hasId(id1), "First id removed after clear");
|
|
ok(!bimap.hasId(id2), "Second id removed after clear");
|
|
ok(!bimap.hasObject(obj1), "First object removed after clear");
|
|
ok(!bimap.hasObject(obj2), "Second object removed after clear");
|
|
});
|
|
|
|
add_task(function test_BiMap_getOrInsert() {
|
|
const bimap = new BiMap();
|
|
const obj = { foo: "bar" };
|
|
|
|
const regExpUUID = new RegExp(
|
|
/^[a-f|0-9]{8}-[a-f|0-9]{4}-[a-f|0-9]{4}-[a-f|0-9]{4}-[a-f|0-9]{12}$/g
|
|
);
|
|
|
|
const id = bimap.getOrInsert(obj);
|
|
|
|
ok(regExpUUID.test(id), "Returned a valid UUID");
|
|
equal(bimap.getId(obj), id, "Object is mapped to the id");
|
|
equal(bimap.getObject(id), obj, "Id is mapped to the object");
|
|
});
|
|
|
|
add_task(function test_BiMap_multipleMappings() {
|
|
const bimap = new BiMap();
|
|
const obj1 = { name: "first" };
|
|
const obj2 = { name: "second" };
|
|
const obj3 = { name: "third" };
|
|
|
|
const id1 = bimap.getOrInsert(obj1);
|
|
const id2 = bimap.getOrInsert(obj2);
|
|
const id3 = bimap.getOrInsert(obj3);
|
|
|
|
equal(bimap.getId(obj1), id1, "First mapping correct");
|
|
equal(bimap.getId(obj2), id2, "Second mapping correct");
|
|
equal(bimap.getId(obj3), id3, "Third mapping correct");
|
|
|
|
equal(bimap.getObject(id1), obj1, "First reverse mapping correct");
|
|
equal(bimap.getObject(id2), obj2, "Second reverse mapping correct");
|
|
equal(bimap.getObject(id3), obj3, "Third reverse mapping correct");
|
|
});
|
|
|
|
add_task(function test_BiMap_getId() {
|
|
const bimap = new BiMap();
|
|
const obj = { foo: "bar" };
|
|
|
|
equal(bimap.getId(obj), undefined, "Returns undefined for unknown object");
|
|
|
|
const id = bimap.getOrInsert(obj);
|
|
|
|
equal(bimap.getId(obj), id, "Retrieved correct id for object");
|
|
});
|
|
|
|
add_task(function test_BiMap_getObject() {
|
|
const bimap = new BiMap();
|
|
const obj = { foo: "bar" };
|
|
|
|
equal(
|
|
bimap.getObject("unknown-id"),
|
|
undefined,
|
|
"Returns undefined for unknown id"
|
|
);
|
|
|
|
const id = bimap.getOrInsert(obj);
|
|
|
|
equal(bimap.getObject(id), obj, "Retrieved correct object for id");
|
|
});
|
|
|
|
add_task(function test_BiMap_hasId() {
|
|
const bimap = new BiMap();
|
|
const obj = { foo: "bar" };
|
|
|
|
const id = bimap.getOrInsert(obj);
|
|
|
|
ok(!bimap.hasId("unknown-id"), "Returns false for unknown id");
|
|
ok(bimap.hasId(id), "Returns true for existing id");
|
|
});
|
|
|
|
add_task(function test_BiMap_hasObject() {
|
|
const bimap = new BiMap();
|
|
const obj = { foo: "bar" };
|
|
const otherObj = { baz: "qux" };
|
|
|
|
ok(!bimap.hasObject(otherObj), "Returns false for non-existing object");
|
|
|
|
bimap.getOrInsert(obj);
|
|
|
|
ok(bimap.hasObject(obj), "Returns true for existing object");
|
|
});
|
|
|
|
add_task(function test_BiMap_deleteById() {
|
|
const bimap = new BiMap();
|
|
const obj = { foo: "bar" };
|
|
|
|
const id = bimap.getOrInsert(obj);
|
|
|
|
ok(bimap.hasId(id), "Id exists before deletion");
|
|
ok(bimap.hasObject(obj), "Object exists before deletion");
|
|
|
|
// Deleting non-existing id should not affect existing mappings.
|
|
bimap.deleteById("unknown-id");
|
|
|
|
ok(bimap.hasId(id), "Existing id still present");
|
|
ok(bimap.hasObject(obj), "Existing object still present");
|
|
|
|
// Delete existing id.
|
|
bimap.deleteById(id);
|
|
|
|
ok(!bimap.hasId(id), "Id removed after deletion");
|
|
ok(!bimap.hasObject(obj), "Object removed after deletion");
|
|
equal(bimap.getId(obj), undefined, "Object no longer maps to id");
|
|
equal(bimap.getObject(id), undefined, "Id no longer maps to object");
|
|
});
|
|
|
|
add_task(function test_BiMap_deleteByObject() {
|
|
const bimap = new BiMap();
|
|
const obj = { foo: "bar" };
|
|
const otherObj = { baz: "qux" };
|
|
|
|
const id = bimap.getOrInsert(obj);
|
|
|
|
ok(bimap.hasId(id), "Id exists before deletion");
|
|
ok(bimap.hasObject(obj), "Object exists before deletion");
|
|
|
|
// Deleting non-existing object should not affect existing mappings.
|
|
bimap.deleteByObject(otherObj);
|
|
|
|
ok(bimap.hasId(id), "Existing id still present");
|
|
ok(bimap.hasObject(obj), "Existing object still present");
|
|
|
|
// Delete existing object.
|
|
bimap.deleteByObject(obj);
|
|
|
|
ok(!bimap.hasId(id), "Id removed after deletion");
|
|
ok(!bimap.hasObject(obj), "Object removed after deletion");
|
|
equal(bimap.getId(obj), undefined, "Object no longer maps to id");
|
|
equal(bimap.getObject(id), undefined, "Id no longer maps to object");
|
|
});
|