package testAux; import helpers.TestHelper; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.List; import org.junit.Assert; import org.junit.Test; import facade.Configuration; import facade.L42; import facade.PData; import facade.Parser; import platformSpecific.inMemoryCompiler.InMemoryJavaCompiler; import platformSpecific.inMemoryCompiler.RunningUtils; import platformSpecific.inMemoryCompiler.InMemoryJavaCompiler.CompilationError; import platformSpecific.inMemoryCompiler.InMemoryJavaCompiler.SourceFile; import platformSpecific.javaTranslation.Resources; import platformSpecific.javaTranslation.Translator; import sugarVisitors.Desugar; import sugarVisitors.InjectionOnCore; import ast.ExpCore; import ast.ExpCore.ClassB; import ast.ExpCore.ClassB.Phase; import auxiliaryGrammar.Functions; import programReduction.Program; public class TranslationTest { @Test public void t1(){tester( "{ }"," void","platformSpecific.javaTranslation.Resources$Void");} @Test public void t2a(){tester( "{ C:{ class method Void foo() void } }"," C.foo()","platformSpecific.javaTranslation.Resources$Void");} @Test public void t2b(){tester( "{ C:{k() class method Void foo() void } }"," C.foo()","platformSpecific.javaTranslation.Resources$Void");} @Test public void t3(){tester( "{ C:{k() method Void foo() void } }"," C.k().foo()","platformSpecific.javaTranslation.Resources$Void");} @Test public void t4(){tester( "{ C:{() method Void foo() void method C foo(C x) x} }"," C().foo(x:C()).foo()","platformSpecific.javaTranslation.Resources$Void");} @Test public void t5(){tester( "{ C:{() method Void foo() void method C (C x) x} }"," C()(x:C()).foo()","platformSpecific.javaTranslation.Resources$Void");} @Test public void t6(){tester( "{ }"," { return void }","platformSpecific.javaTranslation.Resources$Void");} @Test public void t7(){tester( "{ A:{B b Void v class method This (fwd B b, Void v)} B:{A a class method This (fwd A a)} }"," (aa=A(b:bb,v:void) bb=B(a:aa) bb.a().b().a().v() )","platformSpecific.javaTranslation.Resources$Void");} @Test public void t8(){tester( "{ A:{A a,Void v, class method This (fwd A a, Void v)} }"," (aa=A(a:aa,v:void) aa.a().a().a().v() )","platformSpecific.javaTranslation.Resources$Void");} @Test public void t9(){tester( "{ A:{() implements IA method foo() void} IA:{interface method Void foo() } }"," A().foo()","platformSpecific.javaTranslation.Resources$Void");} public void tester(String cbStr,String eStr,String nameRes) { TestHelper.configureForTest(); Program p=runTypeSystem(cbStr); ExpCore _e=Desugar.of(Parser.parse(null,eStr)).accept(new InjectionOnCore()); ExpCore e = newTypeSystem.TypeSystem.instance().topTypeExpVoid(p, _e); Translator code=Resources.withPDo(new PData(p),()->Translator.translateProgram(p, e)); System.out.println(code); Object o=Resources.withPDo(new PData(p),()->code.runMap()); Assert.assertEquals(o.getClass().getName(), nameRes); } private static Program runTypeSystem(String scb1) { ClassB cb1=(ClassB)Desugar.of(Parser.parse(null,scb1)).accept(new InjectionOnCore()); Program p=Program.emptyLibraryProgram(); ClassB cb=newTypeSystem.TypeSystem.instance().topTypeLib(Phase.Coherent, p.evilPush(cb1)); return p.evilPush(cb); } }