Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
139
gaia/tests/jsmarionette/client/json-wire-protocol/test/index-test.js
Executable file
139
gaia/tests/jsmarionette/client/json-wire-protocol/test/index-test.js
Executable file
|
|
@ -0,0 +1,139 @@
|
|||
'use strict';
|
||||
var assert = require('assert');
|
||||
var jsonWireProtocol = require('../');
|
||||
|
||||
suite('json wire protocol', function() {
|
||||
var subject;
|
||||
var TWO_BYTE = 'ž';
|
||||
|
||||
function createBytes(content) {
|
||||
return new Buffer(content);
|
||||
}
|
||||
|
||||
test('.separator', function() {
|
||||
assert.ok(jsonWireProtocol.separator);
|
||||
});
|
||||
|
||||
suite('#stringify', function() {
|
||||
test('ASCII only', function() {
|
||||
var input = { a: 'abcdefg' };
|
||||
var expected = JSON.stringify(input);
|
||||
|
||||
expected = expected.length + ':' + expected;
|
||||
var output = jsonWireProtocol.stringify(input);
|
||||
|
||||
assert.deepEqual(expected, output);
|
||||
});
|
||||
|
||||
test('invalid strings', function() {
|
||||
var invalid = 'xfoobar!';
|
||||
|
||||
assert.throws(function() {
|
||||
jsonWireProtocol.parse(invalid);
|
||||
});
|
||||
});
|
||||
|
||||
test('with multibyte chars', function() {
|
||||
var input = { a: TWO_BYTE + TWO_BYTE + TWO_BYTE };
|
||||
var expected = JSON.stringify(input);
|
||||
|
||||
expected = '14:' + expected;
|
||||
assert.deepEqual(jsonWireProtocol.stringify(input), expected);
|
||||
});
|
||||
});
|
||||
|
||||
suite('#parse', function() {
|
||||
test('working string', function() {
|
||||
var input = { woot: TWO_BYTE };
|
||||
var string = jsonWireProtocol.stringify(input);
|
||||
assert.deepEqual(
|
||||
input,
|
||||
jsonWireProtocol.parse(createBytes(string))
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
suite('.Stream', function() {
|
||||
setup(function() {
|
||||
subject = new jsonWireProtocol.Stream();
|
||||
});
|
||||
|
||||
suite('#write', function() {
|
||||
|
||||
suite('multiple commands over two buffers', function() {
|
||||
var commandA = { a: 'cool' };
|
||||
var commandB = { b: 'woot' };
|
||||
var commandC = { c: 'wtfman' };
|
||||
var commandD = { d: TWO_BYTE };
|
||||
|
||||
var all = [
|
||||
commandA,
|
||||
commandB,
|
||||
commandC
|
||||
]
|
||||
.map(jsonWireProtocol.stringify)
|
||||
.join('');
|
||||
var half = all.length / 2;
|
||||
|
||||
var bufferA = createBytes(all.slice(0, half));
|
||||
var bufferB = createBytes(all.slice(half) +
|
||||
jsonWireProtocol.stringify(commandD));
|
||||
|
||||
var parsed;
|
||||
|
||||
setup(function() {
|
||||
parsed = [];
|
||||
|
||||
subject.on('data', function(result) {
|
||||
parsed.push(result);
|
||||
});
|
||||
|
||||
subject.write(bufferA);
|
||||
subject.write(bufferB);
|
||||
});
|
||||
|
||||
test('result after writing to stream', function() {
|
||||
assert.deepEqual(
|
||||
parsed,
|
||||
[commandA, commandB, commandC, commandD]
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
test('multiple chunks until length', function(done) {
|
||||
var expected = { longer: TWO_BYTE + 'a' + TWO_BYTE };
|
||||
var string = jsonWireProtocol.stringify(expected);
|
||||
|
||||
subject.on('data', function(result) {
|
||||
assert.deepEqual(result, expected);
|
||||
done();
|
||||
});
|
||||
|
||||
for (var i = 0; i < string.length; i++) {
|
||||
subject.write(createBytes(string[i]));
|
||||
}
|
||||
});
|
||||
|
||||
suite('entire buffer', function() {
|
||||
var buffer;
|
||||
/* 13 ascii bytes */
|
||||
var string = '{"one":"foo"}';
|
||||
|
||||
setup(function() {
|
||||
buffer = createBytes('13:' + string);
|
||||
});
|
||||
|
||||
test('read entire buffer', function(done) {
|
||||
var expected = { one: 'foo' };
|
||||
subject.once('data', function(data) {
|
||||
assert.deepEqual(data, expected);
|
||||
done();
|
||||
});
|
||||
|
||||
subject.write(buffer);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
Loading…
Reference in a new issue