/* * $Id: CalendarOutputterTest.java [Apr 6, 2004] * * Copyright (c) 2004 Ben Fortuna */ package net.fortuna.ical4j.data; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStream; import java.io.StringWriter; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import net.fortuna.ical4j.FileOnlyFilter; import net.fortuna.ical4j.model.Calendar; import net.fortuna.ical4j.model.ValidationException; import net.fortuna.ical4j.util.CompatibilityHints; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Test case for iCalendarOutputter. * * @author benf */ public class CalendarOutputterTest extends TestCase { private static Log log = LogFactory.getLog(CalendarOutputterTest.class); private String filename; /** * @param method * @param file */ public CalendarOutputterTest(final String method, final String file) { super(method); this.filename = file; } /* (non-Javadoc) * @see junit.framework.TestCase#setUp() */ protected final void setUp() throws Exception { CompatibilityHints.setHintEnabled(CompatibilityHints.KEY_RELAXED_UNFOLDING, true); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ protected final void tearDown() throws Exception { CompatibilityHints.setHintEnabled(CompatibilityHints.KEY_RELAXED_UNFOLDING, false); } /** * @throws Exception */ public void testOutput() throws Exception { try { CalendarBuilder builder = new CalendarBuilder(); FileInputStream fin = new FileInputStream(filename); CalendarOutputter outputter = new CalendarOutputter(false, FoldingWriter.REDUCED_FOLD_LENGTH); OutputStream out = new ByteArrayOutputStream(); Calendar calendar = null; try { calendar = builder.build(fin); } catch (IOException e) { log.error("Error while parsing: " + filename, e); } catch (ParserException e) { log.error("Error while parsing: " + filename, e); } assertNotNull(calendar); outputter.setValidating(false); outputter.output(calendar, out); if (log.isDebugEnabled()) { log.debug(out.toString()); } BufferedReader bin = new BufferedReader(new UnfoldingReader(new FileReader(filename))); StringWriter rout = new StringWriter(); BufferedWriter bout = new BufferedWriter(rout); try { String line = null; while ((line = bin.readLine()) != null) { bout.write(line); bout.write('\n'); } } finally { bout.close(); bin.close(); } String rawData = rout.toString(); assertEquals("Output differed from expected: " + filename, rawData, out.toString()); } catch (IOException e) { log.error("Error while parsing: " + filename, e); throw e; } catch (ValidationException e) { log.error("Error while parsing: " + filename, e); throw e; } } /* (non-Javadoc) * @see junit.framework.TestCase#getName() */ /** * Overridden to return the current iCalendar file under test. */ public final String getName() { return super.getName() + " [" + filename + "]"; } /** * @return */ public static Test suite() { TestSuite suite = new TestSuite(); File[] testFiles = null; // valid tests.. testFiles = new File("etc/samples/valid").listFiles(new FileOnlyFilter()); for (int i = 0; i < testFiles.length; i++) { log.info("Sample [" + testFiles[i] + "]"); suite.addTest(new CalendarOutputterTest("testOutput", testFiles[i].getPath())); } // invalid tests.. testFiles = new File("etc/samples/invalid").listFiles(new FileOnlyFilter()); for (int i = 0; i < testFiles.length; i++) { log.info("Sample [" + testFiles[i] + "]"); suite.addTest(new CalendarOutputterTest("testOutput", testFiles[i].getPath())); } return suite; } }