def testSemicolon(self): input = 'echo; cat;' parser = Parser(Tokenizer(input)) ast = parser.parse() self.assertTrue(isinstance(ast, BinaryOp)) self.assertEquals(';', ast.op) self.assertTrue(isinstance(ast.left, Process)) self.assertTrue(isinstance(ast.right, Process))
def testBackquoteWithSemicolon(self): input = 'echo `echo foo | cat`' parser = Parser(Tokenizer(input)) ast = parser.parse() self.assertTrue(isinstance(ast, Process)) self.assertEquals(2, len(ast.args)) self.assertEquals(1, len(ast.args[1])) self.assertEquals(BACKQUOTE, ast.args[1][0][0]) self.assertEquals('|', ast.args[1][0][1].op)
def testBackquoteWithSpace(self): input = 'echo ` echo foo `' parser = Parser(Tokenizer(input)) ast = parser.parse() self.assertTrue(isinstance(ast, Process)) self.assertEquals(2, len(ast.args)) self.assertEquals(1, len(ast.args[1])) self.assertEquals(BACKQUOTE, ast.args[1][0][0]) self.assertTrue(isinstance(ast.args[1][0][1], Process)) self.assertEquals([[(LITERAL, 'echo')], [(LITERAL, 'foo')]], ast.args[1][0][1].args)
def test(self): input = 'echo hoge$foo || echo piyo && cat' parser = Parser(Tokenizer(input)) ast = parser.parse() self.assertTrue(isinstance(ast, BinaryOp)) self.assertEquals('&&', ast.op) self.assertTrue(isinstance(ast.left, BinaryOp)) self.assertEquals('||', ast.left.op) proc0 = ast.left.left self.assertTrue(isinstance(proc0, Process)) self.assertEquals([[('literal', 'echo')], [('literal', 'hoge'), ('substitution', '$foo')]], proc0.args) self.assertFalse(proc0.redirects) proc1 = ast.left.right self.assertTrue(isinstance(proc1, Process)) self.assertEquals([[('literal', 'echo')], [('literal', 'piyo')]], proc1.args) self.assertFalse(proc1.redirects) proc2 = ast.right self.assertTrue(isinstance(proc2, Process)) self.assertEquals([[('literal', 'cat')]], proc2.args) self.assertFalse(proc2.redirects)
def parse(self, input): tok = Tokenizer(input) parser = Parser(tok) return parser.parse()
def extractResponseNames(self, content): parser = Parser(Tokenizer(content)) ast = parser.parse() names = [] self.extractResponseNamesInternal(ast, names) return names