blob: 230ec1d6ca1b49ba49cf1ddc884d3e2e1dc7426b [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.exceptions.TokenException;
import org.junit.Test;
public class TestPackageContent extends AbstractAs3ParserTestBase {
@Test
public void testClass() throws TokenException {
assertPackageContent("1",
"public class A { }",
"<content line=\"2\"><class line=\"2\">"
+ "<name line=\"2\">A</name><mod-list line=\"2\">"
+ "<mod line=\"2\">public</mod>" + "</mod-list><content line=\"2\">"
+ "</content></class></content>");
}
@Test
public void testClassWithAsDoc() throws TokenException {
assertPackageContent("1",
"/** AsDoc */ public class A { }",
"<content line=\"2\"><class line=\"2\">"
+ "<as-doc line=\"2\">/** AsDoc */</as-doc><name line=\"2\""
+ ">A</name><mod-list line=\"2\"><mod line=\"2\""
+ ">public</mod></mod-list><content line=\"2\">"
+ "</content></class></content>");
}
@Test
public void testClassWithAsDocComplex() throws TokenException {
assertPackageContent("1",
"/** AsDoc */ public class A { "
+ "/** Member */ " + "public var tmp : Number; "
+ "private var tmp2 : int; " + "/** Function */ "
+ "protected function foo() : void { } }",
"<content line=\"2\"><class line=\"2\"><as-doc line=\"2\""
+ ">/** AsDoc */</as-doc><name line=\"2\">A</name>"
+ "<mod-list line=\"2\"><mod line=\"2\">public</mod>"
+ "</mod-list><content line=\"2\"><var-list line=\"2\">"
+ "<mod-list line=\"2\"><mod line=\"2\">public</mod>"
+ "</mod-list><name-type-init line=\"2\"><name line=\"2\">tmp</name>"
+ "<type line=\"2\">Number</type></name-type-init><as-doc line=\"2\""
+ ">/** Member */</as-doc></var-list><var-list line=\"2\">"
+ "<mod-list line=\"2\"><mod line=\"2\">private</mod></mod-list>"
+ "<name-type-init line=\"2\"><name line=\"2\">tmp2</name>"
+ "<type line=\"2\">int</type></name-type-init></var-list><function "
+ "line=\"2\"><as-doc line=\"2\">/** Function */</as-doc>"
+ "<mod-list line=\"2\"><mod line=\"2\">protected</mod></mod-list>"
+ "<name line=\"2\">foo</name><parameter-list line=\"2\">"
+ "</parameter-list><type line=\"2\">void</type><block line=\"2\""
+ "></block></function></content></class></content>");
}
@Test
public void testClassWithComment() throws TokenException {
assertPackageContent("1",
"/* lala */ /** asDoc */ public class A { }",
"<content line=\"2\"><class line=\"2\">"
+ "<as-doc line=\"2\">/** asDoc */</as-doc><multi-line-comment "
+ "line=\"2\">/* lala */</multi-line-comment><name line=\"2\""
+ ">A</name><mod-list line=\"2\"><mod line=\"2\""
+ ">public</mod></mod-list><content line=\"2\">"
+ "</content></class></content>");
}
@Test
public void testClassWithMetadata() throws TokenException {
assertPackageContent("1",
"[Bindable(name=\"abc\", value=\"123\")] public class A { }",
"<content line=\"2\"><class line=\"2\">"
+ "<name line=\"2\">A</name><meta-list line=\"2\">" + "<meta line=\"2\""
+ ">Bindable ( name = \"abc\" , value = \"123\" )</meta>"
+ "</meta-list><mod-list line=\"2\">" + "<mod line=\"2\">public"
+ "</mod></mod-list><content line=\"2\"></content></class></content>");
}
@Test
public void testClassWithMetadataAsDoc() throws TokenException {
assertPackageContent("1",
"/** Comment */ [Bindable] public class A { }",
"<content line=\"2\"><class line=\"2\"><as-doc line=\"2\">"
+ "/** Comment */</as-doc><name line=\"2\">A</name><meta-list "
+ "line=\"2\"><meta line=\"2\">Bindable</meta></meta-list><mod-list "
+ "line=\"2\"><mod line=\"2\">public</mod></mod-list><content "
+ "line=\"2\"></content></class></content>");
}
@Test
public void testClassWithMetadataComment() throws TokenException {
assertPackageContent("1",
"/* Comment */ [Bindable] public class A { }",
"<content line=\"2\"><class line=\"2\">"
+ "<multi-line-comment line=\"2\">/* Comment */"
+ "</multi-line-comment><name line=\"2\">A</name>"
+ "<meta-list line=\"2\"><meta line=\"2\">"
+ "Bindable</meta></meta-list><mod-list line=\"2\"><mod "
+ "line=\"2\">public</mod></mod-list><content line=\"2\""
+ "></content></class></content>");
}
@Test
public void testClassWithMetadataWithComment() throws TokenException {
assertPackageContent("1",
"/* lala */ /** asDoc */ [Bindable] public class A { }",
"<content line=\"2\"><class line=\"2\"><as-doc line=\"2\">"
+ "/** asDoc */</as-doc><multi-line-comment line=\"2\">"
+ "/* lala */</multi-line-comment><name line=\"2\">A</name>"
+ "<meta-list line=\"2\"><meta line=\"2\">Bindable</meta>"
+ "</meta-list><mod-list line=\"2\"><mod line=\"2\">public"
+ "</mod></mod-list><content line=\"2\"></content></class></content>");
}
@Test
public void testClassWithSimpleMetadata() throws TokenException {
assertPackageContent("1",
"[Bindable] public class A { }",
"<content line=\"2\"><class line=\"2\"><name line=\"2\""
+ ">A</name><meta-list line=\"2\"><meta line=\"2\""
+ ">Bindable</meta></meta-list><mod-list line=\"2\">"
+ "<mod line=\"2\">public</mod></mod-list><content line=\"2\""
+ "></content></class></content>");
}
@Test
public void testImports() throws TokenException {
assertPackageContent("1",
"import a.b.c;",
"<content line=\"2\"><import line=\"2\""
+ ">a.b.c</import></content>");
assertPackageContent("2",
"import a.b.c import x.y.z",
"<content line=\"2\"><import line=\"2\">a.b.c"
+ "</import><import line=\"2\">x.y.z</import></content>");
}
@Test
public void testInterface() throws TokenException {
assertPackageContent("1",
"public interface A { }",
"<content line=\"2\"><interface line=\"2\">"
+ "<name line=\"2\">A</name><mod-list line=\"2\">"
+ "<mod line=\"2\">public</mod>" + "</mod-list><content line=\"2\">"
+ "</content></interface></content>");
}
@Test
public void testMethodPackages() throws TokenException {
assertPackageContent("1",
"public function a() : void { }",
"<content line=\"2\"><function line=\"2\">"
+ "<mod-list line=\"2\"><mod line=\"2\">public</mod>"
+ "</mod-list><name line=\"2\">a</name><parameter-list line=\"2\""
+ "></parameter-list><type line=\"2\">void</type>"
+ "<block line=\"2\"></block></function></content>");
}
@Test
public void testUse() throws TokenException {
assertPackageContent("1",
"use namespace myNamespace",
"<content line=\"2\"><use line=\"2\""
+ ">myNamespace</use></content>");
}
@Test
public void testUseNameSpace() throws TokenException {
assertPackageContent("FlexPMD-108",
"use namespace mx_internal;",
"<content line=\"2\"><use line=\"2\">mx_internal</use></content>");
}
private void assertPackageContent(final String message,
final String input,
final String expected) throws TokenException {
scn.setLines(new String[]
{"{",
input,
"}",
"__END__"});
asp.nextToken(); // first call
asp.nextToken(); // skip {
final String result = new ASTToXMLConverter().convert(asp.parsePackageContent());
assertEquals(message, expected, result);
}
}