blob: 12603024e1280f09a87a8c89071e75f3ef7e1981 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2010 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.css.tests.encoding.css;
import java.io.IOException;
import java.io.Reader;
import junit.framework.TestCase;
import org.eclipse.wst.css.core.internal.contenttype.CSSHeadTokenizer;
import org.eclipse.wst.css.core.internal.contenttype.CSSHeadTokenizerConstants;
import org.eclipse.wst.css.core.internal.contenttype.HeadParserToken;
import org.eclipse.wst.css.tests.encoding.CSSEncodingTestsPlugin;
public class CSSHeadTokenizerTester extends TestCase {
boolean DEBUG = false;
private String fcharset;
private final String fileDir = "css/";
private final String fileHome = "testfiles/";
private final String fileLocation = this.fileHome + this.fileDir;
private void doTestFile(String filename, String expectedName) throws IOException {
doTestFile(filename, expectedName, null);
}
private void doTestFile(String filename, String expectedName, String finalTokenType) {
try {
doTestFile(CSSEncodingTestsPlugin.getTestReader(filename), expectedName, finalTokenType);
}
catch (IOException e) {
System.out.println("Error opening file \"" + filename +"\"");
}
}
private void doTestFile(Reader fileReader, String expectedName, String finalTokenType) throws IOException {
CSSHeadTokenizer tokenizer = null;
tokenizer = new CSSHeadTokenizer(fileReader);
HeadParserToken resultToken = null;
HeadParserToken token = parseHeader(tokenizer);
String resultValue = this.fcharset;
fileReader.close();
if (finalTokenType != null) {
assertTrue("did not end as expected. found: " + token.getType(), finalTokenType.equals(token.getType()));
}
else {
if (expectedName == null) {
assertTrue("expected no encoding, but found: " + resultValue, resultToken == null);
}
else {
assertTrue("expected " + expectedName + " but found " + resultValue, expectedName.equals(resultValue));
}
}
}
private boolean isLegalString(String tokenType) {
boolean result = false;
if (tokenType == null) {
result = false;
}
else {
result = tokenType.equals(EncodingParserConstants.StringValue) || tokenType.equals(EncodingParserConstants.UnDelimitedStringValue) || tokenType.equals(EncodingParserConstants.InvalidTerminatedStringValue) || tokenType.equals(EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue);
}
return result;
}
/**
* Give's priority to encoding value, if found else, looks for contentType
* value;
*/
private HeadParserToken parseHeader(CSSHeadTokenizer tokenizer) throws IOException {
HeadParserToken token = null;
HeadParserToken finalToken = null;
do {
token = tokenizer.getNextToken();
String tokenType = token.getType();
if(canHandleAsUnicodeStream(tokenType)) {
}
if (tokenType == CSSHeadTokenizerConstants.CHARSET_RULE) {
if (tokenizer.hasMoreTokens()) {
HeadParserToken valueToken = tokenizer.getNextToken();
String valueTokenType = valueToken.getType();
if (isLegalString(valueTokenType)) {
this.fcharset = valueToken.getText();
}
}
}
}
while (tokenizer.hasMoreTokens());
finalToken = token;
return finalToken;
}
private boolean canHandleAsUnicodeStream(String tokenType) {
boolean canHandleAsUnicode = false;
if (tokenType == EncodingParserConstants.UTF83ByteBOM) {
canHandleAsUnicode = true;
this.fcharset = "UTF-8"; //$NON-NLS-1$
}
else if (tokenType == EncodingParserConstants.UTF16BE || tokenType == EncodingParserConstants.UTF16LE) {
canHandleAsUnicode = true;
this.fcharset = "UTF-16"; //$NON-NLS-1$
}
return canHandleAsUnicode;
}
public void testBestCase() throws IOException {
String filename = this.fileLocation + "nonStandard.css";
doTestFile(filename, "ISO-8859-6");
}
public void testEmptyFile() throws IOException {
String filename = this.fileLocation + "emptyFile.css";
doTestFile(filename, null);
}
public void _testEUCJP() throws IOException {
String filename = this.fileLocation + "encoding_test_eucjp.css";
doTestFile(filename, "EUC-JP");
}
public void testJIS() throws IOException {
String filename = this.fileLocation + "encoding_test_jis.css";
doTestFile(filename, "ISO-2022-JP");
}
public void testNoEncoding() throws IOException {
String filename = this.fileLocation + "noEncoding.css";
doTestFile(filename, null);
}
public void testnonStandardIllFormed() throws IOException {
String filename = this.fileLocation + "nonStandardIllFormed.css";
doTestFile(filename, "ISO-8859-6");
}
public void testnonStandardIllFormed2() throws IOException {
String filename = this.fileLocation + "nonStandardIllFormed2.css";
doTestFile(filename, "ISO-8859-6");
}
public void _testShiftJIS() throws IOException {
String filename = this.fileLocation + "encoding_test_sjis.css";
doTestFile(filename, "SHIFT_JIS");
}
public void testUTF16be() throws IOException {
String filename = fileLocation + "utf16be.css";
doTestFile(filename, "UTF-16BE");
}
public void testUTF16le() throws IOException {
String filename = fileLocation + "utf16le.css";
doTestFile(filename, "UTF-16LE");
}
public void testUTF16beMalformed() throws IOException {
String filename = fileLocation + "utf16beMalformed.css";
doTestFile(filename, "UTF-16BE");
}
public void testUTF16leMalformed() throws IOException {
String filename = fileLocation + "utf16leMalformed.css";
doTestFile(filename, "UTF-16LE");
}
/*
sun.io.MalformedInputException
at sun.io.ByteToCharUTF8.convert(ByteToCharUTF8.java:262)
at sun.nio.cs.StreamDecoder$ConverterSD.convertInto(StreamDecoder.java:314)
at sun.nio.cs.StreamDecoder$ConverterSD.implRead(StreamDecoder.java:364)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:250)
at java.io.InputStreamReader.read(InputStreamReader.java:212)
at org.eclipse.wst.css.core.internal.contenttype.CSSHeadTokenizer.yy_advance(CSSHeadTokenizer.java:337)
at org.eclipse.wst.css.core.internal.contenttype.CSSHeadTokenizer.primGetNextToken(CSSHeadTokenizer.java:470)
at org.eclipse.wst.css.core.internal.contenttype.CSSHeadTokenizer.getNextToken(CSSHeadTokenizer.java:229)
at org.eclipse.wst.css.tests.encoding.css.CSSHeadTokenizerTester.parseHeader(CSSHeadTokenizerTester.java:88)
at org.eclipse.wst.css.tests.encoding.css.CSSHeadTokenizerTester.doTestFile(CSSHeadTokenizerTester.java:52)
at org.eclipse.wst.css.tests.encoding.css.CSSHeadTokenizerTester.doTestFile(CSSHeadTokenizerTester.java:31)
at org.eclipse.wst.css.tests.encoding.css.CSSHeadTokenizerTester.testUTF16BOM(CSSHeadTokenizerTester.java:186)
*/
public void testUTF16BOM() throws Exception {
/*String filename = fileLocation + "utf16BOM.css";
ZippedTest test = new ZippedTest();
test.setUp();
IFile file = test.getFile(filename);
assertNotNull(file);
Reader fileReader = new FileReader(file.getLocationURI().getPath());
doTestFile(fileReader, "UTF-16", null);
test.shutDown();*/
}
}