/* * Copyright (c) 2003, 2014, 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 { //Javadoc arguments. private static final String[] ARGS = new String[] { "-Xdoclint:none", "-d", OUTPUT_DIR, "-use", "-sourcepath", SRC_DIR, "pkg", "pkg1", "pkg2" }; //Input for string search tests. private static final String[][] TEST = { //================================= // ENUM TESTING //================================= //Make sure enum header is correct. { "pkg/Coin.html", "Enum Coin"}, //Make sure enum signature is correct. { "pkg/Coin.html", "
public enum " +
"Coin\n" +
"extends java.lang.Enum<Coin>"
},
//Check for enum constant section
{ "pkg/Coin.html", "E - " +
"the type parameter for this class."},
//Type parameters in @see/@link
{ "pkg/TypeParameters.html",
"TypeParametersT - This is the first " +
"type parameter.V - This is the second type " +
"parameter."},
//Signature of method with type parameters
{ "pkg/TypeParameters.html",
"public <T extends java.util.List,V> " +
"java.lang.String[] methodThatHasTypeParameters"},
//Wildcard testing.
{ "pkg/Wildcards.html",
"" +
"TypeParameters<? super java.lang.String> a"},
{ "pkg/Wildcards.html",
"" +
"TypeParameters<? extends java.lang.StringBuffer> b"},
{ "pkg/Wildcards.html",
"" +
"TypeParameters c"},
//Bad type parameter warnings.
{WARNING_OUTPUT, "warning - @param argument " +
"\"public class TypeParameterSubClass<T extends " +
"java.lang.String>\n" +
"extends " +
"" +
"TypeParameterSuperClass<T>"},
//Interface generic parameter substitution
//Signature of subclass that has type parameters.
{ "pkg/TypeParameters.html",
"@AnnotationType(" +
"optional" +
"=\"Class Annotation\",\n" +
" " +
"required=1994)\n" +
"public class " +
"AnnotationTypeUsage\n" +
"extends java.lang.Object"},
//FIELD
{ "pkg/AnnotationTypeUsage.html",
"@AnnotationType(" +
"optional" +
"=\"Field Annotation\",\n" +
" " +
"required=1994)\n" +
"public int field"},
//CONSTRUCTOR
{ "pkg/AnnotationTypeUsage.html",
"@AnnotationType(" +
"optional" +
"=\"Constructor Annotation\",\n" +
" " +
"required=1994)\n" +
"public AnnotationTypeUsage()"},
//METHOD
{ "pkg/AnnotationTypeUsage.html",
"@AnnotationType(" +
"optional" +
"=\"Method Annotation\",\n" +
" " +
"required=1994)\n" +
"public void method()"},
//METHOD PARAMS
{ "pkg/AnnotationTypeUsage.html",
"public void methodWithParams(" +
"" +
"@AnnotationType(" +
"optional=\"Parameter Annotation\",required=1994)\n" +
" int documented,\n" +
" int undocmented)"},
//CONSTRUCTOR PARAMS
{ "pkg/AnnotationTypeUsage.html",
"public AnnotationTypeUsage(" +
"@AnnotationType(" +
"optional=\"Constructor Param Annotation\",required=1994)\n" +
" int documented,\n" +
" int undocmented)"},
//=================================
// ANNOTATION TYPE USAGE TESTING (All Different Types).
//=================================
//Integer
{ "pkg1/B.html",
"d=3.14,"},
//Double
{ "pkg1/B.html",
"d=3.14,"},
//Boolean
{ "pkg1/B.html",
"b=true,"},
//String
{ "pkg1/B.html",
"s=\"sigh\","},
//Class
{ "pkg1/B.html",
"c=Foo.class,"},
//Bounded Class
{ "pkg1/B.html",
"w=TypeParameterSubClass.class,"},
//Enum
{ "pkg1/B.html",
"e=Penny,"},
//Annotation Type
{ "pkg1/B.html",
"a=@AnnotationType(optional=\"foo\",required=1994),"},
//String Array
{ "pkg1/B.html",
"sa={\"up\",\"down\"},"},
//Primitive
{ "pkg1/B.html",
"primitiveClassTest=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 and{ "pkg1/B.html", "
@A"},
{ "pkg1/B.html",
"public interface B"},
//==============================================================
// Handle multiple bounds.
//==============================================================
{ "pkg/MultiTypeParameters.html",
"public <T extends java.lang.Number & java.lang.Runnable> T foo(T t)"},
//==============================================================
// Test Class-Use Documenation for Type Parameters.
//==============================================================
//ClassUseTest1: ClassUseTest1<T extends " +
"Foo" +
" & " +
"Foo2> method" +
"(T t) ParamTest" +
"<Foo>"
},
{ "pkg2/class-use/ParamTest.html",
"ParamTest<Foo>ClassUseTest1<T extends " +
"Foo" +
" & " +
"Foo2> method" +
"(T t) ClassUseTest2<T extends " +
"" +
"ParamTest<" +
"Foo3>> method" +
"(T t) ParamTest" +
"<" +
"Foo><T extends ParamTest" +
"<Foo3>>
ParamTest" +
"<Foo3>ClassUseTest2<T extends " +
"" +
"ParamTest<" +
"Foo3>> method" +
"(T t) <T extends ParamTest<" +
"Foo3" +
">>
ParamTest<Foo3>ClassUseTest3<T extends " +
"" +
"ParamTest2<java.util.List<? extends " +
"" +
"Foo4>>> method(T t) <T extends " +
"ParamTest2<java.util.List<? extends Foo4>" +
">>
ParamTest2<java.util.List" +
"<? extends Foo4>>ClassUseTest3<T extends " +
"" +
"ParamTest2<java.util.List<? extends " +
"" +
"Foo4>>> method(T t)" +
" <T extends " +
"ParamTest2<java.util.List<? extends Foo4>" +
">>
ParamTest2<java.util.List" +
"<? extends Foo4>>voidmethod(java." +
"util.Set<Foo4> p)