test(Struct): Token
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
import { parse, serialize, sizeof, Struct } from "../src";
|
||||
import { ConstDataView, parse, serialize, sizeof, Struct } from "../src";
|
||||
import { expectDataViewEqual, filledDataView, sizedDataView } from ".";
|
||||
|
||||
describe(Struct.name, () => {
|
||||
@ -7,10 +7,11 @@ 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,
|
||||
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // age
|
||||
0x00, 0x00, 0x00, 0x0C, // name_head
|
||||
// name
|
||||
0x00, 0x00, 0x00, 0x05, // name.size
|
||||
0x68, 0x65, 0x6C, 0x6C, 0x6F, // name.data
|
||||
])
|
||||
|
||||
test('serialize, headless', () => {
|
||||
@ -30,8 +31,8 @@ describe(Struct.name, () => {
|
||||
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,
|
||||
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // x
|
||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // y
|
||||
])
|
||||
|
||||
test('serialize, non-headless', () => {
|
||||
@ -49,13 +50,16 @@ describe(Struct.name, () => {
|
||||
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,
|
||||
0x00, 0x00, 0x00, 0x14, // user_head
|
||||
// vector2
|
||||
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vector2.x
|
||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vector2.y
|
||||
// user
|
||||
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // user.age
|
||||
0x00, 0x00, 0x00, 0x0C, // user.name_head
|
||||
// user.name
|
||||
0x00, 0x00, 0x00, 0x05, // user.name.size
|
||||
0x68, 0x65, 0x6C, 0x6C, 0x6F, // user.name.data
|
||||
])
|
||||
|
||||
test('serialize, nested', () => {
|
||||
@ -67,4 +71,36 @@ describe(Struct.name, () => {
|
||||
test('parse, nested', () => {
|
||||
expectDataViewEqual(parse(nested_dv, Nested), nested)
|
||||
})
|
||||
|
||||
const Token = Struct({
|
||||
data: Struct({ name: String }),
|
||||
header: Struct({ expires: Number }),
|
||||
signature: ConstDataView(4),
|
||||
})
|
||||
const token = {
|
||||
data: { name: 'sek1ro' },
|
||||
header: { expires: 1 },
|
||||
signature: sizedDataView(4),
|
||||
}
|
||||
const token_dv = filledDataView([
|
||||
0x00, 0x00, 0x00, 0x10, // data_head
|
||||
// header
|
||||
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // header.expires
|
||||
0x00, 0x00, 0x00, 0x00, // signature
|
||||
// data
|
||||
0x00, 0x00, 0x00, 0x04, // data.name_head
|
||||
// data.name
|
||||
0x00, 0x00, 0x00, 0x06,
|
||||
0x73, 0x65, 0x6b, 0x31, 0x72, 0x6f,
|
||||
])
|
||||
|
||||
test('serialize, Token', () => {
|
||||
const dv = sizedDataView(sizeof(token, Token))
|
||||
serialize(dv, token, Token)
|
||||
expectDataViewEqual(dv, token_dv)
|
||||
})
|
||||
|
||||
test('parse, Token', () => {
|
||||
expectDataViewEqual(parse(token_dv, Token), token)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user