blob: 6570417ed3b5da389817861e260c4347e6189bcf [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 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 Corporation - initial API and implementation
*
*******************************************************************************/
package org.eclipse.wst.xml.ui.tests;
import java.io.File;
import junit.framework.TestCase;
import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
import org.eclipse.wst.xml.core.internal.contentmodel.util.DOMContentBuilder;
import org.eclipse.wst.xml.ui.internal.wizards.NewXMLGenerator;
public class TestNewXMLGenerator extends TestCase {
static String PLUGIN_ABSOLUTE_PATH;
static final String SCHEMA_1 = "Schema1"; //$NON-NLS-1$
static final String SCHEMA_2 = "Schema2"; //$NON-NLS-1$
static final String ROOT_ELEMENT_1 = "GolfCountryClub"; //$NON-NLS-1$
static final String ROOT_ELEMENT_2 = "BillInfo"; //$NON-NLS-1$
/**
* Sets up the test.
*/
protected void setUp() throws Exception {
super.setUp();
}
/**
* Test generation with no options selected.
*/
public void testNXG_bare() {
runOneTest(0, ROOT_ELEMENT_1, SCHEMA_1);
}
/**
* Test generation with optional attributes included.
*/
public void testNXG_optAttr() {
runOneTest(DOMContentBuilder.BUILD_OPTIONAL_ATTRIBUTES, ROOT_ELEMENT_1, SCHEMA_1);
}
/**
* Test generation with optional elements included.
*/
public void testNXG_optElem() {
runOneTest(DOMContentBuilder.BUILD_OPTIONAL_ELEMENTS, ROOT_ELEMENT_1, SCHEMA_1);
}
/**
* Test generation with elements set to initial first value.
*/
public void testNXG_optFirst() {
runOneTest(DOMContentBuilder.BUILD_FIRST_CHOICE | DOMContentBuilder.BUILD_FIRST_SUBSTITUTION, ROOT_ELEMENT_1, SCHEMA_1);
}
/**
* Test generation with text nodes.
*/
public void testNXG_optTextNodes() {
runOneTest(DOMContentBuilder.BUILD_TEXT_NODES, ROOT_ELEMENT_1, SCHEMA_1);
}
/**
* Test generation with all options selected.
*/
public void testNXG_all() {
runOneTest(DOMContentBuilder.BUILD_OPTIONAL_ATTRIBUTES | DOMContentBuilder.BUILD_OPTIONAL_ELEMENTS |
DOMContentBuilder.BUILD_FIRST_CHOICE | DOMContentBuilder.BUILD_FIRST_SUBSTITUTION | DOMContentBuilder.BUILD_TEXT_NODES, ROOT_ELEMENT_1, SCHEMA_1);
}
/**
* Test generation with a separate schema in which namespaces must be qualified.
*/
public void testNXG_nsQualified(){
runOneTest(DOMContentBuilder.BUILD_OPTIONAL_ATTRIBUTES | DOMContentBuilder.BUILD_OPTIONAL_ELEMENTS |
DOMContentBuilder.BUILD_FIRST_CHOICE | DOMContentBuilder.BUILD_FIRST_SUBSTITUTION | DOMContentBuilder.BUILD_TEXT_NODES, ROOT_ELEMENT_2, SCHEMA_2);
}
/**
* Runs a generic generate + comparison test.
* @param buildPolicy Integer representing the build policy for this generation.
* @param rootElement Desired root element.
* @param xsdUri URI of the desired XML schema.
*/
private void runOneTest(int buildPolicy, String rootElement, String xsdUriFile) {
try {
// generic setup
PLUGIN_ABSOLUTE_PATH = XMLUITestsPlugin.getInstallURL();
String uri = "file:///" + PLUGIN_ABSOLUTE_PATH + "testresources/" + xsdUriFile + ".xsd"; //$NON-NLS-3$
String[] errorInfo = new String[2];
CMDocument cmd = NewXMLGenerator.createCMDocument(uri, errorInfo);
NewXMLGenerator generator = new NewXMLGenerator(uri, cmd);
String id = xsdUriFile + "-" + rootElement + "-" + buildPolicy;
String fileNameResult = PLUGIN_ABSOLUTE_PATH + "testresources/Tested-" + id + ".xml"; //$NON-NLS-2$
File nFile = new File(fileNameResult);
if (!nFile.exists()) {
nFile.createNewFile();
}
String fileNameCompare = PLUGIN_ABSOLUTE_PATH + "testresources/Compare-" + id + ".xml"; //$NON-NLS-2$
generator.setBuildPolicy(buildPolicy);
generator.setRootElementName(rootElement);
generator.setDefaultSystemId(xsdUriFile + ".xsd"); //$NON-NLS-1$
generator.createNamespaceInfoList();
generator.createXMLDocument(fileNameResult);
XMLDiff differ = new XMLDiff();
assertTrue("The XML files are not identical.", differ.diff(fileNameCompare, fileNameResult, "XML")); //$NON-NLS-2$
// if we've made it this far, delete the output file
remove(nFile);
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param file
*/
private void remove(File file) {
if(file.isDirectory()) {
File[] children = file.listFiles();
for (int i = 0; i < children.length; i++) {
remove(children[i]);
}
}
file.delete();
}
}