forked from elizaOS/eliza
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparsing.test.ts
94 lines (80 loc) · 3.89 KB
/
parsing.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import { describe, it, expect } from 'vitest';
import {
parseShouldRespondFromText,
parseBooleanFromText,
parseJsonArrayFromText,
parseJSONObjectFromText,
} from '../parsing';
describe('Parsing Module', () => {
describe('parseShouldRespondFromText', () => {
it('should parse exact matches', () => {
expect(parseShouldRespondFromText('[RESPOND]')).toBe('RESPOND');
expect(parseShouldRespondFromText('[IGNORE]')).toBe('IGNORE');
expect(parseShouldRespondFromText('[STOP]')).toBe('STOP');
});
it('should handle case insensitive input', () => {
expect(parseShouldRespondFromText('[respond]')).toBe('RESPOND');
expect(parseShouldRespondFromText('[ignore]')).toBe('IGNORE');
expect(parseShouldRespondFromText('[stop]')).toBe('STOP');
});
it('should handle text containing keywords', () => {
expect(parseShouldRespondFromText('I think we should RESPOND here')).toBe('RESPOND');
expect(parseShouldRespondFromText('Better to IGNORE this one')).toBe('IGNORE');
expect(parseShouldRespondFromText('We need to STOP now')).toBe('STOP');
});
it('should return null for invalid input', () => {
expect(parseShouldRespondFromText('')).toBe(null);
expect(parseShouldRespondFromText('invalid')).toBe(null);
expect(parseShouldRespondFromText('[INVALID]')).toBe(null);
});
});
describe('parseBooleanFromText', () => {
it('should parse exact YES/NO matches', () => {
expect(parseBooleanFromText('YES')).toBe(true);
expect(parseBooleanFromText('NO')).toBe(false);
});
it('should handle case insensitive input', () => {
expect(parseBooleanFromText('yes')).toBe(true);
expect(parseBooleanFromText('no')).toBe(false);
});
it('should return null for invalid input', () => {
expect(parseBooleanFromText('')).toBe(null);
expect(parseBooleanFromText('maybe')).toBe(null);
expect(parseBooleanFromText('YES NO')).toBe(null);
});
});
describe('parseJsonArrayFromText', () => {
it('should parse JSON array from code block', () => {
const input = '```json\n["item1", "item2", "item3"]\n```';
expect(parseJsonArrayFromText(input)).toEqual(['item1', 'item2', 'item3']);
});
it('should handle empty arrays', () => {
expect(parseJsonArrayFromText('```json\n[]\n```')).toEqual([]);
expect(parseJsonArrayFromText('[]')).toEqual(null);
});
it('should return null for invalid JSON', () => {
expect(parseJsonArrayFromText('invalid')).toBe(null);
expect(parseJsonArrayFromText('[invalid]')).toBe(null);
expect(parseJsonArrayFromText('```json\n[invalid]\n```')).toBe(null);
});
});
describe('parseJSONObjectFromText', () => {
it('should parse JSON object from code block', () => {
const input = '```json\n{"key": "value", "number": 42}\n```';
expect(parseJSONObjectFromText(input)).toEqual({ key: 'value', number: 42 });
});
it('should parse JSON object without code block', () => {
const input = '{"key": "value", "number": 42}';
expect(parseJSONObjectFromText(input)).toEqual({ key: 'value', number: 42 });
});
it('should handle empty objects', () => {
expect(parseJSONObjectFromText('```json\n{}\n```')).toEqual({});
expect(parseJSONObjectFromText('{}')).toEqual({});
});
it('should return null for invalid JSON', () => {
expect(parseJSONObjectFromText('invalid')).toBe(null);
expect(parseJSONObjectFromText('{invalid}')).toBe(null);
expect(parseJSONObjectFromText('```json\n{invalid}\n```')).toBe(null);
});
});
});