package tests.antlrParsers.moduleParser; import static org.junit.Assert.assertTrue; import org.antlr.v4.runtime.ANTLRInputStream; import org.antlr.v4.runtime.CommonTokenStream; import org.junit.Test; import antlr.C.ModuleLexer; import antlr.C.ModuleParser; import antlr.C.ModuleParser.Class_defContext; public class ClassDeclarationTest { private ModuleParser createParser(String input) { ANTLRInputStream inputStream = new ANTLRInputStream(input); ModuleLexer lex = new ModuleLexer(inputStream); CommonTokenStream tokens = new CommonTokenStream(lex); ModuleParser parser = new ModuleParser(tokens); return parser; } @Test public void testSimpleStructDef() { String input = "struct foo{int x;};"; ModuleParser parser = createParser(input); String output = parser.simple_decl().toStringTree(parser); System.out.println(output); assertTrue(output .startsWith("(simple_decl (var_decl (class_def struct (class_name (identifier foo))")); } @Test public void testAnonymousStructDef() { String input = "struct {int x;}v;"; ModuleParser parser = createParser(input); String output = parser.simple_decl().toStringTree(parser); assertTrue(output .startsWith("(simple_decl (var_decl (class_def struct {")); } @Test public void testStructureInitArray() { String input = "struct archive_contents" + "{ const char *f; struct contents *c; } files[] " + "= {{\"sparse\",archive_contents_sparse }, {\"sparse2\", archive_contents_sparse2} };"; ModuleParser parser = createParser(input); String output = parser.simple_decl().toStringTree(parser); System.out.println(output); assertTrue(output.contains("assign_expr")); } @Test public void testStructureInitSimple() { String input = "struct foo{ int x; } y;"; ModuleParser parser = createParser(input); String output = parser.simple_decl().toStringTree(parser); System.out.println(output); assertTrue(output .startsWith("(simple_decl (var_decl (class_def struct (class_name (identifier foo)) { int x ; }) (init_declarator_list (init_declarator (declarator (identifier y))) ;)))")); } @Test public void testFunctionPrototype() { String input = "int foo(int x);"; ModuleParser parser = createParser(input); String output = parser.simple_decl().toStringTree(parser); System.out.println(output); assertTrue(output .startsWith("(simple_decl (var_decl (type_name (base_type int)) (init_declarator_list (init_declarator (declarator (identifier foo) (type_suffix (param_type_list ( (param_type")); } @Test public void testClassContentExtraction() { String input = "class foo{ foobar; }"; ModuleParser parser = createParser(input); Class_defContext class_def = parser.class_def(); int startIndex = class_def.OPENING_CURLY().getSymbol().getTokenIndex(); int stopIndex = class_def.stop.getTokenIndex(); assertTrue((startIndex == 2) && (stopIndex == 5)); } }