/* * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /* * @test * @bug 4789689 4905985 4927164 4827184 4993906 5004549 * @summary Run Javadoc on a set of source files that demonstrate new * language features. Check the output to ensure that the new * language features are properly documented. * @author jamieh * @library ../lib/ * @build JavadocTester * @build TestNewLanguageFeatures * @run main TestNewLanguageFeatures */ public class TestNewLanguageFeatures extends JavadocTester { //Test information. private static final String BUG_ID = "4789689-4905985-4927164-4827184-4993906"; //Javadoc arguments. private static final String[] ARGS = new String[] { "-d", BUG_ID, "-use", "-source", "1.5", "-sourcepath", SRC_DIR, "pkg", "pkg1", "pkg2" }; //Input for string search tests. private static final String[][] TEST = { //================================= // ENUM TESTING //================================= //Make sure enum header is correct. {BUG_ID + FS + "pkg" + FS + "Coin.html", "Enum Coin</H2>"}, //Make sure enum signature is correct. {BUG_ID + FS + "pkg" + FS + "Coin.html", "public enum "+ "<STRONG>Coin</STRONG>" + NL + "extends java.lang.Enum<" + "<A HREF=\"../pkg/Coin.html\" title=\"enum in pkg\">Coin</A>>" }, //Check for enum constant section {BUG_ID + FS + "pkg" + FS + "Coin.html", "<CAPTION CLASS=\"TableCaption\">" + NL + "Enum Constant Summary</CAPTION>"}, //Detail for enum constant {BUG_ID + FS + "pkg" + FS + "Coin.html", "<STRONG><A HREF=\"../pkg/Coin.html#Dime\">Dime</A></STRONG>"}, //Automatically insert documentation for values() and valueOf(). {BUG_ID + FS + "pkg" + FS + "Coin.html", "Returns an array containing the constants of this enum type,"}, {BUG_ID + FS + "pkg" + FS + "Coin.html", "Returns the enum constant of this type with the specified name"}, {BUG_ID + FS + "pkg" + FS + "Coin.html", "for (Coin c : Coin.values())"}, {BUG_ID + FS + "pkg" + FS + "Coin.html", "Overloaded valueOf() method has correct documentation."}, {BUG_ID + FS + "pkg" + FS + "Coin.html", "Overloaded values method has correct documentation."}, //================================= // TYPE PARAMETER TESTING //================================= //Make sure the header is correct. {BUG_ID + FS + "pkg" + FS + "TypeParameters.html", "Class TypeParameters<E></H2>"}, //Check class type parameters section. {BUG_ID + FS + "pkg" + FS + "TypeParameters.html", "<DT><STRONG>Type Parameters:</STRONG></DT><DD><CODE>E</CODE> - " + "the type parameter for this class."}, //Type parameters in @see/@link {BUG_ID + FS + "pkg" + FS + "TypeParameters.html", "<DT><STRONG>See Also:</STRONG></DT><DD><A HREF=\"../pkg/TypeParameters.html\" " + "title=\"class in pkg\"><CODE>TypeParameters</CODE></A></DD></DL>"}, //Method that uses class type parameter. {BUG_ID + FS + "pkg" + FS + "TypeParameters.html", "(<A HREF=\"../pkg/TypeParameters.html\" title=\"type " + "parameter in TypeParameters\">E</A> param)"}, //Method type parameter section. {BUG_ID + FS + "pkg" + FS + "TypeParameters.html", "<STRONG>Type Parameters:</STRONG></DT><DD><CODE>T</CODE> - This is the first " + "type parameter.</DD><DD><CODE>V</CODE> - This is the second type " + "parameter."}, //Signature of method with type parameters {BUG_ID + FS + "pkg" + FS + "TypeParameters.html", "public <T extends java.util.List,V> " + "java.lang.String[] <STRONG>methodThatHasTypeParameters</STRONG>"}, //Wildcard testing. {BUG_ID + FS + "pkg" + FS + "Wildcards.html", "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" + "TypeParameters</A><? super java.lang.String> a"}, {BUG_ID + FS + "pkg" + FS + "Wildcards.html", "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" + "TypeParameters</A><? extends java.lang.StringBuffer> b"}, {BUG_ID + FS + "pkg" + FS + "Wildcards.html", "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" + "TypeParameters</A> c"}, //Bad type parameter warnings. {WARNING_OUTPUT, "warning - @param argument " + "\"<BadClassTypeParam>\" is not a type parameter name."}, {WARNING_OUTPUT, "warning - @param argument " + "\"<BadMethodTypeParam>\" is not a type parameter name."}, //Signature of subclass that has type parameters. {BUG_ID + FS + "pkg" + FS + "TypeParameterSubClass.html", "public class <STRONG>TypeParameterSubClass<T extends java.lang.String>" + "</STRONG>" + NL + "extends <A HREF=\"../pkg/TypeParameterSuperClass.html\" " + "title=\"class in pkg\">TypeParameterSuperClass</A><T>"}, //Interface generic parameter substitution //Signature of subclass that has type parameters. {BUG_ID + FS + "pkg" + FS + "TypeParameters.html", "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A><E>, <A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A><E></DD>"}, {BUG_ID + FS + "pkg" + FS + "SuperInterface.html", "<STRONG>All Known Subinterfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A><V></DD>"}, {BUG_ID + FS + "pkg" + FS + "SubInterface.html", "<STRONG>All Superinterfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A><V></DD>"}, //================================= // VAR ARG TESTING //================================= {BUG_ID + FS + "pkg" + FS + "VarArgs.html", "(int... i)"}, {BUG_ID + FS + "pkg" + FS + "VarArgs.html", "(int[][]... i)"}, {BUG_ID + FS + "pkg" + FS + "VarArgs.html", "(int[]...)"}, {BUG_ID + FS + "pkg" + FS + "VarArgs.html", "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" + "TypeParameters</A>... t"}, //================================= // ANNOTATION TYPE TESTING //================================= //Make sure the summary links are correct. {BUG_ID + FS + "pkg" + FS + "AnnotationType.html", "SUMMARY: <A HREF=\"#annotation_type_required_element_summary\">" + "REQUIRED</A> | <A HREF=\"#annotation_type_optional_element_summary\">" + "OPTIONAL</A>"}, //Make sure the detail links are correct. {BUG_ID + FS + "pkg" + FS + "AnnotationType.html", "DETAIL: <A HREF=\"#annotation_type_element_detail\">ELEMENT</A>"}, //Make sure the heading is correct. {BUG_ID + FS + "pkg" + FS + "AnnotationType.html", "Annotation Type AnnotationType</H2>"}, //Make sure the signature is correct. {BUG_ID + FS + "pkg" + FS + "AnnotationType.html", "public @interface <STRONG>AnnotationType</STRONG>"}, //Make sure member summary headings are correct. {BUG_ID + FS + "pkg" + FS + "AnnotationType.html", "<CAPTION CLASS=\"TableCaption\">" + NL + "Required Element Summary</CAPTION>"}, {BUG_ID + FS + "pkg" + FS + "AnnotationType.html", "<CAPTION CLASS=\"TableCaption\">" + NL + "Optional Element Summary</CAPTION>"}, //Make sure element detail heading is correct {BUG_ID + FS + "pkg" + FS + "AnnotationType.html", "Element Detail"}, //Make sure default annotation type value is printed when necessary. {BUG_ID + FS + "pkg" + FS + "AnnotationType.html", "<STRONG>Default:</STRONG></DT><DD>\"unknown\"</DD>"}, //================================= // ANNOTATION TYPE USAGE TESTING //================================= //PACKAGE {BUG_ID + FS + "pkg" + FS + "package-summary.html", "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Package Annotation\"," + NL + " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"}, //CLASS {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<FONT SIZE=\"-1\">" + "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Class Annotation\","+NL + " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL + "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG>" + NL + "extends java.lang.Object"}, //FIELD {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<FONT SIZE=\"-1\">" + "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Field Annotation\","+NL + " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL + "</FONT>public int <STRONG>field</STRONG>"}, //CONSTRUCTOR {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<FONT SIZE=\"-1\">" + "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Constructor Annotation\","+NL + " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL + "</FONT>public <STRONG>AnnotationTypeUsage</STRONG>()"}, //METHOD {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<FONT SIZE=\"-1\">" + "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Method Annotation\","+NL + " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL + "</FONT>public void <STRONG>method</STRONG>()"}, //METHOD PARAMS {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<PRE>" + NL + "public void <STRONG>methodWithParams</STRONG>(<FONT SIZE=\"-1\"><A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Parameter Annotation\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)</FONT>" + NL + " int documented," + NL + " int undocmented)</PRE>"}, //CONSTRUCTOR PARAMS {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<PRE>" + NL + "public <STRONG>AnnotationTypeUsage</STRONG>(<FONT SIZE=\"-1\"><A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Constructor Param Annotation\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)</FONT>" + NL + " int documented," + NL + " int undocmented)</PRE>"}, //================================= // ANNOTATION TYPE USAGE TESTING (All Different Types). //================================= //Integer {BUG_ID + FS + "pkg1" + FS + "B.html", "<A HREF=\"../pkg1/A.html#d()\">d</A>=3.14,"}, //Double {BUG_ID + FS + "pkg1" + FS + "B.html", "<A HREF=\"../pkg1/A.html#d()\">d</A>=3.14,"}, //Boolean {BUG_ID + FS + "pkg1" + FS + "B.html", "<A HREF=\"../pkg1/A.html#b()\">b</A>=true,"}, //String {BUG_ID + FS + "pkg1" + FS + "B.html", "<A HREF=\"../pkg1/A.html#s()\">s</A>=\"sigh\","}, //Class {BUG_ID + FS + "pkg1" + FS + "B.html", "<A HREF=\"../pkg1/A.html#c()\">c</A>=<A HREF=\"../pkg2/Foo.html\" title=\"class in pkg2\">Foo.class</A>,"}, //Bounded Class {BUG_ID + FS + "pkg1" + FS + "B.html", "<A HREF=\"../pkg1/A.html#w()\">w</A>=<A HREF=\"../pkg/TypeParameterSubClass.html\" title=\"class in pkg\">TypeParameterSubClass.class</A>,"}, //Enum {BUG_ID + FS + "pkg1" + FS + "B.html", "<A HREF=\"../pkg1/A.html#e()\">e</A>=<A HREF=\"../pkg/Coin.html#Penny\">Penny</A>,"}, //Annotation Type {BUG_ID + FS + "pkg1" + FS + "B.html", "<A HREF=\"../pkg1/A.html#a()\">a</A>=<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"foo\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994),"}, //String Array {BUG_ID + FS + "pkg1" + FS + "B.html", "<A HREF=\"../pkg1/A.html#sa()\">sa</A>={\"up\",\"down\"},"}, //Primitive {BUG_ID + FS + "pkg1" + FS + "B.html", "<A HREF=\"../pkg1/A.html#primitiveClassTest()\">primitiveClassTest</A>=boolean.class,"}, //XXX: Add array test case after this if fixed: //5020899: Incorrect internal representation of class-valued annotation elements //Make sure that annotations are surrounded by <pre> and </pre> {BUG_ID + FS + "pkg1" + FS + "B.html", "<PRE><FONT SIZE=\"-1\"><A HREF=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</A>"}, {BUG_ID + FS + "pkg1" + FS + "B.html", "</FONT>public interface <STRONG>B</STRONG></PRE>"}, //============================================================== // Handle multiple bounds. //============================================================== {BUG_ID + FS + "pkg" + FS + "MultiTypeParameters.html", "public <T extends java.lang.Number & java.lang.Runnable> T <STRONG>foo</STRONG>(T t)"}, //============================================================== // Test Class-Use Documenation for Type Parameters. //============================================================== //ClassUseTest1: <T extends Foo & Foo2> {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " + "title=\"class in pkg2\">Foo</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html", "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1<T extends Foo & Foo2></A></STRONG></CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " + "title=\"class in pkg2\">Foo</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html", "<TD><CODE><STRONG>ClassUseTest1.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></STRONG>(T t)</CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " + "title=\"class in pkg2\">Foo</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html", "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A><<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>></CODE></FONT></TD>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> declared as <A HREF=\"../../pkg2/ParamTest.html\" " + "title=\"class in pkg2\">ParamTest</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A><<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>></CODE></FONT></TD>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" " + "title=\"interface in pkg2\">Foo2</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html", "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1<T extends Foo & Foo2></A></STRONG></CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" " + "title=\"interface in pkg2\">Foo2</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html", "<TD><CODE><STRONG>ClassUseTest1.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></STRONG>(T t)</CODE>" }, //ClassUseTest2: <T extends ParamTest<Foo3>> {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " + "title=\"class in pkg2\">ParamTest</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2<T extends ParamTest<<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>>></A></STRONG></CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " + "title=\"class in pkg2\">ParamTest</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<TD><CODE><STRONG>ClassUseTest2.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></STRONG>(T t)</CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> declared as <A HREF=\"../../pkg2/ParamTest.html\" " + "title=\"class in pkg2\">ParamTest</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A><<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>></CODE></FONT></TD>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " + "title=\"class in pkg2\">ParamTest</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<T extends <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A><<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>>>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" " + "title=\"class in pkg2\">Foo3</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2<T extends ParamTest<<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>>></A></STRONG></CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" " + "title=\"class in pkg2\">Foo3</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<TD><CODE><STRONG>ClassUseTest2.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></STRONG>(T t)</CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> that return types with arguments of type " + "<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" + "Foo3</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<T extends <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A><<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>>>" }, //ClassUseTest3: <T extends ParamTest2<List<? extends Foo4>>> {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type " + "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" + "ParamTest2</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html", "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3<T extends ParamTest2<java.util.List<? extends Foo4>>></A></STRONG></CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type " + "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" + "ParamTest2</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html", "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></STRONG>(T t)</CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type " + "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" + "ParamTest2</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html", "<T extends <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A><java.util.List<? extends <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>>>>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type " + "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" + "Foo4</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3<T extends ParamTest2<java.util.List<? extends Foo4>>></A></STRONG></CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type parameters of type <A HREF=\"../../pkg2/Foo4.html\" " + "title=\"class in pkg2\">Foo4</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></STRONG>(T t)</CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> that return types with arguments of type " + "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" + "Foo4</A></CAPTION>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<T extends <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A><java.util.List<? extends <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>>>>" }, //Type parameters in constructor and method args {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Method parameters in <A HREF=\"../../pkg2/package-summary.html\">pkg2" + "</A> with type arguments of type <A HREF=\"../../pkg2/Foo4.html\" " + "title=\"class in pkg2\">Foo4</A></CAPTION>" + NL + "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Modifier and Type" + "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Method and Description</TH>" + NL + "</TR>" + NL + "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL + "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL + "<CODE> void</CODE></FONT></TD>" + NL + "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG>" + "<A HREF=\"../../pkg2/ClassUseTest3.html#method(java.util.Set)\">" + "method</A></STRONG>(java.util.Set<<A HREF=\"../../pkg2/Foo4.html\" " + "title=\"class in pkg2\">Foo4</A>> p)</CODE>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<CAPTION CLASS=\"TableSubCaption\">" + NL + "Constructor parameters in <A HREF=\"../../pkg2/package-summary.html\">" + "pkg2</A> with type arguments of type <A HREF=\"../../pkg2/Foo4.html\" " + "title=\"class in pkg2\">Foo4</A></CAPTION>" + NL + "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Constructor and Description" + "</TH>" + NL + "</TR>" + NL + "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL + "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#ClassUseTest3" + "(java.util.Set)\">ClassUseTest3</A></STRONG>(java.util.Set<" + "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" + "Foo4</A>> p)</CODE>" }, //================================= // Annotatation Type Usage //================================= {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "Packages with annotations of type " + "<A HREF=\"../../pkg/AnnotationType.html\" " + "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL + "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Package" + "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Description</TH>" + NL + "</TR>" + NL + "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL + "<TD><A HREF=\"../../pkg/package-summary.html\"><STRONG>pkg" + "</STRONG></A></TD>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "Classes in <A HREF=\"../../pkg/package-summary.html\">pkg" + "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " + "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL + "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Modifier and Type" + "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Class and Description</TH>" + NL + "</TR>" + NL + "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL + "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL + "<CODE> class</CODE></FONT></TD>" + NL + "<TD><CODE><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html\" " + "title=\"class in pkg\">AnnotationTypeUsage</A></STRONG></CODE>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "Fields in <A HREF=\"../../pkg/package-summary.html\">pkg" + "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " + "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL + "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Modifier and Type" + "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Field and Description</TH>" + NL + "</TR>" + NL + "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL + "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL + "<CODE> int</CODE></FONT></TD>" + NL + "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" + "<A HREF=\"../../pkg/AnnotationTypeUsage.html#field\">field" + "</A></STRONG></CODE>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "Methods in <A HREF=\"../../pkg/package-summary.html\">pkg" + "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " + "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL + "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Modifier and Type" + "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Method and Description</TH>" + NL + "</TR>" + NL + "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL + "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL + "<CODE> void</CODE></FONT></TD>" + NL + "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" + "<A HREF=\"../../pkg/AnnotationTypeUsage.html#method()\">" + "method</A></STRONG>()</CODE>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "Method parameters in <A HREF=\"../../pkg/package-summary.html\">pkg" + "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " + "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL + "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Modifier and Type" + "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Method and Description</TH>" + NL + "</TR>" + NL + "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL + "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL + "<CODE> void</CODE></FONT></TD>" + NL + "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" + "<A HREF=\"../../pkg/AnnotationTypeUsage.html#methodWithParams" + "(int, int)\">methodWithParams</A></STRONG>(int documented," + NL + " int undocmented)</CODE>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "Constructors in <A HREF=\"../../pkg/package-summary.html\">pkg" + "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " + "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL + "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Constructor and Description" + "</TH>" + NL + "</TR>" + NL + "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL + "<TD><CODE><STRONG><A HREF=\"../../pkg/" + "AnnotationTypeUsage.html#AnnotationTypeUsage()\">" + "AnnotationTypeUsage</A></STRONG>()</CODE>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "Constructor parameters in <A HREF=\"../../pkg/package-summary.html\">pkg" + "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " + "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL + "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" + " NOWRAP>Constructor and Description" + "</TH>" + NL + "</TR>" + NL + "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL + "<TD><CODE><STRONG><A HREF=\"../../pkg/" + "AnnotationTypeUsage.html#AnnotationTypeUsage(int, int)\">" + "AnnotationTypeUsage</A></STRONG>(int documented," + NL + " int undocmented)</CODE>" }, //================================= // TYPE PARAMETER IN INDEX //================================= {BUG_ID + FS + "index-all.html", "<A HREF=\"./pkg2/Foo.html#method(java.util.Vector)\"><STRONG>method(Vector<Object>)</STRONG></A>" }, //================================= // TYPE PARAMETER IN INDEX //================================= {BUG_ID + FS + "index-all.html", "<A HREF=\"./pkg2/Foo.html#method(java.util.Vector)\"><STRONG>method(Vector<Object>)</STRONG></A>" }, }; private static final String[][] NEGATED_TEST = { //================================= // ENUM TESTING //================================= //NO constructor section {BUG_ID + FS + "pkg" + FS + "Coin.html", "<STRONG>Constructor Summary</STRONG>"}, //================================= // TYPE PARAMETER TESTING //================================= //No type parameters in class frame. {BUG_ID + FS + "allclasses-frame.html", "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" + "TypeParameters</A><<A HREF=\"../pkg/TypeParameters.html\" " + "title=\"type parameter in TypeParameters\">E</A>>" }, //============================================================== // ANNOTATION TYPE USAGE TESTING (When @Documented is omitted) //=============================================================== //CLASS {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<FONT SIZE=\"-1\">" + NL + "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Class Annotation\"," + NL + " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL + "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG></DT><DT>extends java.lang.Object</DT></DL>"}, //FIELD {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<FONT SIZE=\"-1\">" + NL + "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Field Annotation\"," + NL + " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL + "</FONT>public int <STRONG>field</STRONG>"}, //CONSTRUCTOR {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<FONT SIZE=\"-1\">" + NL + "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Constructor Annotation\"," + NL + " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL + "</FONT>public <STRONG>AnnotationTypeUsage</STRONG>()"}, //METHOD {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<FONT SIZE=\"-1\">" + NL + "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Method Annotation\"," + NL + " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL + "</FONT>public void <STRONG>method</STRONG>()"}, //================================= // Make sure annotation types do not // trigger this warning. //================================= {WARNING_OUTPUT, "Internal error: package sets don't match: [] with: null" }, }; /** * The entry point of the test. * @param args the array of command line arguments. */ public static void main(String[] args) { TestNewLanguageFeatures tester = new TestNewLanguageFeatures(); run(tester, ARGS, TEST, NEGATED_TEST); tester.printSummary(); } /** * {@inheritDoc} */ public String getBugId() { return BUG_ID; } /** * {@inheritDoc} */ public String getBugName() { return getClass().getName(); } }