package me.tomassetti.turin.compiler; import com.google.common.collect.ImmutableList; import me.tomassetti.turin.classloading.TurinClassLoader; import me.tomassetti.turin.classloading.ClassFileDefinition; import me.tomassetti.turin.parser.Parser; import me.tomassetti.turin.parser.ast.TurinFile; import org.junit.Test; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.List; public class AdvancedExamplesCompilationTest extends AbstractCompilerTest { @Test public void compileFormatter1() throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException, IOException { TurinFile turinFile = new Parser().parse(this.getClass().getResourceAsStream("/examples/formatter1.to")); // generate bytecode Compiler.Options options = new Compiler.Options(); List<String> jars = ImmutableList.of("src/test/resources/jars/javaparser-core-2.2.1.jar"); options.setClassPathElements(jars); Compiler instance = new Compiler(getResolverFor(turinFile, jars), options); List<ClassFileDefinition> classFileDefinitions = instance.compile(turinFile, new MyErrorCollector()); TurinClassLoader turinClassLoader = new TurinClassLoader(); for (ClassFileDefinition classFileDefinition : classFileDefinitions) { Class clazz = turinClassLoader.addClass(classFileDefinition.getName(), classFileDefinition.getBytecode()); clazz.getName(); } } @Test public void compileFormatter2() throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException, IOException { TurinFile turinFile = new Parser().parse(this.getClass().getResourceAsStream("/examples/formatter2.to")); // generate bytecode Compiler.Options options = new Compiler.Options(); List<String> jars = ImmutableList.of("src/test/resources/jars/javaparser-core-2.2.1.jar"); options.setClassPathElements(jars); Compiler instance = new Compiler(getResolverFor(turinFile, jars), options); List<ClassFileDefinition> classFileDefinitions = instance.compile(turinFile, new MyErrorCollector()); TurinClassLoader turinClassLoader = new TurinClassLoader(); for (ClassFileDefinition classFileDefinition : classFileDefinitions) { Class clazz = turinClassLoader.addClass(classFileDefinition.getName(), classFileDefinition.getBytecode()); clazz.getName(); } } @Test public void compileFormatter3() throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException, IOException { TurinFile turinFile = new Parser().parse(this.getClass().getResourceAsStream("/examples/formatter3.to")); // generate bytecode Compiler.Options options = new Compiler.Options(); List<String> jars = ImmutableList.of("src/test/resources/jars/javaparser-core-2.2.1.jar"); options.setClassPathElements(jars); Compiler instance = new Compiler(getResolverFor(turinFile, jars), options); List<ClassFileDefinition> classFileDefinitions = instance.compile(turinFile, new MyErrorCollector()); TurinClassLoader turinClassLoader = new TurinClassLoader(); for (ClassFileDefinition classFileDefinition : classFileDefinitions) { Class clazz = turinClassLoader.addClass(classFileDefinition.getName(), classFileDefinition.getBytecode()); clazz.getName(); } } }