package is.L42.connected.withSafeOperators; import static helpers.TestHelper.getClassB; import static helpers.TestHelper.lineNumber; import static org.junit.Assert.fail; import facade.Configuration; import facade.L42; import helpers.TestHelper; import java.util.Arrays; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; import platformSpecific.javaTranslation.Resources; import ast.Ast; import ast.ExpCore.ClassB; import auxiliaryGrammar.Functions; import programReduction.Program; @RunWith(Parameterized.class) public class TestSum { @Parameter(0) public int _lineNumber; @Parameter(1) public String _cb1; @Parameter(2) public String _cb2; @Parameter(3) public String _expected; @Parameter(4) public boolean isError; @Parameters(name = "{index}: line {0}") public static List<Object[]> createData() { return Arrays.asList(new Object[][] { { lineNumber(),"{B:{}}","{C:{}}","{B:{} C:{}}",false },{ lineNumber(),"{()}","{B:{()}}","{() B:{()} }",false },{ lineNumber(),"{B://@private\n{}}","{}","{B__0_0://@private\n{}}",false },{ lineNumber(),"{B://@private\n{}}","{}","{B__0_0://@private\n{}}",false//twice the same, to test that we clear the used names },{ lineNumber(),"{B://@private\n{}}","{B://@private\n{}}","{B__0_0://@private\n{} B__1_0://@private\n{} }",false },{ lineNumber(),"{B:{method Void m()}}","{B:{method B m()}}", "{Kind:{//@stringU\n//MethodClash\n}" +"Path:{//@.B\n}" +"Left:{//@stringU\n//method Void m()\n}" +"Right:{//@stringU\n//method This0 m()\n}" +"LeftKind:{//@stringU\n//AbstractMethod\n}" +"RightKind:{//@stringU\n//AbstractMethod\n}" +"DifferentParameters:{//@stringU\n//[]\n}" +"DifferentReturnType:{//@stringU\n//true\n}" +"DifferentThisMdf:{//@stringU\n//false\n}" +"IncompatibleException:{//@stringU\n//false\n}}", true },{ lineNumber(),"{B:{method Void m()}}","{I:{interface method Void m()}B:{ implements I}}", "{Kind:{//@stringU\n//MethodClash\n}" +"Path:{//@.B\n}" +"Left:{//@stringU\n//method Void m()\n}" +"Right:{//@stringU\n//method Void m()\n}" +"LeftKind:{//@stringU\n//AbstractMethod\n}" +"RightKind:{//@stringU\n//InterfaceAbstractMethod\n}" +"DifferentParameters:{//@stringU\n//[]\n}" +"DifferentReturnType:{//@stringU\n//false\n}" +"DifferentThisMdf:{//@stringU\n//false\n}" +"IncompatibleException:{//@stringU\n//false\n}}", true },{ lineNumber(),"{J:{interface method Void m()} B:{ implements J}}","{I:{interface method Void m()}B:{ implements I}}", "{Kind:{//@stringU\n//ClassClash\n}" +"Path:{//@.B\n}" +"ConflictingImplementedInterfaces:{//[@.J, @.I]\n}}", true },{ lineNumber(),"{B:{method This0 m()}}","{B:{method B m()}}","{B:{method This0 m()} }",false },{ lineNumber(),"{B__0fred://@private\n{}}","{}", "{B_$%0fred__0_0://@private\n{}}",false },{ lineNumber(),"{B__0_0://@private\n{}}","{B__0_1://@private\n{}}", "{B__0_0://@private\n{} B__0_1://@private\n{}}",false },{ lineNumber(),"{B__0_0://@private\n{}}","{B__1_0://@private\n{}}", "{B__0_0://@private\n{} B__0_1://@private\n{}}",false //TODO: test sum private state plus public state is ok },{ lineNumber(), "{I1:{interface implements I2} I2:{interface} }", "{I1:{interface } I2:{interface implements I1} }", "{I1:{interface implements I2} I2:{interface implements I1} }", false }});} @Test public void test() { TestHelper.configureForTest(); ClassB cb1=getClassB(_cb1); ClassB cb2=getClassB(_cb2); ClassB expected=getClassB(_expected); if(!isError){ ClassB res=_Sum.sum(Program.emptyLibraryProgram(),cb1,cb2); TestHelper.assertEqualExp(expected,res); } else{ try{_Sum.sum(Program.emptyLibraryProgram(),cb1,cb2);fail("error expected");} catch(Resources.Error err){ ClassB res=(ClassB)err.unbox; TestHelper.assertEqualExp(expected,res); } } } }