File: sets_spec.rb

package info (click to toggle)
ruby-regexp-parser 2.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 968 kB
  • sloc: ruby: 6,396; sh: 12; makefile: 6
file content (75 lines) | stat: -rw-r--r-- 4,188 bytes parent folder | download
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
require 'spec_helper'

RSpec.describe('CharacterSet parsing') do
  include_examples 'parse', /[ab]+/,
    [0]    => [:set, :character, CharacterSet, text: '[', count: 2, quantified?: true],
    [0, 0] => [:literal, :literal, Literal, text: 'a', set_level: 1],
    [0, 1] => [:literal, :literal, Literal, text: 'b', set_level: 1]

  include_examples 'parse', /[a\dc]/,
    [0]    => [:set, :character, CharacterSet, text: '[', count: 3],
    [0, 1] => [:type, :digit, CharacterType::Digit]

  include_examples 'parse', /[a\bc]/,
    [0]    => [:set, :character, CharacterSet, text: '[', count: 3],
    [0, 1] => [:escape, :backspace, EscapeSequence::Backspace, text: '\b']

  include_examples 'parse', '[a\x20c]',
    [0]    => [:set, :character, CharacterSet, text: '[', count: 3],
    [0, 1] => [:escape, :hex, EscapeSequence::Hex, text: '\x20']

  include_examples 'parse', '[a\u0640c]',
    [0]    => [:set, :character, CharacterSet, text: '[', count: 3],
    [0, 1] => [:escape, :codepoint, EscapeSequence::Codepoint, text: '\u0640']

  include_examples 'parse', '[a\u{41 1F60D}c]',
    [0]    => [:set, :character, CharacterSet, text: '[', count: 3],
    [0, 1] => [:escape, :codepoint_list, EscapeSequence::CodepointList, text: '\u{41 1F60D}']

  include_examples 'parse', '[[:digit:][:^lower:]]+',
    [0]    => [:set, :character, CharacterSet, text: '[', count: 2],
    [0, 0] => [:posixclass, :digit, PosixClass, text: '[:digit:]'],
    [0, 1] => [:nonposixclass, :lower, PosixClass, text: '[:^lower:]']

  include_examples 'parse', '[a[b[c]d]e]',
    [0]          => [:set,     :character, CharacterSet, text: '[', count: 3, set_level: 0],
    [0, 0]       => [:literal, :literal,   Literal,      text: 'a',           set_level: 1],
    [0, 1]       => [:set,     :character, CharacterSet, text: '[', count: 3, set_level: 1],
    [0, 2]       => [:literal, :literal,   Literal,      text: 'e',           set_level: 1],
    [0, 1, 1]    => [:set,     :character, CharacterSet, text: '[', count: 1, set_level: 2],
    [0, 1, 1, 0] => [:literal, :literal,   Literal,      text: 'c',           set_level: 3]

  include_examples 'parse', '[a[^b[c]]]',
    [0]          => [:set,     :character, CharacterSet, text: '[', count: 2, set_level: 0, negative?: false],
    [0, 0]       => [:literal, :literal,   Literal,      text: 'a',           set_level: 1],
    [0, 1]       => [:set,     :character, CharacterSet, text: '[', count: 2, set_level: 1, negative?: true],
    [0, 1, 0]    => [:literal, :literal,   Literal,      text: 'b',           set_level: 2],
    [0, 1, 1]    => [:set,     :character, CharacterSet, text: '[', count: 1, set_level: 2, negative?: false],
    [0, 1, 1, 0] => [:literal, :literal,   Literal,      text: 'c',           set_level: 3]

  include_examples 'parse', '[aaa]',
    [0]     => [:set,     :character, CharacterSet, text: '[', count: 3],
    [0, 0]  => [:literal, :literal,   Literal,      text: 'a'],
    [0, 1]  => [:literal, :literal,   Literal,      text: 'a'],
    [0, 2]  => [:literal, :literal,   Literal,      text: 'a']

  include_examples 'parse', '[   ]',
    [0]     => [:set,     :character, CharacterSet, text: '[', count: 3],
    [0, 0]  => [:literal, :literal,   Literal,      text: ' '],
    [0, 1]  => [:literal, :literal,   Literal,      text: ' '],
    [0, 2]  => [:literal, :literal,   Literal,      text: ' ']

  include_examples 'parse', '(?x)[   ]', # shouldn't merge whitespace even in x-mode
    [1]     => [:set,     :character, CharacterSet, text: '[', count: 3],
    [1, 0]  => [:literal, :literal,   Literal,      text: ' '],
    [1, 1]  => [:literal, :literal,   Literal,      text: ' '],
    [1, 2]  => [:literal, :literal,   Literal,      text: ' ']

  include_examples 'parse', '[[.span-ll.]]', # collating sequences are disabled in Onigmo
    [0, 0]    => [:set,     :character, CharacterSet, text: '[', count: 7],
    [0, 0, 0] => [:literal, :literal,   Literal,      text: '.']

  include_examples 'parse', '[[=e=]]', # character equivalents are disabled in Onigmo
    [0, 0]    => [:set,     :character, CharacterSet, text: '[', count: 3],
    [0, 0, 0] => [:literal, :literal,   Literal,      text: '=']
end