176 lines
4.3 KiB
TypeScript
176 lines
4.3 KiB
TypeScript
import { it, describe, expect } from 'vitest';
|
|
import { db } from './db.js';
|
|
import { parser } from './parser.js';
|
|
|
|
const { clear, getPacket, getDiagramTitle, getAccTitle, getAccDescription } = db;
|
|
|
|
describe('packet diagrams', () => {
|
|
beforeEach(() => {
|
|
clear();
|
|
});
|
|
|
|
it('should handle a packet-beta definition', async () => {
|
|
const str = `packet-beta`;
|
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
|
expect(getPacket()).toMatchInlineSnapshot('[]');
|
|
});
|
|
|
|
it('should handle diagram with data and title', async () => {
|
|
const str = `packet-beta
|
|
title Packet diagram
|
|
accTitle: Packet accTitle
|
|
accDescr: Packet accDescription
|
|
0-10: "test"
|
|
`;
|
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
|
expect(getDiagramTitle()).toMatchInlineSnapshot('"Packet diagram"');
|
|
expect(getAccTitle()).toMatchInlineSnapshot('"Packet accTitle"');
|
|
expect(getAccDescription()).toMatchInlineSnapshot('"Packet accDescription"');
|
|
expect(getPacket()).toMatchInlineSnapshot(`
|
|
[
|
|
[
|
|
{
|
|
"end": 10,
|
|
"label": "test",
|
|
"start": 0,
|
|
},
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it('should handle single bits', async () => {
|
|
const str = `packet-beta
|
|
0-10: "test"
|
|
11: "single"
|
|
`;
|
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
|
expect(getPacket()).toMatchInlineSnapshot(`
|
|
[
|
|
[
|
|
{
|
|
"end": 10,
|
|
"label": "test",
|
|
"start": 0,
|
|
},
|
|
{
|
|
"end": 11,
|
|
"label": "single",
|
|
"start": 11,
|
|
},
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it('should split into multiple rows', async () => {
|
|
const str = `packet-beta
|
|
0-10: "test"
|
|
11-90: "multiple"
|
|
`;
|
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
|
expect(getPacket()).toMatchInlineSnapshot(`
|
|
[
|
|
[
|
|
{
|
|
"end": 10,
|
|
"label": "test",
|
|
"start": 0,
|
|
},
|
|
{
|
|
"end": 31,
|
|
"label": "multiple",
|
|
"start": 11,
|
|
},
|
|
],
|
|
[
|
|
{
|
|
"end": 63,
|
|
"label": "multiple",
|
|
"start": 32,
|
|
},
|
|
],
|
|
[
|
|
{
|
|
"end": 90,
|
|
"label": "multiple",
|
|
"start": 64,
|
|
},
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it('should split into multiple rows when cut at exact length', async () => {
|
|
const str = `packet-beta
|
|
0-16: "test"
|
|
17-63: "multiple"
|
|
`;
|
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
|
expect(getPacket()).toMatchInlineSnapshot(`
|
|
[
|
|
[
|
|
{
|
|
"end": 16,
|
|
"label": "test",
|
|
"start": 0,
|
|
},
|
|
{
|
|
"end": 31,
|
|
"label": "multiple",
|
|
"start": 17,
|
|
},
|
|
],
|
|
[
|
|
{
|
|
"end": 63,
|
|
"label": "multiple",
|
|
"start": 32,
|
|
},
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it('should throw error if numbers are not continuous', async () => {
|
|
const str = `packet-beta
|
|
0-16: "test"
|
|
18-20: "error"
|
|
`;
|
|
await expect(parser.parse(str)).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
`[Error: Packet block 18 - 20 is not contiguous. It should start from 17.]`
|
|
);
|
|
});
|
|
|
|
it('should throw error if numbers are not continuous for single packets', async () => {
|
|
const str = `packet-beta
|
|
0-16: "test"
|
|
18: "error"
|
|
`;
|
|
await expect(parser.parse(str)).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
`[Error: Packet block 18 - 18 is not contiguous. It should start from 17.]`
|
|
);
|
|
});
|
|
|
|
it('should throw error if numbers are not continuous for single packets - 2', async () => {
|
|
const str = `packet-beta
|
|
0-16: "test"
|
|
17: "good"
|
|
19: "error"
|
|
`;
|
|
await expect(parser.parse(str)).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
`[Error: Packet block 19 - 19 is not contiguous. It should start from 18.]`
|
|
);
|
|
});
|
|
|
|
it('should throw error if end is less than start', async () => {
|
|
const str = `packet-beta
|
|
0-16: "test"
|
|
25-20: "error"
|
|
`;
|
|
await expect(parser.parse(str)).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
`[Error: Packet block 25 - 20 is invalid. End must be greater than start.]`
|
|
);
|
|
});
|
|
});
|