package dk.kb.yggdrasil.xslt;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import dk.kb.yggdrasil.exceptions.YggdrasilException;
@RunWith(JUnit4.class)
public class TestXmlValidator {
public static Object[][] xmlFiles = new Object[][] {
{1, 1, 1, 1, "valhal/xml/basic_file.xml"},
{1, 1, 1, 1, "valhal/xml/content_file_update.xml"},
{1, 1, 1, 1, "valhal/xml/instance_with_unordered_multiple_files.xml"},
{1, 1, 1, 1, "valhal/xml/instance_update.xml"},
{1, 1, 1, 1, "valhal/xml/namespaceless_mods.xml"}
};
@Test
public void test_xmlvalidator() {
URL url;
File file;
url = this.getClass().getClassLoader().getResource("");
File cacheDir = new File(new File(url.getFile()), "entity_cache");
if (!cacheDir.exists() && !cacheDir.mkdirs()) {
Assert.fail("Could not make entity_cache directory!");
}
boolean bool;
try {
XmlValidator xmlValidator = new XmlValidator();
XmlValidationResult result;
XmlEntityResolver entityResolver = new XmlEntityResolver(cacheDir);
XmlErrorHandler errorHandler = new XmlErrorHandler();
for (int i=0; i<xmlFiles.length; ++i) {
int expectedNamespaces = (Integer)xmlFiles[i][0];
int expectedSchemas = (Integer)xmlFiles[i][1];
int expectedErrors1 = (Integer)xmlFiles[i][2];
int expectedErrors2 = (Integer)xmlFiles[i][3];
String xmlFilename = (String)xmlFiles[i][4];
/*
* Combined.
*/
url = this.getClass().getClassLoader().getResource(xmlFilename);
Assert.assertNotNull(url);
file = new File(url.getFile());
errorHandler.reset();
result = xmlValidator.validate(file, entityResolver, errorHandler);
Assert.assertNull(result.systemId);
Assert.assertFalse(result.bDtdUsed);
if (expectedSchemas == 0) {
Assert.assertFalse(xmlFilename, result.bXsdUsed);
} else {
Assert.assertTrue(xmlFilename, result.bXsdUsed);
}
Assert.assertEquals(xmlFilename, expectedNamespaces, result.xsiNamespaces.size());
Assert.assertEquals(xmlFilename, expectedSchemas, result.schemas.size());
Assert.assertEquals(xmlFilename, expectedErrors1, errorHandler.numberOfErrors);
Assert.assertEquals(xmlFilename, 0, errorHandler.numberOfFatalErrors);
Assert.assertEquals(xmlFilename, 0, errorHandler.numberOfWarnings);
Assert.assertTrue(xmlFilename, result.bWellformed);
Assert.assertFalse(xmlFilename, result.bValid);
/*
* Separated with ErrorHandler.
*/
errorHandler.reset();
result = new XmlValidationResult();
bool = xmlValidator.testStructuralValidity(url.openStream(), entityResolver, errorHandler, result);
Assert.assertTrue(xmlFilename, bool);
Assert.assertNull(xmlFilename, result.systemId);
Assert.assertFalse(xmlFilename, result.bDtdUsed);
if (expectedSchemas == 0) {
Assert.assertFalse(xmlFilename, result.bXsdUsed);
} else {
Assert.assertTrue(xmlFilename, result.bXsdUsed);
}
Assert.assertEquals(xmlFilename, expectedNamespaces, result.xsiNamespaces.size());
Assert.assertEquals(xmlFilename, expectedSchemas, result.schemas.size());
Assert.assertEquals(0, errorHandler.numberOfErrors);
Assert.assertEquals(0, errorHandler.numberOfFatalErrors);
Assert.assertEquals(0, errorHandler.numberOfWarnings);
bool = xmlValidator.testDefinedValidity(url.openStream(), entityResolver, errorHandler, result);
Assert.assertFalse(bool);
Assert.assertNull(result.systemId);
Assert.assertFalse(result.bDtdUsed);
if (expectedSchemas == 0) {
Assert.assertFalse(result.bXsdUsed);
} else {
Assert.assertTrue(result.bXsdUsed);
}
Assert.assertEquals(expectedNamespaces, result.xsiNamespaces.size());
Assert.assertEquals(expectedSchemas, result.schemas.size());
Assert.assertEquals(expectedErrors2, errorHandler.numberOfErrors);
Assert.assertEquals(0, errorHandler.numberOfFatalErrors);
Assert.assertEquals(0, errorHandler.numberOfWarnings);
Assert.assertTrue(result.bWellformed);
Assert.assertFalse(result.bValid);
/*
* Separated with null ErrorHandler.
*/
result = new XmlValidationResult();
bool = xmlValidator.testStructuralValidity(url.openStream(), entityResolver, null, result);
Assert.assertTrue(bool);
Assert.assertNull(result.systemId);
Assert.assertFalse(result.bDtdUsed);
if (expectedSchemas == 0) {
Assert.assertFalse(result.bXsdUsed);
} else {
Assert.assertTrue(result.bXsdUsed);
}
Assert.assertEquals(expectedNamespaces, result.xsiNamespaces.size());
Assert.assertEquals(expectedSchemas, result.schemas.size());
bool = xmlValidator.testDefinedValidity(url.openStream(), entityResolver, null, result);
Assert.assertFalse(bool);
Assert.assertNull(result.systemId);
Assert.assertFalse(result.bDtdUsed);
if (expectedSchemas == 0) {
Assert.assertFalse(result.bXsdUsed);
} else {
Assert.assertTrue(result.bXsdUsed);
}
Assert.assertEquals(expectedNamespaces, result.xsiNamespaces.size());
Assert.assertEquals(expectedSchemas, result.schemas.size());
Assert.assertTrue(result.bWellformed);
Assert.assertFalse(result.bValid);
/*
* Only validation with ErrorHandler.
*/
errorHandler.reset();
result = new XmlValidationResult();
bool = xmlValidator.testDefinedValidity(url.openStream(), entityResolver, errorHandler, result);
Assert.assertFalse(bool);
Assert.assertNull(result.systemId);
Assert.assertFalse(result.bDtdUsed);
Assert.assertFalse(result.bXsdUsed);
Assert.assertEquals(0, result.xsiNamespaces.size());
Assert.assertEquals(0, result.schemas.size());
Assert.assertEquals(expectedErrors2, errorHandler.numberOfErrors);
Assert.assertEquals(0, errorHandler.numberOfFatalErrors);
Assert.assertEquals(0, errorHandler.numberOfWarnings);
Assert.assertFalse(result.bWellformed);
Assert.assertFalse(result.bValid);
/*
* Only validation with null ErrorHandler.
*/
result = new XmlValidationResult();
bool = xmlValidator.testDefinedValidity(url.openStream(), entityResolver, null, result);
Assert.assertFalse(bool);
Assert.assertNull(result.systemId);
Assert.assertFalse(result.bDtdUsed);
Assert.assertFalse(result.bXsdUsed);
Assert.assertEquals(0, result.xsiNamespaces.size());
Assert.assertEquals(0, result.schemas.size());
Assert.assertFalse(result.bWellformed);
Assert.assertFalse(result.bValid);
}
} catch (IOException e) {
e.printStackTrace();
Assert.fail("Unexpected exception!");
} catch (YggdrasilException e) {
e.printStackTrace();
Assert.fail("Unexpected exception!");
}
}
}