this repo has no description
1import assert from 'node:assert'
2import { describe, test } from 'node:test'
3import { TaggedStringParser } from '../../src/TaggedStringParser.ts'
4
5describe('Basic Parsing', () => {
6 test('should extract single entity', () => {
7 const parser = new TaggedStringParser()
8 const result = parser.parse('[operation:OP-123]')
9
10 assert.strictEqual(result.entities.length, 1)
11 assert.strictEqual(result.entities[0].type, 'operation')
12 assert.strictEqual(result.entities[0].value, 'OP-123')
13 assert.strictEqual(result.entities[0].position, 0)
14 })
15
16 test('should extract multiple entities in one message', () => {
17 const parser = new TaggedStringParser()
18 const result = parser.parse(
19 '[operation:OP-123] started with [changes:5] to [stack:ST-456]',
20 )
21
22 assert.strictEqual(result.entities.length, 3)
23 assert.strictEqual(result.entities[0].type, 'operation')
24 assert.strictEqual(result.entities[0].value, 'OP-123')
25 assert.strictEqual(result.entities[1].type, 'changes')
26 assert.strictEqual(result.entities[1].value, '5')
27 assert.strictEqual(result.entities[2].type, 'stack')
28 assert.strictEqual(result.entities[2].value, 'ST-456')
29 })
30
31 test('should handle messages without entities', () => {
32 const parser = new TaggedStringParser()
33 const result = parser.parse('This is a plain log message')
34
35 assert.strictEqual(result.entities.length, 0)
36 assert.strictEqual(result.originalMessage, 'This is a plain log message')
37 })
38
39 test('should handle empty string', () => {
40 const parser = new TaggedStringParser()
41 const result = parser.parse('')
42
43 assert.strictEqual(result.entities.length, 0)
44 assert.strictEqual(result.originalMessage, '')
45 })
46
47 test('should return ParseResult in delimiter-free mode', () => {
48 const parser = new TaggedStringParser({ delimiters: false })
49 const result = parser.parse('key=value')
50
51 assert.ok(result)
52 assert.ok(result.entities)
53 assert.ok(result.originalMessage)
54 assert.strictEqual(result.originalMessage, 'key=value')
55 })
56
57 test('should return ParseResult in delimited mode', () => {
58 const parser = new TaggedStringParser()
59 const result = parser.parse('[key:value]')
60
61 assert.ok(result)
62 assert.ok(result.entities)
63 assert.ok(result.originalMessage)
64 assert.strictEqual(result.originalMessage, '[key:value]')
65 })
66
67 test('should handle empty string in both modes', () => {
68 const delimiterFreeParser = new TaggedStringParser({ delimiters: false })
69 const delimitedParser = new TaggedStringParser()
70
71 const result1 = delimiterFreeParser.parse('')
72 const result2 = delimitedParser.parse('')
73
74 assert.strictEqual(result1.entities.length, 0)
75 assert.strictEqual(result1.originalMessage, '')
76 assert.strictEqual(result2.entities.length, 0)
77 assert.strictEqual(result2.originalMessage, '')
78 })
79})