|
|
var utils = require('../lib/utils');
|
|
var assert = require('assert');
|
|
|
|
var mongo;
|
|
try {
|
|
mongo = new require('mongodb');
|
|
} catch (e) {}
|
|
|
|
describe('lib/utils', function() {
|
|
describe('clone', function() {
|
|
it('clones constructors named ObjectId', function(done) {
|
|
function ObjectId (id) {
|
|
this.id = id;
|
|
}
|
|
|
|
var o1 = new ObjectId('1234');
|
|
var o2 = utils.clone(o1);
|
|
assert.ok(o2 instanceof ObjectId);
|
|
|
|
done();
|
|
});
|
|
|
|
it('clones constructors named ObjectID', function(done) {
|
|
function ObjectID (id) {
|
|
this.id = id;
|
|
}
|
|
|
|
var o1 = new ObjectID('1234');
|
|
var o2 = utils.clone(o1);
|
|
|
|
assert.ok(o2 instanceof ObjectID);
|
|
done();
|
|
});
|
|
|
|
it('does not clone constructors named ObjectIdd', function(done) {
|
|
function ObjectIdd (id) {
|
|
this.id = id;
|
|
}
|
|
|
|
var o1 = new ObjectIdd('1234');
|
|
var o2 = utils.clone(o1);
|
|
assert.ok(!(o2 instanceof ObjectIdd));
|
|
|
|
done();
|
|
});
|
|
|
|
it('optionally clones ObjectId constructors using its clone method', function(done) {
|
|
function ObjectID (id) {
|
|
this.id = id;
|
|
this.cloned = false;
|
|
}
|
|
|
|
ObjectID.prototype.clone = function () {
|
|
var ret = new ObjectID(this.id);
|
|
ret.cloned = true;
|
|
return ret;
|
|
}
|
|
|
|
var id = 1234;
|
|
var o1 = new ObjectID(id);
|
|
assert.equal(id, o1.id);
|
|
assert.equal(false, o1.cloned);
|
|
|
|
var o2 = utils.clone(o1);
|
|
assert.ok(o2 instanceof ObjectID);
|
|
assert.equal(id, o2.id);
|
|
assert.ok(o2.cloned);
|
|
done();
|
|
});
|
|
|
|
it('clones mongodb.ReadPreferences', function (done) {
|
|
if (!mongo) return done();
|
|
|
|
var tags = [
|
|
{dc: 'tag1'}
|
|
];
|
|
var prefs = [
|
|
new mongo.ReadPreference("primary"),
|
|
new mongo.ReadPreference(mongo.ReadPreference.PRIMARY_PREFERRED),
|
|
new mongo.ReadPreference("primary", tags),
|
|
mongo.ReadPreference("primary", tags)
|
|
];
|
|
|
|
var prefsCloned = utils.clone(prefs);
|
|
|
|
for (var i = 0; i < prefsCloned.length; i++) {
|
|
assert.notEqual(prefs[i], prefsCloned[i]);
|
|
assert.ok(prefsCloned[i] instanceof mongo.ReadPreference);
|
|
assert.ok(prefsCloned[i].isValid());
|
|
if (prefs[i].tags) {
|
|
assert.ok(prefsCloned[i].tags);
|
|
assert.notEqual(prefs[i].tags, prefsCloned[i].tags);
|
|
assert.notEqual(prefs[i].tags[0], prefsCloned[i].tags[0]);
|
|
} else {
|
|
assert.equal(prefsCloned[i].tags, null);
|
|
}
|
|
}
|
|
|
|
done();
|
|
});
|
|
|
|
it('clones mongodb.Binary', function(done){
|
|
if (!mongo) return done();
|
|
|
|
var buf = new Buffer('hi');
|
|
var binary= new mongo.Binary(buf, 2);
|
|
var clone = utils.clone(binary);
|
|
assert.equal(binary.sub_type, clone.sub_type);
|
|
assert.equal(String(binary.buffer), String(buf));
|
|
assert.ok(binary !== clone);
|
|
done();
|
|
})
|
|
|
|
it('handles objects with no constructor', function(done) {
|
|
var name ='335';
|
|
|
|
var o = Object.create(null);
|
|
o.name = name;
|
|
|
|
var clone;
|
|
assert.doesNotThrow(function() {
|
|
clone = utils.clone(o);
|
|
});
|
|
|
|
assert.equal(name, clone.name);
|
|
assert.ok(o != clone);
|
|
done();
|
|
});
|
|
|
|
it('handles buffers', function(done){
|
|
var buff = new Buffer(10);
|
|
buff.fill(1);
|
|
var clone = utils.clone(buff);
|
|
|
|
for (var i = 0; i < buff.length; i++) {
|
|
assert.equal(buff[i], clone[i]);
|
|
}
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|