initial
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
'use strict';
|
||||
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert');
|
||||
const { parsePositionAndLook, parseChat, parseJoinGame } = require('../src/bot/codec');
|
||||
|
||||
test('parsePositionAndLook: full payload', () => {
|
||||
const data = Buffer.alloc(33);
|
||||
data.writeDoubleLE(1.5, 0);
|
||||
data.writeDoubleLE(64.0, 8);
|
||||
data.writeDoubleLE(-3.25, 16);
|
||||
data.writeFloatLE(45.0, 24);
|
||||
data.writeFloatLE(15.0, 28);
|
||||
data[32] = 0;
|
||||
const r = parsePositionAndLook(data);
|
||||
assert.ok(r);
|
||||
assert.strictEqual(r.x, 1.5);
|
||||
assert.strictEqual(r.y, 64.0);
|
||||
assert.strictEqual(r.z, -3.25);
|
||||
assert.strictEqual(r.yaw, 45.0);
|
||||
assert.strictEqual(r.pitch, 15.0);
|
||||
});
|
||||
|
||||
test('parsePositionAndLook: too short returns null', () => {
|
||||
const data = Buffer.alloc(10);
|
||||
assert.strictEqual(parsePositionAndLook(data), null);
|
||||
});
|
||||
|
||||
test('parseChat: simple text', () => {
|
||||
const json = JSON.stringify({ text: 'Hello world' });
|
||||
const len = Buffer.byteLength(json);
|
||||
const data = Buffer.concat([
|
||||
Buffer.from([len]),
|
||||
Buffer.from(json, 'utf8'),
|
||||
]);
|
||||
const r = parseChat(data);
|
||||
assert.strictEqual(r.text, 'Hello world');
|
||||
});
|
||||
|
||||
test('parseChat: with translate', () => {
|
||||
const json = JSON.stringify({ translate: 'commands.register.success', with: ['alice'] });
|
||||
const data = Buffer.concat([
|
||||
Buffer.from([Buffer.byteLength(json)]),
|
||||
Buffer.from(json, 'utf8'),
|
||||
]);
|
||||
const r = parseChat(data);
|
||||
assert.strictEqual(r.translate, 'commands.register.success');
|
||||
assert.ok(r.text.includes('commands.register.success'));
|
||||
});
|
||||
|
||||
test('parseChat: strips color codes', () => {
|
||||
const json = JSON.stringify({ text: '§aGreen§r text' });
|
||||
const data = Buffer.concat([
|
||||
Buffer.from([Buffer.byteLength(json)]),
|
||||
Buffer.from(json, 'utf8'),
|
||||
]);
|
||||
const r = parseChat(data);
|
||||
assert.strictEqual(r.text, 'Green text');
|
||||
});
|
||||
|
||||
test('parseJoinGame: minimal', () => {
|
||||
const data = Buffer.alloc(10);
|
||||
data[0] = 1;
|
||||
data[1] = 0;
|
||||
data.writeInt32BE(0, 2);
|
||||
data[6] = 0;
|
||||
data[7] = 20;
|
||||
data[8] = 0;
|
||||
const r = parseJoinGame(data);
|
||||
assert.ok(r);
|
||||
assert.strictEqual(r.entityId, 1);
|
||||
assert.strictEqual(r.gamemode, 0);
|
||||
assert.strictEqual(r.dimension, 0);
|
||||
assert.strictEqual(r.maxPlayers, 20);
|
||||
});
|
||||
Reference in New Issue
Block a user