| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script> |
| function test() |
| { |
| let suite = InspectorTest.createSyncSuite("Multimap"); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.constructor.Empty", |
| test() { |
| let multimap = new Multimap; |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.constructor.NonEmpty", |
| test() { |
| let multimap = new Multimap([["zero", "one"], ["two", "three"], ["zero", "four"]]); |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.has", |
| test() { |
| let multimap = new Multimap([["zero", "one"], ["two", "three"], ["zero", "four"]]); |
| |
| InspectorTest.expectThat(multimap.has("zero"), "has should return true if a key exists."); |
| InspectorTest.expectThat(multimap.has("zero", "one"), "has should return true if a value exists for an existing key."); |
| InspectorTest.expectFalse(multimap.has("zero", "three"), "has should return false if a value doesn't exist for an existing key."); |
| InspectorTest.expectFalse(multimap.has("one"), "has should return false if a key doesn't exist."); |
| InspectorTest.expectFalse(multimap.has("one", "three"), "has should return false if a key doesn't exist, even if the value exists for a different key."); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.add.RepeatingKeysUniqueValues", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add("zero", "one"); |
| multimap.add("zero", "two"); |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.add.UniqueKeysRepeatingValues", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add("zero", "one"); |
| multimap.add("two", "one"); |
| multimap.add("three", "one"); |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.add.RepeatingKeysRepeatingValues", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add("zero", "one"); |
| multimap.add("two", "one"); |
| multimap.add("zero", "one"); |
| multimap.add("zero", "three"); |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.delete", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add(0, 1); |
| multimap.add(2, 3); |
| multimap.add(2, 4); |
| |
| InspectorTest.log(multimap); |
| |
| InspectorTest.expectThat(multimap.delete(0, 1), "The key 0 and the value 1 were successfully deleted."); |
| |
| InspectorTest.log(multimap); |
| |
| InspectorTest.expectThat(multimap.delete(2, 3), "The key 2 and the value 3 were successfully deleted."); |
| |
| InspectorTest.log(multimap); |
| |
| InspectorTest.expectThat(multimap.delete(2, 4), "The key 2 and the value 4 were successfully deleted."); |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.delete.NonExistingValues", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add(0, 1); |
| multimap.add(2, 3); |
| multimap.add(4, 4); |
| |
| InspectorTest.log(multimap); |
| |
| InspectorTest.expectFalse(multimap.delete(0, 3), "Nothing was removed for key 0 and value 3."); |
| InspectorTest.expectFalse(multimap.delete(0, 4), "Nothing was removed for key 0 and value 4."); |
| InspectorTest.expectFalse(multimap.delete(2, 1), "Nothing was removed for key 2 and value 1."); |
| InspectorTest.expectFalse(multimap.delete(2, 4), "Nothing was removed for key 2 and value 4."); |
| InspectorTest.expectFalse(multimap.delete(4, 1), "Nothing was removed for key 4 and value 1."); |
| InspectorTest.expectFalse(multimap.delete(4, 3), "Nothing was removed for key 4 and value 3."); |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.delete.NonExistingKeys", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add(0, 1); |
| multimap.add(2, 3); |
| multimap.add(4, 4); |
| |
| InspectorTest.log(multimap); |
| |
| InspectorTest.expectFalse(multimap.delete(1), "Nothing was removed for key 1."); |
| InspectorTest.expectFalse(multimap.delete(3), "Nothing was removed for key 3."); |
| InspectorTest.expectFalse(multimap.delete(5), "Nothing was removed for key 5."); |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.delete.AllValuesForKey", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add("opossum", "badger"); |
| multimap.add("opossum", "raccoon"); |
| multimap.add("raccoon", "opossum"); |
| |
| InspectorTest.log(multimap); |
| |
| InspectorTest.expectFalse(multimap.delete("badger"), `Nothing was removed for key "badger".`); |
| |
| InspectorTest.log(multimap); |
| |
| InspectorTest.expectThat(multimap.delete("opossum"), `Values were removed for key "opossum".`); |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.take.SingleKeyAndValue", |
| test() { |
| let multimap = new Multimap; |
| let result; |
| |
| multimap.add(0, 1); |
| multimap.add(2, 3); |
| multimap.add(2, 4); |
| |
| InspectorTest.log(multimap); |
| |
| result = multimap.take(0, 1); |
| InspectorTest.log(result); |
| InspectorTest.expectEqual(result, 1, "The key 0 and the value 1 were taken."); |
| InspectorTest.expectEqual(multimap.size, 1, "Only one key should remain."); |
| |
| InspectorTest.log(multimap); |
| |
| result = multimap.take(5, 1); |
| InspectorTest.log(result); |
| InspectorTest.expectEqual(result, undefined, "Nothing should have been taken."); |
| InspectorTest.expectEqual(multimap.size, 1, "Only one key should remain."); |
| |
| InspectorTest.log(multimap); |
| |
| result = multimap.take(2, 3) |
| InspectorTest.log(result); |
| InspectorTest.expectEqual(result, 3, "The key 2 and the value 3 were taken."); |
| InspectorTest.expectEqual(multimap.size, 1, "Only one key should remain."); |
| |
| InspectorTest.log(multimap); |
| |
| result = multimap.take(2, 4) |
| InspectorTest.log(result); |
| InspectorTest.expectEqual(result, 4, "The key 2 and the value 4 were taken."); |
| InspectorTest.expectEqual(multimap.size, 0, "No more keys should remain."); |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.take.AllValuesForKey", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add("opossum", "badger"); |
| multimap.add("opossum", "raccoon"); |
| multimap.add("raccoon", "opossum"); |
| |
| InspectorTest.log(multimap); |
| InspectorTest.expectFalse(multimap.take("badger"), `Nothing was removed for key "badger".`); |
| |
| InspectorTest.log(multimap); |
| |
| let result = multimap.take("opossum"); |
| InspectorTest.expectEqual(multimap.size, 1, `Only one key should remain.`); |
| InspectorTest.expectEqual(result.size, 2, `Two values from the key "opossum" should be taken.`); |
| InspectorTest.expectThat(result.has("badger"), `Result should include "badger".`); |
| InspectorTest.expectThat(result.has("raccoon"), `Result should include "raccoon".`); |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.clear", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add("one", "two"); |
| multimap.add("three", "four"); |
| multimap.add("one", "five"); |
| multimap.add("three", "six"); |
| |
| InspectorTest.log(multimap); |
| |
| multimap.clear(); |
| |
| InspectorTest.log(multimap); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.keys", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add("one", "two"); |
| multimap.add("three", "four"); |
| multimap.add("one", "five"); |
| multimap.add("three", "six"); |
| |
| InspectorTest.log(multimap); |
| InspectorTest.log(Array.from(multimap.keys())); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.values", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add("one", "two"); |
| multimap.add("three", "four"); |
| multimap.add("one", "five"); |
| multimap.add("three", "six"); |
| |
| InspectorTest.log(multimap); |
| InspectorTest.log(Array.from(multimap.values())); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.sets", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add("one", "two"); |
| multimap.add("three", "four"); |
| multimap.add("one", "five"); |
| multimap.add("three", "six"); |
| |
| InspectorTest.log(multimap); |
| InspectorTest.log(Array.from(multimap.sets()).map(([key, value]) => [key, Array.from(value)])); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "Multimap.prototype.copy", |
| test() { |
| let multimap = new Multimap; |
| |
| multimap.add("one", "two"); |
| multimap.add("three", "four"); |
| |
| InspectorTest.log(multimap); |
| |
| let copy = multimap.copy(); |
| |
| InspectorTest.expectNotEqual(multimap, copy, "Copy should not return the same object.") |
| InspectorTest.expectEqual(JSON.stringify(multimap), JSON.stringify(copy), "Copy should return a deep copy."); |
| |
| multimap.add("five", "six"); |
| |
| InspectorTest.expectNotShallowEqual(multimap, copy, "Modifying the original should not modify the copy."); |
| }, |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Testing all methods of Multimap.</p> |
| </body> |
| </html> |