package php.runtime.loader.dump;
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.common.Modifier;
import php.runtime.env.Context;
import php.runtime.env.Environment;
import php.runtime.reflection.MethodEntity;
import php.runtime.reflection.ParameterEntity;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
@RunWith(JUnit4.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MethodDumperTest {
private final Context context = new Context(new File("unknown"));
private final Environment environment = new Environment();
private final MethodDumper dumper = new MethodDumper(context, environment, true);
@Test
public void testBasic() throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
MethodEntity entity = new MethodEntity(context);
entity.setName("foobar");
entity.setAbstract(true);
entity.setFinal(true);
entity.setModifier(Modifier.PROTECTED);
entity.setAbstractable(true);
entity.setImmutable(true);
entity.setReturnReference(true);
dumper.save(entity, output);
MethodEntity copyEntity = dumper.load(new ByteArrayInputStream(output.toByteArray()));
Assert.assertEquals("foobar", copyEntity.getName());
Assert.assertEquals(Modifier.PROTECTED, copyEntity.getModifier());
Assert.assertTrue(copyEntity.isAbstract());
Assert.assertTrue(copyEntity.isFinal());
Assert.assertTrue(copyEntity.isAbstractable());
Assert.assertTrue(copyEntity.isImmutable());
Assert.assertTrue(copyEntity.isReturnReference());
}
@Test
public void testWithArgs() throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
MethodEntity entity = new MethodEntity(context);
entity.setName("foobar");
entity.setModifier(Modifier.PUBLIC);
entity.setParameters(new ParameterEntity[]{
new ParameterEntity(context){{
setName("param1");
setType(HintType.ARRAY);
}},
new ParameterEntity(context){{
setName("param2");
}}
});
dumper.save(entity, output);
MethodEntity copyEntity = dumper.load(new ByteArrayInputStream(output.toByteArray()));
Assert.assertEquals("foobar", copyEntity.getName());
Assert.assertEquals(2, copyEntity.getParameters().length);
Assert.assertEquals("param1", copyEntity.getParameters()[0].getName());
Assert.assertEquals(HintType.ARRAY, copyEntity.getParameters()[0].getType());
Assert.assertEquals("param2", copyEntity.getParameters()[1].getName());
}
}