/*
* (c) Rob Gordon 2006
*/
package org.oddjob.io;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
import junit.framework.TestCase;
import org.apache.commons.beanutils.DynaBean;
import org.oddjob.ConverterHelper;
import org.oddjob.Oddjob;
import org.oddjob.OddjobLookup;
import org.oddjob.arooa.ArooaAnnotations;
import org.oddjob.arooa.ConfiguredHow;
import org.oddjob.arooa.MockArooaBeanDescriptor;
import org.oddjob.arooa.ParsingInterceptor;
import org.oddjob.arooa.convert.ArooaConverter;
import org.oddjob.arooa.deploy.NoAnnotations;
import org.oddjob.arooa.xml.XMLConfiguration;
import org.oddjob.state.ParentState;
import org.oddjob.tools.OddjobTestHelper;
import org.oddjob.tools.OurDirs;
public class FileTypeTest extends TestCase {
File ourFile;
@Override
protected void setUp() throws Exception {
super.setUp();
OurDirs dirs = new OurDirs();
ourFile = dirs.relative("work/io/FileTypeTest.dat");
}
// note: implement runnable solely that it get's
// proxied so it's configured in order in sequential job
// in testInOddjob().
public static class Bean implements Runnable {
File file;
File[] files;
InputStream is;
OutputStream os;
public void setFile(File file) {
this.file = file;
}
public File getFile() {
return file;
}
public void setFiles(File[] files) {
this.files = files;
}
public File[] getFiles() {
return files;
}
public void setIs(InputStream is) {
this.is = is;
}
public InputStream getIs() {
return is;
}
public void setOs(OutputStream os) {
this.os = os;
}
public OutputStream getOs() {
return os;
}
public void run() {}
}
public static class BeanArooa extends MockArooaBeanDescriptor {
@Override
public ParsingInterceptor getParsingInterceptor() {
return null;
}
@Override
public ConfiguredHow getConfiguredHow(String property) {
return ConfiguredHow.ATTRIBUTE;
}
@Override
public String getComponentProperty() {
return null;
}
@Override
public boolean isAuto(String property) {
return false;
}
@Override
public ArooaAnnotations getAnnotations() {
return new NoAnnotations();
}
}
public void testFileManefestation() throws Exception {
FileType test = new FileType();
test.setFile(ourFile);
ArooaConverter converter =
new ConverterHelper().getConverter();
Object v = converter.convert(test, File.class);
assertTrue(v instanceof File);
}
public void testInputStream() throws Exception {
ourFile.createNewFile();
FileType test = new FileType();
test.setFile(ourFile);
ArooaConverter converter =
new ConverterHelper().getConverter();
Object result = converter.convert(
test, InputStream.class);
assertTrue(result instanceof InputStream);
}
public void testOutputStream() throws Exception {
FileType test = new FileType();
test.setFile(ourFile);
ArooaConverter converter =
new ConverterHelper().getConverter();
Object result = converter.convert(
test, OutputStream.class);
assertTrue(result instanceof OutputStream);
}
public void testInOddjob() throws IOException {
ourFile.delete();
ourFile.createNewFile();
String xml =
"<oddjob>" +
" <job>" +
" <sequential>" +
" <jobs>" +
" <variables id='v'>" +
" <file>" +
" <file file='" + ourFile.getPath() + "'/>" +
" </file>" +
" </variables>" +
" <bean class='" + Bean.class.getName() + "' id='b'" +
" file='${v.file}' files='${v.file}' " +
"os='${v.file}' is='${v.file}'/>" +
" </jobs>" +
" </sequential>" +
" </job>" +
"</oddjob>";
Oddjob oj = new Oddjob();
oj.setConfiguration(new XMLConfiguration("TEST", xml));
oj.run();
assertEquals(ParentState.COMPLETE, oj.lastStateEvent().getState());
DynaBean bean = (DynaBean) new OddjobLookup(oj).lookup("b");
// check file
assertEquals(ourFile, bean.get("file"));
// check files
File[] files = (File[]) bean.get("files");
assertEquals(1, files.length);
assertEquals(ourFile, files[0]);
// check input output
OutputStream os = (OutputStream) bean.get("os");
os.write('A');
os.flush();
os.close();
InputStream is = (InputStream) bean.get("is");
char c = (char) is.read();
assertEquals('A', c);
is.close();
}
public void testNullFile() throws Exception {
FileType test = new FileType();
ArooaConverter converter =
new ConverterHelper().getConverter();
Object result = converter.convert(
test, File.class);
assertNull(result);
}
/**
* Property will be blank.
*/
public void testNullInOddjob() throws Exception {
String xml =
"<oddjob>" +
" <job>" +
" <properties id='props'>" +
" <values>" +
" <file key='no.file'/>" +
" </values>" +
" </properties>" +
" </job>" +
"</oddjob>";
Oddjob oddjob = new Oddjob();
oddjob.setConfiguration(new XMLConfiguration("TEST", xml));
oddjob.run();
assertEquals(ParentState.COMPLETE,
oddjob.lastStateEvent().getState());
OddjobLookup lookup = new OddjobLookup(oddjob);
Properties props =
lookup.lookup("props.properties", Properties.class);
assertEquals("", props.getProperty("no.file"));
oddjob.destroy();
}
public void testInvalidFileName() {
FileType test = new FileType();
test.setFile(new File("*"));
try {
test.toCanonicalFile();
fail("Should fail.");
} catch (IOException e) {
// expected.
}
}
public void testSerialisation()
throws IOException, ClassNotFoundException {
FileType test = new FileType();
test.setFile(new File("."));
FileType copy = OddjobTestHelper.copy(test);
assertEquals(copy.toCanonicalFile(), test.toCanonicalFile());
}
}