# RUN: %{python} %s # # END. import unittest import platform import os.path import tempfile import lit from lit.TestRunner import ParserKind, IntegratedTestKeywordParser, \ parseIntegratedTestScript class TestIntegratedTestKeywordParser(unittest.TestCase): inputTestCase = None @staticmethod def load_keyword_parser_lit_tests(): """ Create and load the LIT test suite and test objects used by TestIntegratedTestKeywordParser """ # Create the global config object. lit_config = lit.LitConfig.LitConfig(progname='lit', path=[], quiet=False, useValgrind=False, valgrindLeakCheck=False, singleProcess=False, valgrindArgs=[], noExecute=False, debug=False, isWindows=( platform.system() == 'Windows'), params={}) TestIntegratedTestKeywordParser.litConfig = lit_config # Perform test discovery. test_path = os.path.dirname(os.path.dirname(__file__)) inputs = [os.path.join(test_path, 'Inputs/testrunner-custom-parsers/')] assert os.path.isdir(inputs[0]) run = lit.run.Run(lit_config, lit.discovery.find_tests_for_inputs(lit_config, inputs)) assert len(run.tests) == 1 and "there should only be one test" TestIntegratedTestKeywordParser.inputTestCase = run.tests[0] @staticmethod def make_parsers(): def custom_parse(line_number, line, output): if output is None: output = [] output += [part for part in line.split(' ') if part.strip()] return output return [ IntegratedTestKeywordParser("MY_TAG.", ParserKind.TAG), IntegratedTestKeywordParser("MY_DNE_TAG.", ParserKind.TAG), IntegratedTestKeywordParser("MY_LIST:", ParserKind.LIST), IntegratedTestKeywordParser("MY_RUN:", ParserKind.COMMAND), IntegratedTestKeywordParser("MY_CUSTOM:", ParserKind.CUSTOM, custom_parse) ] @staticmethod def get_parser(parser_list, keyword): for p in parser_list: if p.keyword == keyword: return p assert False and "parser not found" @staticmethod def parse_test(parser_list): script = parseIntegratedTestScript( TestIntegratedTestKeywordParser.inputTestCase, additional_parsers=parser_list, require_script=False) assert not isinstance(script, lit.Test.Result) assert isinstance(script, list) assert len(script) == 0 def test_tags(self): parsers = self.make_parsers() self.parse_test(parsers) tag_parser = self.get_parser(parsers, 'MY_TAG.') dne_tag_parser = self.get_parser(parsers, 'MY_DNE_TAG.') self.assertTrue(tag_parser.getValue()) self.assertFalse(dne_tag_parser.getValue()) def test_lists(self): parsers = self.make_parsers() self.parse_test(parsers) list_parser = self.get_parser(parsers, 'MY_LIST:') self.assertEqual(list_parser.getValue(), ['one', 'two', 'three', 'four']) def test_commands(self): parsers = self.make_parsers() self.parse_test(parsers) cmd_parser = self.get_parser(parsers, 'MY_RUN:') value = cmd_parser.getValue() self.assertEqual(len(value), 2) # there are only two run lines self.assertEqual(value[0].strip(), "%dbg(MY_RUN: at line 4) baz") self.assertEqual(value[1].strip(), "%dbg(MY_RUN: at line 7) foo bar") def test_custom(self): parsers = self.make_parsers() self.parse_test(parsers) custom_parser = self.get_parser(parsers, 'MY_CUSTOM:') value = custom_parser.getValue() self.assertEqual(value, ['a', 'b', 'c']) def test_bad_keywords(self): def custom_parse(line_number, line, output): return output try: IntegratedTestKeywordParser("TAG_NO_SUFFIX", ParserKind.TAG), self.fail("TAG_NO_SUFFIX failed to raise an exception") except ValueError as e: pass except BaseException as e: self.fail("TAG_NO_SUFFIX raised the wrong exception: %r" % e) try: IntegratedTestKeywordParser("TAG_WITH_COLON:", ParserKind.TAG), self.fail("TAG_WITH_COLON: failed to raise an exception") except ValueError as e: pass except BaseException as e: self.fail("TAG_WITH_COLON: raised the wrong exception: %r" % e) try: IntegratedTestKeywordParser("LIST_WITH_DOT.", ParserKind.LIST), self.fail("LIST_WITH_DOT. failed to raise an exception") except ValueError as e: pass except BaseException as e: self.fail("LIST_WITH_DOT. raised the wrong exception: %r" % e) try: IntegratedTestKeywordParser("CUSTOM_NO_SUFFIX", ParserKind.CUSTOM, custom_parse), self.fail("CUSTOM_NO_SUFFIX failed to raise an exception") except ValueError as e: pass except BaseException as e: self.fail("CUSTOM_NO_SUFFIX raised the wrong exception: %r" % e) # Both '.' and ':' are allowed for CUSTOM keywords. try: IntegratedTestKeywordParser("CUSTOM_WITH_DOT.", ParserKind.CUSTOM, custom_parse), except BaseException as e: self.fail("CUSTOM_WITH_DOT. raised an exception: %r" % e) try: IntegratedTestKeywordParser("CUSTOM_WITH_COLON:", ParserKind.CUSTOM, custom_parse), except BaseException as e: self.fail("CUSTOM_WITH_COLON: raised an exception: %r" % e) try: IntegratedTestKeywordParser("CUSTOM_NO_PARSER:", ParserKind.CUSTOM), self.fail("CUSTOM_NO_PARSER: failed to raise an exception") except ValueError as e: pass except BaseException as e: self.fail("CUSTOM_NO_PARSER: raised the wrong exception: %r" % e) if __name__ == '__main__': TestIntegratedTestKeywordParser.load_keyword_parser_lit_tests() unittest.main(verbosity=2)