001package edu.pdx.cs.joy.airline; 002 003import org.junit.jupiter.api.Test; 004import org.xml.sax.SAXException; 005import org.xml.sax.SAXParseException; 006 007import javax.xml.parsers.DocumentBuilder; 008import javax.xml.parsers.DocumentBuilderFactory; 009import javax.xml.parsers.ParserConfigurationException; 010import java.io.IOException; 011 012import static org.junit.jupiter.api.Assertions.assertThrows; 013 014class AirlineXmlHelperTest { 015 016 @Test 017 void canParseValidXmlFile() throws ParserConfigurationException, IOException, SAXException { 018 DocumentBuilder builder = newValidatingDocumentBuilder(new AirlineXmlHelper()); 019 020 builder.parse(this.getClass().getResourceAsStream("valid-airline.xml")); 021 } 022 023 @Test 024 void throwsExceptionWhenParsingInvalidXmlFile() throws ParserConfigurationException { 025 DocumentBuilder builder = newValidatingDocumentBuilder(new AirlineXmlHelper()); 026 027 assertThrows(SAXParseException.class, () -> 028 builder.parse(this.getClass().getResourceAsStream("invalid-airline.xml")) 029 ); 030 } 031 032 private static DocumentBuilder newValidatingDocumentBuilder(AirlineXmlHelper helper) throws ParserConfigurationException { 033 DocumentBuilderFactory factory = 034 DocumentBuilderFactory.newInstance(); 035 factory.setValidating(true); 036 037 DocumentBuilder builder = 038 factory.newDocumentBuilder(); 039 builder.setErrorHandler(helper); 040 builder.setEntityResolver(helper); 041 return builder; 042 } 043 044}