/*
* $Id: CalendarBuilderTest.java [Apr 5, 2004]
*
* Copyright (c) 2004 Ben Fortuna
*/
package net.fortuna.ical4j.data;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
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.Component;
import net.fortuna.ical4j.model.Property;
import net.fortuna.ical4j.model.ValidationException;
import net.fortuna.ical4j.model.property.Description;
import net.fortuna.ical4j.util.CompatibilityHints;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Test case for iCalendarBuilder.
*
* @author benf
*/
public class CalendarBuilderTest extends TestCase {
private static Log log = LogFactory.getLog(CalendarBuilderTest.class);
private String filename;
private CalendarBuilder builder;
private boolean valid;
/**
* Constructor.
*
* @param method
* name of method to run in test case
* @param file
* an iCalendar filename
*/
public CalendarBuilderTest(final String method, final String file, final boolean valid) {
super(method);
this.filename = file;
this.valid = valid;
builder = new CalendarBuilder();
}
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
protected final void setUp() throws Exception {
CompatibilityHints.setHintEnabled(
CompatibilityHints.KEY_RELAXED_UNFOLDING, true);
CompatibilityHints.setHintEnabled(
CompatibilityHints.KEY_NOTES_COMPATIBILITY, true);
CompatibilityHints.setHintEnabled(
CompatibilityHints.KEY_RELAXED_VALIDATION, true);
}
/* (non-Javadoc)
* @see junit.framework.TestCase#tearDown()
*/
protected final void tearDown() throws Exception {
CompatibilityHints.setHintEnabled(
CompatibilityHints.KEY_RELAXED_UNFOLDING, false);
CompatibilityHints.setHintEnabled(
CompatibilityHints.KEY_NOTES_COMPATIBILITY, false);
CompatibilityHints.setHintEnabled(
CompatibilityHints.KEY_RELAXED_VALIDATION, false);
}
/**
* Class to test for Calendar build(InputStream).
*/
public final void testBuildInputStream() throws IOException {
FileInputStream fin = new FileInputStream(filename);
Calendar calendar = null;
try {
calendar = builder.build(fin);
assertNotNull("File [" + filename + "] invalid", calendar);
try {
calendar.validate();
assertTrue("File [" + filename + "] valid", valid);
} catch (ValidationException e) {
log.warn("Calendar file [" + filename + "] is invalid.", e);
assertFalse("File [" + filename + "] invalid", valid);
}
} catch (ParserException e) {
log.warn("File: " + filename, e);
assertFalse("File [" + filename + "] invalid", valid);
}
if (log.isInfoEnabled()) {
log.info("File: " + filename);
if (log.isDebugEnabled()) {
log.debug("Calendar:\n=========\n" + calendar.toString());
for (Iterator i = calendar.getComponents().iterator(); i.hasNext();) {
Component c = (Component) i.next();
Description description = (Description) c.getProperty(Property.DESCRIPTION);
if (description != null) {
log.debug("Description [" + description.getValue() + "]");
}
}
}
}
}
/* (non-Javadoc)
* @see junit.framework.TestCase#getName()
*/
/**
* Overridden to return the current iCalendar file under test.
*/
public final String getName() {
return super.getName() + " [" + filename + "]";
}
/**
* Test suite.
* @return test suite
*/
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 CalendarBuilderTest("testBuildInputStream", testFiles[i].getPath(), true));
}
// 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 CalendarBuilderTest("testBuildInputStream", testFiles[i].getPath(), false));
}
return suite;
}
}