OILS / ysh / regex_translate_test.py View on Github | oilshell.org

52 lines, 34 significant
1#!/usr/bin/env python2
2from __future__ import print_function
3
4import unittest
5
6from _devbuild.gen.id_kind_asdl import Id
7from _devbuild.gen.syntax_asdl import EggexFlag, Token, source, SourceLine
8
9from asdl import runtime
10from core import error
11from ysh import regex_translate
12
13
14def _Name(s):
15 # Doesn't work
16 #return lexer.DummyToken(Id.Expr_Name, s)
17 src = source.Stdin('')
18 source_line = SourceLine(1, s, src)
19 return Token(Id.Expr_Name, 0, len(s), runtime.NO_SPID, source_line, None)
20
21
22class RegexTranslateTest(unittest.TestCase):
23
24 def testCanonicalFlags(self):
25 reg_icase = _Name('reg_icase')
26 i = _Name('i') # abbreviation
27 reg_newline = _Name('reg_newline')
28 bad = _Name('bad')
29
30 flags = [EggexFlag(False, reg_icase)]
31 self.assertEqual('i', regex_translate.CanonicalFlags(flags))
32
33 flags = [EggexFlag(False, i)]
34 self.assertEqual('i', regex_translate.CanonicalFlags(flags))
35
36 flags = [EggexFlag(False, bad)]
37 try:
38 regex_translate.CanonicalFlags(flags)
39 except error.Parse as e:
40 print(e.UserErrorString())
41 else:
42 self.fail('Should have failed')
43
44 order1 = [EggexFlag(False, reg_icase), EggexFlag(False, reg_newline)]
45 order2 = [EggexFlag(False, reg_newline), EggexFlag(False, reg_icase)]
46
47 self.assertEqual('in', regex_translate.CanonicalFlags(order1))
48 self.assertEqual('in', regex_translate.CanonicalFlags(order2))
49
50
51if __name__ == '__main__':
52 unittest.main()