[llvm] [cmake] Add possibility to use ChooseMSVCCRT.cmake when include LLVM library
[llvm-core.git] / utils / lit / tests / unit / ShUtil.py
blob9cf42dbbcefa4db205fc3aca4345e528374846ec
1 # RUN: %{python} %s
3 import unittest
5 from lit.ShUtil import Command, Pipeline, Seq, ShLexer, ShParser
8 class TestShLexer(unittest.TestCase):
9 def lex(self, str, *args, **kwargs):
10 return list(ShLexer(str, *args, **kwargs).lex())
12 def test_basic(self):
13 self.assertEqual(self.lex('a|b>c&d<e;f'),
14 ['a', ('|',), 'b', ('>',), 'c', ('&',), 'd',
15 ('<',), 'e', (';',), 'f'])
17 def test_redirection_tokens(self):
18 self.assertEqual(self.lex('a2>c'),
19 ['a2', ('>',), 'c'])
20 self.assertEqual(self.lex('a 2>c'),
21 ['a', ('>',2), 'c'])
23 def test_quoting(self):
24 self.assertEqual(self.lex(""" 'a' """),
25 ['a'])
26 self.assertEqual(self.lex(""" "hello\\"world" """),
27 ['hello"world'])
28 self.assertEqual(self.lex(""" "hello\\'world" """),
29 ["hello\\'world"])
30 self.assertEqual(self.lex(""" "hello\\\\world" """),
31 ["hello\\world"])
32 self.assertEqual(self.lex(""" he"llo wo"rld """),
33 ["hello world"])
34 self.assertEqual(self.lex(""" a\\ b a\\\\b """),
35 ["a b", "a\\b"])
36 self.assertEqual(self.lex(""" "" "" """),
37 ["", ""])
38 self.assertEqual(self.lex(""" a\\ b """, win32Escapes = True),
39 ['a\\', 'b'])
41 class TestShParse(unittest.TestCase):
42 def parse(self, str):
43 return ShParser(str).parse()
45 def test_basic(self):
46 self.assertEqual(self.parse('echo hello'),
47 Pipeline([Command(['echo', 'hello'], [])], False))
48 self.assertEqual(self.parse('echo ""'),
49 Pipeline([Command(['echo', ''], [])], False))
50 self.assertEqual(self.parse("""echo -DFOO='a'"""),
51 Pipeline([Command(['echo', '-DFOO=a'], [])], False))
52 self.assertEqual(self.parse('echo -DFOO="a"'),
53 Pipeline([Command(['echo', '-DFOO=a'], [])], False))
55 def test_redirection(self):
56 self.assertEqual(self.parse('echo hello > c'),
57 Pipeline([Command(['echo', 'hello'],
58 [((('>'),), 'c')])], False))
59 self.assertEqual(self.parse('echo hello > c >> d'),
60 Pipeline([Command(['echo', 'hello'], [(('>',), 'c'),
61 (('>>',), 'd')])], False))
62 self.assertEqual(self.parse('a 2>&1'),
63 Pipeline([Command(['a'], [(('>&',2), '1')])], False))
65 def test_pipeline(self):
66 self.assertEqual(self.parse('a | b'),
67 Pipeline([Command(['a'], []),
68 Command(['b'], [])],
69 False))
71 self.assertEqual(self.parse('a | b | c'),
72 Pipeline([Command(['a'], []),
73 Command(['b'], []),
74 Command(['c'], [])],
75 False))
77 def test_list(self):
78 self.assertEqual(self.parse('a ; b'),
79 Seq(Pipeline([Command(['a'], [])], False),
80 ';',
81 Pipeline([Command(['b'], [])], False)))
83 self.assertEqual(self.parse('a & b'),
84 Seq(Pipeline([Command(['a'], [])], False),
85 '&',
86 Pipeline([Command(['b'], [])], False)))
88 self.assertEqual(self.parse('a && b'),
89 Seq(Pipeline([Command(['a'], [])], False),
90 '&&',
91 Pipeline([Command(['b'], [])], False)))
93 self.assertEqual(self.parse('a || b'),
94 Seq(Pipeline([Command(['a'], [])], False),
95 '||',
96 Pipeline([Command(['b'], [])], False)))
98 self.assertEqual(self.parse('a && b || c'),
99 Seq(Seq(Pipeline([Command(['a'], [])], False),
100 '&&',
101 Pipeline([Command(['b'], [])], False)),
102 '||',
103 Pipeline([Command(['c'], [])], False)))
105 self.assertEqual(self.parse('a; b'),
106 Seq(Pipeline([Command(['a'], [])], False),
107 ';',
108 Pipeline([Command(['b'], [])], False)))
110 if __name__ == '__main__':
111 unittest.main()