/*******************************************************************************
 * Copyright (c) 2004 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.html.core.tests.parser;

import org.eclipse.wst.xml.core.document.InvalidCharacterException;
import org.eclipse.wst.xml.core.document.XMLModel;
import org.eclipse.wst.xml.core.internal.document.SourceValidator;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class SourceTest3 extends ModelTest {
	/**
	 * Constructor for SourceTest3.
	 * 
	 * @param name
	 */
	public SourceTest3(String name) {
		super(name);
	}

	public SourceTest3() {
		super();
	}

	public static void main(java.lang.String[] args) {
		new SourceTest3().testModel();
	}

	public void testModel() {
		XMLModel model = createXMLModel();
		try {
			Document document = model.getDocument();

			Element a = document.createElement("a");
			Attr b = document.createAttribute("b");
			a.setAttributeNode(b);
			document.appendChild(a);
			SourceValidator validator = new SourceValidator(b);

			String source = null;
			String result = null;

			source = "<% aaa %><%= bbb %>/<%! ccc %>ddd";
			outputWriter.writeln("source: " + source);
			try {
				validator.validateSource(source);
			}
			catch (InvalidCharacterException ex) {
				outputWriter.writeln(ex.getMessage());
			}
			result = validator.convertSource(source);
			outputWriter.writeln("result: " + result);

			source = "<% aaa";
			outputWriter.writeln("source: " + source);
			try {
				validator.validateSource(source);
			}
			catch (InvalidCharacterException ex) {
				outputWriter.writeln(ex.getMessage());
			}
			result = validator.convertSource(source);
			outputWriter.writeln("result: " + result);

			source = ">< % aaa %>";
			outputWriter.writeln("source: " + source);
			try {
				validator.validateSource(source);
			}
			catch (InvalidCharacterException ex) {
				outputWriter.writeln(ex.getMessage());
			}
			result = validator.convertSource(source);
			outputWriter.writeln("result: " + result);

			saveAndCompareTestResults();

		}
		finally {
			model.releaseFromEdit();
		}

	}
}