blob: 4c43f46661e023a76dd4a3e1b47e3569740230a4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.flex.pmd.parser.impl;
import static org.junit.Assert.*;
import org.apache.flex.pmd.parser.ast.Token;
import org.junit.Test;
public class TestAS3Scanner extends AbstractAs3ParserTestBase {
@Test
public void testAssignments() {
final String[] lines = new String[]
{"=",
"+=",
"-=",
"%=",
"^=",
"&=",
"|=",
"/="};
scn.setLines(lines);
for (int i = 0; i < lines.length; i++) {
assertText(Integer.toString(i),
lines[i]);
assertText("\n");
}
}
@Test
public void testBooleanOperators() {
final String[] lines = new String[]
{"&&",
"&=",
"||",
"|="};
scn.setLines(lines);
for (int i = 0; i < lines.length; i++) {
assertText(Integer.toString(i),
lines[i]);
assertText("\n");
}
}
@Test
public void testComparisonOperators() {
final String[] lines = new String[]
{">",
">>>=",
">>>",
">>=",
">>",
">=",
"===",
"==",
"!==",
"!="};
scn.setLines(lines);
for (int i = 0; i < lines.length; i++) {
assertText(Integer.toString(i),
lines[i]);
assertText("\n");
}
}
@Test
public void testIdentifiers() {
final String[] lines = new String[]
{"a",
"a.b.*",
"a.b::c",
"a.E"};
scn.setLines(lines);
assertText("1",
lines[0]);
assertText("\n");
assertText("2",
"a");
assertText("2",
".");
assertText("2",
"b");
assertText("2",
".");
assertText("2",
"*");
assertText("\n");
assertText("3",
"a");
assertText("3",
".");
assertText("3",
"b");
assertText("3",
"::");
assertText("3",
"c");
assertText("\n");
assertText("4",
"a");
assertText("4",
".");
assertText("4",
"E");
}
@Test
public void testIsDecimalChar() {
final String decimalString = "0123456789";
for (int i = 0; i < decimalString.length(); i++) {
assertTrue(AS3Scanner.isDecimalChar(decimalString.charAt(i)));
}
assertFalse(AS3Scanner.isDecimalChar((char) 0));
}
@Test
public void testIsHex() {
assertTrue(scn.isHexChar('0'));
assertTrue(scn.isHexChar('9'));
assertTrue(scn.isHexChar('A'));
assertTrue(scn.isHexChar('a'));
assertTrue(scn.isHexChar('F'));
assertTrue(scn.isHexChar('f'));
assertFalse(scn.isHexChar(';'));
assertFalse(scn.isHexChar(']'));
assertFalse(scn.isHexChar(' '));
}
@Test
public void testMultiLineComment() {
final String[] lines = new String[]
{"/* this is a multi line comment, not really */",
"/** now for real",
"/* now for real",
"*/"};
scn.setLines(lines);
assertText(lines[0]);
assertText("\n");
assertText("/** now for real\n/* now for real\n*/");
}
@Test
public void testMultilineXML() {
final String[] lines = new String[]
{"<?xml version=\"1.0\"?>",
"<a>",
"<b>test</b>",
"</a>"};
scn.setLines(lines);
assertText(join(lines,
"\n"));
}
@Test
public void testMultipleWords() {
final String[] lines = new String[]
{"word1 word2 word3",
"word4",
"word5 word6"};
scn.setLines(lines);
assertText("word1");
assertText("word2");
assertText("word3");
assertText("\n");
assertText("word4");
assertText("\n");
assertText("word5");
assertText("word6");
}
@Test
public void testNumbers() {
final String[] lines = new String[]
{"0",
"1.2",
"1.2E5",
"0xffgg"};
scn.setLines(lines);
assertText(lines[0]);
assertText("\n");
assertText(lines[1]);
assertText("\n");
assertText(lines[2]);
assertText("\n");
assertText(lines[3]);
}
@Test
public void testPlusSymbols() {
final String[] lines = new String[]
{"++",
"+=",
"+",
"--",
"-=",
"-"};
scn.setLines(lines);
for (int i = 0; i < lines.length; i++) {
assertText(Integer.toString(i),
lines[i]);
assertText("\n");
}
}
@Test
public void testSingleCharacterSymbols() {
final String[] lines = "{}()[]:;,?~".split("");
scn.setLines(lines);
// the first entry is empty, so we skip it
for (int i = 1; i < lines.length; i++) {
assertText("\n");
assertText(Integer.toString(i),
lines[i]);
}
}
@Test
public void testSingleLineComment() {
final String[] lines = new String[]
{"//this is a single line comment",
"word //another single line comment"};
scn.setLines(lines);
assertText(lines[0]);
assertText("\n");
assertText("word");
assertText("//another single line comment");
}
@Test
public void testSingleWord() {
final String[] lines = new String[]
{"word"};
scn.setLines(lines);
assertText(lines[0]);
}
@Test
public void testStrings() {
final String[] lines = new String[]
{"\"string\"",
"\'string\'",
"\"string\\\"\""};
scn.setLines(lines);
assertText("1",
lines[0]);
assertText("\n");
assertText("2",
lines[1]);
assertText("\n");
assertText("3",
lines[2]);
}
@Test
public void testXML() {
final String[] lines = new String[]
{"<root/>",
"<root>test</root>",
"<?xml version=\"1.0\"?><root>test</root>"};
scn.setLines(lines);
for (int i = 0; i < lines.length; i++) {
assertText(Integer.toString(i),
lines[i]);
assertText("\n");
}
}
private void assertText(final String text) {
assertText("",
text);
}
private void assertText(final String message,
final String text) {
Token token = scn.nextToken();
assertEquals(message, text, token.getText());
}
private String join(final String[] lines,
final String delimiter) {
final StringBuilder result = new StringBuilder();
for (int i = 0; i < lines.length; i++) {
if (i > 0) {
result.append(delimiter);
}
result.append(lines[i]);
}
return result.toString();
}
}