%PDF- %PDF-
| Direktori : /proc/self/root/home/infra/fusioninventory/lib/lazy.js-0.5.1/spec/ |
| Current File : //proc/self/root/home/infra/fusioninventory/lib/lazy.js-0.5.1/spec/uniq_spec.js |
describe("uniq", function() {
ensureLaziness(function() { Lazy(people).map(Person.getGender).uniq(); });
it("only returns 1 of each unique value", function() {
var genders = Lazy(people).map(Person.getGender).uniq().toArray();
expect(genders).toEqual(["M", "F"]);
});
it("does not mistakenly combine distinct values w/ identical string representations", function() {
var source = [1, 1, "1", "1", { toString: function() { return "1"; } }];
var results = Lazy(source).uniq().toArray();
// Not really sure how to test equality of an object w/ a function, so...
expect(results.length).toEqual(3);
expect(results.slice(0, 2)).toEqual([1, "1"]);
expect(typeof results[2].toString).toBe("function");
});
it("does not override methods on Set, screwing up everything", function() {
var results = Lazy(["__proto__", "constructor", "add", "contains"]).uniq().toArray();
expect(results).toEqual(["__proto__", "constructor", "add", "contains"]);
});
it("correctly distinguishes between distinct objects with the same string representation", function() {
var objects, x, y;
objects = [
x = { toString: function() { return "foo"; } },
y = { toString: function() { return "foo"; } }
];
expect(Lazy(objects).uniq().toArray()).toEqual([x, y]);
});
it("distinguishes between booleans, null, and undefined and their string equivalents", function() {
var source = [true, false, null, undefined, "true", "false", "null", "undefined"];
var results = Lazy(source).uniq().toArray();
expect(results).toEqual(source);
});
it("does not conflate a string w/ its prefixed self", function() {
var results = Lazy(["foo", "@foo"]).uniq().toArray();
expect(results).toEqual(["foo", "@foo"]);
});
it("passes an index along with each element", function() {
expect(Lazy([10, 5, 5, 5, 8, 8]).uniq()).toPassToEach(1, [0, 1, 2]);
});
it("correctly selects unique elements for medium-sized (~300 elements) collections", function() {
var medium = Lazy.range(150).toArray();
var result = Lazy(medium.concat(medium)).uniq().toArray()
expect(result).toEqual(medium);
});
it("correctly selects unique elements for large (>= 800 elements) collections", function() {
var large = Lazy.range(500).toArray();
var result = Lazy(large.concat(large)).uniq().toArray();
expect(result).toEqual(large);
});
testAllSequenceTypes(
"accepts an optional key function to perform equality comparisons by key",
[{ x: 1, y: 2 }, { x: 1, y: 2 }],
function(sequence) {
var selector = function(obj) { return obj.x; };
expect(sequence.uniq(selector)).toComprise([{ x: 1, y: 2 }]);
}
);
testAllSequenceTypes(
"supports a 'pluck'-style callback when a string is passed instead of a function",
[{ x: 1, y: 2 }, { x: 1, y: 2 }],
function(sequence) {
expect(sequence.uniq('x')).toComprise([{ x: 1, y: 2 }]);
}
);
});