/
delimiters_spec.rb
65 lines (50 loc) · 2.72 KB
/
delimiters_spec.rb
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
require 'spec_helper'
RSpec.describe('Literal delimiter lexing') do
include_examples 'lex', '}',
0 => [:literal, :literal, '}', 0, 1, 0, 0, 0]
include_examples 'lex', '}}',
0 => [:literal, :literal, '}}', 0, 2, 0, 0, 0]
include_examples 'lex', '{',
0 => [:literal, :literal, '{', 0, 1, 0, 0, 0]
include_examples 'lex', '{{',
0 => [:literal, :literal, '{{', 0, 2, 0, 0, 0]
include_examples 'lex', '{}',
0 => [:literal, :literal, '{}', 0, 2, 0, 0, 0]
include_examples 'lex', '}{',
0 => [:literal, :literal, '}{', 0, 2, 0, 0, 0]
include_examples 'lex', '}{+',
0 => [:literal, :literal, '}', 0, 1, 0, 0, 0],
1 => [:literal, :literal, '{', 1, 2, 0, 0, 0],
2 => [:quantifier, :one_or_more, '+', 2, 3, 0, 0, 0]
include_examples 'lex', '{{var}}',
0 => [:literal, :literal, '{{var}}', 0, 7, 0, 0, 0]
include_examples 'lex', 'a{b}c',
0 => [:literal, :literal, 'a{b}c', 0, 5, 0, 0, 0]
include_examples 'lex', '({.+})',
0 => [:group, :capture, '(', 0, 1, 0, 0, 0],
1 => [:literal, :literal, '{', 1, 2, 1, 0, 0],
2 => [:meta, :dot, '.', 2, 3, 1, 0, 0],
3 => [:quantifier, :one_or_more, '+', 3, 4, 1, 0, 0],
4 => [:literal, :literal, '}', 4, 5, 1, 0, 0],
5 => [:group, :close, ')', 5, 6, 0, 0, 0]
include_examples 'lex', ']',
0 => [:literal, :literal, ']', 0, 1, 0, 0, 0]
include_examples 'lex', ']]',
0 => [:literal, :literal, ']]', 0, 2, 0, 0, 0]
include_examples 'lex', ']\[',
0 => [:literal, :literal, ']', 0, 1, 0, 0, 0],
1 => [:escape, :set_open, '\[', 1, 3, 0, 0, 0]
include_examples 'lex', '()',
0 => [:group, :capture, '(', 0, 1, 0, 0, 0],
1 => [:group, :close, ')', 1, 2, 0, 0, 0]
include_examples 'lex', '{abc:.+}}}[^}]]}',
0 => [:literal, :literal, '{abc:', 0, 5, 0, 0, 0],
1 => [:meta, :dot, '.', 5, 6, 0, 0, 0],
2 => [:quantifier, :one_or_more, '+', 6, 7, 0, 0, 0],
3 => [:literal, :literal, '}}}', 7, 10, 0, 0, 0],
4 => [:set, :open, '[', 10, 11, 0, 0, 0],
5 => [:set, :negate, '^', 11, 12, 0, 1, 0],
6 => [:literal, :literal, '}', 12, 13, 0, 1, 0],
7 => [:set, :close, ']', 13, 14, 0, 0, 0],
8 => [:literal, :literal, ']}', 14, 16, 0, 0, 0]
end