some more tests

This commit is contained in:
Andreas Penski (init) 2020-04-30 17:44:23 +02:00
parent 46ddea57d6
commit 2c479eded5
8 changed files with 197 additions and 30 deletions

View file

@ -72,6 +72,10 @@ public class CreateReportAction implements CheckAction {
*/
private static class ReaderWrapper implements XMLReader {
private static final String SAX_FEATURES_NAMESPACE_PREFIXES = "http://xml.org/sax/features/namespace-prefixes";
private static final String SAX_FEATURES_NAMESPACES = "http://xml.org/sax/features/namespaces";
private final XMLReader delegate;
public ReaderWrapper(final XMLReader xmlReader) {
@ -80,9 +84,9 @@ public class CreateReportAction implements CheckAction {
@Override
public boolean getFeature(final String name) throws SAXNotRecognizedException, SAXNotSupportedException {
if (name.equals("http://xml.org/sax/features/namespaces")) {
if (SAX_FEATURES_NAMESPACES.equals(name)) {
return true;
} else if (name.equals("http://xml.org/sax/features/namespace-prefixes")) {
} else if (SAX_FEATURES_NAMESPACE_PREFIXES.equals(name)) {
return false;
}
// just return false on unknown properties
@ -92,10 +96,10 @@ public class CreateReportAction implements CheckAction {
@Override
public void setFeature(final String name, final boolean value) throws SAXNotRecognizedException, SAXNotSupportedException {
// this inverts the logic from JaxbSource pseude parser
if (name.equals("http://xml.org/sax/features/namespaces") && !value) {
if (name.equals(SAX_FEATURES_NAMESPACES) && !value) {
throw new SAXNotRecognizedException(name);
}
if (name.equals("http://xml.org/sax/features/namespace-prefixes") && value) {
if (name.equals(SAX_FEATURES_NAMESPACE_PREFIXES) && value) {
throw new SAXNotRecognizedException(name);
}
}

View file

@ -1,6 +1,6 @@
package de.kosit.validationtool.config;
import static de.kosit.validationtool.config.SimpleConfigTest.createScenarioConfiguration;
import static de.kosit.validationtool.config.TestScenarioFactory.createScenario;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.HashMap;
@ -33,14 +33,14 @@ public class ScenarioBuilderTest {
@Test
public void simpleValid() {
final Result<Scenario, String> result = createScenarioConfiguration().build(Simple.createContentRepository());
final Result<Scenario, String> result = createScenario().build(Simple.createContentRepository());
assertThat(result.isValid()).isTrue();
assertThat(result.getObject().getConfiguration()).isNotNull();
}
@Test
public void testNoSchema() {
final ScenarioBuilder builder = createScenarioConfiguration();
final ScenarioBuilder builder = createScenario();
builder.validate((SchemaBuilder) null);
final Result<Scenario, String> result = builder.build(Simple.createContentRepository());
assertThat(result.isValid()).isFalse();
@ -49,7 +49,7 @@ public class ScenarioBuilderTest {
@Test
public void testNoMatch() {
final ScenarioBuilder builder = createScenarioConfiguration();
final ScenarioBuilder builder = createScenario();
builder.match((String) null);
final Result<Scenario, String> result = builder.build(Simple.createContentRepository());
assertThat(result.isValid()).isFalse();
@ -58,7 +58,7 @@ public class ScenarioBuilderTest {
@Test
public void testInvalidMatch() {
final ScenarioBuilder builder = createScenarioConfiguration();
final ScenarioBuilder builder = createScenario();
builder.match("/////");
final Result<Scenario, String> result = builder.build(Simple.createContentRepository());
assertThat(result.isValid()).isFalse();
@ -67,7 +67,7 @@ public class ScenarioBuilderTest {
@Test
public void testNoAccept() {
final ScenarioBuilder builder = createScenarioConfiguration();
final ScenarioBuilder builder = createScenario();
builder.acceptWith((String) null);
final Result<Scenario, String> result = builder.build(Simple.createContentRepository());
assertThat(result.isValid()).isTrue();
@ -75,7 +75,7 @@ public class ScenarioBuilderTest {
@Test
public void testInvalidAccept() {
final ScenarioBuilder builder = createScenarioConfiguration();
final ScenarioBuilder builder = createScenario();
builder.acceptWith("/////");
final Result<Scenario, String> result = builder.build(Simple.createContentRepository());
assertThat(result.isValid()).isFalse();
@ -93,7 +93,7 @@ public class ScenarioBuilderTest {
ns2.put("n2", "http://n2.org");
final XPathExecutable accept = repository.createXPath("//n2:*", ns2);
final ScenarioBuilder builder = createScenarioConfiguration();
final ScenarioBuilder builder = createScenario();
builder.getNamespaces().clear();
builder.match(match).acceptWith(accept).declareNamespace("n3", "http://n3.org");
@ -111,7 +111,7 @@ public class ScenarioBuilderTest {
final ContentRepository repository = Simple.createContentRepository();
final XPathExecutable match = repository.createXPath("//*", null);
final XPathExecutable accept = repository.createXPath("//*", null);
final ScenarioBuilder builder = createScenarioConfiguration();
final ScenarioBuilder builder = createScenario();
builder.getNamespaces().clear();
builder.match(match);
@ -128,7 +128,7 @@ public class ScenarioBuilderTest {
public void testBasicAttributes() {
final ContentRepository repository = Simple.createContentRepository();
final String random = RandomStringUtils.random(5);
final ScenarioBuilder builder = createScenarioConfiguration();
final ScenarioBuilder builder = createScenario();
builder.name(random).description(random);
final Result<Scenario, String> result = builder.build(repository);
assertThat(result.isValid()).isTrue();
@ -141,7 +141,7 @@ public class ScenarioBuilderTest {
@Test
public void testNoBasicAttributes() {
final ContentRepository repository = Simple.createContentRepository();
final ScenarioBuilder builder = createScenarioConfiguration();
final ScenarioBuilder builder = createScenario();
builder.name(null);
final Result<Scenario, String> result = builder.build(repository);
assertThat(result.isValid()).isTrue();

View file

@ -1,13 +1,9 @@
package de.kosit.validationtool.config;
import static de.kosit.validationtool.config.ConfigurationBuilder.fallback;
import static de.kosit.validationtool.config.ConfigurationBuilder.report;
import static de.kosit.validationtool.config.ConfigurationBuilder.scenario;
import static de.kosit.validationtool.config.ConfigurationBuilder.schema;
import static de.kosit.validationtool.config.TestScenarioFactory.createScenario;
import static org.assertj.core.api.Assertions.assertThat;
import java.net.URI;
import org.junit.Test;
import de.kosit.validationtool.api.Configuration;
@ -33,18 +29,12 @@ public class SimpleConfigTest {
}
static ConfigurationBuilder createSimpleConfiguration() {
return Configuration.create().name("Simple-API").with(createScenarioConfiguration()
return Configuration.create().name("Simple-API").with(createScenario()
// .description("awesome api")
).with(fallback().name("default").source("report.xsl"))
.resolvingMode(ResolvingMode.STRICT_RELATIVE).useRepository(Simple.REPOSITORY_URI);
}
static ScenarioBuilder createScenarioConfiguration() {
return scenario("simple").validate(schema("Sample Schema").schemaLocation(URI.create("simple.xsd")))
.with(report("Report für eRechnung").source("report.xsl")).acceptWith("count(//test:rejected) = 0")
.declareNamespace("cri", "http://www.xoev.de/de/validator/framework/1/createreportinput")
.declareNamespace("rpt", "http://validator.kosit.de/test-report")
.declareNamespace("test", "http://validator.kosit.de/test-sample").match("/test:simple");
}
}

View file

@ -0,0 +1,21 @@
package de.kosit.validationtool.config;
import static de.kosit.validationtool.config.ConfigurationBuilder.report;
import static de.kosit.validationtool.config.ConfigurationBuilder.scenario;
import static de.kosit.validationtool.config.ConfigurationBuilder.schema;
import java.net.URI;
/**
* @author Andreas Penski
*/
public class TestScenarioFactory {
public static ScenarioBuilder createScenario() {
return scenario("simple").validate(schema("Sample Schema").schemaLocation(URI.create("simple.xsd")))
.with(report("Report für eRechnung").source("report.xsl")).acceptWith("count(//test:rejected) = 0")
.declareNamespace("cri", "http://www.xoev.de/de/validator/framework/1/createreportinput")
.declareNamespace("rpt", "http://validator.kosit.de/test-report")
.declareNamespace("test", "http://validator.kosit.de/test-sample").match("/test:simple");
}
}

View file

@ -82,6 +82,7 @@ public class Helper {
return new ContentRepository(strategy, Simple.REPOSITORY_URI);
}
public static URI getSchemaLocation() {
return ROOT.resolve("repository/simple.xsd");
}

View file

@ -0,0 +1,86 @@
package de.kosit.validationtool.impl.tasks;
import static de.kosit.validationtool.config.TestScenarioFactory.createScenario;
import static de.kosit.validationtool.impl.Helper.serialize;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import javax.xml.transform.Source;
import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import de.kosit.validationtool.api.InputFactory;
import de.kosit.validationtool.impl.ContentRepository;
import de.kosit.validationtool.impl.ConversionService;
import de.kosit.validationtool.impl.Helper.Simple;
import de.kosit.validationtool.impl.Scenario;
import de.kosit.validationtool.impl.model.Result;
import de.kosit.validationtool.impl.tasks.CheckAction.Bag;
import net.sf.saxon.s9api.DocumentBuilder;
import net.sf.saxon.s9api.Processor;
import net.sf.saxon.s9api.SaxonApiException;
/**
* Test for {@link CreateReportAction}.
*
* @author Andreas Penski
*/
public class CreateReportActionTest {
private CreateReportAction action;
private ContentRepository repository;
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Before
public void setup() {
this.repository = Simple.createContentRepository();
this.action = new CreateReportAction(this.repository.getProcessor(), new ConversionService(), this.repository.getResolver());
}
@Test
public void testSimpleCreate() {
final Bag bag = TestBagBuilder.createBag(true, true);
final Scenario scenario = createScenario().build(this.repository).getObject();
bag.setScenarioSelectionResult(new Result<>(scenario));
bag.setReport(null);
this.action.check(bag);
assertThat(bag.getReport()).isNotNull();
}
@Test
public void testNoValidParseResult() {
// e.g. no valid xml file specified
final Bag bag = TestBagBuilder.createBag(InputFactory.read("someBytes".getBytes(), "invalid"), true);
final Scenario scenario = createScenario().build(this.repository).getObject();
bag.setScenarioSelectionResult(new Result<>(scenario));
assertThat(bag.getReport()).isNull();
this.action.check(bag);
assertThat(bag.getReport()).isNotNull();
final String reportString = serialize(bag.getReport());
assertThat(reportString).contains("SAXParseException");
}
@Test
public void testExecutionException() throws SaxonApiException {
this.expectedException.expect(IllegalStateException.class);
this.expectedException.expectMessage(Matchers.containsString("Can not create final report"));
final Processor p = mock(Processor.class);
final DocumentBuilder documentBuilder = mock(DocumentBuilder.class);
this.action = new CreateReportAction(p, new ConversionService(), null);
when(p.newDocumentBuilder()).thenReturn(documentBuilder);
when(documentBuilder.build(any(Source.class))).thenThrow(new SaxonApiException("mocked"));
this.action.check(TestBagBuilder.createBag(InputFactory.read(Simple.SIMPLE_VALID), true));
}
}

View file

@ -17,7 +17,7 @@
* under the License.
*/
package de.kosit.validationtool.impl;
package de.kosit.validationtool.impl.tasks;
import static de.kosit.validationtool.api.InputFactory.read;
import static org.assertj.core.api.Assertions.assertThat;
@ -27,9 +27,9 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import de.kosit.validationtool.impl.Helper;
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;

View file

@ -0,0 +1,65 @@
package de.kosit.validationtool.impl.xml;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import javax.xml.XMLConstants;
import javax.xml.validation.SchemaFactory;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import lombok.RequiredArgsConstructor;
/**
*
* Tests the internal functions used to create a secure resolver
*
* @author Andreas Penski
*/
public class BaseResolverTest {
@RequiredArgsConstructor
private class TestResolvingStrategy extends StrictRelativeResolvingStrategy {
void setInternalProperty(final SchemaFactory factory, final boolean lenient) {
allowExternalSchema(factory, lenient, "quatsch");
}
}
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void testIgnoreUnsupportedProperty() throws SAXNotRecognizedException, SAXNotSupportedException {
final SchemaFactory sf = mock(SchemaFactory.class);
final TestResolvingStrategy s = new TestResolvingStrategy();
doThrow(new SAXNotRecognizedException("not supported")).when(sf).setProperty(any(), any());
s.setInternalProperty(sf, true);
}
@Test
public void testFailOnUnsupportedProperty() throws SAXNotRecognizedException, SAXNotSupportedException {
this.expectedException.expect(IllegalStateException.class);
final SchemaFactory sf = mock(SchemaFactory.class);
final TestResolvingStrategy s = new TestResolvingStrategy();
doThrow(new SAXNotRecognizedException("not supported")).when(sf).setProperty(any(), any());
s.setInternalProperty(sf, false);
}
@Test
public void testSimpleSuccess() throws SAXNotRecognizedException, SAXNotSupportedException {
final SchemaFactory sf = mock(SchemaFactory.class);
final TestResolvingStrategy s = new TestResolvingStrategy();
s.setInternalProperty(sf, true);
s.setInternalProperty(sf, false);
verify(sf, times(2)).setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "quatsch");
}
}