2013-02-10 02:42:04 +04:00
|
|
|
var vows = require("vows"),
|
2013-03-15 02:14:12 +04:00
|
|
|
_ = require("../../"),
|
2013-03-14 06:10:53 +04:00
|
|
|
load = require("../load"),
|
2013-02-10 02:42:04 +04:00
|
|
|
assert = require("assert");
|
|
|
|
|
|
|
|
var suite = vows.describe("d3.set");
|
|
|
|
|
|
|
|
suite.addBatch({
|
2013-03-14 06:10:53 +04:00
|
|
|
"set": {
|
2013-03-14 20:00:13 +04:00
|
|
|
topic: load("arrays/set").expression("d3.set"),
|
2013-03-14 06:10:53 +04:00
|
|
|
"constructor": {
|
2013-03-14 20:00:13 +04:00
|
|
|
"set() returns an empty set": function(set) {
|
|
|
|
var s = set();
|
|
|
|
assert.deepEqual(s.values(), []);
|
2013-03-14 06:10:53 +04:00
|
|
|
},
|
2013-03-14 20:00:13 +04:00
|
|
|
"set(null) returns an empty set": function(set) {
|
|
|
|
var s = set(null);
|
|
|
|
assert.deepEqual(s.values(), []);
|
2013-03-14 06:10:53 +04:00
|
|
|
},
|
2013-03-14 20:00:13 +04:00
|
|
|
"set(array) adds array entries": function(set) {
|
|
|
|
var s = set(["foo"]);
|
|
|
|
assert.isTrue(s.has("foo"));
|
|
|
|
var s = set(["foo", "bar"]);
|
|
|
|
assert.isTrue(s.has("foo"));
|
|
|
|
assert.isTrue(s.has("bar"));
|
2013-03-14 06:10:53 +04:00
|
|
|
}
|
2013-02-10 02:42:04 +04:00
|
|
|
},
|
2013-03-14 06:10:53 +04:00
|
|
|
"forEach": {
|
2013-03-14 20:00:13 +04:00
|
|
|
"empty sets have an empty values array": function(set) {
|
|
|
|
var s = set();
|
|
|
|
assert.deepEqual(s.values(), []);
|
|
|
|
s.add("foo");
|
|
|
|
assert.deepEqual(s.values(), ["foo"]);
|
|
|
|
s.remove("foo");
|
|
|
|
assert.deepEqual(s.values(), []);
|
2013-03-14 06:10:53 +04:00
|
|
|
},
|
2013-03-14 20:00:13 +04:00
|
|
|
"values are returned in arbitrary order": function(set) {
|
|
|
|
var s = set(["foo", "bar"]);
|
2013-03-15 02:14:12 +04:00
|
|
|
assert.deepEqual(s.values().sort(_.ascending), ["bar", "foo"]);
|
2013-03-14 20:00:13 +04:00
|
|
|
var s = set(["bar", "foo"]);
|
2013-03-15 02:14:12 +04:00
|
|
|
assert.deepEqual(s.values().sort(_.ascending), ["bar", "foo"]);
|
2013-03-14 06:10:53 +04:00
|
|
|
},
|
2013-03-14 20:00:13 +04:00
|
|
|
"observes changes via add and remove": function(set) {
|
|
|
|
var s = set(["foo", "bar"]);
|
2013-03-15 02:14:12 +04:00
|
|
|
assert.deepEqual(s.values().sort(_.ascending), ["bar", "foo"]);
|
2013-03-14 20:00:13 +04:00
|
|
|
s.remove("foo");
|
|
|
|
assert.deepEqual(s.values(), ["bar"]);
|
|
|
|
s.add("bar");
|
|
|
|
assert.deepEqual(s.values(), ["bar"]);
|
|
|
|
s.add("foo");
|
2013-03-15 02:14:12 +04:00
|
|
|
assert.deepEqual(s.values().sort(_.ascending), ["bar", "foo"]);
|
2013-03-14 20:00:13 +04:00
|
|
|
s.remove("bar");
|
|
|
|
assert.deepEqual(s.values(), ["foo"]);
|
|
|
|
s.remove("foo");
|
|
|
|
assert.deepEqual(s.values(), []);
|
|
|
|
s.remove("foo");
|
|
|
|
assert.deepEqual(s.values(), []);
|
2013-03-14 06:10:53 +04:00
|
|
|
}
|
2013-02-10 02:42:04 +04:00
|
|
|
},
|
2013-03-14 06:10:53 +04:00
|
|
|
"values": {
|
2013-03-14 20:00:13 +04:00
|
|
|
"returns an array of string values": function(set) {
|
|
|
|
var s = set(["foo", "bar"]);
|
|
|
|
assert.deepEqual(s.values().sort(), ["bar", "foo"]);
|
2013-03-14 06:10:53 +04:00
|
|
|
}
|
2013-02-10 02:42:04 +04:00
|
|
|
},
|
2013-03-14 06:10:53 +04:00
|
|
|
"has": {
|
2013-03-14 20:00:13 +04:00
|
|
|
"empty sets do not have object built-ins": function(set) {
|
|
|
|
var s = set();
|
|
|
|
assert.isFalse(s.has("__proto__"));
|
|
|
|
assert.isFalse(s.has("hasOwnProperty"));
|
2013-03-14 06:10:53 +04:00
|
|
|
},
|
2013-03-14 20:00:13 +04:00
|
|
|
"coerces values to strings": function(set) {
|
|
|
|
var s = set(["42", "null", "undefined"]);
|
|
|
|
assert.isTrue(s.has(42));
|
|
|
|
assert.isTrue(s.has(null));
|
|
|
|
assert.isTrue(s.has(undefined));
|
2013-03-14 06:10:53 +04:00
|
|
|
},
|
2013-03-14 20:00:13 +04:00
|
|
|
"observes changes via add and remove": function(set) {
|
|
|
|
var s = set(["foo"]);
|
|
|
|
assert.isTrue(s.has("foo"));
|
|
|
|
s.add("foo");
|
|
|
|
assert.isTrue(s.has("foo"));
|
|
|
|
s.remove("foo");
|
|
|
|
assert.isFalse(s.has("foo"));
|
|
|
|
s.add("foo");
|
|
|
|
assert.isTrue(s.has("foo"));
|
2013-03-14 06:10:53 +04:00
|
|
|
},
|
2013-03-14 20:00:13 +04:00
|
|
|
"returns undefined for missing values": function(set) {
|
|
|
|
var s = set(["foo"]);
|
|
|
|
assert.isFalse(s.has("bar"));
|
2013-03-14 06:10:53 +04:00
|
|
|
}
|
2013-02-10 02:42:04 +04:00
|
|
|
},
|
2013-03-14 06:10:53 +04:00
|
|
|
"add": {
|
2013-03-14 20:00:13 +04:00
|
|
|
"returns the set value": function(set) {
|
|
|
|
var s = set();
|
|
|
|
assert.equal(s.add("foo"), "foo");
|
2013-03-14 06:10:53 +04:00
|
|
|
},
|
2013-03-14 20:00:13 +04:00
|
|
|
"can add values using built-in names": function(set) {
|
|
|
|
var s = set();
|
|
|
|
s.add("__proto__");
|
|
|
|
assert.isTrue(s.has("__proto__"));
|
2013-03-14 06:10:53 +04:00
|
|
|
},
|
2013-03-14 20:00:13 +04:00
|
|
|
"coerces values to strings": function(set) {
|
|
|
|
var s = set();
|
|
|
|
s.add(42);
|
|
|
|
assert.isTrue(s.has(42));
|
|
|
|
s.add(null);
|
|
|
|
assert.isTrue(s.has(null));
|
|
|
|
s.add(undefined);
|
|
|
|
assert.isTrue(s.has(undefined));
|
|
|
|
assert.deepEqual(s.values().sort(), ["42", "null", "undefined"]);
|
2013-03-14 06:10:53 +04:00
|
|
|
},
|
2013-03-14 20:00:13 +04:00
|
|
|
"can add null, undefined or empty string values": function(set) {
|
|
|
|
var s = set();
|
|
|
|
s.add("");
|
|
|
|
s.add("null");
|
|
|
|
s.add("undefined");
|
|
|
|
assert.isTrue(s.has(""));
|
|
|
|
assert.isTrue(s.has("null"));
|
|
|
|
assert.isTrue(s.has("undefined"));
|
2013-03-14 06:10:53 +04:00
|
|
|
}
|
2013-02-10 02:42:04 +04:00
|
|
|
},
|
2013-03-14 06:10:53 +04:00
|
|
|
"remove": {
|
2013-03-14 20:00:13 +04:00
|
|
|
"returns true if the value was removed": function(set) {
|
|
|
|
var s = set(["foo"]);
|
|
|
|
assert.isTrue(s.remove("foo"));
|
2013-03-14 06:10:53 +04:00
|
|
|
},
|
2013-03-14 20:00:13 +04:00
|
|
|
"returns false if the value is not an element": function(set) {
|
|
|
|
var s = set();
|
|
|
|
assert.isFalse(s.remove("foo"));
|
2013-03-14 06:10:53 +04:00
|
|
|
}
|
2013-02-10 02:42:04 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
suite.export(module);
|