package php.runtime.memory.support;
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.Memory;
import php.runtime.env.Environment;
import php.runtime.env.TraceInfo;
import php.runtime.memory.LongMemory;
import php.runtime.memory.StringMemory;
import static org.junit.Assert.*;
@RunWith(JUnit4.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MemoryOperationTest {
private static class TestClass {
protected Memory memory;
private TestClass(Memory memory) {
this.memory = memory;
}
public Memory getMemory() {
return memory;
}
}
@Test
public void testGlobal() throws Throwable {
assertNull(MemoryOperation.get(TestClass.class, null));
MemoryOperation.register(new MemoryOperation<TestClass>() {
@Override
public Class<?>[] getOperationClasses() {
return new Class<?>[]{TestClass.class};
}
@Override
public TestClass convert(Environment env, TraceInfo trace, Memory arg) throws Throwable {
return new TestClass(arg);
}
@Override
public Memory unconvert(Environment env, TraceInfo trace, TestClass arg) throws Throwable {
return arg.getMemory();
}
});
assertNotNull(MemoryOperation.get(TestClass.class, null));
MemoryOperation op = MemoryOperation.get(TestClass.class, null);
assertEquals(Memory.NULL, ((TestClass)op.convert(null, null, Memory.NULL)).getMemory());
assertEquals(Memory.NULL, op.unconvert(null, null, new TestClass(Memory.NULL)));
}
@Test
public void testString() throws Throwable {
MemoryOperation operation = MemoryOperation.get(String.class, null);
assertEquals("foobar", operation.convert(null, null, StringMemory.valueOf("foobar")));
assertEquals("foobar", operation.unconvert(null, null, "foobar").toString());
assertTrue(operation.unconvert(null, null, "foobar") instanceof StringMemory);
}
@Test
public void testInteger() throws Throwable {
MemoryOperation operation = MemoryOperation.get(Integer.class, null);
assertEquals(123, operation.convert(null, null, LongMemory.valueOf(123)));
assertEquals(123, operation.unconvert(null, null, 123).toInteger());
assertTrue(operation.unconvert(null, null, 123) instanceof LongMemory);
}
}