package org.develnext.jphp.core.compiler.jvm;
import org.junit.Assert;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.junit.runners.MethodSorters;
import php.runtime.common.HintType;
import php.runtime.memory.*;
import php.runtime.Memory;
import php.runtime.reflection.ParameterEntity;
@RunWith(JUnit4.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TypeHintingTest extends JvmCompilerCase {
@Test
public void testArray(){
check("type_hinting/array.php", true);
}
@Test
public void testArrayRef(){
check("type_hinting/array_ref.php", true);
}
@Test
public void testArrayDefault(){
check("type_hinting/array_default.php", true);
}
@Test
public void testCallable(){
check("type_hinting/callable.php", true);
}
@Test
public void testCallableRef(){
check("type_hinting/callable_ref.php", true);
}
@Test
public void testObject(){
check("type_hinting/object.php", true);
}
@Test
public void testObjectDefNull(){
check("type_hinting/object_def_null.php", true);
}
/*@Test
public void testNumber(){
check("type_hinting/number.php", true);
}*/
@Test
public void testCoreNumber(){
ParameterEntity param = new ParameterEntity(null);
param.setType(HintType.NUMBER);
Assert.assertFalse(param.checkTypeHinting(null, new StringMemory("")));
Assert.assertFalse(param.checkTypeHinting(null, new ObjectMemory(null)));
Assert.assertFalse(param.checkTypeHinting(null, new ArrayMemory()));
Assert.assertFalse(param.checkTypeHinting(null, Memory.NULL));
Assert.assertFalse(param.checkTypeHinting(null, Memory.FALSE));
Assert.assertFalse(param.checkTypeHinting(null, Memory.TRUE));
Assert.assertTrue(param.checkTypeHinting(null, new LongMemory(0)));
Assert.assertTrue(param.checkTypeHinting(null, new DoubleMemory(0)));
}
@Test
public void testCoreScalar(){
ParameterEntity param = new ParameterEntity(null);
param.setType(HintType.SCALAR);
Assert.assertTrue(param.checkTypeHinting(null, new StringMemory("")));
Assert.assertFalse(param.checkTypeHinting(null, new ObjectMemory(null)));
Assert.assertFalse(param.checkTypeHinting(null, new ArrayMemory()));
Assert.assertFalse(param.checkTypeHinting(null, Memory.NULL));
Assert.assertTrue(param.checkTypeHinting(null, Memory.FALSE));
Assert.assertTrue(param.checkTypeHinting(null, Memory.TRUE));
Assert.assertTrue(param.checkTypeHinting(null, new LongMemory(0)));
Assert.assertTrue(param.checkTypeHinting(null, new DoubleMemory(0)));
}
@Test
public void testCoreInt(){
ParameterEntity param = new ParameterEntity(null);
param.setType(HintType.INT);
Assert.assertFalse(param.checkTypeHinting(null, new StringMemory("")));
Assert.assertFalse(param.checkTypeHinting(null, new ObjectMemory(null)));
Assert.assertFalse(param.checkTypeHinting(null, new ArrayMemory()));
Assert.assertFalse(param.checkTypeHinting(null, Memory.NULL));
Assert.assertFalse(param.checkTypeHinting(null, Memory.FALSE));
Assert.assertFalse(param.checkTypeHinting(null, Memory.TRUE));
Assert.assertTrue(param.checkTypeHinting(null, new LongMemory(0)));
Assert.assertFalse(param.checkTypeHinting(null, new DoubleMemory(0)));
}
@Test
public void testCoreDouble(){
ParameterEntity param = new ParameterEntity(null);
param.setType(HintType.DOUBLE);
Assert.assertFalse(param.checkTypeHinting(null, new StringMemory("")));
Assert.assertFalse(param.checkTypeHinting(null, new ObjectMemory(null)));
Assert.assertFalse(param.checkTypeHinting(null, new ArrayMemory()));
Assert.assertFalse(param.checkTypeHinting(null, Memory.NULL));
Assert.assertFalse(param.checkTypeHinting(null, Memory.FALSE));
Assert.assertFalse(param.checkTypeHinting(null, Memory.TRUE));
Assert.assertFalse(param.checkTypeHinting(null, new LongMemory(0)));
Assert.assertTrue(param.checkTypeHinting(null, new DoubleMemory(0)));
}
@Test
public void testCoreString(){
ParameterEntity param = new ParameterEntity(null);
param.setType(HintType.STRING);
Assert.assertTrue(param.checkTypeHinting(null, new StringMemory("")));
Assert.assertFalse(param.checkTypeHinting(null, new ObjectMemory(null)));
Assert.assertFalse(param.checkTypeHinting(null, new ArrayMemory()));
Assert.assertFalse(param.checkTypeHinting(null, Memory.NULL));
Assert.assertFalse(param.checkTypeHinting(null, Memory.FALSE));
Assert.assertFalse(param.checkTypeHinting(null, Memory.TRUE));
Assert.assertFalse(param.checkTypeHinting(null, new LongMemory(0)));
Assert.assertFalse(param.checkTypeHinting(null, new DoubleMemory(0)));
}
@Test
public void testCoreBool(){
ParameterEntity param = new ParameterEntity(null);
param.setType(HintType.BOOLEAN);
Assert.assertFalse(param.checkTypeHinting(null, new StringMemory("")));
Assert.assertFalse(param.checkTypeHinting(null, new ObjectMemory(null)));
Assert.assertFalse(param.checkTypeHinting(null, new ArrayMemory()));
Assert.assertFalse(param.checkTypeHinting(null, Memory.NULL));
Assert.assertTrue(param.checkTypeHinting(null, Memory.FALSE));
Assert.assertTrue(param.checkTypeHinting(null, Memory.TRUE));
Assert.assertFalse(param.checkTypeHinting(null, new LongMemory(0)));
Assert.assertFalse(param.checkTypeHinting(null, new DoubleMemory(0)));
}
}