Files
serialize-js/test/Sequence.test.js
2025-08-08 11:28:49 +03:00

44 lines
1.3 KiB
JavaScript

import { describe, expect, test } from "vitest";
import { ConstString, Int, isHeadless, parse, Sequence, serialize, sizeof } from "../src";
import { expectDataViewEqual, filledDataView, sizedDataView } from '.'
describe(Sequence.name, () => {
const Type = Sequence([Int(8, 'unsigned'), String, Boolean])
const type = [255, 'hello', true]
const type_dv = filledDataView([
0xFF,
0x00, 0x00, 0x00, 0x05,
0x68, 0x65, 0x6C, 0x6C, 0x6F,
0x01,
])
test('serialize', () => {
let actual = sizedDataView(10)
expect(() => serialize(actual, type, Type)).toThrow()
actual = sizedDataView(sizeof(type, Type))
serialize(actual, type, Type)
expectDataViewEqual(actual, type_dv)
})
test('parse', () => {
expect(parse(type_dv, Type)).toEqual(type)
})
test('isHeadless', () => {
expect(isHeadless(Sequence([Number, String]))).toBeTruthy()
expect(isHeadless(Sequence([Number, ConstString(4)]))).toBeFalsy()
})
test('sizeof', () => {
expect(sizeof(Sequence([Number, ConstString(4)]))).toEqual(12)
expect(() => sizeof(Sequence([Number, String]))).toThrow()
expect(() => sizeof([1], Sequence([Number, String]))).toThrow()
expect(() => sizeof([1, 'hello', 3], Sequence([Number, String]))).toThrow()
expect(sizeof([1, 'hello'], Sequence([Number, String]))).toEqual(17)
})
})