| 
1 |  | -import {randomString, Token} from '../string';  | 
 | 1 | +import {randomString, type Token} from '../string';  | 
 | 2 | +import {deterministic} from '../util';  | 
2 | 3 | 
 
  | 
3 |  | -// Tests for randomString  | 
4 | 4 | describe('randomString', () => {  | 
5 | 5 |   it('should pick a random string from the array', () => {  | 
6 |  | -    const token: Token = ['pick', ['apple', 'banana', 'cherry']];  | 
 | 6 | +    const token: Token = ['pick', 'apple', 'banana', 'cherry'];  | 
7 | 7 |     const result = randomString(token);  | 
8 | 8 |     expect(['apple', 'banana', 'cherry']).toContain(result);  | 
9 | 9 |   });  | 
10 | 10 | 
 
  | 
11 | 11 |   it('should repeat a pattern a random number of times', () => {  | 
12 |  | -    const token: Token = ['repeat', 2, 5, ['pick', ['x', 'y', 'z', ' ']]];  | 
 | 12 | +    const token: Token = ['repeat', 2, 5, ['pick', 'x', 'y', 'z', ' ']];  | 
13 | 13 |     const result = randomString(token);  | 
14 | 14 |     expect(result.length).toBeGreaterThanOrEqual(2);  | 
15 | 15 |     expect(result.length).toBeLessThanOrEqual(5);  | 
16 | 16 |   });  | 
17 | 17 | 
 
  | 
18 | 18 |   it('should pick a random character from the Unicode range', () => {  | 
19 |  | -    const token: Token = ['range', 65, 90]; // A-Z  | 
 | 19 | +    const token: Token = ['char', 65, 90]; // A-Z  | 
20 | 20 |     const result = randomString(token);  | 
21 | 21 |     expect(result).toMatch(/^[A-Z]$/);  | 
22 | 22 |   });  | 
23 | 23 | 
 
  | 
24 |  | -  // test tlist token  | 
 | 24 | +  it('should pick a random character from the Unicode range three times', () => {  | 
 | 25 | +    const token: Token = ['char', 65, 90, 3]; // A-Z  | 
 | 26 | +    const result = randomString(token);  | 
 | 27 | +    expect(result).toMatch(/^[A-Z]{3}$/);  | 
 | 28 | +  });  | 
 | 29 | + | 
25 | 30 |   it('executes a list of tokens', () => {  | 
26 | 31 |     const token: Token = [  | 
27 | 32 |       'list',  | 
28 |  | -      [  | 
29 |  | -        ['pick', ['monkey', 'dog', 'cat']],  | 
30 |  | -        ['pick', [' ']],  | 
31 |  | -        ['pick', ['ate', 'threw', 'picked']],  | 
32 |  | -        ['pick', [' ']],  | 
33 |  | -        ['pick', ['apple', 'banana', 'cherry']],  | 
34 |  | -      ],  | 
 | 33 | +      ['pick', 'monkey', 'dog', 'cat'],  | 
 | 34 | +      ['pick', ' '],  | 
 | 35 | +      ['pick', 'ate', 'threw', 'picked'],  | 
 | 36 | +      ['pick', ' '],  | 
 | 37 | +      ['pick', 'apple', 'banana', 'cherry'],  | 
35 | 38 |     ];  | 
36 | 39 |     const result = randomString(token);  | 
37 | 40 |     expect(/monkey|dog|cat/.test(result)).toBe(true);  | 
38 | 41 |     expect(/ate|threw|picked/.test(result)).toBe(true);  | 
39 | 42 |     expect(/apple|banana|cherry/.test(result)).toBe(true);  | 
40 | 43 |   });  | 
 | 44 | + | 
 | 45 | +  it('can nest picks', () => {  | 
 | 46 | +    const token: Token = ['pick', ['pick', 'monkey', 'dog', 'cat'], ['pick', 'banana', 'apple']];  | 
 | 47 | +    const str = deterministic(123, () => randomString(token));  | 
 | 48 | +    expect(str).toBe('dog');  | 
 | 49 | +  });  | 
41 | 50 | });  | 
0 commit comments