MCPcopy Create free account
hub / github.com/QuiltMC/chasm / doTest

Method doTest

chasm/src/test/java/org/quiltmc/chasm/TestsBase.java:111–185  ·  view source on GitHub ↗
(TestDefinition testDefinition)

Source from the content-addressed store, hash-verified

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

Callers 1

testRegisteredMethod · 0.95

Calls 15

parseMethod · 0.95
getClassFileMethod · 0.80
addClassMethod · 0.80
addTransformerMethod · 0.80
getContextMethod · 0.80
processMethod · 0.80
getClassNameMethod · 0.80
getResultFileMethod · 0.80
readStringMethod · 0.80
getParentMethod · 0.65
resolveMethod · 0.45
getClassBytesMethod · 0.45

Tested by

no test coverage detected