404 lines
9.5 KiB
JavaScript
404 lines
9.5 KiB
JavaScript
'use strict';
|
|
|
|
var node_events = require('node:events');
|
|
var tap = require('tap');
|
|
var nodeOsc = require('node-osc');
|
|
|
|
function round(num) {
|
|
return Math.round(num * 100) / 100;
|
|
}
|
|
|
|
tap.test('message: basic usage', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(1);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const m = new nodeOsc.Message('/address');
|
|
m.append('testing');
|
|
m.append(123);
|
|
m.append([456, 789]);
|
|
|
|
server.on('message', (msg) => {
|
|
const expected = ['/address', 'testing', 123, 456, 789];
|
|
t.same(msg, expected, `We reveived the payload: ${msg}`);
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: multiple args', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(1);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const m = new nodeOsc.Message('/address', 'testing', 123, true);
|
|
|
|
server.on('message', (msg) => {
|
|
const expected = ['/address', 'testing', 123, true];
|
|
t.same(msg, expected, `We reveived the payload: ${msg}`);
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: object', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(1);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const m = new nodeOsc.Message('/address');
|
|
m.append({
|
|
type: 'string',
|
|
value: 'test'
|
|
});
|
|
m.append({
|
|
type: 'double',
|
|
value: 100
|
|
});
|
|
|
|
server.on('message', (msg) => {
|
|
const expected = ['/address', 'test', 100];
|
|
t.same(msg, expected, `We reveived the payload: ${msg}`);
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: float', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(2);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const m = new nodeOsc.Message('/address');
|
|
m.append(3.14);
|
|
|
|
server.on('message', (msg) => {
|
|
const expected = [
|
|
'/address',
|
|
3.14
|
|
];
|
|
t.equal(msg[0], expected[0], `We reveived the payload: ${msg}`);
|
|
t.equal(round(msg[1]), expected[1], 'pie please');
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: alias messages', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(5);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const m = new nodeOsc.Message('/address');
|
|
m.append({
|
|
type: 'i',
|
|
value: 123
|
|
});
|
|
m.append({
|
|
type: 'f',
|
|
value: 3.14
|
|
});
|
|
|
|
server.on('message', (msg) => {
|
|
const expected = [
|
|
'/address',
|
|
123,
|
|
3.14
|
|
];
|
|
t.equal(msg[0], expected[0], `We reveived the payload: ${msg}`);
|
|
t.equal(msg[1], expected[1], 'easy as abc');
|
|
t.ok(Number.isInteger(msg[1]), 'the first value is an int');
|
|
t.equal(round(msg[2]), expected[2], 'pie please');
|
|
t.ok(msg[2] % 1 !== 0, 'the second value is a float');
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: boolean', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
|
|
t.plan(1);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
const m = new nodeOsc.Message('/address');
|
|
m.append(true);
|
|
|
|
server.on('message', (msg) => {
|
|
const expected = [
|
|
'/address',
|
|
true
|
|
];
|
|
t.same(msg, expected, `We reveived the payload: ${msg}`);
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: blob', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(1);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const m = new nodeOsc.Message('/address');
|
|
const buf = Buffer.from('test');
|
|
m.append({
|
|
type: 'blob',
|
|
value: buf
|
|
});
|
|
|
|
server.on('message', (msg) => {
|
|
const expected = [
|
|
'/address',
|
|
buf
|
|
];
|
|
t.same(msg, expected, `We reveived the payload: ${msg}`);
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: Buffer as blob', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(1);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const m = new nodeOsc.Message('/address');
|
|
const buf = Buffer.from('test buffer data');
|
|
// Directly append Buffer without wrapping in object
|
|
m.append(buf);
|
|
|
|
server.on('message', (msg) => {
|
|
const expected = [
|
|
'/address',
|
|
buf
|
|
];
|
|
t.same(msg, expected, `We received the buffer payload: ${msg}`);
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
// test('message: timetag', (t) => {
|
|
// const oscServer = new osc.Server(3333, '127.0.0.1');
|
|
// const client = new osc.Client('127.0.0.1', 3333);
|
|
// const m = new osc.Message('/address');
|
|
//
|
|
// oscServer.on('message', (msg) => {
|
|
// const expected = [
|
|
// '/address'
|
|
// ];
|
|
// t.same(msg, expected, `We reveived the payload: ${msg}`);
|
|
// oscServer.close();
|
|
// t.end();
|
|
// });
|
|
//
|
|
// client.send(m, () => {
|
|
// client.close();
|
|
// });
|
|
// });
|
|
|
|
tap.test('message: Buffer with multiple arguments', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(6);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const m = new nodeOsc.Message('/address');
|
|
const buf1 = Buffer.from('first');
|
|
const buf2 = Buffer.from('second');
|
|
|
|
m.append('string');
|
|
m.append(42);
|
|
m.append(buf1);
|
|
m.append(3.14);
|
|
m.append(buf2);
|
|
|
|
server.on('message', (msg) => {
|
|
t.equal(msg[0], '/address', 'Address matches');
|
|
t.equal(msg[1], 'string', 'String matches');
|
|
t.equal(msg[2], 42, 'Integer matches');
|
|
t.same(msg[3], buf1, 'First buffer matches');
|
|
t.equal(round(msg[4]), 3.14, 'Float matches');
|
|
t.same(msg[5], buf2, 'Second buffer matches');
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: Buffer in constructor', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(1);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const buf = Buffer.from('constructor buffer');
|
|
const m = new nodeOsc.Message('/address', 'test', buf, 123);
|
|
|
|
server.on('message', (msg) => {
|
|
const expected = [
|
|
'/address',
|
|
'test',
|
|
buf,
|
|
123
|
|
];
|
|
t.same(msg, expected, `We received the constructor buffer payload: ${msg}`);
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: Buffer in array', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(1);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const m = new nodeOsc.Message('/address');
|
|
const buf1 = Buffer.from('array1');
|
|
const buf2 = Buffer.from('array2');
|
|
|
|
m.append([buf1, 'string', buf2, 456]);
|
|
|
|
server.on('message', (msg) => {
|
|
const expected = [
|
|
'/address',
|
|
buf1,
|
|
'string',
|
|
buf2,
|
|
456
|
|
];
|
|
t.same(msg, expected, `We received the array with buffers: ${msg}`);
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: empty Buffer', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(1);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const m = new nodeOsc.Message('/address');
|
|
const buf = Buffer.from('');
|
|
|
|
m.append(buf);
|
|
|
|
server.on('message', (msg) => {
|
|
const expected = [
|
|
'/address',
|
|
buf
|
|
];
|
|
t.same(msg, expected, `We received the empty buffer: ${msg}`);
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: large Buffer', async (t) => {
|
|
const server = new nodeOsc.Server(0, '127.0.0.1');
|
|
await node_events.once(server, 'listening');
|
|
const client = new nodeOsc.Client('127.0.0.1', server.port);
|
|
|
|
t.plan(4);
|
|
t.teardown(async () => {
|
|
await server.close();
|
|
await client.close();
|
|
});
|
|
|
|
const m = new nodeOsc.Message('/address');
|
|
const buf = Buffer.alloc(1024, 'x');
|
|
|
|
m.append(buf);
|
|
|
|
server.on('message', (msg) => {
|
|
t.equal(msg[0], '/address', 'Address matches');
|
|
t.ok(Buffer.isBuffer(msg[1]), 'Second element is a Buffer');
|
|
t.equal(msg[1].length, 1024, 'Buffer size matches');
|
|
t.same(msg[1], buf, 'Buffer content matches');
|
|
});
|
|
|
|
client.send(m);
|
|
});
|
|
|
|
tap.test('message: error', (t) => {
|
|
const m = new nodeOsc.Message('/address');
|
|
t.plan(2);
|
|
t.throws(() => {
|
|
m.append({
|
|
lol: 'it broken'
|
|
});
|
|
}, /don't know how to encode object/);
|
|
t.throws(() => {
|
|
m.append(undefined);
|
|
}, /don't know how to encode/);
|
|
});
|