(TestDefinition testDefinition)
| 109 | } |
| 110 | |
| 111 | protected void doTest(TestDefinition testDefinition) throws IOException { |
| 112 | // Load the test class |
| 113 | Path classFile = testDefinition.getClassFile(); |
| 114 | Assertions.assertTrue(Files.isRegularFile(classFile), classFile + " does not exist"); |
| 115 | processor.addClass(Files.readAllBytes(classFile), new Metadata()); |
| 116 | |
| 117 | // Load any additional classes |
| 118 | for (String additionalClass : testDefinition.additionalClasses) { |
| 119 | Path additionalClassFile = TEST_CLASSES_DIR.resolve(additionalClass + ".class"); |
| 120 | Assertions.assertTrue(Files.isRegularFile(additionalClassFile), additionalClassFile + " does not exist"); |
| 121 | processor.addClass(Files.readAllBytes(additionalClassFile), new Metadata()); |
| 122 | } |
| 123 | |
| 124 | |
| 125 | // Add transformers |
| 126 | for (String transformer : testDefinition.transformers) { |
| 127 | Path transformerFile = TEST_TRANSFORMERS_DIR.resolve(transformer + ".chasm"); |
| 128 | Assertions.assertTrue(Files.isRegularFile(transformerFile), transformerFile + " does not exist"); |
| 129 | Node node = Node.parse(transformerFile); |
| 130 | processor.addTransformer(new ChasmLangTransformer(transformer, node, processor.getContext())); |
| 131 | } |
| 132 | |
| 133 | // Process the data |
| 134 | List<ClassResult> processedClasses = processor.process(); |
| 135 | |
| 136 | // Find the result class by name |
| 137 | ClassReader resultClass = null; |
| 138 | for (ClassResult result : processedClasses) { |
| 139 | byte[] classBytes = result.getClassBytes(); |
| 140 | if (classBytes == null) { |
| 141 | continue; |
| 142 | } |
| 143 | |
| 144 | // Read basic class info |
| 145 | resultClass = new ClassReader(classBytes); |
| 146 | |
| 147 | // Convert the JVM binary name (e.g. org/example/Class$Inner) into |
| 148 | // the JLS binary name (e.g. org.example.Class$Inner) |
| 149 | String binaryName = resultClass.getClassName().replace('/', '.'); |
| 150 | if (binaryName.equals(testDefinition.testClass)) { |
| 151 | break; |
| 152 | } |
| 153 | } |
| 154 | |
| 155 | // Assert that the result class was found |
| 156 | Assertions.assertNotNull(resultClass); |
| 157 | |
| 158 | // Write class into string |
| 159 | StringWriter resultString = new StringWriter(); |
| 160 | TraceClassVisitor resultVisitor = new TraceClassVisitor(new PrintWriter(resultString) { |
| 161 | @Override |
| 162 | public void println() { |
| 163 | // Always use unix-style line endings |
| 164 | write('\n'); |
| 165 | } |
| 166 | }); |
| 167 | resultClass.accept(resultVisitor, 0); |
| 168 |
no test coverage detected