71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
import { describe, expect, test } from "vitest";
|
|
import { parse, serialize, sizeof, Struct } from "../src";
|
|
import { expectDataViewEqual, filledDataView, sizedDataView } from ".";
|
|
|
|
describe(Struct.name, () => {
|
|
|
|
const User = Struct({ age: Number, name: String })
|
|
const user = { age: 1, name: 'hello' }
|
|
const user_dv = filledDataView([
|
|
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x0C,
|
|
0x00, 0x00, 0x00, 0x05,
|
|
0x68, 0x65, 0x6C, 0x6C, 0x6F,
|
|
])
|
|
|
|
test('serialize, headless', () => {
|
|
expect(() => sizeof(User)).toThrow()
|
|
|
|
const dv = sizedDataView(sizeof(user, User))
|
|
expect(21).toEqual(dv.byteLength)
|
|
|
|
serialize(dv, user, User)
|
|
expectDataViewEqual(dv, user_dv)
|
|
})
|
|
|
|
test('parse, headless', () => {
|
|
expectDataViewEqual(parse(user_dv, User), user)
|
|
})
|
|
|
|
const Vector2 = Struct({ x: Number, y: Number })
|
|
const vector2 = { x: 1, y: 2 }
|
|
const vector2_dv = filledDataView([
|
|
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
])
|
|
|
|
test('serialize, non-headless', () => {
|
|
const dv = sizedDataView(sizeof(Vector2))
|
|
expect(16).toEqual(dv.byteLength)
|
|
|
|
serialize(dv, vector2, Vector2)
|
|
expectDataViewEqual(dv, vector2_dv)
|
|
})
|
|
|
|
test('parse, non-headless', () => {
|
|
expectDataViewEqual(parse(vector2_dv, Vector2), vector2)
|
|
})
|
|
|
|
const Nested = Struct({ user: User, vector2: [Vector2] })
|
|
const nested = { user, vector2 }
|
|
const nested_dv = filledDataView([
|
|
0x00, 0x00, 0x00, 0x14,
|
|
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x0C,
|
|
0x00, 0x00, 0x00, 0x05,
|
|
0x68, 0x65, 0x6C, 0x6C, 0x6F,
|
|
])
|
|
|
|
test('serialize, nested', () => {
|
|
const dv = sizedDataView(sizeof(nested, Nested))
|
|
serialize(dv, nested, Nested)
|
|
expectDataViewEqual(dv, nested_dv)
|
|
})
|
|
|
|
test('parse, nested', () => {
|
|
expectDataViewEqual(parse(nested_dv, Nested), nested)
|
|
})
|
|
})
|