package net.sourceforge.stripes.action; import org.testng.annotations.Test; import org.testng.annotations.BeforeMethod; import org.testng.annotations.AfterMethod; import org.testng.Assert; import java.io.*; import java.nio.charset.Charset; /** * Basic set of tests for the FileBean object. * * @author Tim Fennell */ public class FileBeanTests { public static final String[] LINES = {"Hello World!", "How have you been?"}; File from, to; @BeforeMethod(alwaysRun=true) public void setupFiles() throws IOException { // The from file this.from = File.createTempFile("foo", "bar"); PrintWriter out = null; try { out = new PrintWriter(this.from); out.println(LINES[0]); out.println(LINES[1]); } finally { try { out.close(); } catch (Exception e) {} } // A to file this.to = new File(System.getProperty("java.io.tmpdir"), "foo-" + System.currentTimeMillis()); } @AfterMethod(alwaysRun=true) public void cleanupFiles() { if (this.from != null && this.from.exists()) this.from.delete(); if (this.to != null && this.to.exists()) this.to.delete(); } /** Helper method to assert contents of post-copy file. */ private void assertContents(File toFile) throws IOException { BufferedReader in = null; try { in = new BufferedReader(new FileReader(toFile)); Assert.assertEquals(in.readLine(), LINES[0]); Assert.assertEquals(in.readLine(), LINES[1]); Assert.assertNull(in.readLine()); } finally { try { in.close(); } catch (Exception e) {} } } /** Helper method that copies a reader into a writer. */ private void copyReaderOut(Reader in) throws IOException { Writer out = null; try { out = new FileWriter(this.to); char[] buf = new char[1024]; for (int count; (count = in.read(buf)) > 0;) out.write(buf, 0, count); } finally { try { if (in != null) in.close(); } catch (Exception e) { } try { if (out != null) out.close(); } catch (Exception e) { } this.from.delete(); } } @Test(groups="fast") public void testBasicSave() throws Exception { FileBean bean = new FileBean(from, "text/plain", "somefile.txt"); bean.save(this.to); Assert.assertTrue(this.to.exists()); Assert.assertFalse(this.from.exists()); assertContents(this.to); } @Test(groups = "fast") public void testReader() throws Exception { FileBean bean = new FileBean(from, "text/plain", "somefile.txt"); copyReaderOut(bean.getReader()); Assert.assertTrue(this.to.exists()); Assert.assertFalse(this.from.exists()); assertContents(this.to); } @Test(groups = "fast") public void testReaderWithCharset1() throws Exception { String charset = Charset.defaultCharset().name(); FileBean bean = new FileBean(from, "text/plain", "somefile.txt", charset); copyReaderOut(bean.getReader()); Assert.assertTrue(this.to.exists()); Assert.assertFalse(this.from.exists()); assertContents(this.to); } @Test(groups = "fast") public void testReaderWithCharset2() throws Exception { String charset = Charset.defaultCharset().name(); FileBean bean = new FileBean(from, "text/plain", "somefile.txt"); copyReaderOut(bean.getReader(charset)); Assert.assertTrue(this.to.exists()); Assert.assertFalse(this.from.exists()); assertContents(this.to); } @Test(groups="fast") public void testSaveByCopy() throws Exception { FileBean bean = new FileBean(from, "text/plain", "somefile.txt"); bean.saveViaCopy(this.to); Assert.assertTrue(this.to.exists()); Assert.assertFalse(this.from.exists()); assertContents(this.to); } @Test(groups="fast") public void testSaveOverExistingFile() throws Exception { FileBean bean = new FileBean(from, "text/plain", "somefile.txt"); Assert.assertTrue(this.to.createNewFile()); bean.save(this.to); Assert.assertTrue(this.to.exists()); Assert.assertFalse(this.from.exists()); assertContents(this.to); } @Test(groups="fast") public void testSaveOverExistingFileWithContents() throws Exception { FileBean bean = new FileBean(from, "text/plain", "somefile.txt"); Assert.assertTrue(this.to.createNewFile()); PrintWriter out = null; try { out = new PrintWriter(this.to); out.println("This is not what we should read back after the save!"); out.println("If we get this text back we're in trouble!"); } finally { try { out.close(); } catch (Exception e) {} } bean.save(this.to); Assert.assertTrue(this.to.exists()); Assert.assertFalse(this.from.exists()); assertContents(this.to); } @Test(groups="fast") public void testIntoDirectoryThatDoesNotExistYet() throws Exception { FileBean bean = new FileBean(from, "text/plain", "somefile.txt"); File realTo = this.to; this.to = new File(this.to, "somechild.txt"); try { bean.save(this.to); Assert.assertTrue(this.to.exists()); Assert.assertFalse(this.from.exists()); assertContents(this.to); } finally { this.to.delete(); this.to = realTo; } } }