/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.maven.integration; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.w3c.dom.CharacterData; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.apache.camel.maven.CamelSpringNamespace; import org.apache.camel.maven.Constants; import org.apache.camel.maven.EipDocumentationEnricherMojo; import org.apache.camel.maven.ResourceUtils; import org.junit.Before; import org.junit.Test; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; public class EIPDocumentationMojoTest { EipDocumentationEnricherMojo eipDocumentationEnricherMojo = new EipDocumentationEnricherMojo(); XPath xPath = XPathFactory.newInstance().newXPath(); File tempFile; @Before public void setUp() throws Exception { eipDocumentationEnricherMojo.camelCoreDir = ResourceUtils.getResourceAsFile("integration/camel-core-integration"); eipDocumentationEnricherMojo.camelCoreXmlDir = ResourceUtils.getResourceAsFile("integration/camel-core-integration"); eipDocumentationEnricherMojo.camelSpringDir = ResourceUtils.getResourceAsFile("integration/camel-core-integration"); eipDocumentationEnricherMojo.inputCamelSchemaFile = ResourceUtils.getResourceAsFile("integration/camel-spring.xsd"); eipDocumentationEnricherMojo.pathToModelDir = "trgt/classes/org/apache/camel/model"; eipDocumentationEnricherMojo.pathToCoreXmlModelDir = "trgt/classes/org/apache/camel/model"; eipDocumentationEnricherMojo.pathToSpringModelDir = "trgt/classes/org/apache/camel/model"; xPath.setNamespaceContext(new CamelSpringNamespace()); tempFile = File.createTempFile("outputXml", ".xml"); tempFile.deleteOnExit(); eipDocumentationEnricherMojo.outputCamelSchemaFile = tempFile; } @Test public void testExecuteMojo() throws Exception { eipDocumentationEnricherMojo.execute(); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setNamespaceAware(true); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document doc = documentBuilder.parse(tempFile); validateElement(doc); validateAttributes(doc); validateParentAttribute(doc); } private void validateParentAttribute(Document doc) throws Exception { Element e = (Element) xPath.compile("//xs:attribute[@name='id']").evaluate(doc, XPathConstants.NODE); assertEquals("id", e.getAttribute(Constants.NAME_ATTRIBUTE_NAME)); validateDocumentation(e, "id documentation"); } private void validateAttributes(Document doc) throws Exception { Element e = (Element) xPath.compile("//xs:attribute[@name='beforeUri']").evaluate(doc, XPathConstants.NODE); assertEquals("beforeUri", e.getAttribute(Constants.NAME_ATTRIBUTE_NAME)); validateDocumentation(e, "beforeUri documentation"); } private void validateElement(Document doc) { NodeList element = doc.getElementsByTagName("xs:element"); Element e = (Element) element.item(0); assertEquals("aop", e.getAttribute(Constants.NAME_ATTRIBUTE_NAME)); validateDocumentation(e, "element documentation"); } private void validateDocumentation(Element element, String expectedText) { Element annotation = getFirsElement(element.getChildNodes()); Element documentation = getFirsElement(annotation.getChildNodes()); assertEquals("xs:annotation", annotation.getTagName()); assertEquals("xs:documentation", documentation.getTagName()); Node cdata = documentation.getFirstChild(); assertThat(cdata, instanceOf(CharacterData.class)); assertThat(cdata.getTextContent(), containsString(expectedText)); } private Element getFirsElement(NodeList nodeList) { return (Element) nodeList.item(1); } }