package org.overture.vdm2jml.tests;
import java.lang.reflect.Method;
import java.util.Arrays;
import org.junit.Assert;
import org.junit.Test;
import org.overture.codegen.ir.STypeIR;
import org.overture.codegen.ir.types.ABoolBasicTypeIR;
import org.overture.codegen.ir.types.ACharBasicTypeIR;
import org.overture.codegen.ir.types.AIntNumericBasicTypeIR;
import org.overture.codegen.ir.types.ANat1NumericBasicTypeIR;
import org.overture.codegen.ir.types.ANatNumericBasicTypeIR;
import org.overture.codegen.ir.types.AQuoteTypeIR;
import org.overture.codegen.ir.types.ARatNumericBasicTypeIR;
import org.overture.codegen.ir.types.ARealNumericBasicTypeIR;
import org.overture.codegen.ir.types.ARecordTypeIR;
import org.overture.codegen.ir.types.AStringTypeIR;
import org.overture.codegen.ir.types.ATokenBasicTypeIR;
import org.overture.codegen.runtime.Utils;
import org.overture.codegen.vdm2jml.predgen.info.LeafTypeInfo;
public class LeafTypeCallTests
{
@Test
public void boolCheck()
{
assertMethod(ABoolBasicTypeIR.class, Object.class);
}
@Test
public void natCheck()
{
assertMethod(ANatNumericBasicTypeIR.class, Object.class);
}
@Test
public void nat1Check()
{
assertMethod(ANat1NumericBasicTypeIR.class, Object.class);
}
@Test
public void intCheck()
{
assertMethod(AIntNumericBasicTypeIR.class, Object.class);
}
@Test
public void ratCheck()
{
assertMethod(ARatNumericBasicTypeIR.class, Object.class);
}
@Test
public void realCheck()
{
assertMethod(ARealNumericBasicTypeIR.class, Object.class);
}
@Test
public void charCheck()
{
assertMethod(ACharBasicTypeIR.class, Object.class);
}
@Test
public void tokenCheck()
{
assertMethod(ATokenBasicTypeIR.class, Object.class);
}
@Test
public void quoteCheck()
{
assertMethod(AQuoteTypeIR.class, Object.class, Class.class);
}
@Test
public void recTest()
{
assertMethod(ARecordTypeIR.class, Object.class, Class.class);
}
@Test
public void stringTest()
{
assertMethod(AStringTypeIR.class, Object.class, Class.class);
}
private void assertMethod(Class<? extends STypeIR> type,
Class<?>... paramTypes)
{
String methodName = LeafTypeInfo.getUtilsCallMap().get(type);
Assert.assertNotNull("Could not find method name corresponding to type '"
+ type + "'", methodName);
Method method = null;
try
{
method = Utils.class.getMethod(methodName, paramTypes);
} catch (NoSuchMethodException | SecurityException e)
{
// Do nothing
}
Assert.assertNotNull("Could not find method corresponding to type ;"
+ type + "' with arguments "
+ Arrays.toString(paramTypes), method);
}
}