/** * Copyright (C) 2010 Orbeon, Inc. * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU Lesser General Public License as published by the Free Software Foundation; either version * 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * The full text of the license is available at http://www.gnu.org/copyleft/lesser.html */ package org.orbeon.oxf.xforms.analysis; import org.junit.Test; import org.orbeon.dom.Document; import org.orbeon.dom.Element; import org.orbeon.dom.saxon.DocumentWrapper; import org.orbeon.dom.saxon.NodeWrapper; import org.orbeon.oxf.test.ResourceManagerTestBase; import org.orbeon.oxf.util.IndentedLogger; import org.orbeon.oxf.util.StringUtils; import org.orbeon.oxf.util.XPath; import org.orbeon.oxf.util.XPathCache; import org.orbeon.oxf.xforms.XFormsConstants; import org.orbeon.oxf.xforms.XFormsStaticStateImpl; import org.orbeon.oxf.xforms.XFormsUtils; import org.orbeon.oxf.xforms.processor.XFormsServer; import org.orbeon.oxf.xforms.xbl.XBLBindings; import org.orbeon.oxf.xml.XMLParsing; import org.orbeon.oxf.xml.dom4j.Dom4jUtils; import java.util.List; import static org.junit.Assert.*; public class XFormsAnnotatorTest extends ResourceManagerTestBase { @Test public void formNamespaceElements() { final Metadata metadata = new Metadata(); final XFormsAnnotator ch = new XFormsAnnotator(metadata); XMLParsing.urlToSAX("oxf:/org/orbeon/oxf/xforms/forms/annotator-test.xhtml", ch, XMLParsing.ParserConfiguration.PLAIN, false); // Test that ns information is provided for those elements assertNotNull(metadata.getNamespaceMapping("output-in-title").mapping); assertNotNull(metadata.getNamespaceMapping("html").mapping); assertNotNull(metadata.getNamespaceMapping("main-instance").mapping); assertNotNull(metadata.getNamespaceMapping("dateTime-component").mapping); assertNotNull(metadata.getNamespaceMapping("dateTime1-control").mapping); assertNotNull(metadata.getNamespaceMapping("value1-control").mapping); assertNotNull(metadata.getNamespaceMapping("output-in-label").mapping); assertNotNull(metadata.getNamespaceMapping("img-in-label").mapping); assertNotNull(metadata.getNamespaceMapping("span").mapping); // Test that ns information is NOT provided for those elements (because processed as part of shadow tree processing) assertNull(metadata.getNamespaceMapping("instance-in-xbl")); assertNull(metadata.getNamespaceMapping("div-in-xbl")); // Test that ns information is NOT provided for those elements (because in instances or schemas) assertNull(metadata.getNamespaceMapping("instance-root")); assertNull(metadata.getNamespaceMapping("instance-value")); assertNull(metadata.getNamespaceMapping("xbl-instance-root")); assertNull(metadata.getNamespaceMapping("xbl-instance-value")); assertNull(metadata.getNamespaceMapping("schema-element")); } // Test that xxf:attribute elements with @id and @for were created for @Test public void xxformsAttribute() { final Document document = Dom4jUtils.readFromURL("oxf:/org/orbeon/oxf/xforms/forms/annotator-test.xhtml", XMLParsing.ParserConfiguration.PLAIN); final Metadata metadata = new Metadata(); final Document annotatedDocument = new XBLBindings(new IndentedLogger(XFormsServer.logger), null, metadata).annotateShadowTree(document, ""); final DocumentWrapper documentWrapper = new DocumentWrapper(annotatedDocument, null, XPath.GlobalConfiguration()); // Check there is an xxf:attribute for "html" with correct name List<Object> result = XPathCache.evaluate( documentWrapper, "//xxf:attribute[@for = 'html']", XFormsStaticStateImpl.BASIC_NAMESPACE_MAPPING(), null, null, null, null, null, null ); assertNotNull(result); assertEquals(1, result.size()); Element resultElement = (Element) ((NodeWrapper) result.get(0)).getUnderlyingNode(); assertTrue(StringUtils.trimAllToEmpty(XFormsUtils.getElementId(resultElement)).length() > 0); assertEquals("lang", resultElement.attributeValue(XFormsConstants.NAME_QNAME)); // Check there is an xxf:attribute for "span" with correct name result = XPathCache.evaluate( documentWrapper, "//xxf:attribute[@for = 'span']", XFormsStaticStateImpl.BASIC_NAMESPACE_MAPPING(), null, null, null, null, null, null ); assertNotNull(result); assertEquals(1, result.size()); resultElement = (Element) ((NodeWrapper) result.get(0)).getUnderlyingNode(); assertTrue(StringUtils.trimAllToEmpty(XFormsUtils.getElementId(resultElement)).length() > 0); assertEquals("style", resultElement.attributeValue(XFormsConstants.NAME_QNAME)); } }