noflo
Version:
Flow-Based Programming environment for JavaScript
66 lines (63 loc) • 2.08 kB
JavaScript
var IP, chai;
if (typeof process !== 'undefined' && process.execPath && process.execPath.match(/node|iojs/)) {
if (!chai) {
chai = require('chai');
}
IP = require('../src/lib/IP');
} else {
IP = require('noflo/src/lib/IP');
}
describe('IP object', function() {
it('should create IPs of different types', function() {
var close, data, open;
open = new IP('openBracket');
data = new IP('data', "Payload");
close = new IP('closeBracket');
chai.expect(open.type).to.equal('openBracket');
chai.expect(close.type).to.equal('closeBracket');
return chai.expect(data.type).to.equal('data');
});
it('should attach data groups explicitly', function() {
var data;
data = new IP('data', "Payload");
chai.expect(data.groups).to.be.an["instanceof"](Array);
chai.expect(data.groups).to.have.lengthOf(0);
data.groups = ['foo', 'bar'];
return chai.expect(data.groups).to.have.lengthOf(2);
});
it('should be moved to an owner', function() {
var p;
p = new IP('data', "Token");
p.move('SomeProc');
return chai.expect(p.owner).to.equal('SomeProc');
});
it('should support sync context scoping', function() {
var p;
p = new IP('data', "Request-specific");
p.scope = 'request-12345';
return chai.expect(p.scope).to.equal('request-12345');
});
it('should be able to clone itself', function() {
var d1, d2;
d1 = new IP('data', "Trooper", {
groups: ['foo', 'bar'],
owner: 'SomeProc',
scope: 'request-12345',
clonable: true
});
d2 = d1.clone();
chai.expect(d2).not.to.equal(d1);
chai.expect(d2.type).to.equal(d1.type);
chai.expect(d2.data).to.eql(d1.data);
chai.expect(d2.groups).to.eql(d2.groups);
chai.expect(d2.owner).not.to.equal(d1.owner);
return chai.expect(d2.scope).to.equal(d1.scope);
});
return it('should dispose its contents when dropped', function() {
var p;
p = new IP('data', "Garbage");
p.groups = ['foo', 'bar'];
p.drop();
return chai.expect(Object.keys(p)).to.have.lengthOf(0);
});
});