Files
mc-bot/test/codec.test.js
T
2026-08-22 11:09:05 -05:00

76 lines
2.2 KiB
JavaScript

'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);
});