From 5b1d0cd467d6ed90eb268af3795f2f8d628619b1 Mon Sep 17 00:00:00 2001 From: "Andreas Penski (init)" Date: Wed, 29 Apr 2020 13:55:12 +0200 Subject: [PATCH] (fix) tests --- .../api/ResolvingConfigurationStrategy.java | 4 +- .../config/ConfigurationBuilder.java | 4 +- .../config/ConfigurationLoader.java | 2 +- .../impl/ContentRepository.java | 2 +- .../impl/tasks/ComputeAcceptanceAction.java | 4 +- .../impl/xml/BaseResolvingStrategy.java | 14 ++++++ .../xml/StrictLocalResolvingStrategy.java | 7 --- .../xml/StrictRelativeResolvingStrategy.java | 2 +- .../config/TestConfiguration.java | 31 +++++++++++++ ...Test.java => DocumentParseActionTest.java} | 17 +++++-- .../de/kosit/validationtool/impl/Helper.java | 16 ++++++- .../impl/ScenarioRepositoryTest.java | 45 +++++-------------- 12 files changed, 92 insertions(+), 56 deletions(-) create mode 100644 src/test/java/de/kosit/validationtool/config/TestConfiguration.java rename src/test/java/de/kosit/validationtool/impl/{DocumentParserTest.java => DocumentParseActionTest.java} (78%) diff --git a/src/main/java/de/kosit/validationtool/api/ResolvingConfigurationStrategy.java b/src/main/java/de/kosit/validationtool/api/ResolvingConfigurationStrategy.java index b8ec0b6..525499a 100644 --- a/src/main/java/de/kosit/validationtool/api/ResolvingConfigurationStrategy.java +++ b/src/main/java/de/kosit/validationtool/api/ResolvingConfigurationStrategy.java @@ -31,13 +31,13 @@ public interface ResolvingConfigurationStrategy { SchemaFactory createSchemaFactory(); /** - * Creates a preconfigured {@link Processor Saxon Processor} for various tasks within the Validator. The validator + * Returns a preconfigured {@link Processor Saxon Processor} for various tasks within the Validator. The validator * leverages the saxon s9api for internal processing e.g. xml reading and writing. So this is the main object to secure * for reading, transforming and writing xml files. * * @return a preconfigured {@link Processor} */ - Processor createProcessor(); + Processor getProcessor(); /** * Creates a specific implementation for resolving referenced objects in XML files. The URIResolver, it is used for diff --git a/src/main/java/de/kosit/validationtool/config/ConfigurationBuilder.java b/src/main/java/de/kosit/validationtool/config/ConfigurationBuilder.java index f81e967..5572ee6 100644 --- a/src/main/java/de/kosit/validationtool/config/ConfigurationBuilder.java +++ b/src/main/java/de/kosit/validationtool/config/ConfigurationBuilder.java @@ -170,9 +170,9 @@ public class ConfigurationBuilder { public Configuration build() { final ResolvingConfigurationStrategy resolving = getResolvingConfigurationStrategy(); if (this.processor == null) { - this.processor = resolving.createProcessor(); + this.processor = resolving.getProcessor(); } - final ContentRepository contentRepository = new ContentRepository(this.resolvingConfigurationStrategy, this.repository); + final ContentRepository contentRepository = new ContentRepository(resolving, this.repository); final List list = initializeScenarios(contentRepository); final Scenario fallbackScenario = initializeFallback(contentRepository); diff --git a/src/main/java/de/kosit/validationtool/config/ConfigurationLoader.java b/src/main/java/de/kosit/validationtool/config/ConfigurationLoader.java index cff00fc..00589c8 100644 --- a/src/main/java/de/kosit/validationtool/config/ConfigurationLoader.java +++ b/src/main/java/de/kosit/validationtool/config/ConfigurationLoader.java @@ -117,7 +117,7 @@ public class ConfigurationLoader { public Configuration build() { final ResolvingConfigurationStrategy resolving = getResolvingConfigurationStrategy(); - final Processor processor = resolving.createProcessor(); + final Processor processor = resolving.getProcessor(); final ContentRepository contentRepository = new ContentRepository(resolving, getScenarioRepository()); final Scenarios def = loadScenarios(contentRepository.getScenarioSchema(), processor); diff --git a/src/main/java/de/kosit/validationtool/impl/ContentRepository.java b/src/main/java/de/kosit/validationtool/impl/ContentRepository.java index 9d69706..6fd7a5b 100644 --- a/src/main/java/de/kosit/validationtool/impl/ContentRepository.java +++ b/src/main/java/de/kosit/validationtool/impl/ContentRepository.java @@ -92,7 +92,7 @@ public class ContentRepository { public ContentRepository(final ResolvingConfigurationStrategy strategy, final URI repository) { this.repository = repository; this.resolvingConfigurationStrategy = strategy; - this.processor = this.resolvingConfigurationStrategy.createProcessor(); + this.processor = this.resolvingConfigurationStrategy.getProcessor(); this.resolver = this.resolvingConfigurationStrategy.createResolver(repository); this.schemaFactory = this.resolvingConfigurationStrategy.createSchemaFactory(); } diff --git a/src/main/java/de/kosit/validationtool/impl/tasks/ComputeAcceptanceAction.java b/src/main/java/de/kosit/validationtool/impl/tasks/ComputeAcceptanceAction.java index 3e5db25..4e7f37b 100644 --- a/src/main/java/de/kosit/validationtool/impl/tasks/ComputeAcceptanceAction.java +++ b/src/main/java/de/kosit/validationtool/impl/tasks/ComputeAcceptanceAction.java @@ -58,8 +58,8 @@ public class ComputeAcceptanceAction implements CheckAction { selector.setContextItem(results.getReport()); results.setAcceptStatus(selector.effectiveBooleanValue() ? AcceptRecommendation.ACCEPTABLE : AcceptRecommendation.REJECT); } catch (final SaxonApiException e) { - final String msg = "Error evaluating accept recommendation: %s"; - log.error(msg); + final String msg = String.format("Error evaluating accept recommendation: %s", selector.getUnderlyingXPathContext().toString()); + log.error(msg, e); results.addProcessingError(msg); } } diff --git a/src/main/java/de/kosit/validationtool/impl/xml/BaseResolvingStrategy.java b/src/main/java/de/kosit/validationtool/impl/xml/BaseResolvingStrategy.java index fe8c1e3..e8ea274 100644 --- a/src/main/java/de/kosit/validationtool/impl/xml/BaseResolvingStrategy.java +++ b/src/main/java/de/kosit/validationtool/impl/xml/BaseResolvingStrategy.java @@ -13,6 +13,8 @@ import lombok.extern.slf4j.Slf4j; import de.kosit.validationtool.api.ResolvingConfigurationStrategy; +import net.sf.saxon.s9api.Processor; + /** * @author Andreas Penski */ @@ -27,6 +29,18 @@ public abstract class BaseResolvingStrategy implements ResolvingConfigurationStr private static final String ORACLE_XERCES_CLASS = "com.sun.org.apache.xerces.internal.impl.Constants"; + private Processor processor; + + @Override + public Processor getProcessor() { + if (this.processor == null) { + this.processor = createProcessor(); + } + return this.processor; + } + + protected abstract Processor createProcessor(); + public static void forceOpenJdkXmlImplementation() { if (!isOpenJdkXmlImplementationAvailable()) { throw new IllegalStateException("No OpenJDK version of XERCES found"); diff --git a/src/main/java/de/kosit/validationtool/impl/xml/StrictLocalResolvingStrategy.java b/src/main/java/de/kosit/validationtool/impl/xml/StrictLocalResolvingStrategy.java index 35c19b1..90750b6 100644 --- a/src/main/java/de/kosit/validationtool/impl/xml/StrictLocalResolvingStrategy.java +++ b/src/main/java/de/kosit/validationtool/impl/xml/StrictLocalResolvingStrategy.java @@ -9,8 +9,6 @@ import javax.xml.validation.Validator; import lombok.extern.slf4j.Slf4j; -import net.sf.saxon.s9api.Processor; - /** * * @@ -30,11 +28,6 @@ public class StrictLocalResolvingStrategy extends StrictRelativeResolvingStrateg return schemaFactory; } - @Override - public Processor createProcessor() { - return super.createProcessor(); - } - @Override public URIResolver createResolver(final URI repository) { // intentionally return 'null', since all resolving is configured with the other objects diff --git a/src/main/java/de/kosit/validationtool/impl/xml/StrictRelativeResolvingStrategy.java b/src/main/java/de/kosit/validationtool/impl/xml/StrictRelativeResolvingStrategy.java index 66824d6..bb6aa29 100644 --- a/src/main/java/de/kosit/validationtool/impl/xml/StrictRelativeResolvingStrategy.java +++ b/src/main/java/de/kosit/validationtool/impl/xml/StrictRelativeResolvingStrategy.java @@ -77,7 +77,7 @@ public class StrictRelativeResolvingStrategy extends BaseResolvingStrategy { } @Override - public Processor createProcessor() { + protected Processor createProcessor() { final Processor processor = new Processor(false); // verhindere global im Prinzip alle resolving strategien final SecureUriResolver resolver = new SecureUriResolver(); diff --git a/src/test/java/de/kosit/validationtool/config/TestConfiguration.java b/src/test/java/de/kosit/validationtool/config/TestConfiguration.java new file mode 100644 index 0000000..4de67c1 --- /dev/null +++ b/src/test/java/de/kosit/validationtool/config/TestConfiguration.java @@ -0,0 +1,31 @@ +package de.kosit.validationtool.config; + +import java.util.List; +import java.util.Map; + +import lombok.Data; + +import de.kosit.validationtool.api.Configuration; +import de.kosit.validationtool.impl.ContentRepository; +import de.kosit.validationtool.impl.Scenario; + +/** + * @author Andreas Penski + */ +@Data +public class TestConfiguration implements Configuration { + + private List scenarios; + + private Scenario fallbackScenario; + + private String author; + + private String name; + + private String date; + + private ContentRepository contentRepository; + + private Map additionalParameters; +} diff --git a/src/test/java/de/kosit/validationtool/impl/DocumentParserTest.java b/src/test/java/de/kosit/validationtool/impl/DocumentParseActionTest.java similarity index 78% rename from src/test/java/de/kosit/validationtool/impl/DocumentParserTest.java rename to src/test/java/de/kosit/validationtool/impl/DocumentParseActionTest.java index 7a39c60..5f98181 100644 --- a/src/test/java/de/kosit/validationtool/impl/DocumentParserTest.java +++ b/src/test/java/de/kosit/validationtool/impl/DocumentParseActionTest.java @@ -22,12 +22,14 @@ package de.kosit.validationtool.impl; import static de.kosit.validationtool.api.InputFactory.read; import static org.assertj.core.api.Assertions.assertThat; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import de.kosit.validationtool.impl.Helper.Simple; import de.kosit.validationtool.impl.model.Result; +import de.kosit.validationtool.impl.tasks.DocumentParseAction; import de.kosit.validationtool.model.reportInput.XMLSyntaxError; import net.sf.saxon.s9api.XdmNode; @@ -37,14 +39,21 @@ import net.sf.saxon.s9api.XdmNode; * * @author Andreas Penski */ -public class DocumentParserTest { +public class DocumentParseActionTest { @Rule public ExpectedException exception = ExpectedException.none(); + private DocumentParseAction action; + + @Before + public void setup() { + this.action = new DocumentParseAction(Helper.createProcessor()); + } + @Test public void testSimple() { - final Result result = Helper.parseDocument(read(Simple.SIMPLE_VALID)); + final Result result = this.action.parseDocument(read(Simple.SIMPLE_VALID)); assertThat(result).isNotNull(); assertThat(result.getObject()).isNotNull(); assertThat(result.getErrors()).isEmpty(); @@ -53,7 +62,7 @@ public class DocumentParserTest { @Test public void testIllformed() { - final Result result = Helper.parseDocument(read(Simple.NOT_WELLFORMED)); + final Result result = this.action.parseDocument(read(Simple.NOT_WELLFORMED)); assertThat(result).isNotNull(); assertThat(result.getErrors()).isNotEmpty(); assertThat(result.getObject()).isNull(); @@ -63,7 +72,7 @@ public class DocumentParserTest { @Test public void testNullInput() { this.exception.expect(IllegalArgumentException.class); - Helper.parseDocument(null); + this.action.parseDocument(null); } diff --git a/src/test/java/de/kosit/validationtool/impl/Helper.java b/src/test/java/de/kosit/validationtool/impl/Helper.java index 941429d..735f9a3 100644 --- a/src/test/java/de/kosit/validationtool/impl/Helper.java +++ b/src/test/java/de/kosit/validationtool/impl/Helper.java @@ -43,6 +43,7 @@ import de.kosit.validationtool.impl.tasks.DocumentParseAction; import de.kosit.validationtool.model.reportInput.XMLSyntaxError; import net.sf.saxon.dom.NodeOverNodeInfo; +import net.sf.saxon.s9api.Processor; import net.sf.saxon.s9api.SaxonApiException; import net.sf.saxon.s9api.XdmNode; @@ -161,7 +162,20 @@ public class Helper { return serialize((Document) NodeOverNodeInfo.wrap(node.getUnderlyingNode())); } + public static Result parseDocument(final Processor processor, final Input input) { + return new DocumentParseAction(processor).parseDocument(input); + } + public static Result parseDocument(final Input input) { - return new DocumentParseAction(TestObjectFactory.createProcessor()).parseDocument(input); + return new DocumentParseAction(getTestProcessor()).parseDocument(input); + } + + public static Processor getTestProcessor() { + // is always the same at the moment + return createProcessor(); + } + + public static Processor createProcessor() { + return ResolvingMode.STRICT_RELATIVE.getStrategy().getProcessor(); } } diff --git a/src/test/java/de/kosit/validationtool/impl/ScenarioRepositoryTest.java b/src/test/java/de/kosit/validationtool/impl/ScenarioRepositoryTest.java index cb11310..9cf456f 100644 --- a/src/test/java/de/kosit/validationtool/impl/ScenarioRepositoryTest.java +++ b/src/test/java/de/kosit/validationtool/impl/ScenarioRepositoryTest.java @@ -26,22 +26,17 @@ import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; -import java.util.Map; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import lombok.Data; - -import de.kosit.validationtool.api.Configuration; +import de.kosit.validationtool.config.TestConfiguration; import de.kosit.validationtool.impl.Helper.Simple; import de.kosit.validationtool.impl.model.Result; import de.kosit.validationtool.model.scenarios.ScenarioType; -import net.sf.saxon.s9api.Processor; import net.sf.saxon.s9api.XPathExecutable; import net.sf.saxon.s9api.XdmNode; @@ -53,45 +48,25 @@ import net.sf.saxon.s9api.XdmNode; public class ScenarioRepositoryTest { - @Data - private static class DummyConfiguration implements Configuration { - - private List scenarios; - - private Scenario fallbackScenario; - - private String author; - - private String name; - - private String date; - - private Processor processor; - - private ContentRepository contentRepository; - - private Map additionalParameters; - - } - @Rule public ExpectedException expectedException = ExpectedException.none(); private ScenarioRepository repository; - private DummyConfiguration configInstance; + private TestConfiguration configInstance; @Before public void setup() { - final Scenario s = createScenario(); + this.configInstance = new TestConfiguration(); + this.configInstance.setContentRepository(new ContentRepository(ResolvingMode.STRICT_RELATIVE.getStrategy(), null)); - this.configInstance = new DummyConfiguration(); + final Scenario s = createScenario(); this.configInstance.setScenarios(new ArrayList<>()); this.configInstance.getScenarios().add(s); this.repository = new ScenarioRepository(this.configInstance); } - private static Scenario createScenario() { + private Scenario createScenario() { final Scenario s = new Scenario(new ScenarioType()); s.setMatchExecutable(createXpath("//*:name")); return s; @@ -134,11 +109,11 @@ public class ScenarioRepositoryTest { assertThat(scenario.getObject().getName()).isEqualTo("fallback"); } - private static XdmNode load(final URI uri) throws IOException { - return Helper.parseDocument(read(uri.toURL())).getObject(); + private XdmNode load(final URI uri) throws IOException { + return Helper.parseDocument(this.configInstance.getContentRepository().getProcessor(), read(uri.toURL())).getObject(); } - private static XPathExecutable createXpath(final String expression) { - return new ContentRepository(ResolvingMode.STRICT_RELATIVE.getStrategy(), null).createXPath(expression, new HashMap<>()); + private XPathExecutable createXpath(final String expression) { + return this.configInstance.getContentRepository().createXPath(expression, new HashMap<>()); } }