Added tests for some of the SLMessage utilities
This commit is contained in:
175
test/slmessage.spec.js
Normal file
175
test/slmessage.spec.js
Normal file
@ -0,0 +1,175 @@
|
||||
'use strict';
|
||||
|
||||
const SLMessage = require('../messages/SLMessage.js').SLMessage;
|
||||
const assert = require('assert');
|
||||
|
||||
function slMessageLen(str) {
|
||||
// strings have length prefixed on them as an int32 for an additional 4b.
|
||||
// strings are dword aligned, so if str.length is 21, dword alignment pushes it up to 24
|
||||
return 4 + str.length + SLMessage.slackForAlignment(str.length);
|
||||
}
|
||||
|
||||
describe('SLMessage utilities', () => {
|
||||
// message header = senderId, messageId, bodyLen.
|
||||
// senderId and messageId are int16's, so 2b each. bodyLen is an int32, so 4b. total 8b.
|
||||
let msgHeaderLen = 8;
|
||||
|
||||
it('sets senderId and messageId properly', function() {
|
||||
{
|
||||
let msg = new SLMessage(123, 456);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.strictEqual(decodedMsg.senderId, 123);
|
||||
assert.strictEqual(decodedMsg.messageId, 456);
|
||||
assert.strictEqual(decodedMsg.dataLength, 0);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage(0, 65534);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.strictEqual(decodedMsg.senderId, 0);
|
||||
assert.strictEqual(decodedMsg.messageId, 65534);
|
||||
assert.strictEqual(decodedMsg.dataLength, 0);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage();
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.strictEqual(decodedMsg.senderId, 0);
|
||||
assert.strictEqual(decodedMsg.messageId, 0);
|
||||
assert.strictEqual(decodedMsg.dataLength, 0);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage(123);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.strictEqual(decodedMsg.senderId, 123);
|
||||
assert.strictEqual(decodedMsg.messageId, 0);
|
||||
assert.strictEqual(decodedMsg.dataLength, 0);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage(0);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.strictEqual(decodedMsg.senderId, 0);
|
||||
assert.strictEqual(decodedMsg.messageId, 0);
|
||||
assert.strictEqual(decodedMsg.dataLength, 0);
|
||||
}
|
||||
});
|
||||
|
||||
it('encodes and decodes SLStrings', function() {
|
||||
{
|
||||
let msg = new SLMessage();
|
||||
let testStr = 'this is a test string';
|
||||
msg.writeSLString(testStr);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.strictEqual(decodedMsg.readSLString(), testStr, 'did not receive serialized message properly');
|
||||
assert.strictEqual(SLMessage.slackForAlignment(testStr.length), 3);
|
||||
// SLString byte length = 4 + 21 + 3 = 28b
|
||||
assert.strictEqual(slMessageLen(testStr),
|
||||
4 + testStr.length + SLMessage.slackForAlignment(testStr.length));
|
||||
assert.strictEqual(decodedMsg.readOffset, msgHeaderLen + slMessageLen(testStr), 'read offset was invalid');
|
||||
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage();
|
||||
let testStr = '1';
|
||||
msg.writeSLString(testStr);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.strictEqual(decodedMsg.readSLString(), testStr, 'did not receive serialized message properly');
|
||||
assert.strictEqual(SLMessage.slackForAlignment(testStr.length), 3);
|
||||
assert.strictEqual(decodedMsg.readOffset, msgHeaderLen + slMessageLen(testStr), 'read offset was invalid');
|
||||
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage();
|
||||
let testStr = '12';
|
||||
msg.writeSLString(testStr);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.strictEqual(decodedMsg.readSLString(), testStr, 'did not receive serialized message properly');
|
||||
assert.strictEqual(SLMessage.slackForAlignment(testStr.length), 2);
|
||||
assert.strictEqual(decodedMsg.readOffset, msgHeaderLen + slMessageLen(testStr), 'read offset was invalid');
|
||||
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage();
|
||||
let testStr = '123';
|
||||
msg.writeSLString(testStr);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.strictEqual(decodedMsg.readSLString(), testStr, 'did not receive serialized message properly');
|
||||
assert.strictEqual(SLMessage.slackForAlignment(testStr.length), 1);
|
||||
assert.strictEqual(decodedMsg.readOffset, msgHeaderLen + slMessageLen(testStr), 'read offset was invalid');
|
||||
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage();
|
||||
let testStr = '1234';
|
||||
msg.writeSLString(testStr);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.strictEqual(decodedMsg.readSLString(), testStr, 'did not receive serialized message properly');
|
||||
assert.strictEqual(SLMessage.slackForAlignment(testStr.length), 0);
|
||||
assert.strictEqual(decodedMsg.readOffset, msgHeaderLen + slMessageLen(testStr), 'read offset was invalid');
|
||||
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
||||
}
|
||||
});
|
||||
|
||||
it('encodes and decodes SLArrays', function() {
|
||||
{
|
||||
let msg = new SLMessage();
|
||||
let list = [];
|
||||
msg.writeSLArray(list);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.deepStrictEqual(decodedMsg.readSLArray(), list);
|
||||
assert.strictEqual(SLMessage.slackForAlignment(list.length), 0);
|
||||
assert.strictEqual(decodedMsg.readOffset, msgHeaderLen + slMessageLen(list), 'read offset was invalid');
|
||||
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage();
|
||||
let list = [1];
|
||||
msg.writeSLArray(list);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.deepStrictEqual(decodedMsg.readSLArray(), list);
|
||||
assert.strictEqual(SLMessage.slackForAlignment(list.length), 3);
|
||||
assert.strictEqual(decodedMsg.readOffset, msgHeaderLen + slMessageLen(list), 'read offset was invalid');
|
||||
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage();
|
||||
let list = [1, 2];
|
||||
msg.writeSLArray(list);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.deepStrictEqual(decodedMsg.readSLArray(), list);
|
||||
assert.strictEqual(SLMessage.slackForAlignment(list.length), 2);
|
||||
assert.strictEqual(decodedMsg.readOffset, msgHeaderLen + slMessageLen(list), 'read offset was invalid');
|
||||
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage();
|
||||
let list = [1, 2, 3];
|
||||
msg.writeSLArray(list);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.deepStrictEqual(decodedMsg.readSLArray(), list);
|
||||
assert.strictEqual(SLMessage.slackForAlignment(list.length), 1);
|
||||
assert.strictEqual(decodedMsg.readOffset, msgHeaderLen + slMessageLen(list), 'read offset was invalid');
|
||||
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
||||
}
|
||||
|
||||
{
|
||||
let msg = new SLMessage();
|
||||
let list = [1, 2, 3, 4];
|
||||
msg.writeSLArray(list);
|
||||
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||
assert.deepStrictEqual(decodedMsg.readSLArray(), list);
|
||||
assert.strictEqual(SLMessage.slackForAlignment(list.length), 0);
|
||||
assert.strictEqual(decodedMsg.readOffset, msgHeaderLen + slMessageLen(list), 'read offset was invalid');
|
||||
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
||||
}
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user