def test_parse_quoted_list_item_containing_multiple_items(self): givenAst = ast.Ast() result = givenAst.parse("set(TabsPls_Source " \ + "\"anything can be put here, and it will be only one item, even with a ${variable}\"\n" + "main.cpp\n" \ + "${other_var}\n" \ + "\"${another_var_in_quotes}\"\n" \ + "#a comment that will be ignored\n" \ + '"a complete line with only text"\n' \ + ")" ) expected_result = ast.SetNormalVariable( "TabsPls_Source", ast.CMakeStringList([ ast.ListItemString( "\"anything can be put here, and it will be only one item, even with a ${variable}\"" ), ast.ListItemString("main.cpp"), ast.VariableUse("other_var"), ast.VariableUse("another_var_in_quotes"), ast.ListItemString('"a complete line with only text"') ])) self.assertTrue(list(result)[0].is_same(expected_result))
def test_parse_set_normal_variable(self): givenAst = ast.Ast() result = givenAst.parse("set(TabsPls_Source main.cpp)") expected_result = ast.SetNormalVariable( "TabsPls_Source", ast.CMakeStringList([ast.ListItemString("main.cpp")])) self.assertTrue(list(result)[0].is_same(expected_result))
def test_parse_set_normal_variable_using_other_variable_in_quotes(self): givenAst = ast.Ast() result = givenAst.parse("set(TabsPls_Source \"${other_var}\")") expected_result = ast.SetNormalVariable( "TabsPls_Source", ast.CMakeStringList([ast.VariableUse("other_var")])) self.assertTrue(list(result)[0].is_same(expected_result))
def test_scan_all_complete_project_source(self): given_source = ( "project(TabsPls)\n" + "\tset(TabsPls_Headers File.hpp\n" + "Directory.hpp\n" + ")\n\n" + "set(TabsPls_Sources File.cpp\n" + "\tDirectory.cpp\n" + "\tMain.cpp\n" + ")\n\n" + "add_executable(TabsPls ${TabsPls_Headers} ${TabsPls_Sources})\n\n" + "target_sources(TabsPls PRIVATE windows_util.h windows_util.c)") given_ast = ast.Ast() matches = given_ast.scan_all(given_source) self.assertEqual(len(matches), 4) expected_first_match = ast.SetNormalVariable( "TabsPls_Headers", ast.CMakeStringList([ ast.ListItemStringWithLocation("File.hpp", 38), ast.ListItemStringWithLocation("Directory.hpp", 47) ])) self.assertTrue(list(matches[0])[0].is_same(expected_first_match)) expected_second_match = ast.SetNormalVariable( "TabsPls_Sources", ast.CMakeStringList([ ast.ListItemStringWithLocation("File.cpp", 84), ast.ListItemStringWithLocation("Directory.cpp", 94), ast.ListItemStringWithLocation("Main.cpp", 109) ])) self.assertTrue(list(matches[1])[0].is_same(expected_second_match)) expected_third_match = ast.AddExecutable( "TabsPls", ast.CMakeStringList([ ast.VariableUseWithLocation("TabsPls_Headers", 144), ast.VariableUseWithLocation("TabsPls_Sources", 163) ])) self.assertTrue(list(matches[2])[0].is_same(expected_third_match)) expected_fourth_match = ast.TargetSources( "TabsPls", ast.CMakeStringList([ ast.ListItemStringWithLocation("windows_util.h", 215), ast.ListItemStringWithLocation("windows_util.c", 230) ])) self.assertTrue(list(matches[3])[0].is_same(expected_fourth_match))
def test_parse_quoted_list_item_containing_variable_use(self): givenAst = ast.Ast() result = givenAst.parse( "set(TabsPls_Source \"anything can be put here, and it will be only one item, even with a ${variable}\")" ) expected_result = ast.SetNormalVariable( "TabsPls_Source", ast.CMakeStringList([ ast.ListItemString( "\"anything can be put here, and it will be only one item, even with a ${variable}\"" ) ])) self.assertTrue(list(result)[0].is_same(expected_result))