Skip to content

Commit

Permalink
Always preserve unrecognised components, properties and parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
benfortuna committed Oct 22, 2021
1 parent b04c15d commit 5c04533
Show file tree
Hide file tree
Showing 10 changed files with 179 additions and 173 deletions.
11 changes: 11 additions & 0 deletions src/main/java/net/fortuna/ical4j/model/AbstractContentBuilder.java
Expand Up @@ -4,6 +4,17 @@ public abstract class AbstractContentBuilder {

private final boolean allowIllegalNames;

/**
* Default constructor.
*/
public AbstractContentBuilder() {
this(true);
}

/**
*
* @param allowIllegalNames store unrecognised names as experimental content
*/
public AbstractContentBuilder(boolean allowIllegalNames) {
this.allowIllegalNames = allowIllegalNames;
}
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/net/fortuna/ical4j/model/ComponentBuilder.java
@@ -1,7 +1,6 @@
package net.fortuna.ical4j.model;

import net.fortuna.ical4j.model.component.XComponent;
import net.fortuna.ical4j.util.CompatibilityHints;

import java.util.Collections;
import java.util.List;
Expand All @@ -16,12 +15,16 @@ public class ComponentBuilder<T extends Component> extends AbstractContentBuilde

private ComponentList<Component> subComponents = new ComponentList<>();

public ComponentBuilder() {
this(Collections.emptyList());
public ComponentBuilder(boolean allowIllegalNames) {
this(Collections.emptyList(), allowIllegalNames);
}

public ComponentBuilder(List<ComponentFactory<?>> factories) {
super(CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING));
this(factories, true);
}

public ComponentBuilder(List<ComponentFactory<?>> factories, boolean allowIllegalNames) {
super(allowIllegalNames);
this.factories = factories;
}

Expand Down
2 changes: 0 additions & 2 deletions src/main/java/net/fortuna/ical4j/model/ParameterBuilder.java
@@ -1,7 +1,6 @@
package net.fortuna.ical4j.model;

import net.fortuna.ical4j.model.parameter.XParameter;
import net.fortuna.ical4j.util.CompatibilityHints;
import org.apache.commons.codec.DecoderException;

import java.net.URISyntaxException;
Expand All @@ -24,7 +23,6 @@ public ParameterBuilder() {
}

public ParameterBuilder(List<ParameterFactory<? extends Parameter>> factories) {
super(CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING));
this.factories = factories;
}

Expand Down
2 changes: 0 additions & 2 deletions src/main/java/net/fortuna/ical4j/model/PropertyBuilder.java
@@ -1,7 +1,6 @@
package net.fortuna.ical4j.model;

import net.fortuna.ical4j.model.property.XProperty;
import net.fortuna.ical4j.util.CompatibilityHints;
import org.apache.commons.codec.DecoderException;

import java.io.IOException;
Expand Down Expand Up @@ -30,7 +29,6 @@ public PropertyBuilder() {
}

public PropertyBuilder(List<PropertyFactory<? extends Property>> factories) {
super(CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING));
this.factories = factories;
}

Expand Down
@@ -1,6 +1,7 @@
package net.fortuna.ical4j.model

import net.fortuna.ical4j.model.component.VEvent
import net.fortuna.ical4j.model.component.XComponent
import spock.lang.Specification

class ComponentBuilderTest extends Specification {
Expand All @@ -19,7 +20,7 @@ class ComponentBuilderTest extends Specification {
c == new ContentBuilder().vevent()
}

def 'test build invalid component'() {
def 'test build unrecognised component'() {
given: 'a component builder instance'
ComponentBuilder builder = [Arrays.asList(new VEvent.Factory())]

Expand All @@ -29,7 +30,7 @@ class ComponentBuilderTest extends Specification {
when: 'build method called'
Component c = builder.build()

then: 'an exception is thrown'
thrown(IllegalArgumentException)
then: 'component vtodo is unrecognised'
c instanceof XComponent
}
}
Expand Up @@ -2,6 +2,7 @@ package net.fortuna.ical4j.model


import net.fortuna.ical4j.model.parameter.Value
import net.fortuna.ical4j.model.parameter.XParameter
import net.fortuna.ical4j.util.CompatibilityHints
import spock.lang.Specification

Expand Down Expand Up @@ -29,7 +30,7 @@ class ParameterBuilderTest extends Specification {
p == new ContentBuilder().value('test')
}

def 'test build invalid parameter'() {
def 'test build unrecognised parameter'() {
given: 'a parameter builder instance'
ParameterBuilder builder = [Arrays.asList(new Value.Factory())]

Expand All @@ -39,7 +40,7 @@ class ParameterBuilderTest extends Specification {
when: 'build method called'
Parameter p = builder.build()

then: 'an exception is thrown'
thrown(IllegalArgumentException)
then: 'type param is unrecognised'
p instanceof XParameter
}
}
Expand Up @@ -35,6 +35,7 @@
import junit.framework.TestCase;
import net.fortuna.ical4j.model.*;
import net.fortuna.ical4j.model.component.VEvent;
import net.fortuna.ical4j.model.parameter.XParameter;
import net.fortuna.ical4j.util.Strings;

import java.io.StringReader;
Expand Down Expand Up @@ -90,11 +91,9 @@ public void testCustomParameter() throws Exception {

// try to build with a regular builder
CalendarBuilder builder = new CalendarBuilder();
try {
builder.build(new StringReader(VEVENT_WITH_SCHEDULE_STATUS));
fail("expected exception");
} catch (ParserException ioe) {
}
Calendar cal = builder.build(new StringReader(VEVENT_WITH_SCHEDULE_STATUS));
assertTrue(cal.getComponent(Component.VEVENT).getProperty(Property.ATTENDEE)
.getParameter(SCHEDULE_STATUS) instanceof XParameter);

// try to build with a custom parameter factory
final ParameterFactoryRegistry paramFactory = new ParameterFactoryRegistry();
Expand All @@ -118,7 +117,7 @@ public Parameter createParameter(final String value) throws URISyntaxException {
paramFactory,
TimeZoneRegistryFactory.getInstance().createRegistry());

Calendar cal = builder.build(new StringReader(VEVENT_WITH_SCHEDULE_STATUS));
cal = builder.build(new StringReader(VEVENT_WITH_SCHEDULE_STATUS));

VEvent event = (VEvent)cal.getComponent(Component.VEVENT);
VEvent eventBis = (VEvent)event.copy();
Expand Down
Expand Up @@ -120,13 +120,8 @@ public static TestSuite suite() {
TestSuite suite = new TestSuite();
suite.addTest(new CalendarParserImplTest("/samples/invalid/google_aus_holidays.ics", 11));
suite.addTest(new CalendarParserImplTest("/samples/invalid/13-MoonPhase.ics", 215));

suite.addTest(new CalendarParserImplTest("/samples/invalid/CalendarDataFile.ics", 25));

suite.addTest(new CalendarParserImplTest("/samples/invalid/overlaps.ics", 1));
suite.addTest(new CalendarParserImplTest("/samples/invalid/schedule-unstable.ics", 196));
suite.addTest(new CalendarParserImplTest("/samples/invalid/smallcluster.ics", 12));
suite.addTest(new CalendarParserImplTest("/samples/invalid/twinkle.ics", 67));
suite.addTest(new CalendarParserImplTest("/samples/invalid/zidestoreical4jbomb.ics", 10));
return suite;
}
Expand Down

0 comments on commit 5c04533

Please sign in to comment.