diff --git a/src/test/java/ScannerParserTests.java b/src/test/java/ScannerParserTests.java index a77b2ca..83f65b8 100644 --- a/src/test/java/ScannerParserTests.java +++ b/src/test/java/ScannerParserTests.java @@ -172,7 +172,7 @@ public class ScannerParserTests { @Test public void testMultipleClasses() { - Program resultAst = Compiler.generateASTFromFiles(List.of("src/test/testFiles/JavaTestfilesFeatures/MultipleClasses.java")); + Program resultAst = Compiler.generateASTFromFiles(List.of("src/test/testFiles/JavaTestfilesFeatures/MultipleClasses1.java")); assertEquals(AST_MultipleClasses.get(), resultAst); } diff --git a/src/test/java/testResources/CodeGen/Features/ByteCode_MultipleClasses.java b/src/test/java/testResources/CodeGen/Features/ByteCode_MultipleClasses.java index bbf52a1..13d9d1b 100644 --- a/src/test/java/testResources/CodeGen/Features/ByteCode_MultipleClasses.java +++ b/src/test/java/testResources/CodeGen/Features/ByteCode_MultipleClasses.java @@ -2,9 +2,120 @@ package testResources.CodeGen.Features; import de.maishai.typedast.Type; import de.maishai.typedast.typedclass.*; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import testResources.CodeGen.BytecodeTestUtil; import java.util.List; public class ByteCode_MultipleClasses { - // TODO: implement with multiple Files + + private BytecodeTestUtil util; + + @BeforeEach + public void setUp() { + try { + util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/MultipleClasses1.java", + "src/test/testFiles/CodeGenFeatures/MultipleClasses2.java"), "MultipleClasses1"); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Test + public void testConstructorCount() { + Assertions.assertEquals(1, util.getConstructorCount()); + } + + @Test + public void testConstructor() { + Assertions.assertEquals("MultipleClasses1", util.getConstructorNames().get(0)); + Assertions.assertEquals(0, util.getConstructorParameterCount(0)); + try { + Assertions.assertEquals("MultipleClasses1", util.invokeConstructor(new Class[]{}, null).getClass().getName()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Test + public void testMethodCount() { + Assertions.assertEquals(1, util.getMethodCount()); + } + + @Test + public void testMethodNames() { + Assertions.assertEquals("getIFromAnotherClass", util.getMethodNames().get(0)); + } + + @Test + public void testMethodReturnType() { + try { + Assertions.assertEquals("int", util.getMethodReturnType("getIFromAnotherClass", + new Class[]{})); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + public void testMethodParameters() { + try { + Assertions.assertEquals(0, + util.getMethodParameterCount("getIFromAnotherClass", new Class[]{})); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + public void testFieldCount() { + Assertions.assertEquals(1, util.getFieldCount()); + } + + @Test + public void testFieldNames() { + Assertions.assertTrue(util.getFieldNames().contains("anotherClass")); + } + + @Test + public void testFieldType() { + try { + Assertions.assertEquals("MultipleClasses2", util.getFieldTypes().get(0)); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + public void testFieldValues() { + try { + Assertions.assertEquals("MultipleClasses2", util.getFieldValue("anotherClass").getClass().getName()); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + public void testInvokeConstructor() { + try { + Object instance = util.invokeConstructor(new Class[]{}, null); + Assertions.assertEquals("MultipleClasses1", instance.getClass().getName()); + Assertions.assertEquals("MultipleClasses2", + util.getFieldValueOfObject(instance, "anotherClass").getClass().getName()); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + public void testInvokeGetIFromAnotherClass() { + try { + Assertions.assertEquals(4, + util.invokeMethod("getIFromAnotherClass", new Class[]{}, null)); + } catch (Exception e) { + Assertions.fail(); + } + } } \ No newline at end of file diff --git a/src/test/testFiles/CodeGenFeatures/MultipleClasses.java b/src/test/testFiles/CodeGenFeatures/MultipleClasses.java deleted file mode 100644 index 84c63bf..0000000 --- a/src/test/testFiles/CodeGenFeatures/MultipleClasses.java +++ /dev/null @@ -1,15 +0,0 @@ -public class MultipleClasses { - AnotherClass anotherClass; - - public MultipleClasses() { - this.anotherClass = new AnotherClass(); - } -} - -public class AnotherClass { - MultipleClasses multipleClasses; - - public AnotherClass() { - this.multipleClasses = new MultipleClasses(); - } -} \ No newline at end of file diff --git a/src/test/testFiles/CodeGenFeatures/MultipleClasses1.java b/src/test/testFiles/CodeGenFeatures/MultipleClasses1.java new file mode 100644 index 0000000..a86a301 --- /dev/null +++ b/src/test/testFiles/CodeGenFeatures/MultipleClasses1.java @@ -0,0 +1,11 @@ +public class MultipleClasses1 { + MultipleClasses2 anotherClass; + + public MultipleClasses1() { + this.anotherClass = new MultipleClasses2(); + } + + public int getIFromAnotherClass() { + return this.anotherClass.i; + } +} \ No newline at end of file diff --git a/src/test/testFiles/CodeGenFeatures/MultipleClasses2.java b/src/test/testFiles/CodeGenFeatures/MultipleClasses2.java new file mode 100644 index 0000000..43f2228 --- /dev/null +++ b/src/test/testFiles/CodeGenFeatures/MultipleClasses2.java @@ -0,0 +1,7 @@ +public class MultipleClasses2 { + int i; + + public MultipleClasses2() { + this.i = 4; + } +} \ No newline at end of file