/*******************************************************************************
 * Copyright (c) 2004, 2006 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.tests.encoding.read;

import java.io.IOException;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.wst.xml.tests.encoding.GenerateFiles;



public class TestContentTypeDescriptionOnGennedFiles extends TestContentDescription {
	private static int notRan = 0;
	private static final boolean DEBUG = false;

	protected void doGenTest(String charsetName) throws CoreException, IOException {
		String filename = GenerateFiles.getMainDirectoryBasedOnVMName() + "/xml/test-" + charsetName + ".xml";
		doTest(charsetName, filename, null);
	}

	protected void doTest(String expectedJavaCharset, String filePath, Class expectedException) throws CoreException, IOException {
		if (expectedJavaCharset != null && expectedJavaCharset.indexOf("UTF-32") > -1) {
			return; //won't try 32 bit right now
		}
		IFile file = (IFile) fTestProject.findMember(filePath);

		// if there no file, just assume that its due to which VM is
		// bring used. (Could be improved in future to avoid counting as a
		// test) - this check in here for initial debugging only
		if (file == null) {
			notRan++;
			if (DEBUG) {
				System.out.println();
				System.out.println("test not ran since charset not supported by VM: " + filePath);
			}
			return;
		}
		super.doTest(expectedJavaCharset, filePath, expectedException);
	}


	public void testFile0() throws CoreException, IOException {
		String charsetName = "Big5";
		doGenTest(charsetName);
	}

	public void testFile1() throws CoreException, IOException {
		String charsetName = "CESU-8";
		doGenTest(charsetName);
	}

	public void testFile2() throws CoreException, IOException {
		String charsetName = "COMPOUND_TEXT";
		doGenTest(charsetName);
	}

	public void testFile3() throws CoreException, IOException {
		String charsetName = "EUC-CN";
		doGenTest(charsetName);
	}

	public void testFile4() throws CoreException, IOException {
		String charsetName = "EUC-JP";
		doGenTest(charsetName);
	}

	public void testFile5() throws CoreException, IOException {
		String charsetName = "EUC-KR";
		doGenTest(charsetName);
	}

	public void testFile6() throws CoreException, IOException {
		String charsetName = "GB18030";
		doGenTest(charsetName);
	}

	public void testFile7() throws CoreException, IOException {
		String charsetName = "GB2312";
		doGenTest(charsetName);
	}

	public void testFile8() throws CoreException, IOException {
		String charsetName = "GBK";
		doGenTest(charsetName);
	}

	public void testFile9() throws CoreException, IOException {
		String charsetName = "hp-roman8";
		doGenTest(charsetName);
	}

	public void testFile10() throws CoreException, IOException {
		String charsetName = "IBM-1006";
		doGenTest(charsetName);
	}

	public void testFile11() throws CoreException, IOException {
		String charsetName = "IBM-1041";
		doGenTest(charsetName);
	}

	public void testFile12() throws CoreException, IOException {
		String charsetName = "IBM-1043";
		doGenTest(charsetName);
	}

	public void testFile13() throws CoreException, IOException {
		String charsetName = "IBM-1046";
		doGenTest(charsetName);
	}

	public void testFile14() throws CoreException, IOException {
		String charsetName = "IBM-1046S";
		doGenTest(charsetName);
	}

	public void testFile15() throws CoreException, IOException {
		String charsetName = "IBM-1088";
		doGenTest(charsetName);
	}

	public void testFile16() throws CoreException, IOException {
		String charsetName = "IBM-1098";
		doGenTest(charsetName);
	}

	public void testFile17() throws CoreException, IOException {
		String charsetName = "IBM-1114";
		doGenTest(charsetName);
	}

	public void testFile18() throws CoreException, IOException {
		String charsetName = "IBM-1115";
		doGenTest(charsetName);
	}

	public void testFile19() throws CoreException, IOException {
		String charsetName = "IBM-1124";
		doGenTest(charsetName);
	}

	public void testFile20() throws CoreException, IOException {
		String charsetName = "IBM-1363";
		doGenTest(charsetName);
	}

	public void testFile21() throws CoreException, IOException {
		String charsetName = "IBM-1363C";
		doGenTest(charsetName);
	}

	public void testFile22() throws CoreException, IOException {
		String charsetName = "IBM-1370";
		doGenTest(charsetName);
	}

	public void testFile23() throws CoreException, IOException {
		String charsetName = "IBM-1381";
		doGenTest(charsetName);
	}

	public void testFile24() throws CoreException, IOException {
		String charsetName = "IBM-1383";
		doGenTest(charsetName);
	}

	public void testFile25() throws CoreException, IOException {
		String charsetName = "IBM-1386";
		doGenTest(charsetName);
	}

	public void testFile26() throws CoreException, IOException {
		String charsetName = "IBM-33722C";
		doGenTest(charsetName);
	}

	public void testFile27() throws CoreException, IOException {
		String charsetName = "IBM-437";
		doGenTest(charsetName);
	}

	public void testFile28() throws CoreException, IOException {
		String charsetName = "IBM-737";
		doGenTest(charsetName);
	}

	public void testFile29() throws CoreException, IOException {
		String charsetName = "IBM-775";
		doGenTest(charsetName);
	}

	public void testFile30() throws CoreException, IOException {
		String charsetName = "IBM-808";
		doGenTest(charsetName);
	}

	public void testFile31() throws CoreException, IOException {
		String charsetName = "IBM-850";
		doGenTest(charsetName);
	}

	public void testFile32() throws CoreException, IOException {
		String charsetName = "IBM-852";
		doGenTest(charsetName);
	}

	public void testFile33() throws CoreException, IOException {
		String charsetName = "IBM-855";
		doGenTest(charsetName);
	}

	public void testFile34() throws CoreException, IOException {
		String charsetName = "IBM-856";
		doGenTest(charsetName);
	}

	public void testFile35() throws CoreException, IOException {
		String charsetName = "IBM-857";
		doGenTest(charsetName);
	}

	public void testFile36() throws CoreException, IOException {
		String charsetName = "IBM-858";
		doGenTest(charsetName);
	}

	public void testFile37() throws CoreException, IOException {
		String charsetName = "IBM-859";
		doGenTest(charsetName);
	}

	public void testFile38() throws CoreException, IOException {
		String charsetName = "IBM-860";
		doGenTest(charsetName);
	}

	public void testFile39() throws CoreException, IOException {
		String charsetName = "IBM-861";
		doGenTest(charsetName);
	}

	public void testFile40() throws CoreException, IOException {
		String charsetName = "IBM-862";
		doGenTest(charsetName);
	}

	public void testFile41() throws CoreException, IOException {
		String charsetName = "IBM-863";
		doGenTest(charsetName);
	}

	public void testFile42() throws CoreException, IOException {
		String charsetName = "IBM-864";
		doGenTest(charsetName);
	}

	public void testFile43() throws CoreException, IOException {
		String charsetName = "IBM-864S";
		doGenTest(charsetName);
	}

	public void testFile44() throws CoreException, IOException {
		String charsetName = "IBM-865";
		doGenTest(charsetName);
	}

	public void testFile45() throws CoreException, IOException {
		String charsetName = "IBM-866";
		doGenTest(charsetName);
	}

	public void testFile46() throws CoreException, IOException {
		String charsetName = "IBM-867";
		doGenTest(charsetName);
	}

	public void testFile47() throws CoreException, IOException {
		String charsetName = "IBM-868";
		doGenTest(charsetName);
	}

	public void testFile48() throws CoreException, IOException {
		String charsetName = "IBM-869";
		doGenTest(charsetName);
	}

	public void testFile49() throws CoreException, IOException {
		String charsetName = "IBM-874";
		doGenTest(charsetName);
	}

	public void testFile50() throws CoreException, IOException {
		String charsetName = "IBM-897";
		doGenTest(charsetName);
	}

	public void testFile51() throws CoreException, IOException {
		String charsetName = "IBM-921";
		doGenTest(charsetName);
	}

	public void testFile52() throws CoreException, IOException {
		String charsetName = "IBM-922";
		doGenTest(charsetName);
	}

	public void testFile53() throws CoreException, IOException {
		String charsetName = "IBM-932";
		doGenTest(charsetName);
	}

	public void testFile54() throws CoreException, IOException {
		String charsetName = "IBM-942";
		doGenTest(charsetName);
	}

	public void testFile55() throws CoreException, IOException {
		String charsetName = "IBM-942C";
		doGenTest(charsetName);
	}

	public void testFile56() throws CoreException, IOException {
		String charsetName = "IBM-943";
		doGenTest(charsetName);
	}

	public void testFile57() throws CoreException, IOException {
		String charsetName = "IBM-943C";
		doGenTest(charsetName);
	}

	public void testFile58() throws CoreException, IOException {
		String charsetName = "IBM-948";
		doGenTest(charsetName);
	}

	public void testFile59() throws CoreException, IOException {
		String charsetName = "IBM-949";
		doGenTest(charsetName);
	}

	public void testFile60() throws CoreException, IOException {
		String charsetName = "IBM-949C";
		doGenTest(charsetName);
	}

	public void testFile61() throws CoreException, IOException {
		String charsetName = "IBM-950";
		doGenTest(charsetName);
	}

	public void testFile62() throws CoreException, IOException {
		String charsetName = "IBM-954C";
		doGenTest(charsetName);
	}

	public void testFile63() throws CoreException, IOException {
		String charsetName = "ISO-2022-CN";
		doGenTest(charsetName);
	}

	public void testFile64() throws CoreException, IOException {
		String charsetName = "ISO-2022-CN-GB";
		doGenTest(charsetName);
	}

	public void testFile65() throws CoreException, IOException {
		String charsetName = "ISO-2022-JP";
		doGenTest(charsetName);
	}

	public void testFile66() throws CoreException, IOException {
		String charsetName = "ISO-2022-KR";
		doGenTest(charsetName);
	}

	public void testFile67() throws CoreException, IOException {
		String charsetName = "ISO-8859-1";
		doGenTest(charsetName);
	}

	public void testFile68() throws CoreException, IOException {
		String charsetName = "ISO-8859-10";
		doGenTest(charsetName);
	}

	public void testFile69() throws CoreException, IOException {
		String charsetName = "ISO-8859-13";
		doGenTest(charsetName);
	}

	public void testFile70() throws CoreException, IOException {
		String charsetName = "ISO-8859-14";
		doGenTest(charsetName);
	}

	public void testFile71() throws CoreException, IOException {
		String charsetName = "ISO-8859-15";
		doGenTest(charsetName);
	}

	public void testFile72() throws CoreException, IOException {
		String charsetName = "ISO-8859-16";
		doGenTest(charsetName);
	}

	public void testFile73() throws CoreException, IOException {
		String charsetName = "ISO-8859-2";
		doGenTest(charsetName);
	}

	public void testFile74() throws CoreException, IOException {
		String charsetName = "ISO-8859-3";
		doGenTest(charsetName);
	}

	public void testFile75() throws CoreException, IOException {
		String charsetName = "ISO-8859-4";
		doGenTest(charsetName);
	}

	public void testFile76() throws CoreException, IOException {
		String charsetName = "ISO-8859-5";
		doGenTest(charsetName);
	}

	public void testFile77() throws CoreException, IOException {
		String charsetName = "ISO-8859-6";
		doGenTest(charsetName);
	}

	public void testFile78() throws CoreException, IOException {
		String charsetName = "ISO-8859-6S";
		doGenTest(charsetName);
	}

	public void testFile79() throws CoreException, IOException {
		String charsetName = "ISO-8859-7";
		doGenTest(charsetName);
	}

	public void testFile80() throws CoreException, IOException {
		String charsetName = "ISO-8859-8";
		doGenTest(charsetName);
	}

	public void testFile81() throws CoreException, IOException {
		String charsetName = "ISO-8859-9";
		doGenTest(charsetName);
	}

	public void testFile82() throws CoreException, IOException {
		String charsetName = "JIS0201";
		doGenTest(charsetName);
	}

	public void testFile83() throws CoreException, IOException {
		String charsetName = "JIS0208";
		doGenTest(charsetName);
	}

	public void testFile84() throws CoreException, IOException {
		String charsetName = "JIS0212";
		doGenTest(charsetName);
	}

	public void testFile85() throws CoreException, IOException {
		String charsetName = "Johab";
		doGenTest(charsetName);
	}

	public void testFile86() throws CoreException, IOException {
		String charsetName = "KOI8-R";
		doGenTest(charsetName);
	}

	public void testFile87() throws CoreException, IOException {
		String charsetName = "KOI8-RU";
		doGenTest(charsetName);
	}

	public void testFile88() throws CoreException, IOException {
		String charsetName = "KOI8-U";
		doGenTest(charsetName);
	}

	public void testFile89() throws CoreException, IOException {
		String charsetName = "KSC5601";
		doGenTest(charsetName);
	}

	public void testFile90() throws CoreException, IOException {
		String charsetName = "MacArabic";
		doGenTest(charsetName);
	}

	public void testFile91() throws CoreException, IOException {
		String charsetName = "MacCentralEurope";
		doGenTest(charsetName);
	}

	public void testFile92() throws CoreException, IOException {
		String charsetName = "MacCroatian";
		doGenTest(charsetName);
	}

	public void testFile93() throws CoreException, IOException {
		String charsetName = "MacCyrillic";
		doGenTest(charsetName);
	}

	public void testFile94() throws CoreException, IOException {
		String charsetName = "MacGreek";
		doGenTest(charsetName);
	}

	public void testFile95() throws CoreException, IOException {
		String charsetName = "MacHebrew";
		doGenTest(charsetName);
	}

	public void testFile96() throws CoreException, IOException {
		String charsetName = "MacIceland";
		doGenTest(charsetName);
	}

	public void testFile97() throws CoreException, IOException {
		String charsetName = "MacRoman";
		doGenTest(charsetName);
	}

	public void testFile98() throws CoreException, IOException {
		String charsetName = "MacRomania";
		doGenTest(charsetName);
	}

	public void testFile99() throws CoreException, IOException {
		String charsetName = "MacThai";
		doGenTest(charsetName);
	}

	public void testFile100() throws CoreException, IOException {
		String charsetName = "MacTurkish";
		doGenTest(charsetName);
	}

	public void testFile101() throws CoreException, IOException {
		String charsetName = "MacUkraine";
		doGenTest(charsetName);
	}

	public void testFile102() throws CoreException, IOException {
		String charsetName = "PTCP154";
		doGenTest(charsetName);
	}

	public void testFile103() throws CoreException, IOException {
		String charsetName = "Shift_JIS";
		doGenTest(charsetName);
	}

	public void testFile104() throws CoreException, IOException {
		String charsetName = "TIS-620";
		doGenTest(charsetName);
	}

	public void testFile105() throws CoreException, IOException {
		String charsetName = "US-ASCII";
		doGenTest(charsetName);
	}

	public void testFile106() throws CoreException, IOException {
		String charsetName = "UTF-16";
		doGenTest(charsetName);
	}

//	public void testFile107() throws CoreException, IOException {
//		String charsetName = "UTF-16BE";
//		doGenTest(charsetName);
//	}

	public void testFile108() throws CoreException, IOException {
		String charsetName = "UTF-16LE";
		doGenTest(charsetName);
	}

	public void testFile109() throws CoreException, IOException {
		String charsetName = "UTF-32";
		doGenTest(charsetName);
	}

	public void testFile110() throws CoreException, IOException {
		String charsetName = "UTF-32BE";
		doGenTest(charsetName);
	}

	public void testFile111() throws CoreException, IOException {
		String charsetName = "UTF-32LE";
		doGenTest(charsetName);
	}

	public void testFile112() throws CoreException, IOException {
		String charsetName = "UTF-8";
		doGenTest(charsetName);
	}

	public void testFile113() throws CoreException, IOException {
		String charsetName = "UTF-8J";
		doGenTest(charsetName);
	}

	public void testFile114() throws CoreException, IOException {
		String charsetName = "windows-1250";
		doGenTest(charsetName);
	}

	public void testFile115() throws CoreException, IOException {
		String charsetName = "windows-1251";
		doGenTest(charsetName);
	}

	public void testFile116() throws CoreException, IOException {
		String charsetName = "windows-1252";
		doGenTest(charsetName);
	}

	public void testFile117() throws CoreException, IOException {
		String charsetName = "windows-1253";
		doGenTest(charsetName);
	}

	public void testFile118() throws CoreException, IOException {
		String charsetName = "windows-1254";
		doGenTest(charsetName);
	}

	public void testFile119() throws CoreException, IOException {
		String charsetName = "windows-1255";
		doGenTest(charsetName);
	}

	public void testFile120() throws CoreException, IOException {
		String charsetName = "windows-1256";
		doGenTest(charsetName);
	}

	public void testFile121() throws CoreException, IOException {
		String charsetName = "windows-1256S";
		doGenTest(charsetName);
	}

	public void testFile122() throws CoreException, IOException {
		String charsetName = "windows-1257";
		doGenTest(charsetName);
	}

	public void testFile123() throws CoreException, IOException {
		String charsetName = "windows-1258";
		doGenTest(charsetName);
	}

	public void testFile124() throws CoreException, IOException {
		String charsetName = "windows-874";
		doGenTest(charsetName);
	}

	public void testFile125() throws CoreException, IOException {
		String charsetName = "windows-932";
		doGenTest(charsetName);
	}

	public void testFile126() throws CoreException, IOException {
		String charsetName = "windows-936";
		doGenTest(charsetName);
	}

	public void testFile127() throws CoreException, IOException {
		String charsetName = "windows-949";
		doGenTest(charsetName);
	}

	public void testFile128() throws CoreException, IOException {
		String charsetName = "windows-950";
		doGenTest(charsetName);
	}
/* 
removed for PPC machine with IBM VM 
https://bugs.eclipse.org/bugs/show_bug.cgi?id=126503
*/ 
//	public void testFile129() throws CoreException, IOException {
//		String charsetName = "X-UnicodeBig";
//		doGenTest(charsetName);
//	}

	public void testFile130() throws CoreException, IOException {
		String charsetName = "X-UnicodeLittle";
		doGenTest(charsetName);
	}



}
