/*******************************************************************************
 * 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.XMLModel;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

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

	public TableTest() {
		super();
	}

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

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

		Element html = document.createElement("HTML");
		document.appendChild(html);

		printSource(model);
		printTree(model);

		Element body = document.createElement("BODY");
		html.appendChild(body);

		printSource(model);
		printTree(model);

		Element table = document.createElement("TABLE");
		table.setAttribute("border", "1");
		Element td = null;
		for (int row = 0; row < 2; row++) {
			Element tr = document.createElement("TR");
			table.appendChild(tr);
			for (int col = 0; col < 2; col++) {
				td = document.createElement("TD");
				tr.appendChild(td);
			}
		}
		body.appendChild(table);

		printSource(model);
		printTree(model);

		Element font = document.createElement("FONT");
		font.setAttribute("color", "red");
		Text text = document.createTextNode("text");
		font.appendChild(text);
		td.appendChild(font);

		printSource(model);
		printTree(model);

		saveAndCompareTestResults();

		}
		finally {
			model.releaseFromEdit();
		}

	}
}