package de.jollyday.tests;
import org.junit.Before;
import org.junit.Test;
import org.xmlunit.validation.Languages;
import org.xmlunit.validation.ValidationResult;
import org.xmlunit.validation.Validator;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import static org.junit.Assert.assertTrue;
public class XMLValidationTest {
private File schemaFile;
private Validator validator;
@Before
public void setUp() throws Exception {
schemaFile = new File("src/main/xsd/Holiday.xsd");
validator = Validator.forLanguage(Languages.W3C_XML_SCHEMA_NS_URI);
validator.setSchemaSource(new StreamSource(schemaFile));
}
@Test
public void testSchemaIsValid() throws Exception {
assertTrue("Schema file "+schemaFile+" does not exist.", schemaFile.exists());
final ValidationResult validationResult = validator.validateSchema();
assertTrue("Schema '"+ schemaFile +"' is not valid: "+validationResult.getProblems(), validationResult.isValid());
}
@Test
public void testHolidayFilesAreValid()throws Exception {
final Path holidaysFolder = Paths.get("src/main/resources/holidays/");
Files.list(holidaysFolder).forEach(path -> validateHolidayFile(path));
}
private void validateHolidayFile(Path path){
try {
final ValidationResult validationResult = validator.validateInstance(new StreamSource(new FileInputStream(path.toFile())));
assertTrue("Validation of holiday file '"+path+" failed: "+validationResult.getProblems(), validationResult.isValid());
} catch (FileNotFoundException e) {
throw new IllegalStateException("Cannot validate holiday file "+path);
}
}
}