package me.august.lumen;
import me.august.lumen.compile.resolve.convert.ConversionStrategy;
import me.august.lumen.compile.resolve.convert.Conversions;
import me.august.lumen.compile.resolve.convert.types.PrimitiveWidening;
import me.august.lumen.compile.resolve.convert.types.ReferenceWidening;
import me.august.lumen.compile.resolve.convert.types.UnboxingConversion;
import me.august.lumen.compile.resolve.lookup.ClassLookup;
import me.august.lumen.compile.resolve.lookup.DependencyManager;
import org.junit.Assert;
import org.junit.Test;
import org.objectweb.asm.Type;
public class ConversionTest {
@Test
public void testConversions() {
Type t1;
Type t2;
ConversionStrategy cs;
ClassLookup lookup = new DependencyManager();
t1 = Type.INT_TYPE;
t2 = Type.DOUBLE_TYPE;
cs = Conversions.convert(t1, t2, lookup);
Assert.assertTrue(cs.getSteps().get(0) instanceof PrimitiveWidening);
t1 = Type.DOUBLE_TYPE;
t2 = Type.INT_TYPE;
cs = Conversions.convert(t1, t2, lookup);
Assert.assertEquals(null, cs.getSteps().get(0));
t1 = Type.getType(Integer.class);
t2 = Type.DOUBLE_TYPE;
cs = Conversions.convert(t1, t2, lookup);
Assert.assertTrue(cs.getSteps().get(0) instanceof UnboxingConversion);
Assert.assertTrue(cs.getSteps().get(1) instanceof PrimitiveWidening);
t1 = Type.getType(Integer.class);
t2 = Type.getType(Number.class);
cs = Conversions.convert(t1, t2, lookup);
Assert.assertTrue(cs.getSteps().get(0) instanceof ReferenceWidening);
}
}