/* * Copyright (c) 2003, 2013, 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 7025314 7010344 8025633 8026567 * @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 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[] { "-Xdoclint:none", "-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", "<pre>public enum " + "<span class=\"typeNameLabel\">Coin</span>" + NL + "extends java.lang.Enum<<a href=\"../pkg/Coin.html\" " + "title=\"enum in pkg\">Coin</a>></pre>" }, //Check for enum constant section {BUG_ID + FS + "pkg" + FS + "Coin.html", "<caption><span>Enum Constants" + "</span><span class=\"tabEnd\"> </span></caption>"}, //Detail for enum constant {BUG_ID + FS + "pkg" + FS + "Coin.html", "<span class=\"memberNameLink\"><a href=\"../pkg/Coin.html#Dime\">Dime</a></span>"}, //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><span class=\"paramLabel\">Type Parameters:</span></dt>" + NL + "<dd><code>E</code> - " + "the type parameter for this class."}, //Type parameters in @see/@link {BUG_ID + FS + "pkg" + FS + "TypeParameters.html", "<dl>" + NL + "<dt><span class=\"seeLabel\">See Also:</span></dt>" + NL + "<dd>" + "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" + "<code>TypeParameters</code></a></dd>" + NL + "</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", "<span class=\"paramLabel\">Type Parameters:</span></dt>" + NL + "<dd><code>T</code> - This is the first " + "type parameter.</dd>" + NL + "<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[] methodThatHasTypeParameters"}, //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", "<pre>public class <span class=\"typeNameLabel\">TypeParameterSubClass<T extends " + "java.lang.String></span>" + NL + "extends " + "<a href=\"../pkg/TypeParameterSuperClass.html\" title=\"class in pkg\">" + "TypeParameterSuperClass</a><T></pre>"}, //Interface generic parameter substitution //Signature of subclass that has type parameters. {BUG_ID + FS + "pkg" + FS + "TypeParameters.html", "<dl>" + NL + "<dt>All Implemented Interfaces:</dt>" + NL + "<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>" + NL + "</dl>"}, {BUG_ID + FS + "pkg" + FS + "SuperInterface.html", "<dl>" + NL + "<dt>All Known Subinterfaces:</dt>" + NL + "<dd><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">" + "SubInterface</a><V></dd>" + NL + "</dl>"}, {BUG_ID + FS + "pkg" + FS + "SubInterface.html", "<dl>" + NL + "<dt>All Superinterfaces:</dt>" + NL + "<dd><a href=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">" + "SuperInterface</a><V></dd>" + NL + "</dl>"}, //================================= // 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:A...-"}, {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", "<li>Summary: </li>" + NL + "<li>Field | </li>" + NL + "<li><a href=\"#annotation.type.required.element.summary\">" + "Required</a> | </li>" + NL + "<li>" + "<a href=\"#annotation.type.optional.element.summary\">Optional</a></li>"}, //Make sure the detail links are correct. {BUG_ID + FS + "pkg" + FS + "AnnotationType.html", "<li>Detail: </li>" + NL + "<li>Field | </li>" + NL + "<li><a href=\"#annotation.type.element.detail\">Element</a></li>"}, //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 <span class=\"memberNameLabel\">AnnotationType</span>"}, //Make sure member summary headings are correct. {BUG_ID + FS + "pkg" + FS + "AnnotationType.html", "<h3>Required Element Summary</h3>"}, {BUG_ID + FS + "pkg" + FS + "AnnotationType.html", "<h3>Optional Element Summary</h3>"}, //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", "<dl>" + NL + "<dt>Default:</dt>" + NL + "<dd>\"unknown\"</dd>" + NL + "</dl>"}, //================================= // 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", "<pre><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 + "public class <span class=\"typeNameLabel\">" + "AnnotationTypeUsage</span>" + NL + "extends java.lang.Object</pre>"}, //FIELD {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<pre><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 + "public int field</pre>"}, //CONSTRUCTOR {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<pre><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 + "public AnnotationTypeUsage()</pre>"}, //METHOD {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<pre><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 + "public void method()</pre>"}, //METHOD PARAMS {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<pre>public void methodWithParams(" + "<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)" + NL + " int documented," + NL + " int undocmented)</pre>"}, //CONSTRUCTOR PARAMS {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<pre>public AnnotationTypeUsage(<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)" + 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><a href=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</a>"}, {BUG_ID + FS + "pkg1" + FS + "B.html", "public interface <span class=\"typeNameLabel\">B</span></pre>"}, //============================================================== // Handle multiple bounds. //============================================================== {BUG_ID + FS + "pkg" + FS + "MultiTypeParameters.html", "public <T extends java.lang.Number & java.lang.Runnable> T foo(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><span>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></span><span class=\"tabEnd\"> </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html", "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest1.html\" " + "title=\"class in pkg2\">ClassUseTest1</a><T extends " + "<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo" + "</a> & <a href=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">" + "Foo2</a>></span></code> </td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html", "<caption><span>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></span><span class=\"tabEnd\"> </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html", "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest1." + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/" + "ClassUseTest1.html#method-T-\">method</a></span>" + "(T t)</code> </td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html", "<caption><span>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></span><span class=\"tabEnd\"> </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html", "td class=\"colFirst\"><code><a href=\"../../pkg2/" + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" + "<<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\"" + ">Foo</a>></code></td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<caption><span>Fields in <a href=\"../../pkg2/" + "package-summary.html\">pkg2</a> declared as <a href=\"../" + "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" + "</a></span><span class=\"tabEnd\"> </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<td class=\"colFirst\"><code><a href=\"../../pkg2/" + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a><<a " + "href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</a" + ">></code></td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html", "<caption><span>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></span><span class=\"tabEnd\"> " + "</span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html", "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest1.html\" " + "title=\"class in pkg2\">ClassUseTest1</a><T extends " + "<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo" + "</a> & <a href=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">" + "Foo2</a>></span></code> </td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html", "<caption><span>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></span><span class=\"tabEnd\"> " + "</span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html", "<td class=\"colLast\"><span class=\"typeNameLabel\">" + "ClassUseTest1.</span><code><span class=\"memberNameLink\"><a href=\"../../" + "pkg2/ClassUseTest1.html#method-T-\">method</a></span>" + "(T t)</code> </td>" }, //ClassUseTest2: <T extends ParamTest<Foo3>> {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<caption><span>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></span><span class=\"tabEnd\">" + " </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest2.html\" " + "title=\"class in pkg2\">ClassUseTest2</a><T extends " + "<a href=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">" + "ParamTest</a><<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" + "Foo3</a>>></span></code> </td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<caption><span>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></span><span class=\"tabEnd\">" + " </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest2." + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/" + "ClassUseTest2.html#method-T-\">method</a></span>" + "(T t)</code> </td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<caption><span>Fields in <a href=\"../../pkg2/" + "package-summary.html\">pkg2</a> declared as <a href=\"../" + "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" + "</a></span><span class=\"tabEnd\"> </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<td class=\"colFirst\"><code><a href=\"../../pkg2/" + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" + "<<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" + "Foo</a>></code></td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<caption><span>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></span><span class=\"tabEnd\">" + " </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html", "<td class=\"colFirst\"><code><T extends <a href=\"../" + "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" + "</a><<a href=\"../../pkg2/Foo3.html\" title=\"class in " + "pkg2\">Foo3</a>>><br><a href=\"../../pkg2/" + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" + "<<a href=\"../../pkg2/Foo3.html\" title=\"class in " + "pkg2\">Foo3</a>></code></td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<caption><span>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></span><span class=\"tabEnd\"> </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest2.html\" " + "title=\"class in pkg2\">ClassUseTest2</a><T extends " + "<a href=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">" + "ParamTest</a><<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" + "Foo3</a>>></span></code> </td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<caption><span>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></span><span class=\"tabEnd\"> " + "</span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest2." + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/" + "ClassUseTest2.html#method-T-\">method</a></span>" + "(T t)</code> </td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<caption><span>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></span><span class=\"tabEnd\">" + " </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html", "<td class=\"colFirst\"><code><T extends <a href=\"../../" + "pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</a><" + "<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3" + "</a>>><br><a href=\"../../pkg2/ParamTest.html\" " + "title=\"class in pkg2\">ParamTest</a><<a href=\"../../pkg2/" + "Foo3.html\" title=\"class in pkg2\">Foo3</a>></code></td>" }, //ClassUseTest3: <T extends ParamTest2<List<? extends Foo4>>> {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html", "<caption><span>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></span><span class=\"tabEnd\">" + " </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html", "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3.html\" " + "title=\"class in pkg2\">ClassUseTest3</a><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>>>></span></code> </td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html", "<caption><span>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></span><span class=\"tabEnd\">" + " </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html", "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest3" + ".</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3." + "html#method-T-\">method</a></span>(T t)</code> </td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html", "<td class=\"colFirst\"><code><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>>" + ">><br><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>>></code></td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<caption><span>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></span><span class=\"tabEnd\"> " + "</span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3.html\" " + "title=\"class in pkg2\">ClassUseTest3</a><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>>>></span></code> </td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<caption><span>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></span><span class=\"tabEnd\"> </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest3." + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3." + "html#method-T-\">method</a></span>(T t)</code>" + " </td>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<caption><span>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></span><span class=\"" + "tabEnd\"> </span></caption>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<td class=\"colFirst\"><code><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>>" + ">><br><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>>></code></td>" }, //Type parameters in constructor and method args {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<caption><span>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></span><span class=\"tabEnd\"> " + "</span></caption>" + NL + "<tr>" + NL + "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL + "<th class=\"colLast\" scope=\"col\">Method and Description</th>" + NL + "</tr>" + NL + "<tbody>" + NL + "<tr class=\"altColor\">" + NL + "<td class=\"colFirst\"><code>void</code></td>" + NL + "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest3." + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3." + "html#method-java.util.Set-\">method</a></span>(java." + "util.Set<<a href=\"../../pkg2/Foo4.html\" title=\"" + "class in pkg2\">Foo4</a>> p)</code> </td>" + NL + "</tr>" + NL + "</tbody>" }, {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html", "<caption><span>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></span><span class=\"tabEnd\"> " + "</span></caption>" }, //================================= // Annotatation Type Usage //================================= {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "<caption><span>Packages with annotations of type <a href=\"" + "../../pkg/AnnotationType.html\" title=\"annotation in pkg\">" + "AnnotationType</a></span><span class=\"tabEnd\"> " + "</span></caption>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "<caption><span>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></span><span class" + "=\"tabEnd\"> </span></caption>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "<caption><span>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></span><span class=\"tabEnd\">" + " </span></caption>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "<caption><span>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></span><span class=\"tabEnd\">" + " </span></caption>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "<caption><span>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></span><span class=\"tabEnd\">" + " </span></caption>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "<caption><span>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></span><span class=\"tabEnd\">" + " </span></caption>" }, {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html", "<caption><span>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></span><span class=\"" + "tabEnd\"> </span></caption>" }, //================================= // TYPE PARAMETER IN INDEX //================================= {BUG_ID + FS + "index-all.html", "<span class=\"memberNameLink\"><a href=\"pkg2/Foo.html#method-java.util.Vector-\">" + "method(Vector<Object>)</a></span>" }, //================================= // TYPE PARAMETER IN INDEX //================================= {BUG_ID + FS + "index-all.html", "<span class=\"memberNameLink\"><a href=\"pkg2/Foo.html#method-java.util.Vector-\">" + "method(Vector<Object>)</a></span>" }, }; private static final String[][] NEGATED_TEST = { //================================= // ENUM TESTING //================================= //NO constructor section {BUG_ID + FS + "pkg" + FS + "Coin.html", "<h3>Constructor Summary</h3>"}, //================================= // 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", "<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 + "public class <span class=\"typeNameLabel\">AnnotationTypeUsage</span></dt><dt>extends java.lang.Object</dt>"}, //FIELD {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<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 + "public int <span class=\"memberNameLabel\">field</span>"}, //CONSTRUCTOR {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<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 + "public <span class=\"typeNameLabel\">AnnotationTypeUsage</span>()"}, //METHOD {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html", "<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 + "public void <span class=\"memberNameLabel\">method</span>()"}, //================================= // 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(); } }