/** * Copyright (c) 2007 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM - Initial API and implementation */ package org.eclipse.emf.test.xml.xsd; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import java.io.IOException; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.test.common.TestUtil; import org.eclipse.xsd.XSDAttributeDeclaration; import org.eclipse.xsd.XSDElementDeclaration; import org.eclipse.xsd.XSDSchema; import org.eclipse.xsd.XSDSimpleTypeDefinition; import org.eclipse.xsd.XSDTypeDefinition; import org.eclipse.xsd.util.XSDConstants; import org.eclipse.xsd.util.XSDResourceImpl; import org.junit.Before; import org.junit.Test; import org.w3c.dom.Attr; import org.w3c.dom.Element; public class XSDFeatureTypeTest { private static final String ANY_TYPE = "anyType"; private static final String ANY_SIMPLE_TYPE = "anySimpleType"; private static final String STRING = "string"; protected XSDSchema schema; protected XSDSimpleTypeDefinition stringType; protected XSDSimpleTypeDefinition anySimpleType; protected XSDTypeDefinition anyType; @Before public void setUp() throws Exception { ResourceSet resourceSet = new ResourceSetImpl(); XSDResourceImpl resource = new XSDResourceImpl(); resourceSet.getResources().add(resource); resource.setURI(URI.createFileURI(TestUtil.getPluginDirectory("org.eclipse.emf.test.xml") + "/data/xsd/TestSchema.xsd")); try { resource.load(null); schema = resource.getSchema(); stringType = (XSDSimpleTypeDefinition) schema.getSchemaForSchema().resolveTypeDefinition(STRING); anySimpleType = (XSDSimpleTypeDefinition) schema.getSchemaForSchema().resolveTypeDefinition(ANY_SIMPLE_TYPE); anyType = schema.getSchemaForSchema().resolveTypeDefinition(ANY_TYPE); } catch (IOException e) { e.printStackTrace(); fail(); } } /** * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=174092 <br /> * Testing attribute declarations. */ @Test public void testAttributeWithAnyType() { XSDAttributeDeclaration attributeDeclaration = schema.resolveAttributeDeclaration("testAttribute"); // In the beginning the attribute's type should be anySimpleType assertEquals(anySimpleType, attributeDeclaration.getTypeDefinition()); // Setting an attribute's type from anySimpleType to string attributeDeclaration.setTypeDefinition(stringType); Element attributeDeclarationElement = attributeDeclaration.getElement(); Attr typeAttribute = attributeDeclarationElement.getAttributeNode(XSDConstants.TYPE_ATTRIBUTE); assertNotNull(typeAttribute); assertEquals(STRING, typeAttribute.getValue()); // Setting the attribute's type from string to null which should result in // the type attribute being removed attributeDeclaration.setTypeDefinition(null); typeAttribute = attributeDeclarationElement.getAttributeNode(XSDConstants.TYPE_ATTRIBUTE); assertNull(typeAttribute); // Setting the type attribute through the DOM to string attributeDeclarationElement.setAttribute(XSDConstants.TYPE_ATTRIBUTE, STRING); assertEquals(stringType, attributeDeclaration.getTypeDefinition()); // Setting an element's type from string to anySimpleType attributeDeclaration.setTypeDefinition(anySimpleType); typeAttribute = attributeDeclarationElement.getAttributeNode(XSDConstants.TYPE_ATTRIBUTE); assertNotNull(typeAttribute); assertEquals(ANY_SIMPLE_TYPE, typeAttribute.getValue()); // Removing the type attribute through the DOM attributeDeclarationElement.removeAttribute(XSDConstants.TYPE_ATTRIBUTE); assertEquals(anySimpleType, attributeDeclaration.getTypeDefinition()); } /** * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=174092 <br /> * Testing element declarations */ @Test public void testElementWithAnyType() { XSDElementDeclaration elementDeclaration = schema.resolveElementDeclaration("testElement"); // In the beginning the element's type should be anyType assertEquals(anyType, elementDeclaration.getTypeDefinition()); // Setting the element's type from anyType to string elementDeclaration.setTypeDefinition(stringType); Element elementDeclarationElement = elementDeclaration.getElement(); Attr typeAttribute = elementDeclarationElement.getAttributeNode(XSDConstants.TYPE_ATTRIBUTE); assertNotNull(typeAttribute); assertEquals(STRING, typeAttribute.getValue()); // Setting the element's type from string to null which should result in the // type attribute being removed elementDeclaration.setTypeDefinition(null); typeAttribute = elementDeclarationElement.getAttributeNode(XSDConstants.TYPE_ATTRIBUTE); assertNull(typeAttribute); // Setting the type attribute through the DOM to string elementDeclarationElement.setAttribute(XSDConstants.TYPE_ATTRIBUTE, STRING); assertEquals(stringType, elementDeclaration.getTypeDefinition()); // Setting the element's type from string to anySimpleType elementDeclaration.setTypeDefinition(anySimpleType); typeAttribute = elementDeclarationElement.getAttributeNode(XSDConstants.TYPE_ATTRIBUTE); assertNotNull(typeAttribute); assertEquals(ANY_SIMPLE_TYPE, typeAttribute.getValue()); // Removing the type attribute through the DOM elementDeclarationElement.removeAttribute(XSDConstants.TYPE_ATTRIBUTE); assertEquals(anyType, elementDeclaration.getTypeDefinition()); } }