Merge
This commit is contained in:
commit
f1eb2bc57f
@ -1,3 +1,34 @@
|
||||
#
|
||||
# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# - Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# - Neither the name of Oracle nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true
|
||||
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4
|
||||
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4
|
||||
|
@ -878,8 +878,9 @@ public class Util {
|
||||
*/
|
||||
static abstract class DocComparator<T extends Doc> implements Comparator<Doc> {
|
||||
/**
|
||||
* compares two parameter arrays by first comparing the length of the arrays, and
|
||||
* then each Type of the parameter in the array.
|
||||
* compares two parameter arrays by comparing each Type of the parameter in the array,
|
||||
* as possible, if the matched strings are identical, and have mismatched array lengths
|
||||
* then compare the lengths.
|
||||
* @param params1 the first parameter array.
|
||||
* @param params2 the first parameter array.
|
||||
* @return a negative integer, zero, or a positive integer as the first
|
||||
@ -889,17 +890,14 @@ public class Util {
|
||||
if (params1.length == 0 && params2.length == 0) {
|
||||
return 0;
|
||||
}
|
||||
int result = Integer.compare(params1.length, params2.length);
|
||||
if (result != 0) {
|
||||
return result;
|
||||
}
|
||||
for (int i = 0; i < params1.length; i++) {
|
||||
result = compareStrings(params1[i].typeName(), params2[i].typeName());
|
||||
// try to compare as many as possible
|
||||
for (int i = 0; i < params1.length && i < params2.length; i++) {
|
||||
int result = compareStrings(params1[i].typeName(), params2[i].typeName());
|
||||
if (result != 0) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return Integer.compare(params1.length, params2.length);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -118,7 +118,8 @@ public abstract class Attribute implements AnnotationValue {
|
||||
: types.erasure(type);
|
||||
return new Type.ClassType(types.syms.classType.getEnclosingType(),
|
||||
List.of(arg),
|
||||
types.syms.classType.tsym);
|
||||
types.syms.classType.tsym,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
public String toString() {
|
||||
return classType + ".class";
|
||||
|
@ -28,7 +28,6 @@ package com.sun.tools.javac.code;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.sun.tools.javac.api.Messages;
|
||||
import com.sun.tools.javac.code.Type.AnnotatedType;
|
||||
import com.sun.tools.javac.code.Type.ArrayType;
|
||||
import com.sun.tools.javac.code.Symbol.*;
|
||||
import com.sun.tools.javac.code.Type.*;
|
||||
@ -150,14 +149,16 @@ public abstract class Printer implements Type.Visitor<String, Locale>, Symbol.Vi
|
||||
@Override
|
||||
public String visitCapturedType(CapturedType t, Locale locale) {
|
||||
if (seenCaptured.contains(t))
|
||||
return localize(locale, "compiler.misc.type.captureof.1",
|
||||
capturedVarId(t, locale));
|
||||
return printAnnotations(t) +
|
||||
localize(locale, "compiler.misc.type.captureof.1",
|
||||
capturedVarId(t, locale));
|
||||
else {
|
||||
try {
|
||||
seenCaptured = seenCaptured.prepend(t);
|
||||
return localize(locale, "compiler.misc.type.captureof",
|
||||
capturedVarId(t, locale),
|
||||
visit(t.wildcard, locale));
|
||||
return printAnnotations(t) +
|
||||
localize(locale, "compiler.misc.type.captureof",
|
||||
capturedVarId(t, locale),
|
||||
visit(t.wildcard, locale));
|
||||
}
|
||||
finally {
|
||||
seenCaptured = seenCaptured.tail;
|
||||
@ -167,15 +168,16 @@ public abstract class Printer implements Type.Visitor<String, Locale>, Symbol.Vi
|
||||
|
||||
@Override
|
||||
public String visitForAll(ForAll t, Locale locale) {
|
||||
return "<" + visitTypes(t.tvars, locale) + ">" + visit(t.qtype, locale);
|
||||
return printAnnotations(t) + "<" + visitTypes(t.tvars, locale) +
|
||||
">" + visit(t.qtype, locale);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitUndetVar(UndetVar t, Locale locale) {
|
||||
if (t.inst != null) {
|
||||
return visit(t.inst, locale);
|
||||
return printAnnotations(t) + visit(t.inst, locale);
|
||||
} else {
|
||||
return visit(t.qtype, locale) + "?";
|
||||
return printAnnotations(t) + visit(t.qtype, locale) + "?";
|
||||
}
|
||||
}
|
||||
|
||||
@ -187,25 +189,34 @@ public abstract class Printer implements Type.Visitor<String, Locale>, Symbol.Vi
|
||||
return res.toString();
|
||||
}
|
||||
|
||||
void printBaseElementType(Type t, StringBuilder sb, Locale locale) {
|
||||
private String printAnnotations(Type t) {
|
||||
return printAnnotations(t, false);
|
||||
}
|
||||
|
||||
private String printAnnotations(Type t, boolean prefix) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
List<Attribute.TypeCompound> annos = t.getAnnotationMirrors();
|
||||
if (!annos.isEmpty()) {
|
||||
if (prefix) sb.append(' ');
|
||||
sb.append(annos);
|
||||
sb.append(' ');
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private void printBaseElementType(Type t, StringBuilder sb, Locale locale) {
|
||||
Type arrel = t;
|
||||
while (arrel.hasTag(TypeTag.ARRAY)) {
|
||||
arrel = arrel.unannotatedType();
|
||||
arrel = ((ArrayType) arrel).elemtype;
|
||||
}
|
||||
sb.append(visit(arrel, locale));
|
||||
}
|
||||
|
||||
void printBrackets(Type t, StringBuilder sb, Locale locale) {
|
||||
private void printBrackets(Type t, StringBuilder sb, Locale locale) {
|
||||
Type arrel = t;
|
||||
while (arrel.hasTag(TypeTag.ARRAY)) {
|
||||
if (arrel.isAnnotated()) {
|
||||
sb.append(' ');
|
||||
sb.append(arrel.getAnnotationMirrors());
|
||||
sb.append(' ');
|
||||
}
|
||||
sb.append(printAnnotations(arrel, true));
|
||||
sb.append("[]");
|
||||
arrel = arrel.unannotatedType();
|
||||
arrel = ((ArrayType) arrel).elemtype;
|
||||
}
|
||||
}
|
||||
@ -216,8 +227,10 @@ public abstract class Printer implements Type.Visitor<String, Locale>, Symbol.Vi
|
||||
if (t.getEnclosingType().hasTag(CLASS) && t.tsym.owner.kind == Kinds.TYP) {
|
||||
buf.append(visit(t.getEnclosingType(), locale));
|
||||
buf.append('.');
|
||||
buf.append(printAnnotations(t));
|
||||
buf.append(className(t, false, locale));
|
||||
} else {
|
||||
buf.append(printAnnotations(t));
|
||||
buf.append(className(t, true, locale));
|
||||
}
|
||||
if (t.getTypeArguments().nonEmpty()) {
|
||||
@ -230,7 +243,8 @@ public abstract class Printer implements Type.Visitor<String, Locale>, Symbol.Vi
|
||||
|
||||
@Override
|
||||
public String visitMethodType(MethodType t, Locale locale) {
|
||||
return "(" + printMethodArgs(t.argtypes, false, locale) + ")" + visit(t.restype, locale);
|
||||
return "(" + printMethodArgs(t.argtypes, false, locale) + ")" +
|
||||
visit(t.restype, locale);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -243,6 +257,7 @@ public abstract class Printer implements Type.Visitor<String, Locale>, Symbol.Vi
|
||||
StringBuilder s = new StringBuilder();
|
||||
s.append(t.kind);
|
||||
if (t.kind != UNBOUND) {
|
||||
s.append(printAnnotations(t));
|
||||
s.append(visit(t.type, locale));
|
||||
}
|
||||
return s.toString();
|
||||
@ -258,28 +273,6 @@ public abstract class Printer implements Type.Visitor<String, Locale>, Symbol.Vi
|
||||
return visitType(t, locale);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitAnnotatedType(AnnotatedType t, Locale locale) {
|
||||
if (t.getAnnotationMirrors().nonEmpty()) {
|
||||
if (t.unannotatedType().hasTag(TypeTag.ARRAY)) {
|
||||
StringBuilder res = new StringBuilder();
|
||||
printBaseElementType(t, res, locale);
|
||||
printBrackets(t, res, locale);
|
||||
return res.toString();
|
||||
} else if (t.unannotatedType().hasTag(TypeTag.CLASS) &&
|
||||
t.unannotatedType().getEnclosingType() != Type.noType) {
|
||||
return visit(t.unannotatedType().getEnclosingType(), locale) +
|
||||
". " +
|
||||
t.getAnnotationMirrors() +
|
||||
" " + className((ClassType)t.unannotatedType(), false, locale);
|
||||
} else {
|
||||
return t.getAnnotationMirrors() + " " + visit(t.unannotatedType(), locale);
|
||||
}
|
||||
} else {
|
||||
return visit(t.unannotatedType(), locale);
|
||||
}
|
||||
}
|
||||
|
||||
public String visitType(Type t, Locale locale) {
|
||||
String s = (t.tsym == null || t.tsym.name == null)
|
||||
? localize(locale, "compiler.misc.type.none")
|
||||
@ -345,8 +338,8 @@ public abstract class Printer implements Type.Visitor<String, Locale>, Symbol.Vi
|
||||
args = args.tail;
|
||||
buf.append(',');
|
||||
}
|
||||
if (args.head.unannotatedType().hasTag(TypeTag.ARRAY)) {
|
||||
buf.append(visit(((ArrayType) args.head.unannotatedType()).elemtype, locale));
|
||||
if (args.head.hasTag(TypeTag.ARRAY)) {
|
||||
buf.append(visit(((ArrayType) args.head).elemtype, locale));
|
||||
if (args.head.getAnnotationMirrors().nonEmpty()) {
|
||||
buf.append(' ');
|
||||
buf.append(args.head.getAnnotationMirrors());
|
||||
|
@ -234,7 +234,7 @@ public enum Source {
|
||||
public boolean allowGraphInference() {
|
||||
return compareTo(JDK1_8) >= 0;
|
||||
}
|
||||
public boolean allowStructuralMostSpecific() {
|
||||
public boolean allowFunctionalInterfaceMostSpecific() {
|
||||
return compareTo(JDK1_8) >= 0;
|
||||
}
|
||||
public static SourceVersion toSourceVersion(Source source) {
|
||||
|
@ -956,7 +956,7 @@ public abstract class Symbol extends AnnoConstruct implements Element {
|
||||
this(
|
||||
flags,
|
||||
name,
|
||||
new ClassType(Type.noType, null, null),
|
||||
new ClassType(Type.noType, null, null, Type.noAnnotations),
|
||||
owner);
|
||||
this.type.tsym = this;
|
||||
}
|
||||
@ -992,7 +992,8 @@ public abstract class Symbol extends AnnoConstruct implements Element {
|
||||
public Type erasure(Types types) {
|
||||
if (erasure_field == null)
|
||||
erasure_field = new ClassType(types.erasure(type.getEnclosingType()),
|
||||
List.<Type>nil(), this);
|
||||
List.<Type>nil(), this,
|
||||
type.getAnnotationMirrors());
|
||||
return erasure_field;
|
||||
}
|
||||
|
||||
|
@ -80,6 +80,9 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
/** Constant type: special type to be used for marking stuck trees. */
|
||||
public static final JCNoType stuckType = new JCNoType();
|
||||
|
||||
public static final List<Attribute.TypeCompound> noAnnotations =
|
||||
List.nil();
|
||||
|
||||
/** If this switch is turned on, the names of type variables
|
||||
* and anonymous classes are printed with hashcodes appended.
|
||||
*/
|
||||
@ -89,6 +92,10 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
*/
|
||||
public TypeSymbol tsym;
|
||||
|
||||
/** The type annotations on this type.
|
||||
*/
|
||||
protected final List<Attribute.TypeCompound> annos;
|
||||
|
||||
/**
|
||||
* Checks if the current type tag is equal to the given tag.
|
||||
* @return true if tag is equal to the current type tag.
|
||||
@ -173,10 +180,15 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
|
||||
public <R,S> R accept(Type.Visitor<R,S> v, S s) { return v.visitType(this, s); }
|
||||
|
||||
/** Define a type given its tag and type symbol
|
||||
/** Define a type given its tag, type symbol, and type annotations
|
||||
*/
|
||||
public Type(TypeSymbol tsym) {
|
||||
public Type(TypeSymbol tsym, List<Attribute.TypeCompound> annos) {
|
||||
if(annos == null) {
|
||||
Assert.error("Attempting to create type " + tsym + " with null type annotations");
|
||||
}
|
||||
|
||||
this.tsym = tsym;
|
||||
this.annos = annos;
|
||||
}
|
||||
|
||||
/** An abstract class for mappings from types to types
|
||||
@ -225,25 +237,15 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Type annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
return new AnnotatedType(annos, this);
|
||||
}
|
||||
public abstract Type annotatedType(List<Attribute.TypeCompound> annos);
|
||||
|
||||
public boolean isAnnotated() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* If this is an annotated type, return the underlying type.
|
||||
* Otherwise, return the type itself.
|
||||
*/
|
||||
public Type unannotatedType() {
|
||||
return this;
|
||||
return !annos.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Attribute.TypeCompound> getAnnotationMirrors() {
|
||||
return List.nil();
|
||||
return annos;
|
||||
}
|
||||
|
||||
|
||||
@ -272,16 +274,35 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
return ts;
|
||||
}
|
||||
|
||||
protected void appendAnnotationsString(StringBuilder sb,
|
||||
boolean prefix) {
|
||||
if (isAnnotated()) {
|
||||
if (prefix) {
|
||||
sb.append(" ");
|
||||
}
|
||||
sb.append(annos);
|
||||
sb.append(" ");
|
||||
}
|
||||
}
|
||||
|
||||
protected void appendAnnotationsString(StringBuilder sb) {
|
||||
appendAnnotationsString(sb, false);
|
||||
}
|
||||
|
||||
/** The Java source which this type represents.
|
||||
*/
|
||||
public String toString() {
|
||||
String s = (tsym == null || tsym.name == null)
|
||||
? "<none>"
|
||||
: tsym.name.toString();
|
||||
if (moreInfo && hasTag(TYPEVAR)) {
|
||||
s = s + hashCode();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
appendAnnotationsString(sb);
|
||||
if (tsym == null || tsym.name == null) {
|
||||
sb.append("<none>");
|
||||
} else {
|
||||
sb.append(tsym.name);
|
||||
}
|
||||
return s;
|
||||
if (moreInfo && hasTag(TYPEVAR)) {
|
||||
sb.append(hashCode());
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -333,8 +354,8 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
args = args.tail;
|
||||
buf.append(',');
|
||||
}
|
||||
if (args.head.unannotatedType().hasTag(ARRAY)) {
|
||||
buf.append(((ArrayType)args.head.unannotatedType()).elemtype);
|
||||
if (args.head.hasTag(ARRAY)) {
|
||||
buf.append(((ArrayType)args.head).elemtype);
|
||||
if (args.head.getAnnotationMirrors().nonEmpty()) {
|
||||
buf.append(args.head.getAnnotationMirrors());
|
||||
}
|
||||
@ -486,11 +507,21 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
TypeTag tag;
|
||||
|
||||
public JCPrimitiveType(TypeTag tag, TypeSymbol tsym) {
|
||||
super(tsym);
|
||||
this(tag, tsym, noAnnotations);
|
||||
}
|
||||
|
||||
public JCPrimitiveType(TypeTag tag, TypeSymbol tsym,
|
||||
List<Attribute.TypeCompound> annos) {
|
||||
super(tsym, annos);
|
||||
this.tag = tag;
|
||||
Assert.check(tag.isPrimitive);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
return new JCPrimitiveType(tag, tsym, annos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNumeric() {
|
||||
return tag != BOOLEAN;
|
||||
@ -517,7 +548,7 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
@Override
|
||||
public Type constType(Object constValue) {
|
||||
final Object value = constValue;
|
||||
return new JCPrimitiveType(tag, tsym) {
|
||||
return new JCPrimitiveType(tag, tsym, annos) {
|
||||
@Override
|
||||
public Object constValue() {
|
||||
return value;
|
||||
@ -601,19 +632,37 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
}
|
||||
|
||||
public WildcardType(Type type, BoundKind kind, TypeSymbol tsym) {
|
||||
super(tsym);
|
||||
this.type = Assert.checkNonNull(type);
|
||||
this.kind = kind;
|
||||
}
|
||||
public WildcardType(WildcardType t, TypeVar bound) {
|
||||
this(t.type, t.kind, t.tsym, bound);
|
||||
this(type, kind, tsym, null, noAnnotations);
|
||||
}
|
||||
|
||||
public WildcardType(Type type, BoundKind kind, TypeSymbol tsym, TypeVar bound) {
|
||||
this(type, kind, tsym);
|
||||
public WildcardType(Type type, BoundKind kind, TypeSymbol tsym,
|
||||
List<Attribute.TypeCompound> annos) {
|
||||
this(type, kind, tsym, null, annos);
|
||||
}
|
||||
|
||||
public WildcardType(WildcardType t, TypeVar bound,
|
||||
List<Attribute.TypeCompound> annos) {
|
||||
this(t.type, t.kind, t.tsym, bound, annos);
|
||||
}
|
||||
|
||||
public WildcardType(Type type, BoundKind kind, TypeSymbol tsym,
|
||||
TypeVar bound) {
|
||||
this(type, kind, tsym, noAnnotations);
|
||||
}
|
||||
|
||||
public WildcardType(Type type, BoundKind kind, TypeSymbol tsym,
|
||||
TypeVar bound, List<Attribute.TypeCompound> annos) {
|
||||
super(tsym, annos);
|
||||
this.type = Assert.checkNonNull(type);
|
||||
this.kind = kind;
|
||||
this.bound = bound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WildcardType annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
return new WildcardType(type, kind, tsym, bound, annos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeTag getTag() {
|
||||
return WILDCARD;
|
||||
@ -658,6 +707,7 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
boolean isPrintingBound = false;
|
||||
public String toString() {
|
||||
StringBuilder s = new StringBuilder();
|
||||
appendAnnotationsString(s);
|
||||
s.append(kind.toString());
|
||||
if (kind != UNBOUND)
|
||||
s.append(type);
|
||||
@ -679,7 +729,7 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
if (t == type)
|
||||
return this;
|
||||
else
|
||||
return new WildcardType(t, kind, tsym, bound);
|
||||
return new WildcardType(t, kind, tsym, bound, annos);
|
||||
}
|
||||
|
||||
public Type getExtendsBound() {
|
||||
@ -736,7 +786,12 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
public List<Type> all_interfaces_field;
|
||||
|
||||
public ClassType(Type outer, List<Type> typarams, TypeSymbol tsym) {
|
||||
super(tsym);
|
||||
this(outer, typarams, tsym, noAnnotations);
|
||||
}
|
||||
|
||||
public ClassType(Type outer, List<Type> typarams, TypeSymbol tsym,
|
||||
List<Attribute.TypeCompound> annos) {
|
||||
super(tsym, annos);
|
||||
this.outer_field = outer;
|
||||
this.typarams_field = typarams;
|
||||
this.allparams_field = null;
|
||||
@ -753,6 +808,15 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
*/
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClassType annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
final ClassType out = new ClassType(outer_field, typarams_field, tsym, annos);
|
||||
out.allparams_field = allparams_field;
|
||||
out.supertype_field = supertype_field;
|
||||
out.interfaces_field = interfaces_field;
|
||||
return out;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeTag getTag() {
|
||||
return CLASS;
|
||||
@ -765,7 +829,7 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
|
||||
public Type constType(Object constValue) {
|
||||
final Object value = constValue;
|
||||
return new ClassType(getEnclosingType(), typarams_field, tsym) {
|
||||
return new ClassType(getEnclosingType(), typarams_field, tsym, annos) {
|
||||
@Override
|
||||
public Object constValue() {
|
||||
return value;
|
||||
@ -781,6 +845,7 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
*/
|
||||
public String toString() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
appendAnnotationsString(buf);
|
||||
if (getEnclosingType().hasTag(CLASS) && tsym.owner.kind == TYP) {
|
||||
buf.append(getEnclosingType().toString());
|
||||
buf.append(".");
|
||||
@ -806,7 +871,7 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
return s.toString();
|
||||
} else if (sym.name.isEmpty()) {
|
||||
String s;
|
||||
ClassType norm = (ClassType) tsym.type.unannotatedType();
|
||||
ClassType norm = (ClassType) tsym.type;
|
||||
if (norm == null) {
|
||||
s = Log.getLocalizedString("anonymous.class", (Object)null);
|
||||
} else if (norm.interfaces_field != null && norm.interfaces_field.nonEmpty()) {
|
||||
@ -858,7 +923,7 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
return
|
||||
getEnclosingType().isErroneous() ||
|
||||
isErroneous(getTypeArguments()) ||
|
||||
this != tsym.type.unannotatedType() && tsym.type.isErroneous();
|
||||
this != tsym.type && tsym.type.isErroneous();
|
||||
}
|
||||
|
||||
public boolean isParameterized() {
|
||||
@ -897,7 +962,7 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
List<Type> typarams = getTypeArguments();
|
||||
List<Type> typarams1 = map(typarams, f);
|
||||
if (outer1 == outer && typarams1 == typarams) return this;
|
||||
else return new ClassType(outer1, typarams1, tsym);
|
||||
else return new ClassType(outer1, typarams1, tsym, annos);
|
||||
}
|
||||
|
||||
public boolean contains(Type elem) {
|
||||
@ -924,7 +989,12 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
|
||||
public static class ErasedClassType extends ClassType {
|
||||
public ErasedClassType(Type outer, TypeSymbol tsym) {
|
||||
super(outer, List.<Type>nil(), tsym);
|
||||
this(outer, tsym, noAnnotations);
|
||||
}
|
||||
|
||||
public ErasedClassType(Type outer, TypeSymbol tsym,
|
||||
List<Attribute.TypeCompound> annos) {
|
||||
super(outer, List.<Type>nil(), tsym, annos);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -938,7 +1008,9 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
final List<? extends Type> alternatives_field;
|
||||
|
||||
public UnionClassType(ClassType ct, List<? extends Type> alternatives) {
|
||||
super(ct.outer_field, ct.typarams_field, ct.tsym);
|
||||
// Presently no way to refer to this type directly, so we
|
||||
// cannot put annotations directly on it.
|
||||
super(ct.outer_field, ct.typarams_field, ct.tsym, noAnnotations);
|
||||
allparams_field = ct.allparams_field;
|
||||
supertype_field = ct.supertype_field;
|
||||
interfaces_field = ct.interfaces_field;
|
||||
@ -971,7 +1043,9 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
public boolean allInterfaces;
|
||||
|
||||
public IntersectionClassType(List<Type> bounds, ClassSymbol csym, boolean allInterfaces) {
|
||||
super(Type.noType, List.<Type>nil(), csym);
|
||||
// Presently no way to refer to this type directly, so we
|
||||
// cannot put annotations directly on it.
|
||||
super(Type.noType, List.<Type>nil(), csym, noAnnotations);
|
||||
this.allInterfaces = allInterfaces;
|
||||
Assert.check((csym.flags() & COMPOUND) != 0);
|
||||
supertype_field = bounds.head;
|
||||
@ -1011,10 +1085,20 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
public Type elemtype;
|
||||
|
||||
public ArrayType(Type elemtype, TypeSymbol arrayClass) {
|
||||
super(arrayClass);
|
||||
this(elemtype, arrayClass, noAnnotations);
|
||||
}
|
||||
|
||||
public ArrayType(Type elemtype, TypeSymbol arrayClass,
|
||||
List<Attribute.TypeCompound> annos) {
|
||||
super(arrayClass, annos);
|
||||
this.elemtype = elemtype;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayType annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
return new ArrayType(elemtype, tsym, annos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeTag getTag() {
|
||||
return ARRAY;
|
||||
@ -1025,7 +1109,11 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return elemtype + "[]";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(elemtype);
|
||||
appendAnnotationsString(sb, true);
|
||||
sb.append("[]");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
@ -1068,7 +1156,7 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
}
|
||||
|
||||
public ArrayType makeVarargs() {
|
||||
return new ArrayType(elemtype, tsym) {
|
||||
return new ArrayType(elemtype, tsym, annos) {
|
||||
@Override
|
||||
public boolean isVarargs() {
|
||||
return true;
|
||||
@ -1079,7 +1167,7 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
public Type map(Mapping f) {
|
||||
Type elemtype1 = f.apply(elemtype);
|
||||
if (elemtype1 == elemtype) return this;
|
||||
else return new ArrayType(elemtype1, tsym);
|
||||
else return new ArrayType(elemtype1, tsym, annos);
|
||||
}
|
||||
|
||||
public boolean contains(Type elem) {
|
||||
@ -1117,12 +1205,19 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
Type restype,
|
||||
List<Type> thrown,
|
||||
TypeSymbol methodClass) {
|
||||
super(methodClass);
|
||||
// Presently no way to refer to a method type directly, so
|
||||
// we cannot put type annotations on it.
|
||||
super(methodClass, noAnnotations);
|
||||
this.argtypes = argtypes;
|
||||
this.restype = restype;
|
||||
this.thrown = thrown;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MethodType annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
throw new AssertionError("Cannot annotate a method type");
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeTag getTag() {
|
||||
return METHOD;
|
||||
@ -1138,7 +1233,13 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
* should be.
|
||||
*/
|
||||
public String toString() {
|
||||
return "(" + argtypes + ")" + restype;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
appendAnnotationsString(sb);
|
||||
sb.append('(');
|
||||
sb.append(argtypes);
|
||||
sb.append(')');
|
||||
sb.append(restype);
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public List<Type> getParameterTypes() { return argtypes; }
|
||||
@ -1197,7 +1298,13 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
public static class PackageType extends Type implements NoType {
|
||||
|
||||
PackageType(TypeSymbol tsym) {
|
||||
super(tsym);
|
||||
// Package types cannot be annotated
|
||||
super(tsym, noAnnotations);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PackageType annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
throw new AssertionError("Cannot annotate a package type");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1245,17 +1352,28 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
public Type lower;
|
||||
|
||||
public TypeVar(Name name, Symbol owner, Type lower) {
|
||||
super(null);
|
||||
this(name, owner, lower, noAnnotations);
|
||||
}
|
||||
|
||||
public TypeVar(Name name, Symbol owner, Type lower,
|
||||
List<Attribute.TypeCompound> annos) {
|
||||
super(null, annos);
|
||||
tsym = new TypeVariableSymbol(0, name, this, owner);
|
||||
this.lower = lower;
|
||||
}
|
||||
|
||||
public TypeVar(TypeSymbol tsym, Type bound, Type lower) {
|
||||
super(tsym);
|
||||
public TypeVar(TypeSymbol tsym, Type bound, Type lower,
|
||||
List<Attribute.TypeCompound> annos) {
|
||||
super(tsym, annos);
|
||||
this.bound = bound;
|
||||
this.lower = lower;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeVar annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
return new TypeVar(tsym, bound, lower, annos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeTag getTag() {
|
||||
return TYPEVAR;
|
||||
@ -1317,13 +1435,29 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
Symbol owner,
|
||||
Type upper,
|
||||
Type lower,
|
||||
WildcardType wildcard) {
|
||||
super(name, owner, lower);
|
||||
WildcardType wildcard,
|
||||
List<Attribute.TypeCompound> annos) {
|
||||
super(name, owner, lower, annos);
|
||||
this.lower = Assert.checkNonNull(lower);
|
||||
this.bound = upper;
|
||||
this.wildcard = wildcard;
|
||||
}
|
||||
|
||||
public CapturedType(TypeSymbol tsym,
|
||||
Type bound,
|
||||
Type upper,
|
||||
Type lower,
|
||||
WildcardType wildcard,
|
||||
List<Attribute.TypeCompound> annos) {
|
||||
super(tsym, bound, lower, annos);
|
||||
this.wildcard = wildcard;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CapturedType annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
return new CapturedType(tsym, bound, bound, lower, wildcard, annos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R,S> R accept(Type.Visitor<R,S> v, S s) {
|
||||
return v.visitCapturedType(this, s);
|
||||
@ -1336,18 +1470,22 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "capture#"
|
||||
+ (hashCode() & 0xFFFFFFFFL) % Printer.PRIME
|
||||
+ " of "
|
||||
+ wildcard;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
appendAnnotationsString(sb);
|
||||
sb.append("capture#");
|
||||
sb.append((hashCode() & 0xFFFFFFFFL) % Printer.PRIME);
|
||||
sb.append(" of ");
|
||||
sb.append(wildcard);
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
public static abstract class DelegatedType extends Type {
|
||||
public Type qtype;
|
||||
public TypeTag tag;
|
||||
public DelegatedType(TypeTag tag, Type qtype) {
|
||||
super(qtype.tsym);
|
||||
public DelegatedType(TypeTag tag, Type qtype,
|
||||
List<Attribute.TypeCompound> annos) {
|
||||
super(qtype.tsym, annos);
|
||||
this.tag = tag;
|
||||
this.qtype = qtype;
|
||||
}
|
||||
@ -1373,17 +1511,28 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
public List<Type> tvars;
|
||||
|
||||
public ForAll(List<Type> tvars, Type qtype) {
|
||||
super(FORALL, (MethodType)qtype);
|
||||
super(FORALL, (MethodType)qtype, noAnnotations);
|
||||
this.tvars = tvars;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ForAll annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
throw new AssertionError("Cannot annotate forall type");
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R,S> R accept(Type.Visitor<R,S> v, S s) {
|
||||
return v.visitForAll(this, s);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "<" + tvars + ">" + qtype;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
appendAnnotationsString(sb);
|
||||
sb.append('<');
|
||||
sb.append(tvars);
|
||||
sb.append('>');
|
||||
sb.append(qtype);
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public List<Type> getTypeArguments() { return tvars; }
|
||||
@ -1479,7 +1628,8 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
}
|
||||
|
||||
public UndetVar(TypeVar origin, Types types) {
|
||||
super(UNDETVAR, origin);
|
||||
// This is a synthesized internal type, so we cannot annotate it.
|
||||
super(UNDETVAR, origin, noAnnotations);
|
||||
bounds = new EnumMap<>(InferenceBound.class);
|
||||
List<Type> declaredBounds = types.getBounds(origin);
|
||||
declaredCount = declaredBounds.length();
|
||||
@ -1489,7 +1639,15 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return (inst == null) ? qtype + "?" : inst.toString();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
appendAnnotationsString(sb);
|
||||
if (inst == null) {
|
||||
sb.append(qtype);
|
||||
sb.append('?');
|
||||
} else {
|
||||
sb.append(inst);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String debugString() {
|
||||
@ -1506,6 +1664,11 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UndetVar annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
throw new AssertionError("Cannot annotate an UndetVar type");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPartial() {
|
||||
return true;
|
||||
@ -1659,7 +1822,15 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
*/
|
||||
public static class JCNoType extends Type implements NoType {
|
||||
public JCNoType() {
|
||||
super(null);
|
||||
// Need to use List.nil(), because JCNoType constructor
|
||||
// gets called in static initializers in Type, where
|
||||
// noAnnotations is also defined.
|
||||
super(null, List.<Attribute.TypeCompound>nil());
|
||||
}
|
||||
|
||||
@Override
|
||||
public JCNoType annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
throw new AssertionError("Cannot annotate JCNoType");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1686,7 +1857,13 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
public static class JCVoidType extends Type implements NoType {
|
||||
|
||||
public JCVoidType() {
|
||||
super(null);
|
||||
// Void cannot be annotated
|
||||
super(null, noAnnotations);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JCVoidType annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
throw new AssertionError("Cannot annotate void type");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1715,7 +1892,13 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
|
||||
static class BottomType extends Type implements NullType {
|
||||
public BottomType() {
|
||||
super(null);
|
||||
// Bottom is a synthesized internal type, so it cannot be annotated
|
||||
super(null, noAnnotations);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BottomType annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
throw new AssertionError("Cannot annotate bottom type");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1759,7 +1942,12 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
private Type originalType = null;
|
||||
|
||||
public ErrorType(Type originalType, TypeSymbol tsym) {
|
||||
super(noType, List.<Type>nil(), null);
|
||||
this(originalType, tsym, noAnnotations);
|
||||
}
|
||||
|
||||
public ErrorType(Type originalType, TypeSymbol tsym,
|
||||
List<Attribute.TypeCompound> typeAnnotations) {
|
||||
super(noType, List.<Type>nil(), null, typeAnnotations);
|
||||
this.tsym = tsym;
|
||||
this.originalType = (originalType == null ? noType : originalType);
|
||||
}
|
||||
@ -1771,6 +1959,11 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
c.members_field = new Scope.ErrorScope(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ErrorType annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
return new ErrorType(originalType, tsym, annos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeTag getTag() {
|
||||
return ERROR;
|
||||
@ -1827,182 +2020,17 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
}
|
||||
}
|
||||
|
||||
public static class AnnotatedType extends Type
|
||||
implements
|
||||
javax.lang.model.type.ArrayType,
|
||||
javax.lang.model.type.DeclaredType,
|
||||
javax.lang.model.type.PrimitiveType,
|
||||
javax.lang.model.type.TypeVariable,
|
||||
javax.lang.model.type.WildcardType {
|
||||
/** The type annotations on this type.
|
||||
*/
|
||||
private List<Attribute.TypeCompound> typeAnnotations;
|
||||
|
||||
/** The underlying type that is annotated.
|
||||
*/
|
||||
private Type underlyingType;
|
||||
|
||||
protected AnnotatedType(List<Attribute.TypeCompound> typeAnnotations,
|
||||
Type underlyingType) {
|
||||
super(underlyingType.tsym);
|
||||
this.typeAnnotations = typeAnnotations;
|
||||
this.underlyingType = underlyingType;
|
||||
Assert.check(typeAnnotations != null && typeAnnotations.nonEmpty(),
|
||||
"Can't create AnnotatedType without annotations: " + underlyingType);
|
||||
Assert.check(!underlyingType.isAnnotated(),
|
||||
"Can't annotate already annotated type: " + underlyingType +
|
||||
"; adding: " + typeAnnotations);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeTag getTag() {
|
||||
return underlyingType.getTag();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAnnotated() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Attribute.TypeCompound> getAnnotationMirrors() {
|
||||
return typeAnnotations;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public TypeKind getKind() {
|
||||
return underlyingType.getKind();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type unannotatedType() {
|
||||
return underlyingType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R,S> R accept(Type.Visitor<R,S> v, S s) {
|
||||
return v.visitAnnotatedType(this, s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R, P> R accept(TypeVisitor<R, P> v, P p) {
|
||||
return underlyingType.accept(v, p);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type map(Mapping f) {
|
||||
underlyingType.map(f);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type constType(Object constValue) { return underlyingType.constType(constValue); }
|
||||
@Override
|
||||
public Type getEnclosingType() { return underlyingType.getEnclosingType(); }
|
||||
|
||||
@Override
|
||||
public Type getReturnType() { return underlyingType.getReturnType(); }
|
||||
@Override
|
||||
public List<Type> getTypeArguments() { return underlyingType.getTypeArguments(); }
|
||||
@Override
|
||||
public List<Type> getParameterTypes() { return underlyingType.getParameterTypes(); }
|
||||
@Override
|
||||
public Type getReceiverType() { return underlyingType.getReceiverType(); }
|
||||
@Override
|
||||
public List<Type> getThrownTypes() { return underlyingType.getThrownTypes(); }
|
||||
@Override
|
||||
public Type getUpperBound() { return underlyingType.getUpperBound(); }
|
||||
@Override
|
||||
public Type getLowerBound() { return underlyingType.getLowerBound(); }
|
||||
|
||||
@Override
|
||||
public boolean isErroneous() { return underlyingType.isErroneous(); }
|
||||
@Override
|
||||
public boolean isCompound() { return underlyingType.isCompound(); }
|
||||
@Override
|
||||
public boolean isInterface() { return underlyingType.isInterface(); }
|
||||
@Override
|
||||
public List<Type> allparams() { return underlyingType.allparams(); }
|
||||
@Override
|
||||
public boolean isPrimitive() { return underlyingType.isPrimitive(); }
|
||||
@Override
|
||||
public boolean isPrimitiveOrVoid() { return underlyingType.isPrimitiveOrVoid(); }
|
||||
@Override
|
||||
public boolean isNumeric() { return underlyingType.isNumeric(); }
|
||||
@Override
|
||||
public boolean isReference() { return underlyingType.isReference(); }
|
||||
@Override
|
||||
public boolean isNullOrReference() { return underlyingType.isNullOrReference(); }
|
||||
@Override
|
||||
public boolean isPartial() { return underlyingType.isPartial(); }
|
||||
@Override
|
||||
public boolean isParameterized() { return underlyingType.isParameterized(); }
|
||||
@Override
|
||||
public boolean isRaw() { return underlyingType.isRaw(); }
|
||||
@Override
|
||||
public boolean isFinal() { return underlyingType.isFinal(); }
|
||||
@Override
|
||||
public boolean isSuperBound() { return underlyingType.isSuperBound(); }
|
||||
@Override
|
||||
public boolean isExtendsBound() { return underlyingType.isExtendsBound(); }
|
||||
@Override
|
||||
public boolean isUnbound() { return underlyingType.isUnbound(); }
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
// This method is only used for internal debugging output.
|
||||
// See
|
||||
// com.sun.tools.javac.code.Printer.visitAnnotatedType(AnnotatedType, Locale)
|
||||
// for the user-visible logic.
|
||||
if (typeAnnotations != null &&
|
||||
!typeAnnotations.isEmpty()) {
|
||||
return "(" + typeAnnotations.toString() + " :: " + underlyingType.toString() + ")";
|
||||
} else {
|
||||
return "({} :: " + underlyingType.toString() +")";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(Type t) { return underlyingType.contains(t); }
|
||||
|
||||
@Override
|
||||
public Type withTypeVar(Type t) {
|
||||
// Don't create a new AnnotatedType, as 'this' will
|
||||
// get its annotations set later.
|
||||
underlyingType = underlyingType.withTypeVar(t);
|
||||
return this;
|
||||
}
|
||||
|
||||
// TODO: attach annotations?
|
||||
@Override
|
||||
public TypeSymbol asElement() { return underlyingType.asElement(); }
|
||||
|
||||
// TODO: attach annotations?
|
||||
@Override
|
||||
public MethodType asMethodType() { return underlyingType.asMethodType(); }
|
||||
|
||||
@Override
|
||||
public void complete() { underlyingType.complete(); }
|
||||
|
||||
@Override
|
||||
public TypeMirror getComponentType() { return ((ArrayType)underlyingType).getComponentType(); }
|
||||
|
||||
// The result is an ArrayType, but only in the model sense, not the Type sense.
|
||||
public Type makeVarargs() {
|
||||
return ((ArrayType) underlyingType).makeVarargs().annotatedType(typeAnnotations);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeMirror getExtendsBound() { return ((WildcardType)underlyingType).getExtendsBound(); }
|
||||
@Override
|
||||
public TypeMirror getSuperBound() { return ((WildcardType)underlyingType).getSuperBound(); }
|
||||
}
|
||||
|
||||
public static class UnknownType extends Type {
|
||||
|
||||
public UnknownType() {
|
||||
super(null);
|
||||
// Unknown is a synthesized internal type, so it cannot be
|
||||
// annotated.
|
||||
super(null, noAnnotations);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnknownType annotatedType(List<Attribute.TypeCompound> annos) {
|
||||
throw new AssertionError("Cannot annotate unknown type");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -2046,7 +2074,6 @@ public abstract class Type extends AnnoConstruct implements TypeMirror {
|
||||
R visitForAll(ForAll t, S s);
|
||||
R visitUndetVar(UndetVar t, S s);
|
||||
R visitErrorType(ErrorType t, S s);
|
||||
R visitAnnotatedType(AnnotatedType t, S s);
|
||||
R visitType(Type t, S s);
|
||||
}
|
||||
}
|
||||
|
@ -326,15 +326,21 @@ public class TypeAnnotationPosition {
|
||||
|
||||
public int getCatchType() {
|
||||
Assert.check(hasCatchType(),
|
||||
"exception_index does not contain a valid catch type");
|
||||
return (-this.exception_index) - 1 ;
|
||||
"exception_index does not contain valid catch info");
|
||||
return ((-this.exception_index) - 1) & 0xff ;
|
||||
}
|
||||
|
||||
public void setCatchType(final int catchType) {
|
||||
public int getStartPos() {
|
||||
Assert.check(hasCatchType(),
|
||||
"exception_index does not contain valid catch info");
|
||||
return ((-this.exception_index) - 1) >> 8 ;
|
||||
}
|
||||
|
||||
public void setCatchInfo(final int catchType, final int startPos) {
|
||||
Assert.check(this.exception_index < 0,
|
||||
"exception_index already contains a bytecode index");
|
||||
Assert.check(catchType >= 0, "Expected a valid catch type");
|
||||
this.exception_index = -(catchType + 1);
|
||||
this.exception_index = -((catchType | startPos << 8) + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -32,7 +32,6 @@ import javax.lang.model.type.TypeKind;
|
||||
import javax.tools.JavaFileObject;
|
||||
|
||||
import com.sun.tools.javac.code.Attribute.TypeCompound;
|
||||
import com.sun.tools.javac.code.Type.AnnotatedType;
|
||||
import com.sun.tools.javac.code.Type.ArrayType;
|
||||
import com.sun.tools.javac.code.Type.CapturedType;
|
||||
import com.sun.tools.javac.code.Type.ClassType;
|
||||
@ -331,7 +330,6 @@ public class TypeAnnotations {
|
||||
// Note that we don't use the result, the call to
|
||||
// typeWithAnnotations side-effects the type annotation positions.
|
||||
// This is important for constructors of nested classes.
|
||||
|
||||
sym.appendUniqueTypeAttributes(typeAnnotations);
|
||||
return;
|
||||
}
|
||||
@ -391,14 +389,15 @@ public class TypeAnnotations {
|
||||
private Type typeWithAnnotations(final JCTree typetree, final Type type,
|
||||
final List<Attribute.TypeCompound> annotations,
|
||||
final List<Attribute.TypeCompound> onlyTypeAnnotations) {
|
||||
// System.out.printf("typeWithAnnotations(typetree: %s, type: %s, annotations: %s, onlyTypeAnnotations: %s)%n",
|
||||
//System.err.printf("typeWithAnnotations(typetree: %s, type: %s, annotations: %s, onlyTypeAnnotations: %s)%n",
|
||||
// typetree, type, annotations, onlyTypeAnnotations);
|
||||
if (annotations.isEmpty()) {
|
||||
return type;
|
||||
}
|
||||
if (type.hasTag(TypeTag.ARRAY)) {
|
||||
Type.ArrayType arType = (Type.ArrayType) type.unannotatedType();
|
||||
Type.ArrayType tomodify = new Type.ArrayType(null, arType.tsym);
|
||||
Type.ArrayType arType = (Type.ArrayType) type;
|
||||
Type.ArrayType tomodify = new Type.ArrayType(null, arType.tsym,
|
||||
Type.noAnnotations);
|
||||
Type toreturn;
|
||||
if (type.isAnnotated()) {
|
||||
toreturn = tomodify.annotatedType(type.getAnnotationMirrors());
|
||||
@ -413,13 +412,15 @@ public class TypeAnnotations {
|
||||
while (arType.elemtype.hasTag(TypeTag.ARRAY)) {
|
||||
if (arType.elemtype.isAnnotated()) {
|
||||
Type aelemtype = arType.elemtype;
|
||||
arType = (Type.ArrayType) aelemtype.unannotatedType();
|
||||
arType = (Type.ArrayType) aelemtype;
|
||||
ArrayType prevToMod = tomodify;
|
||||
tomodify = new Type.ArrayType(null, arType.tsym);
|
||||
tomodify = new Type.ArrayType(null, arType.tsym,
|
||||
Type.noAnnotations);
|
||||
prevToMod.elemtype = tomodify.annotatedType(arType.elemtype.getAnnotationMirrors());
|
||||
} else {
|
||||
arType = (Type.ArrayType) arType.elemtype;
|
||||
tomodify.elemtype = new Type.ArrayType(null, arType.tsym);
|
||||
tomodify.elemtype = new Type.ArrayType(null, arType.tsym,
|
||||
Type.noAnnotations);
|
||||
tomodify = (Type.ArrayType) tomodify.elemtype;
|
||||
}
|
||||
arTree = arrayTypeTree(arTree.elemtype);
|
||||
@ -569,6 +570,7 @@ public class TypeAnnotations {
|
||||
private Type typeWithAnnotations(final Type type,
|
||||
final Type stopAt,
|
||||
final List<Attribute.TypeCompound> annotations) {
|
||||
//System.err.println("typeWithAnnotations " + type + " " + annotations + " stopAt " + stopAt);
|
||||
Visitor<Type, List<TypeCompound>> visitor =
|
||||
new Type.Visitor<Type, List<Attribute.TypeCompound>>() {
|
||||
@Override
|
||||
@ -579,7 +581,8 @@ public class TypeAnnotations {
|
||||
return t.annotatedType(s);
|
||||
} else {
|
||||
ClassType ret = new ClassType(t.getEnclosingType().accept(this, s),
|
||||
t.typarams_field, t.tsym);
|
||||
t.typarams_field, t.tsym,
|
||||
t.getAnnotationMirrors());
|
||||
ret.all_interfaces_field = t.all_interfaces_field;
|
||||
ret.allparams_field = t.allparams_field;
|
||||
ret.interfaces_field = t.interfaces_field;
|
||||
@ -589,11 +592,6 @@ public class TypeAnnotations {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type visitAnnotatedType(AnnotatedType t, List<TypeCompound> s) {
|
||||
return t.unannotatedType().accept(this, s).annotatedType(t.getAnnotationMirrors());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type visitWildcardType(WildcardType t, List<TypeCompound> s) {
|
||||
return t.annotatedType(s);
|
||||
@ -601,7 +599,8 @@ public class TypeAnnotations {
|
||||
|
||||
@Override
|
||||
public Type visitArrayType(ArrayType t, List<TypeCompound> s) {
|
||||
ArrayType ret = new ArrayType(t.elemtype.accept(this, s), t.tsym);
|
||||
ArrayType ret = new ArrayType(t.elemtype.accept(this, s), t.tsym,
|
||||
t.getAnnotationMirrors());
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -131,7 +131,7 @@ public class Types {
|
||||
* @return the upper bound of the given type
|
||||
*/
|
||||
public Type upperBound(Type t) {
|
||||
return upperBound.visit(t).unannotatedType();
|
||||
return upperBound.visit(t);
|
||||
}
|
||||
// where
|
||||
private final MapVisitor<Void> upperBound = new MapVisitor<Void>() {
|
||||
@ -205,7 +205,7 @@ public class Types {
|
||||
WildcardType unb = new WildcardType(syms.objectType,
|
||||
BoundKind.UNBOUND,
|
||||
syms.boundClass,
|
||||
(TypeVar)parms.head.unannotatedType());
|
||||
(TypeVar)parms.head);
|
||||
if (!containsType(args.head, unb))
|
||||
return false;
|
||||
parms = parms.tail;
|
||||
@ -269,7 +269,9 @@ public class Types {
|
||||
List<Type> opens = openVars.toList();
|
||||
ListBuffer<Type> qs = new ListBuffer<>();
|
||||
for (List<Type> iter = opens; iter.nonEmpty(); iter = iter.tail) {
|
||||
qs.append(new WildcardType(syms.objectType, BoundKind.UNBOUND, syms.boundClass, (TypeVar) iter.head.unannotatedType()));
|
||||
qs.append(new WildcardType(syms.objectType, BoundKind.UNBOUND,
|
||||
syms.boundClass, (TypeVar) iter.head,
|
||||
Type.noAnnotations));
|
||||
}
|
||||
res = subst(res, opens, qs.toList());
|
||||
}
|
||||
@ -599,12 +601,12 @@ public class Types {
|
||||
//simply replace the wildcards with its bound
|
||||
for (Type t : formalInterface.getTypeArguments()) {
|
||||
if (actualTypeargs.head.hasTag(WILDCARD)) {
|
||||
WildcardType wt = (WildcardType)actualTypeargs.head.unannotatedType();
|
||||
WildcardType wt = (WildcardType)actualTypeargs.head;
|
||||
Type bound;
|
||||
switch (wt.kind) {
|
||||
case EXTENDS:
|
||||
case UNBOUND:
|
||||
CapturedType capVar = (CapturedType)capturedTypeargs.head.unannotatedType();
|
||||
CapturedType capVar = (CapturedType)capturedTypeargs.head;
|
||||
//use declared bound if it doesn't depend on formal type-args
|
||||
bound = capVar.bound.containsAny(capturedSite.getTypeArguments()) ?
|
||||
wt.type : capVar.bound;
|
||||
@ -642,7 +644,8 @@ public class Types {
|
||||
csym.members_field = new Scope(csym);
|
||||
MethodSymbol instDescSym = new MethodSymbol(descSym.flags(), descSym.name, descType, csym);
|
||||
csym.members_field.enter(instDescSym);
|
||||
Type.ClassType ctype = new Type.ClassType(Type.noType, List.<Type>nil(), csym);
|
||||
Type.ClassType ctype = new Type.ClassType(Type.noType, List.<Type>nil(), csym,
|
||||
Type.noAnnotations);
|
||||
ctype.supertype_field = syms.objectType;
|
||||
ctype.interfaces_field = targets;
|
||||
csym.type = ctype;
|
||||
@ -747,8 +750,6 @@ public class Types {
|
||||
//where
|
||||
private boolean isSubtypeUncheckedInternal(Type t, Type s, Warner warn) {
|
||||
if (t.hasTag(ARRAY) && s.hasTag(ARRAY)) {
|
||||
t = t.unannotatedType();
|
||||
s = s.unannotatedType();
|
||||
if (((ArrayType)t).elemtype.isPrimitive()) {
|
||||
return isSameType(elemtype(t), elemtype(s));
|
||||
} else {
|
||||
@ -776,8 +777,6 @@ public class Types {
|
||||
if (!t.hasTag(ARRAY) || isReifiable(t)) {
|
||||
return;
|
||||
}
|
||||
t = t.unannotatedType();
|
||||
s = s.unannotatedType();
|
||||
ArrayType from = (ArrayType)t;
|
||||
boolean shouldWarn = false;
|
||||
switch (s.getTag()) {
|
||||
@ -807,12 +806,6 @@ public class Types {
|
||||
return isSubtype(t, s, false);
|
||||
}
|
||||
public boolean isSubtype(Type t, Type s, boolean capture) {
|
||||
if (t == s)
|
||||
return true;
|
||||
|
||||
t = t.unannotatedType();
|
||||
s = s.unannotatedType();
|
||||
|
||||
if (t == s)
|
||||
return true;
|
||||
|
||||
@ -828,8 +821,9 @@ public class Types {
|
||||
}
|
||||
|
||||
// Generally, if 's' is a type variable, recur on lower bound; but
|
||||
// for alpha <: CAP, alpha should get upper bound CAP
|
||||
if (!t.hasTag(UNDETVAR)) {
|
||||
// for inference variables and intersections, we need to keep 's'
|
||||
// (see JLS 4.10.2 for intersections and 18.2.3 for inference vars)
|
||||
if (!t.hasTag(UNDETVAR) && !t.isCompound()) {
|
||||
// TODO: JDK-8039198, bounds checking sometimes passes in a wildcard as s
|
||||
Type lower = cvarLowerBound(wildLowerBound(s));
|
||||
if (s != lower)
|
||||
@ -899,12 +893,14 @@ public class Types {
|
||||
if (s.isSuperBound() && !s.isExtendsBound()) {
|
||||
s = new WildcardType(syms.objectType,
|
||||
BoundKind.UNBOUND,
|
||||
syms.boundClass);
|
||||
syms.boundClass,
|
||||
s.getAnnotationMirrors());
|
||||
changed = true;
|
||||
} else if (s != orig) {
|
||||
s = new WildcardType(upperBound(s),
|
||||
BoundKind.EXTENDS,
|
||||
syms.boundClass);
|
||||
syms.boundClass,
|
||||
s.getAnnotationMirrors());
|
||||
changed = true;
|
||||
}
|
||||
rewrite.append(s);
|
||||
@ -918,14 +914,11 @@ public class Types {
|
||||
@Override
|
||||
public Boolean visitClassType(ClassType t, Type s) {
|
||||
Type sup = asSuper(t, s.tsym);
|
||||
return sup != null
|
||||
&& sup.tsym == s.tsym
|
||||
// You're not allowed to write
|
||||
// Vector<Object> vec = new Vector<String>();
|
||||
// But with wildcards you can write
|
||||
// Vector<? extends Object> vec = new Vector<String>();
|
||||
// which means that subtype checking must be done
|
||||
// here instead of same-type checking (via containsType).
|
||||
if (sup == null) return false;
|
||||
// If t is an intersection, sup might not be a class type
|
||||
if (!sup.hasTag(CLASS)) return isSubtypeNoCapture(sup, s);
|
||||
return sup.tsym == s.tsym
|
||||
// Check type variable containment
|
||||
&& (!s.isParameterized() || containsTypeRecursive(s, sup))
|
||||
&& isSubtypeNoCapture(sup.getEnclosingType(),
|
||||
s.getEnclosingType());
|
||||
@ -1107,7 +1100,7 @@ public class Types {
|
||||
if (s.hasTag(TYPEVAR)) {
|
||||
//type-substitution does not preserve type-var types
|
||||
//check that type var symbols and bounds are indeed the same
|
||||
return sameTypeVars((TypeVar)t.unannotatedType(), (TypeVar)s.unannotatedType());
|
||||
return sameTypeVars((TypeVar)t, (TypeVar)s);
|
||||
}
|
||||
else {
|
||||
//special case for s == ? super X, where upper(s) = u
|
||||
@ -1149,9 +1142,9 @@ public class Types {
|
||||
|
||||
HashSet<UniqueType> set = new HashSet<>();
|
||||
for (Type x : interfaces(t))
|
||||
set.add(new UniqueType(x.unannotatedType(), Types.this));
|
||||
set.add(new UniqueType(x, Types.this));
|
||||
for (Type x : interfaces(s)) {
|
||||
if (!set.remove(new UniqueType(x.unannotatedType(), Types.this)))
|
||||
if (!set.remove(new UniqueType(x, Types.this)))
|
||||
return false;
|
||||
}
|
||||
return (set.isEmpty());
|
||||
@ -1256,30 +1249,47 @@ public class Types {
|
||||
if (!s.hasTag(WILDCARD)) {
|
||||
return false;
|
||||
} else {
|
||||
WildcardType t2 = (WildcardType)s.unannotatedType();
|
||||
WildcardType t2 = (WildcardType)s;
|
||||
return t.kind == t2.kind &&
|
||||
isSameType(t.type, t2.type, true);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* A version of LooseSameTypeVisitor that takes AnnotatedTypes
|
||||
* into account.
|
||||
*/
|
||||
TypeRelation isSameAnnotatedType = new LooseSameTypeVisitor() {
|
||||
// </editor-fold>
|
||||
|
||||
TypeRelation isSameAnnotatedType = new LooseSameTypeVisitor() {
|
||||
private Boolean compareAnnotations(Type t1, Type t2) {
|
||||
List<Attribute.TypeCompound> annos1 = t1.getAnnotationMirrors();
|
||||
List<Attribute.TypeCompound> annos2 = t2.getAnnotationMirrors();
|
||||
return annos1.containsAll(annos2) && annos2.containsAll(annos1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean visitAnnotatedType(AnnotatedType t, Type s) {
|
||||
if (!s.isAnnotated())
|
||||
return false;
|
||||
if (!t.getAnnotationMirrors().containsAll(s.getAnnotationMirrors()))
|
||||
return false;
|
||||
if (!s.getAnnotationMirrors().containsAll(t.getAnnotationMirrors()))
|
||||
return false;
|
||||
return visit(t.unannotatedType(), s);
|
||||
public Boolean visitType(Type t, Type s) {
|
||||
return compareAnnotations(t, s) && super.visitType(t, s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean visitWildcardType(WildcardType t, Type s) {
|
||||
return compareAnnotations(t, s) && super.visitWildcardType(t, s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean visitClassType(ClassType t, Type s) {
|
||||
return compareAnnotations(t, s) && super.visitClassType(t, s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean visitArrayType(ArrayType t, Type s) {
|
||||
return compareAnnotations(t, s) && super.visitArrayType(t, s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean visitForAll(ForAll t, Type s) {
|
||||
return compareAnnotations(t, s) && super.visitForAll(t, s);
|
||||
}
|
||||
};
|
||||
// </editor-fold>
|
||||
|
||||
// <editor-fold defaultstate="collapsed" desc="Contains Type">
|
||||
public boolean containedBy(Type t, Type s) {
|
||||
@ -1287,7 +1297,7 @@ public class Types {
|
||||
case UNDETVAR:
|
||||
if (s.hasTag(WILDCARD)) {
|
||||
UndetVar undetvar = (UndetVar)t;
|
||||
WildcardType wt = (WildcardType)s.unannotatedType();
|
||||
WildcardType wt = (WildcardType)s;
|
||||
switch(wt.kind) {
|
||||
case UNBOUND: //similar to ? extends Object
|
||||
case EXTENDS: {
|
||||
@ -1354,7 +1364,7 @@ public class Types {
|
||||
|
||||
private Type U(Type t) {
|
||||
while (t.hasTag(WILDCARD)) {
|
||||
WildcardType w = (WildcardType)t.unannotatedType();
|
||||
WildcardType w = (WildcardType)t;
|
||||
if (w.isSuperBound())
|
||||
return w.bound == null ? syms.objectType : w.bound.bound;
|
||||
else
|
||||
@ -1365,7 +1375,7 @@ public class Types {
|
||||
|
||||
private Type L(Type t) {
|
||||
while (t.hasTag(WILDCARD)) {
|
||||
WildcardType w = (WildcardType)t.unannotatedType();
|
||||
WildcardType w = (WildcardType)t;
|
||||
if (w.isExtendsBound())
|
||||
return syms.botType;
|
||||
else
|
||||
@ -1424,15 +1434,15 @@ public class Types {
|
||||
};
|
||||
|
||||
public boolean isCaptureOf(Type s, WildcardType t) {
|
||||
if (!s.hasTag(TYPEVAR) || !((TypeVar)s.unannotatedType()).isCaptured())
|
||||
if (!s.hasTag(TYPEVAR) || !((TypeVar)s).isCaptured())
|
||||
return false;
|
||||
return isSameWildcard(t, ((CapturedType)s.unannotatedType()).wildcard);
|
||||
return isSameWildcard(t, ((CapturedType)s).wildcard);
|
||||
}
|
||||
|
||||
public boolean isSameWildcard(WildcardType t, Type s) {
|
||||
if (!s.hasTag(WILDCARD))
|
||||
return false;
|
||||
WildcardType w = (WildcardType)s.unannotatedType();
|
||||
WildcardType w = (WildcardType)s;
|
||||
return w.kind == t.kind && w.type == t.type;
|
||||
}
|
||||
|
||||
@ -1541,8 +1551,8 @@ public class Types {
|
||||
|
||||
if (t.isCompound() || s.isCompound()) {
|
||||
return !t.isCompound() ?
|
||||
visitIntersectionType((IntersectionClassType)s.unannotatedType(), t, true) :
|
||||
visitIntersectionType((IntersectionClassType)t.unannotatedType(), s, false);
|
||||
visitIntersectionType((IntersectionClassType)s, t, true) :
|
||||
visitIntersectionType((IntersectionClassType)t, s, false);
|
||||
}
|
||||
|
||||
if (s.hasTag(CLASS) || s.hasTag(ARRAY)) {
|
||||
@ -1873,7 +1883,6 @@ public class Types {
|
||||
case WILDCARD:
|
||||
return elemtype(upperBound(t));
|
||||
case ARRAY:
|
||||
t = t.unannotatedType();
|
||||
return ((ArrayType)t).elemtype;
|
||||
case FORALL:
|
||||
return elemtype(((ForAll)t).qtype);
|
||||
@ -1920,7 +1929,7 @@ public class Types {
|
||||
if (t.hasTag(VOID) || t.hasTag(PACKAGE)) {
|
||||
Assert.error("Type t must not be a VOID or PACKAGE type, " + t.toString());
|
||||
}
|
||||
return new ArrayType(t, syms.arrayClass);
|
||||
return new ArrayType(t, syms.arrayClass, Type.noAnnotations);
|
||||
}
|
||||
// </editor-fold>
|
||||
|
||||
@ -1959,16 +1968,18 @@ public class Types {
|
||||
return t;
|
||||
|
||||
Type st = supertype(t);
|
||||
if (st.hasTag(CLASS) || st.hasTag(TYPEVAR) || st.hasTag(ERROR)) {
|
||||
if (st.hasTag(CLASS) || st.hasTag(TYPEVAR)) {
|
||||
Type x = asSuper(st, sym);
|
||||
if (x != null)
|
||||
return x;
|
||||
}
|
||||
if ((sym.flags() & INTERFACE) != 0) {
|
||||
for (List<Type> l = interfaces(t); l.nonEmpty(); l = l.tail) {
|
||||
Type x = asSuper(l.head, sym);
|
||||
if (x != null)
|
||||
return x;
|
||||
if (!l.head.hasTag(ERROR)) {
|
||||
Type x = asSuper(l.head, sym);
|
||||
if (x != null)
|
||||
return x;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@ -2175,56 +2186,65 @@ public class Types {
|
||||
}
|
||||
|
||||
private Type erasure(Type t, boolean recurse) {
|
||||
if (t.isPrimitive())
|
||||
if (t.isPrimitive()) {
|
||||
return t; /* fast special case */
|
||||
else
|
||||
return erasure.visit(t, recurse);
|
||||
} else {
|
||||
Type out = erasure.visit(t, recurse);
|
||||
return out;
|
||||
}
|
||||
}
|
||||
// where
|
||||
private SimpleVisitor<Type, Boolean> erasure = new SimpleVisitor<Type, Boolean>() {
|
||||
public Type visitType(Type t, Boolean recurse) {
|
||||
if (t.isPrimitive())
|
||||
return t; /*fast special case*/
|
||||
else
|
||||
return t.map(recurse ? erasureRecFun : erasureFun);
|
||||
else {
|
||||
final List<Attribute.TypeCompound> annos = t.getAnnotationMirrors();
|
||||
Type erased = t.map(recurse ? erasureRecFun : erasureFun);
|
||||
if (!annos.isEmpty()) {
|
||||
erased = erased.annotatedType(annos);
|
||||
}
|
||||
return erased;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type visitWildcardType(WildcardType t, Boolean recurse) {
|
||||
return erasure(upperBound(t), recurse);
|
||||
final List<Attribute.TypeCompound> annos = t.getAnnotationMirrors();
|
||||
Type erased = erasure(upperBound(t), recurse);
|
||||
if (!annos.isEmpty()) {
|
||||
erased = erased.annotatedType(annos);
|
||||
}
|
||||
return erased;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type visitClassType(ClassType t, Boolean recurse) {
|
||||
Type erased = t.tsym.erasure(Types.this);
|
||||
List<Attribute.TypeCompound> annos = t.getAnnotationMirrors();
|
||||
if (recurse) {
|
||||
erased = new ErasedClassType(erased.getEnclosingType(),erased.tsym);
|
||||
}
|
||||
if (!annos.isEmpty()) {
|
||||
erased = erased.annotatedType(annos);
|
||||
}
|
||||
return erased;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type visitTypeVar(TypeVar t, Boolean recurse) {
|
||||
return erasure(t.bound, recurse);
|
||||
final List<Attribute.TypeCompound> annos = t.getAnnotationMirrors();
|
||||
Type erased = erasure(t.bound, recurse);
|
||||
if (!annos.isEmpty()) {
|
||||
erased = erased.annotatedType(annos);
|
||||
}
|
||||
return erased;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type visitErrorType(ErrorType t, Boolean recurse) {
|
||||
return t;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type visitAnnotatedType(AnnotatedType t, Boolean recurse) {
|
||||
Type erased = erasure(t.unannotatedType(), recurse);
|
||||
if (erased.isAnnotated()) {
|
||||
// This can only happen when the underlying type is a
|
||||
// type variable and the upper bound of it is annotated.
|
||||
// The annotation on the type variable overrides the one
|
||||
// on the bound.
|
||||
erased = ((AnnotatedType)erased).unannotatedType();
|
||||
}
|
||||
return erased.annotatedType(t.getAnnotationMirrors());
|
||||
}
|
||||
};
|
||||
|
||||
private Mapping erasureFun = new Mapping ("erasure") {
|
||||
@ -2550,7 +2570,8 @@ public class Types {
|
||||
public Type visitClassType(ClassType t, Void ignored) {
|
||||
Type outer1 = classBound(t.getEnclosingType());
|
||||
if (outer1 != t.getEnclosingType())
|
||||
return new ClassType(outer1, t.getTypeArguments(), t.tsym);
|
||||
return new ClassType(outer1, t.getTypeArguments(), t.tsym,
|
||||
t.getAnnotationMirrors());
|
||||
else
|
||||
return t;
|
||||
}
|
||||
@ -2965,7 +2986,8 @@ public class Types {
|
||||
if (typarams1 == typarams && outer1 == outer)
|
||||
return t;
|
||||
else
|
||||
return new ClassType(outer1, typarams1, t.tsym);
|
||||
return new ClassType(outer1, typarams1, t.tsym,
|
||||
t.getAnnotationMirrors());
|
||||
} else {
|
||||
Type st = subst(supertype(t));
|
||||
List<Type> is = upperBounds(subst(interfaces(t)));
|
||||
@ -2986,7 +3008,8 @@ public class Types {
|
||||
} else {
|
||||
if (t.isExtendsBound() && bound.isExtendsBound())
|
||||
bound = upperBound(bound);
|
||||
return new WildcardType(bound, t.kind, syms.boundClass, t.bound);
|
||||
return new WildcardType(bound, t.kind, syms.boundClass,
|
||||
t.bound, t.getAnnotationMirrors());
|
||||
}
|
||||
}
|
||||
|
||||
@ -2996,7 +3019,7 @@ public class Types {
|
||||
if (elemtype == t.elemtype)
|
||||
return t;
|
||||
else
|
||||
return new ArrayType(elemtype, t.tsym);
|
||||
return new ArrayType(elemtype, t.tsym, t.getAnnotationMirrors());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -3006,7 +3029,7 @@ public class Types {
|
||||
//if 'to' types contain variables that are free in 't'
|
||||
List<Type> freevars = newInstances(t.tvars);
|
||||
t = new ForAll(freevars,
|
||||
Types.this.subst(t.qtype, t.tvars, freevars));
|
||||
Types.this.subst(t.qtype, t.tvars, freevars));
|
||||
}
|
||||
List<Type> tvars1 = substBounds(t.tvars, from, to);
|
||||
Type qtype1 = subst(t.qtype);
|
||||
@ -3015,7 +3038,8 @@ public class Types {
|
||||
} else if (tvars1 == t.tvars) {
|
||||
return new ForAll(tvars1, qtype1);
|
||||
} else {
|
||||
return new ForAll(tvars1, Types.this.subst(qtype1, t.tvars, tvars1));
|
||||
return new ForAll(tvars1,
|
||||
Types.this.subst(qtype1, t.tvars, tvars1));
|
||||
}
|
||||
}
|
||||
|
||||
@ -3045,7 +3069,8 @@ public class Types {
|
||||
ListBuffer<Type> newTvars = new ListBuffer<>();
|
||||
// create new type variables without bounds
|
||||
for (Type t : tvars) {
|
||||
newTvars.append(new TypeVar(t.tsym, null, syms.botType));
|
||||
newTvars.append(new TypeVar(t.tsym, null, syms.botType,
|
||||
t.getAnnotationMirrors()));
|
||||
}
|
||||
// the new bounds should use the new type variables in place
|
||||
// of the old
|
||||
@ -3071,7 +3096,8 @@ public class Types {
|
||||
return t;
|
||||
else {
|
||||
// create new type variable without bounds
|
||||
TypeVar tv = new TypeVar(t.tsym, null, syms.botType);
|
||||
TypeVar tv = new TypeVar(t.tsym, null, syms.botType,
|
||||
t.getAnnotationMirrors());
|
||||
// the new bound should use the new type variable in place
|
||||
// of the old
|
||||
tv.bound = subst(bound1, List.<Type>of(t), List.<Type>of(tv));
|
||||
@ -3112,7 +3138,7 @@ public class Types {
|
||||
return tvars1;
|
||||
}
|
||||
private static final Mapping newInstanceFun = new Mapping("newInstanceFun") {
|
||||
public Type apply(Type t) { return new TypeVar(t.tsym, t.getUpperBound(), t.getLowerBound()); }
|
||||
public Type apply(Type t) { return new TypeVar(t.tsym, t.getUpperBound(), t.getLowerBound(), t.getAnnotationMirrors()); }
|
||||
};
|
||||
// </editor-fold>
|
||||
|
||||
@ -3185,7 +3211,6 @@ public class Types {
|
||||
* graph. Undefined for all but reference types.
|
||||
*/
|
||||
public int rank(Type t) {
|
||||
t = t.unannotatedType();
|
||||
switch(t.getTag()) {
|
||||
case CLASS: {
|
||||
ClassType cls = (ClassType)t;
|
||||
@ -3267,7 +3292,7 @@ public class Types {
|
||||
for (Type t : tvars) {
|
||||
if (!first) s.append(", ");
|
||||
first = false;
|
||||
appendTyparamString(((TypeVar)t.unannotatedType()), s);
|
||||
appendTyparamString(((TypeVar)t), s);
|
||||
}
|
||||
s.append('>');
|
||||
return s.toString();
|
||||
@ -3439,12 +3464,14 @@ public class Types {
|
||||
m = new WildcardType(lub(upperBound(act1.head),
|
||||
upperBound(act2.head)),
|
||||
BoundKind.EXTENDS,
|
||||
syms.boundClass);
|
||||
syms.boundClass,
|
||||
Type.noAnnotations);
|
||||
mergeCache.remove(pair);
|
||||
} else {
|
||||
m = new WildcardType(syms.objectType,
|
||||
BoundKind.UNBOUND,
|
||||
syms.boundClass);
|
||||
syms.boundClass,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
merged.append(m.withTypeVar(typarams.head));
|
||||
}
|
||||
@ -3453,7 +3480,10 @@ public class Types {
|
||||
typarams = typarams.tail;
|
||||
}
|
||||
Assert.check(act1.isEmpty() && act2.isEmpty() && typarams.isEmpty());
|
||||
return new ClassType(class1.getEnclosingType(), merged.toList(), class1.tsym);
|
||||
// There is no spec detailing how type annotations are to
|
||||
// be inherited. So set it to noAnnotations for now
|
||||
return new ClassType(class1.getEnclosingType(), merged.toList(),
|
||||
class1.tsym, Type.noAnnotations);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -3571,7 +3601,8 @@ public class Types {
|
||||
}
|
||||
}
|
||||
// lub(A[], B[]) is lub(A, B)[]
|
||||
return new ArrayType(lub(elements), syms.arrayClass);
|
||||
return new ArrayType(lub(elements), syms.arrayClass,
|
||||
Type.noAnnotations);
|
||||
|
||||
case CLASS_BOUND:
|
||||
// calculate lub(A, B)
|
||||
@ -3932,7 +3963,6 @@ public class Types {
|
||||
t = subst(type1, t.tsym.type.getTypeArguments(), t.getTypeArguments());
|
||||
}
|
||||
}
|
||||
t = t.unannotatedType();
|
||||
ClassType cls = (ClassType)t;
|
||||
if (cls.isRaw() || !cls.isParameterized())
|
||||
return cls;
|
||||
@ -3951,9 +3981,9 @@ public class Types {
|
||||
!currentS.isEmpty()) {
|
||||
if (currentS.head != currentT.head) {
|
||||
captured = true;
|
||||
WildcardType Ti = (WildcardType)currentT.head.unannotatedType();
|
||||
WildcardType Ti = (WildcardType)currentT.head;
|
||||
Type Ui = currentA.head.getUpperBound();
|
||||
CapturedType Si = (CapturedType)currentS.head.unannotatedType();
|
||||
CapturedType Si = (CapturedType)currentS.head;
|
||||
if (Ui == null)
|
||||
Ui = syms.objectType;
|
||||
switch (Ti.kind) {
|
||||
@ -3986,7 +4016,8 @@ public class Types {
|
||||
return erasure(t); // some "rare" type involved
|
||||
|
||||
if (captured)
|
||||
return new ClassType(cls.getEnclosingType(), S, cls.tsym);
|
||||
return new ClassType(cls.getEnclosingType(), S, cls.tsym,
|
||||
cls.getAnnotationMirrors());
|
||||
else
|
||||
return t;
|
||||
}
|
||||
@ -3995,7 +4026,6 @@ public class Types {
|
||||
ListBuffer<Type> result = new ListBuffer<>();
|
||||
for (Type t : types) {
|
||||
if (t.hasTag(WILDCARD)) {
|
||||
t = t.unannotatedType();
|
||||
Type bound = ((WildcardType)t).getExtendsBound();
|
||||
if (bound == null)
|
||||
bound = syms.objectType;
|
||||
@ -4003,7 +4033,8 @@ public class Types {
|
||||
syms.noSymbol,
|
||||
bound,
|
||||
syms.botType,
|
||||
(WildcardType)t));
|
||||
(WildcardType)t,
|
||||
Type.noAnnotations));
|
||||
} else {
|
||||
result.append(t);
|
||||
}
|
||||
@ -4089,7 +4120,7 @@ public class Types {
|
||||
|
||||
private boolean giveWarning(Type from, Type to) {
|
||||
List<Type> bounds = to.isCompound() ?
|
||||
((IntersectionClassType)to.unannotatedType()).getComponents() : List.of(to);
|
||||
((IntersectionClassType)to).getComponents() : List.of(to);
|
||||
for (Type b : bounds) {
|
||||
Type subFrom = asSub(from, b.tsym);
|
||||
if (b.isParameterized() &&
|
||||
@ -4354,7 +4385,7 @@ public class Types {
|
||||
|
||||
Type B(Type t) {
|
||||
while (t.hasTag(WILDCARD)) {
|
||||
WildcardType w = (WildcardType)t.unannotatedType();
|
||||
WildcardType w = (WildcardType)t;
|
||||
t = high ?
|
||||
w.getExtendsBound() :
|
||||
w.getSuperBound();
|
||||
@ -4380,12 +4411,14 @@ public class Types {
|
||||
return new WildcardType(syms.objectType,
|
||||
BoundKind.UNBOUND,
|
||||
syms.boundClass,
|
||||
formal);
|
||||
formal,
|
||||
Type.noAnnotations);
|
||||
} else {
|
||||
return new WildcardType(bound,
|
||||
BoundKind.EXTENDS,
|
||||
syms.boundClass,
|
||||
formal);
|
||||
formal,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4402,12 +4435,14 @@ public class Types {
|
||||
return new WildcardType(syms.objectType,
|
||||
BoundKind.UNBOUND,
|
||||
syms.boundClass,
|
||||
formal);
|
||||
formal,
|
||||
Type.noAnnotations);
|
||||
} else {
|
||||
return new WildcardType(bound,
|
||||
BoundKind.SUPER,
|
||||
syms.boundClass,
|
||||
formal);
|
||||
formal,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4429,7 +4464,7 @@ public class Types {
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
return (obj instanceof UniqueType) &&
|
||||
types.isSameAnnotatedType(type, ((UniqueType)obj).type);
|
||||
types.isSameType(type, ((UniqueType)obj).type);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
@ -4464,8 +4499,6 @@ public class Types {
|
||||
public R visitForAll(ForAll t, S s) { return visitType(t, s); }
|
||||
public R visitUndetVar(UndetVar t, S s) { return visitType(t, s); }
|
||||
public R visitErrorType(ErrorType t, S s) { return visitType(t, s); }
|
||||
// Pretend annotations don't exist
|
||||
public R visitAnnotatedType(AnnotatedType t, S s) { return visit(t.unannotatedType(), s); }
|
||||
}
|
||||
|
||||
/**
|
||||
@ -4596,7 +4629,6 @@ public class Types {
|
||||
* Assemble signature of given type in string buffer.
|
||||
*/
|
||||
public void assembleSig(Type type) {
|
||||
type = type.unannotatedType();
|
||||
switch (type.getTag()) {
|
||||
case BYTE:
|
||||
append('B');
|
||||
@ -4693,7 +4725,6 @@ public class Types {
|
||||
}
|
||||
|
||||
public void assembleClassSig(Type type) {
|
||||
type = type.unannotatedType();
|
||||
ClassType ct = (ClassType) type;
|
||||
ClassSymbol c = (ClassSymbol) ct.tsym;
|
||||
classReference(c);
|
||||
|
@ -517,6 +517,10 @@ public class Attr extends JCTree.Visitor {
|
||||
return new ResultInfo(pkind, pt, newContext);
|
||||
}
|
||||
|
||||
protected ResultInfo dup(Type newPt, CheckContext newContext) {
|
||||
return new ResultInfo(pkind, newPt, newContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (pt != null) {
|
||||
@ -1865,8 +1869,10 @@ public class Attr extends JCTree.Visitor {
|
||||
return new ClassType(restype.getEnclosingType(),
|
||||
List.<Type>of(new WildcardType(types.erasure(qualifierType),
|
||||
BoundKind.EXTENDS,
|
||||
syms.boundClass)),
|
||||
restype.tsym);
|
||||
syms.boundClass,
|
||||
Type.noAnnotations)),
|
||||
restype.tsym,
|
||||
restype.getAnnotationMirrors());
|
||||
} else {
|
||||
return restype;
|
||||
}
|
||||
@ -2036,7 +2042,8 @@ public class Attr extends JCTree.Visitor {
|
||||
} else if (TreeInfo.isDiamond(tree)) {
|
||||
ClassType site = new ClassType(clazztype.getEnclosingType(),
|
||||
clazztype.tsym.type.getTypeArguments(),
|
||||
clazztype.tsym);
|
||||
clazztype.tsym,
|
||||
clazztype.getAnnotationMirrors());
|
||||
|
||||
Env<AttrContext> diamondEnv = localEnv.dup(tree);
|
||||
diamondEnv.info.selectSuper = cdef != null;
|
||||
@ -2255,7 +2262,8 @@ public class Attr extends JCTree.Visitor {
|
||||
owntype = elemtype;
|
||||
for (List<JCExpression> l = tree.dims; l.nonEmpty(); l = l.tail) {
|
||||
attribExpr(l.head, localEnv, syms.intType);
|
||||
owntype = new ArrayType(owntype, syms.arrayClass);
|
||||
owntype = new ArrayType(owntype, syms.arrayClass,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
} else {
|
||||
// we are seeing an untyped aggregate { ... }
|
||||
@ -2272,7 +2280,8 @@ public class Attr extends JCTree.Visitor {
|
||||
}
|
||||
if (tree.elems != null) {
|
||||
attribExprs(tree.elems, localEnv, elemtype);
|
||||
owntype = new ArrayType(elemtype, syms.arrayClass);
|
||||
owntype = new ArrayType(elemtype, syms.arrayClass,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
if (!types.isReifiable(elemtype))
|
||||
log.error(tree.pos(), "generic.array.creation");
|
||||
@ -2763,7 +2772,7 @@ public class Attr extends JCTree.Visitor {
|
||||
targetError = false;
|
||||
}
|
||||
|
||||
JCDiagnostic detailsDiag = ((Resolve.ResolveError)refSym).getDiagnostic(JCDiagnostic.DiagnosticType.FRAGMENT,
|
||||
JCDiagnostic detailsDiag = ((Resolve.ResolveError)refSym.baseSymbol()).getDiagnostic(JCDiagnostic.DiagnosticType.FRAGMENT,
|
||||
that, exprType.tsym, exprType, that.name, argtypes, typeargtypes);
|
||||
|
||||
JCDiagnostic.DiagnosticType diagKind = targetError ?
|
||||
@ -2838,7 +2847,8 @@ public class Attr extends JCTree.Visitor {
|
||||
ResultInfo checkInfo =
|
||||
resultInfo.dup(newMethodTemplate(
|
||||
desc.getReturnType().hasTag(VOID) ? Type.noType : desc.getReturnType(),
|
||||
that.kind.isUnbound() ? argtypes.tail : argtypes, typeargtypes));
|
||||
that.kind.isUnbound() ? argtypes.tail : argtypes, typeargtypes),
|
||||
new FunctionalReturnContext(resultInfo.checkContext));
|
||||
|
||||
Type refType = checkId(that, lookupHelper.site, refSym, localEnv, checkInfo);
|
||||
|
||||
@ -3244,7 +3254,7 @@ public class Attr extends JCTree.Visitor {
|
||||
if (skind == TYP) {
|
||||
Type elt = site;
|
||||
while (elt.hasTag(ARRAY))
|
||||
elt = ((ArrayType)elt.unannotatedType()).elemtype;
|
||||
elt = ((ArrayType)elt).elemtype;
|
||||
if (elt.hasTag(TYPEVAR)) {
|
||||
log.error(tree.pos(), "type.var.cant.be.deref");
|
||||
result = types.createErrorType(tree.type);
|
||||
@ -3557,7 +3567,8 @@ public class Attr extends JCTree.Visitor {
|
||||
normOuter = types.erasure(ownOuter);
|
||||
if (normOuter != ownOuter)
|
||||
owntype = new ClassType(
|
||||
normOuter, List.<Type>nil(), owntype.tsym);
|
||||
normOuter, List.<Type>nil(), owntype.tsym,
|
||||
owntype.getAnnotationMirrors());
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -3861,7 +3872,7 @@ public class Attr extends JCTree.Visitor {
|
||||
|
||||
public void visitTypeArray(JCArrayTypeTree tree) {
|
||||
Type etype = attribType(tree.elemtype, env);
|
||||
Type type = new ArrayType(etype, syms.arrayClass);
|
||||
Type type = new ArrayType(etype, syms.arrayClass, Type.noAnnotations);
|
||||
result = check(tree, type, TYP, resultInfo);
|
||||
}
|
||||
|
||||
@ -3909,7 +3920,8 @@ public class Attr extends JCTree.Visitor {
|
||||
clazzOuter = site;
|
||||
}
|
||||
}
|
||||
owntype = new ClassType(clazzOuter, actuals, clazztype.tsym);
|
||||
owntype = new ClassType(clazzOuter, actuals, clazztype.tsym,
|
||||
clazztype.getAnnotationMirrors());
|
||||
} else {
|
||||
if (formals.length() != 0) {
|
||||
log.error(tree.pos(), "wrong.number.type.args",
|
||||
@ -4060,7 +4072,8 @@ public class Attr extends JCTree.Visitor {
|
||||
: attribType(tree.inner, env);
|
||||
result = check(tree, new WildcardType(chk.checkRefType(tree.pos(), type),
|
||||
tree.kind.kind,
|
||||
syms.boundClass),
|
||||
syms.boundClass,
|
||||
Type.noAnnotations),
|
||||
TYP, resultInfo);
|
||||
}
|
||||
|
||||
@ -4088,7 +4101,7 @@ public class Attr extends JCTree.Visitor {
|
||||
public void run() {
|
||||
List<Attribute.TypeCompound> compounds = fromAnnotations(annotations);
|
||||
Assert.check(annotations.size() == compounds.size());
|
||||
tree.type = tree.type.unannotatedType().annotatedType(compounds);
|
||||
tree.type = tree.type.annotatedType(compounds);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -4470,6 +4483,7 @@ public class Attr extends JCTree.Visitor {
|
||||
}
|
||||
}
|
||||
public void visitVarDef(final JCVariableDecl tree) {
|
||||
//System.err.println("validateTypeAnnotations.visitVarDef " + tree);
|
||||
if (tree.sym != null && tree.sym.type != null)
|
||||
validateAnnotatedType(tree.vartype, tree.sym.type);
|
||||
scan(tree.mods);
|
||||
@ -4512,6 +4526,7 @@ public class Attr extends JCTree.Visitor {
|
||||
super.visitNewArray(tree);
|
||||
}
|
||||
public void visitClassDef(JCClassDecl tree) {
|
||||
//System.err.println("validateTypeAnnotations.visitClassDef " + tree);
|
||||
if (sigOnly) {
|
||||
scan(tree.mods);
|
||||
scan(tree.typarams);
|
||||
@ -4540,7 +4555,7 @@ public class Attr extends JCTree.Visitor {
|
||||
* can occur.
|
||||
*/
|
||||
private void validateAnnotatedType(final JCTree errtree, final Type type) {
|
||||
// System.out.println("Attr.validateAnnotatedType: " + errtree + " type: " + type);
|
||||
//System.err.println("Attr.validateAnnotatedType: " + errtree + " type: " + type);
|
||||
|
||||
if (type.isPrimitiveOrVoid()) {
|
||||
return;
|
||||
@ -4578,8 +4593,7 @@ public class Attr extends JCTree.Visitor {
|
||||
}
|
||||
} else if (enclTr.hasTag(ANNOTATED_TYPE)) {
|
||||
JCAnnotatedType at = (JCTree.JCAnnotatedType) enclTr;
|
||||
if (enclTy == null ||
|
||||
enclTy.hasTag(NONE)) {
|
||||
if (enclTy == null || enclTy.hasTag(NONE)) {
|
||||
if (at.getAnnotations().size() == 1) {
|
||||
log.error(at.underlyingType.pos(), "cant.type.annotate.scoping.1", at.getAnnotations().head.attribute);
|
||||
} else {
|
||||
@ -4598,16 +4612,16 @@ public class Attr extends JCTree.Visitor {
|
||||
} else if (enclTr.hasTag(JCTree.Tag.WILDCARD)) {
|
||||
JCWildcard wc = (JCWildcard) enclTr;
|
||||
if (wc.getKind() == JCTree.Kind.EXTENDS_WILDCARD) {
|
||||
validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy.unannotatedType()).getExtendsBound());
|
||||
validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy).getExtendsBound());
|
||||
} else if (wc.getKind() == JCTree.Kind.SUPER_WILDCARD) {
|
||||
validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy.unannotatedType()).getSuperBound());
|
||||
validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy).getSuperBound());
|
||||
} else {
|
||||
// Nothing to do for UNBOUND
|
||||
}
|
||||
repeat = false;
|
||||
} else if (enclTr.hasTag(TYPEARRAY)) {
|
||||
JCArrayTypeTree art = (JCArrayTypeTree) enclTr;
|
||||
validateAnnotatedType(art.getType(), ((ArrayType)enclTy.unannotatedType()).getComponentType());
|
||||
validateAnnotatedType(art.getType(), ((ArrayType)enclTy).getComponentType());
|
||||
repeat = false;
|
||||
} else if (enclTr.hasTag(TYPEUNION)) {
|
||||
JCTypeUnion ut = (JCTypeUnion) enclTr;
|
||||
|
@ -2234,11 +2234,11 @@ public class Check {
|
||||
if (t.hasTag(TYPEVAR) && (t.tsym.flags() & UNATTRIBUTED) != 0)
|
||||
return;
|
||||
if (seen.contains(t)) {
|
||||
tv = (TypeVar)t.unannotatedType();
|
||||
tv = (TypeVar)t;
|
||||
tv.bound = types.createErrorType(t);
|
||||
log.error(pos, "cyclic.inheritance", t);
|
||||
} else if (t.hasTag(TYPEVAR)) {
|
||||
tv = (TypeVar)t.unannotatedType();
|
||||
tv = (TypeVar)t;
|
||||
seen = seen.prepend(tv);
|
||||
for (Type b : types.getBounds(tv))
|
||||
checkNonCyclic1(pos, b, seen);
|
||||
|
@ -134,12 +134,17 @@ public class DeferredAttr extends JCTree.Visitor {
|
||||
SpeculativeCache speculativeCache;
|
||||
|
||||
DeferredType(JCExpression tree, Env<AttrContext> env) {
|
||||
super(null);
|
||||
super(null, noAnnotations);
|
||||
this.tree = tree;
|
||||
this.env = attr.copyEnv(env);
|
||||
this.speculativeCache = new SpeculativeCache();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeferredType annotatedType(List<Attribute.TypeCompound> typeAnnotations) {
|
||||
throw new AssertionError("Cannot annotate a deferred type");
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeTag getTag() {
|
||||
return DEFERRED;
|
||||
|
@ -373,7 +373,7 @@ public class Infer {
|
||||
List<Type> upperBounds = uv.getBounds(InferenceBound.UPPER);
|
||||
if (Type.containsAny(upperBounds, vars)) {
|
||||
TypeSymbol fresh_tvar = new TypeVariableSymbol(Flags.SYNTHETIC, uv.qtype.tsym.name, null, uv.qtype.tsym.owner);
|
||||
fresh_tvar.type = new TypeVar(fresh_tvar, types.makeCompoundType(uv.getBounds(InferenceBound.UPPER)), null);
|
||||
fresh_tvar.type = new TypeVar(fresh_tvar, types.makeCompoundType(uv.getBounds(InferenceBound.UPPER)), null, Type.noAnnotations);
|
||||
todo.append(uv);
|
||||
uv.inst = fresh_tvar.type;
|
||||
} else if (upperBounds.nonEmpty()) {
|
||||
@ -1505,7 +1505,9 @@ public class Infer {
|
||||
LOWER.solve(uv, inferenceContext) :
|
||||
infer.syms.botType;
|
||||
CapturedType prevCaptured = (CapturedType)uv.qtype;
|
||||
return new CapturedType(prevCaptured.tsym.name, prevCaptured.tsym.owner, upper, lower, prevCaptured.wildcard);
|
||||
return new CapturedType(prevCaptured.tsym.name, prevCaptured.tsym.owner,
|
||||
upper, lower, prevCaptured.wildcard,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -28,7 +28,6 @@ package com.sun.tools.javac.comp;
|
||||
import java.util.*;
|
||||
|
||||
import com.sun.tools.javac.code.*;
|
||||
import com.sun.tools.javac.code.Type.AnnotatedType;
|
||||
import com.sun.tools.javac.jvm.*;
|
||||
import com.sun.tools.javac.main.Option.PkgInfo;
|
||||
import com.sun.tools.javac.tree.*;
|
||||
@ -452,7 +451,8 @@ public class Lower extends TreeTranslator {
|
||||
ClassSymbol outerCacheClass = outerCacheClass();
|
||||
this.mapVar = new VarSymbol(STATIC | SYNTHETIC | FINAL,
|
||||
varName,
|
||||
new ArrayType(syms.intType, syms.arrayClass),
|
||||
new ArrayType(syms.intType, syms.arrayClass,
|
||||
Type.noAnnotations),
|
||||
outerCacheClass);
|
||||
enterSynthetic(pos, mapVar, outerCacheClass.members());
|
||||
}
|
||||
@ -493,7 +493,8 @@ public class Lower extends TreeTranslator {
|
||||
syms.lengthVar);
|
||||
JCExpression mapVarInit = make
|
||||
.NewArray(make.Type(syms.intType), List.of(size), null)
|
||||
.setType(new ArrayType(syms.intType, syms.arrayClass));
|
||||
.setType(new ArrayType(syms.intType, syms.arrayClass,
|
||||
Type.noAnnotations));
|
||||
|
||||
// try { $SwitchMap$Color[red.ordinal()] = 1; } catch (java.lang.NoSuchFieldError ex) {}
|
||||
ListBuffer<JCStatement> stmts = new ListBuffer<>();
|
||||
@ -1979,7 +1980,7 @@ public class Lower extends TreeTranslator {
|
||||
List.<JCExpression>of(make.Literal(INT, 0).setType(syms.intType)),
|
||||
null);
|
||||
newcache.type = new ArrayType(types.erasure(outerCacheClass.type),
|
||||
syms.arrayClass);
|
||||
syms.arrayClass, Type.noAnnotations);
|
||||
|
||||
// forNameSym := java.lang.Class.forName(
|
||||
// String s,boolean init,ClassLoader loader)
|
||||
@ -2568,7 +2569,8 @@ public class Lower extends TreeTranslator {
|
||||
Name valuesName = names.fromString(target.syntheticNameChar() + "VALUES");
|
||||
while (tree.sym.members().lookup(valuesName).scope != null) // avoid name clash
|
||||
valuesName = names.fromString(valuesName + "" + target.syntheticNameChar());
|
||||
Type arrayType = new ArrayType(types.erasure(tree.type), syms.arrayClass);
|
||||
Type arrayType = new ArrayType(types.erasure(tree.type),
|
||||
syms.arrayClass, Type.noAnnotations);
|
||||
VarSymbol valuesVar = new VarSymbol(PRIVATE|FINAL|STATIC|SYNTHETIC,
|
||||
valuesName,
|
||||
arrayType,
|
||||
@ -2841,7 +2843,7 @@ public class Lower extends TreeTranslator {
|
||||
tree.underlyingType = translate(tree.underlyingType);
|
||||
// but maintain type annotations in the type.
|
||||
if (tree.type.isAnnotated()) {
|
||||
tree.type = tree.underlyingType.type.unannotatedType().annotatedType(tree.type.getAnnotationMirrors());
|
||||
tree.type = tree.underlyingType.type.annotatedType(tree.type.getAnnotationMirrors());
|
||||
} else if (tree.underlyingType.type.isAnnotated()) {
|
||||
tree.type = tree.underlyingType.type;
|
||||
}
|
||||
@ -3145,7 +3147,8 @@ public class Lower extends TreeTranslator {
|
||||
JCNewArray boxedArgs = make.NewArray(make.Type(varargsElement),
|
||||
List.<JCExpression>nil(),
|
||||
elems.toList());
|
||||
boxedArgs.type = new ArrayType(varargsElement, syms.arrayClass);
|
||||
boxedArgs.type = new ArrayType(varargsElement, syms.arrayClass,
|
||||
Type.noAnnotations);
|
||||
result.append(boxedArgs);
|
||||
} else {
|
||||
if (args.length() != 1) throw new AssertionError(args);
|
||||
|
@ -457,7 +457,8 @@ public class MemberEnter extends JCTree.Visitor implements Completer {
|
||||
* to the symbol table.
|
||||
*/
|
||||
private void addEnumMembers(JCClassDecl tree, Env<AttrContext> env) {
|
||||
JCExpression valuesType = make.Type(new ArrayType(tree.sym.type, syms.arrayClass));
|
||||
JCExpression valuesType = make.Type(new ArrayType(tree.sym.type, syms.arrayClass,
|
||||
Type.noAnnotations));
|
||||
|
||||
// public static T[] values() { return ???; }
|
||||
JCMethodDecl values = make.
|
||||
@ -677,7 +678,7 @@ public class MemberEnter extends JCTree.Visitor implements Completer {
|
||||
//because varargs is represented in the tree as a
|
||||
//modifier on the parameter declaration, and not as a
|
||||
//distinct type of array node.
|
||||
ArrayType atype = (ArrayType)tree.vartype.type.unannotatedType();
|
||||
ArrayType atype = (ArrayType)tree.vartype.type;
|
||||
tree.vartype.type = atype.makeVarargs();
|
||||
}
|
||||
Scope enclScope = enter.enterScope(env);
|
||||
@ -1255,11 +1256,13 @@ public class MemberEnter extends JCTree.Visitor implements Completer {
|
||||
ClassType ct = (ClassType) sym.type;
|
||||
Assert.check(ct.typarams_field.isEmpty());
|
||||
if (n == 1) {
|
||||
TypeVar v = new TypeVar(names.fromString("T"), sym, syms.botType);
|
||||
TypeVar v = new TypeVar(names.fromString("T"), sym, syms.botType,
|
||||
Type.noAnnotations);
|
||||
ct.typarams_field = ct.typarams_field.prepend(v);
|
||||
} else {
|
||||
for (int i = n; i > 0; i--) {
|
||||
TypeVar v = new TypeVar(names.fromString("T" + i), sym, syms.botType);
|
||||
TypeVar v = new TypeVar(names.fromString("T" + i), sym,
|
||||
syms.botType, Type.noAnnotations);
|
||||
ct.typarams_field = ct.typarams_field.prepend(v);
|
||||
}
|
||||
}
|
||||
@ -1310,8 +1313,8 @@ public class MemberEnter extends JCTree.Visitor implements Completer {
|
||||
}
|
||||
Type mType = new MethodType(argtypes, null, thrown, c);
|
||||
Type initType = typarams.nonEmpty() ?
|
||||
new ForAll(typarams, mType) :
|
||||
mType;
|
||||
new ForAll(typarams, mType) :
|
||||
mType;
|
||||
MethodSymbol init = new MethodSymbol(flags, names.init,
|
||||
initType, c);
|
||||
init.params = createDefaultConstructorParams(make, baseInit, init,
|
||||
|
@ -94,7 +94,7 @@ public class Resolve {
|
||||
public final boolean boxingEnabled;
|
||||
public final boolean varargsEnabled;
|
||||
public final boolean allowMethodHandles;
|
||||
public final boolean allowStructuralMostSpecific;
|
||||
public final boolean allowFunctionalInterfaceMostSpecific;
|
||||
private final boolean debugResolve;
|
||||
private final boolean compactMethodDiags;
|
||||
final EnumSet<VerboseResolutionMode> verboseResolutionMode;
|
||||
@ -135,7 +135,7 @@ public class Resolve {
|
||||
verboseResolutionMode = VerboseResolutionMode.getVerboseResolutionMode(options);
|
||||
Target target = Target.instance(context);
|
||||
allowMethodHandles = target.hasMethodHandles();
|
||||
allowStructuralMostSpecific = source.allowStructuralMostSpecific();
|
||||
allowFunctionalInterfaceMostSpecific = source.allowFunctionalInterfaceMostSpecific();
|
||||
polymorphicSignatureScope = new Scope(syms.noSymbol);
|
||||
|
||||
inapplicableMethodException = new InapplicableMethodException(diags);
|
||||
@ -1084,50 +1084,47 @@ public class Resolve {
|
||||
}
|
||||
|
||||
public boolean compatible(Type found, Type req, Warner warn) {
|
||||
if (!allowStructuralMostSpecific || actual == null) {
|
||||
return super.compatible(found, req, warn);
|
||||
} else {
|
||||
switch (actual.getTag()) {
|
||||
case DEFERRED:
|
||||
DeferredType dt = (DeferredType) actual;
|
||||
DeferredType.SpeculativeCache.Entry e = dt.speculativeCache.get(deferredAttrContext.msym, deferredAttrContext.phase);
|
||||
return (e == null || e.speculativeTree == deferredAttr.stuckTree)
|
||||
? super.compatible(found, req, warn) :
|
||||
mostSpecific(found, req, e.speculativeTree, warn);
|
||||
default:
|
||||
return standaloneMostSpecific(found, req, actual, warn);
|
||||
if (allowFunctionalInterfaceMostSpecific &&
|
||||
unrelatedFunctionalInterfaces(found, req) &&
|
||||
(actual != null && actual.getTag() == DEFERRED)) {
|
||||
DeferredType dt = (DeferredType) actual;
|
||||
DeferredType.SpeculativeCache.Entry e =
|
||||
dt.speculativeCache.get(deferredAttrContext.msym, deferredAttrContext.phase);
|
||||
if (e != null && e.speculativeTree != deferredAttr.stuckTree) {
|
||||
return functionalInterfaceMostSpecific(found, req, e.speculativeTree, warn);
|
||||
}
|
||||
}
|
||||
return super.compatible(found, req, warn);
|
||||
}
|
||||
|
||||
private boolean mostSpecific(Type t, Type s, JCTree tree, Warner warn) {
|
||||
MostSpecificChecker msc = new MostSpecificChecker(t, s, warn);
|
||||
/** Whether {@code t} and {@code s} are unrelated functional interface types. */
|
||||
private boolean unrelatedFunctionalInterfaces(Type t, Type s) {
|
||||
return types.isFunctionalInterface(t.tsym) &&
|
||||
types.isFunctionalInterface(s.tsym) &&
|
||||
types.asSuper(t, s.tsym) == null &&
|
||||
types.asSuper(s, t.tsym) == null;
|
||||
}
|
||||
|
||||
/** Parameters {@code t} and {@code s} are unrelated functional interface types. */
|
||||
private boolean functionalInterfaceMostSpecific(Type t, Type s, JCTree tree, Warner warn) {
|
||||
FunctionalInterfaceMostSpecificChecker msc = new FunctionalInterfaceMostSpecificChecker(t, s, warn);
|
||||
msc.scan(tree);
|
||||
return msc.result;
|
||||
}
|
||||
|
||||
boolean polyMostSpecific(Type t1, Type t2, Warner warn) {
|
||||
return (!t1.isPrimitive() && t2.isPrimitive())
|
||||
? true : super.compatible(t1, t2, warn);
|
||||
}
|
||||
|
||||
boolean standaloneMostSpecific(Type t1, Type t2, Type exprType, Warner warn) {
|
||||
return (exprType.isPrimitive() == t1.isPrimitive()
|
||||
&& exprType.isPrimitive() != t2.isPrimitive())
|
||||
? true : super.compatible(t1, t2, warn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Structural checker for most specific.
|
||||
* Tests whether one functional interface type can be considered more specific
|
||||
* than another unrelated functional interface type for the scanned expression.
|
||||
*/
|
||||
class MostSpecificChecker extends DeferredAttr.PolyScanner {
|
||||
class FunctionalInterfaceMostSpecificChecker extends DeferredAttr.PolyScanner {
|
||||
|
||||
final Type t;
|
||||
final Type s;
|
||||
final Warner warn;
|
||||
boolean result;
|
||||
|
||||
MostSpecificChecker(Type t, Type s, Warner warn) {
|
||||
/** Parameters {@code t} and {@code s} are unrelated functional interface types. */
|
||||
FunctionalInterfaceMostSpecificChecker(Type t, Type s, Warner warn) {
|
||||
this.t = t;
|
||||
this.s = s;
|
||||
this.warn = warn;
|
||||
@ -1136,102 +1133,96 @@ public class Resolve {
|
||||
|
||||
@Override
|
||||
void skip(JCTree tree) {
|
||||
result &= standaloneMostSpecific(t, s, tree.type, warn);
|
||||
result &= false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitConditional(JCConditional tree) {
|
||||
if (tree.polyKind == PolyKind.STANDALONE) {
|
||||
result &= standaloneMostSpecific(t, s, tree.type, warn);
|
||||
} else {
|
||||
super.visitConditional(tree);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitApply(JCMethodInvocation tree) {
|
||||
result &= (tree.polyKind == PolyKind.STANDALONE)
|
||||
? standaloneMostSpecific(t, s, tree.type, warn)
|
||||
: polyMostSpecific(t, s, warn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitNewClass(JCNewClass tree) {
|
||||
result &= (tree.polyKind == PolyKind.STANDALONE)
|
||||
? standaloneMostSpecific(t, s, tree.type, warn)
|
||||
: polyMostSpecific(t, s, warn);
|
||||
scan(tree.truepart);
|
||||
scan(tree.falsepart);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitReference(JCMemberReference tree) {
|
||||
if (types.isFunctionalInterface(t.tsym) &&
|
||||
types.isFunctionalInterface(s.tsym)) {
|
||||
Type desc_t = types.findDescriptorType(t);
|
||||
Type desc_s = types.findDescriptorType(s);
|
||||
if (types.isSameTypes(desc_t.getParameterTypes(),
|
||||
inferenceContext().asUndetVars(desc_s.getParameterTypes()))) {
|
||||
if (types.asSuper(t, s.tsym) != null ||
|
||||
types.asSuper(s, t.tsym) != null) {
|
||||
result &= MostSpecificCheckContext.super.compatible(t, s, warn);
|
||||
} else if (!desc_s.getReturnType().hasTag(VOID)) {
|
||||
//perform structural comparison
|
||||
Type ret_t = desc_t.getReturnType();
|
||||
Type ret_s = desc_s.getReturnType();
|
||||
result &= ((tree.refPolyKind == PolyKind.STANDALONE)
|
||||
? standaloneMostSpecific(ret_t, ret_s, tree.sym.type.getReturnType(), warn)
|
||||
: polyMostSpecific(ret_t, ret_s, warn));
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Type desc_t = types.findDescriptorType(t);
|
||||
Type desc_s = types.findDescriptorType(s);
|
||||
// use inference variables here for more-specific inference (18.5.4)
|
||||
if (!types.isSameTypes(desc_t.getParameterTypes(),
|
||||
inferenceContext().asUndetVars(desc_s.getParameterTypes()))) {
|
||||
result &= false;
|
||||
} else {
|
||||
// compare return types
|
||||
Type ret_t = desc_t.getReturnType();
|
||||
Type ret_s = desc_s.getReturnType();
|
||||
if (ret_s.hasTag(VOID)) {
|
||||
result &= true;
|
||||
} else if (ret_t.hasTag(VOID)) {
|
||||
result &= false;
|
||||
} else if (ret_t.isPrimitive() != ret_s.isPrimitive()) {
|
||||
boolean retValIsPrimitive =
|
||||
tree.refPolyKind == PolyKind.STANDALONE &&
|
||||
tree.sym.type.getReturnType().isPrimitive();
|
||||
result &= (retValIsPrimitive == ret_t.isPrimitive()) &&
|
||||
(retValIsPrimitive != ret_s.isPrimitive());
|
||||
} else {
|
||||
result &= MostSpecificCheckContext.super.compatible(ret_t, ret_s, warn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLambda(JCLambda tree) {
|
||||
if (types.isFunctionalInterface(t.tsym) &&
|
||||
types.isFunctionalInterface(s.tsym)) {
|
||||
Type desc_t = types.findDescriptorType(t);
|
||||
Type desc_s = types.findDescriptorType(s);
|
||||
if (types.isSameTypes(desc_t.getParameterTypes(),
|
||||
inferenceContext().asUndetVars(desc_s.getParameterTypes()))) {
|
||||
if (types.asSuper(t, s.tsym) != null ||
|
||||
types.asSuper(s, t.tsym) != null) {
|
||||
result &= MostSpecificCheckContext.super.compatible(t, s, warn);
|
||||
} else if (!desc_s.getReturnType().hasTag(VOID)) {
|
||||
//perform structural comparison
|
||||
Type ret_t = desc_t.getReturnType();
|
||||
Type ret_s = desc_s.getReturnType();
|
||||
scanLambdaBody(tree, ret_t, ret_s);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Type desc_t = types.findDescriptorType(t);
|
||||
Type desc_s = types.findDescriptorType(s);
|
||||
// use inference variables here for more-specific inference (18.5.4)
|
||||
if (!types.isSameTypes(desc_t.getParameterTypes(),
|
||||
inferenceContext().asUndetVars(desc_s.getParameterTypes()))) {
|
||||
result &= false;
|
||||
} else {
|
||||
// compare return types
|
||||
Type ret_t = desc_t.getReturnType();
|
||||
Type ret_s = desc_s.getReturnType();
|
||||
if (ret_s.hasTag(VOID)) {
|
||||
result &= true;
|
||||
} else if (ret_t.hasTag(VOID)) {
|
||||
result &= false;
|
||||
} else if (unrelatedFunctionalInterfaces(ret_t, ret_s)) {
|
||||
for (JCExpression expr : lambdaResults(tree)) {
|
||||
result &= functionalInterfaceMostSpecific(ret_t, ret_s, expr, warn);
|
||||
}
|
||||
} else if (ret_t.isPrimitive() != ret_s.isPrimitive()) {
|
||||
for (JCExpression expr : lambdaResults(tree)) {
|
||||
boolean retValIsPrimitive = expr.isStandalone() && expr.type.isPrimitive();
|
||||
result &= (retValIsPrimitive == ret_t.isPrimitive()) &&
|
||||
(retValIsPrimitive != ret_s.isPrimitive());
|
||||
}
|
||||
} else {
|
||||
result &= MostSpecificCheckContext.super.compatible(ret_t, ret_s, warn);
|
||||
}
|
||||
}
|
||||
}
|
||||
//where
|
||||
|
||||
void scanLambdaBody(JCLambda lambda, final Type t, final Type s) {
|
||||
private List<JCExpression> lambdaResults(JCLambda lambda) {
|
||||
if (lambda.getBodyKind() == JCTree.JCLambda.BodyKind.EXPRESSION) {
|
||||
result &= MostSpecificCheckContext.this.mostSpecific(t, s, lambda.body, warn);
|
||||
return List.of((JCExpression) lambda.body);
|
||||
} else {
|
||||
final ListBuffer<JCExpression> buffer = new ListBuffer<>();
|
||||
DeferredAttr.LambdaReturnScanner lambdaScanner =
|
||||
new DeferredAttr.LambdaReturnScanner() {
|
||||
@Override
|
||||
public void visitReturn(JCReturn tree) {
|
||||
if (tree.expr != null) {
|
||||
result &= MostSpecificCheckContext.this.mostSpecific(t, s, tree.expr, warn);
|
||||
buffer.append(tree.expr);
|
||||
}
|
||||
}
|
||||
};
|
||||
lambdaScanner.scan(lambda.body);
|
||||
return buffer.toList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public MethodCheck mostSpecificCheck(List<Type> actuals, boolean strict) {
|
||||
@ -1435,7 +1426,7 @@ public class Resolve {
|
||||
return bestSoFar;
|
||||
} else if (useVarargs && (sym.flags() & VARARGS) == 0) {
|
||||
return bestSoFar.kind >= ERRONEOUS ?
|
||||
new BadVarargsMethod((ResolveError)bestSoFar) :
|
||||
new BadVarargsMethod((ResolveError)bestSoFar.baseSymbol()) :
|
||||
bestSoFar;
|
||||
}
|
||||
Assert.check(sym.kind < AMBIGUOUS);
|
||||
@ -1527,14 +1518,22 @@ public class Resolve {
|
||||
if (m2SignatureMoreSpecific) return m2;
|
||||
return ambiguityError(m1, m2);
|
||||
case AMBIGUOUS:
|
||||
//check if m1 is more specific than all ambiguous methods in m2
|
||||
//compare m1 to ambiguous methods in m2
|
||||
AmbiguityError e = (AmbiguityError)m2.baseSymbol();
|
||||
boolean m1MoreSpecificThanAnyAmbiguous = true;
|
||||
boolean allAmbiguousMoreSpecificThanM1 = true;
|
||||
for (Symbol s : e.ambiguousSyms) {
|
||||
if (mostSpecific(argtypes, m1, s, env, site, allowBoxing, useVarargs) != m1) {
|
||||
return e.addAmbiguousSymbol(m1);
|
||||
}
|
||||
Symbol moreSpecific = mostSpecific(argtypes, m1, s, env, site, allowBoxing, useVarargs);
|
||||
m1MoreSpecificThanAnyAmbiguous &= moreSpecific == m1;
|
||||
allAmbiguousMoreSpecificThanM1 &= moreSpecific == s;
|
||||
}
|
||||
return m1;
|
||||
if (m1MoreSpecificThanAnyAmbiguous)
|
||||
return m1;
|
||||
//if m1 is more specific than some ambiguous methods, but other ambiguous methods are
|
||||
//more specific than m1, add it as a new ambiguous method:
|
||||
if (!allAmbiguousMoreSpecificThanM1)
|
||||
e.addAmbiguousSymbol(m1);
|
||||
return e;
|
||||
default:
|
||||
throw new AssertionError();
|
||||
}
|
||||
@ -2195,7 +2194,7 @@ public class Resolve {
|
||||
List<Type> typeargtypes,
|
||||
LogResolveHelper logResolveHelper) {
|
||||
if (sym.kind >= AMBIGUOUS) {
|
||||
ResolveError errSym = (ResolveError)sym;
|
||||
ResolveError errSym = (ResolveError)sym.baseSymbol();
|
||||
sym = errSym.access(name, qualified ? site.tsym : syms.noSymbol);
|
||||
argtypes = logResolveHelper.getArgumentTypes(errSym, sym, name, argtypes);
|
||||
if (logResolveHelper.resolveDiagnosticNeeded(site, argtypes, typeargtypes)) {
|
||||
@ -2584,7 +2583,7 @@ public class Resolve {
|
||||
sym = super.access(env, pos, location, sym);
|
||||
} else {
|
||||
final JCDiagnostic details = sym.kind == WRONG_MTH ?
|
||||
((InapplicableSymbolError)sym).errCandidate().snd :
|
||||
((InapplicableSymbolError)sym.baseSymbol()).errCandidate().snd :
|
||||
null;
|
||||
sym = new InapplicableSymbolError(sym.kind, "diamondError", currentResolutionContext) {
|
||||
@Override
|
||||
@ -2631,7 +2630,7 @@ public class Resolve {
|
||||
((ForAll)sym.type).tvars :
|
||||
List.<Type>nil();
|
||||
Type constrType = new ForAll(site.tsym.type.getTypeArguments().appendList(oldParams),
|
||||
types.createMethodTypeWithReturn(sym.type.asMethodType(), site));
|
||||
types.createMethodTypeWithReturn(sym.type.asMethodType(), site));
|
||||
MethodSymbol newConstr = new MethodSymbol(sym.flags(), names.init, constrType, site.tsym) {
|
||||
@Override
|
||||
public Symbol baseSymbol() {
|
||||
@ -2992,12 +2991,12 @@ public class Resolve {
|
||||
return true;
|
||||
case WRONG_MTH:
|
||||
InapplicableSymbolError errSym =
|
||||
(InapplicableSymbolError)s;
|
||||
(InapplicableSymbolError)s.baseSymbol();
|
||||
return new Template(MethodCheckDiag.ARITY_MISMATCH.regex())
|
||||
.matches(errSym.errCandidate().snd);
|
||||
case WRONG_MTHS:
|
||||
InapplicableSymbolsError errSyms =
|
||||
(InapplicableSymbolsError)s;
|
||||
(InapplicableSymbolsError)s.baseSymbol();
|
||||
return errSyms.filterCandidates(errSyms.mapCandidates()).isEmpty();
|
||||
case WRONG_STATICNESS:
|
||||
return false;
|
||||
@ -3272,7 +3271,7 @@ public class Resolve {
|
||||
List<Type> typeargtypes, MethodResolutionPhase maxPhase) {
|
||||
super(referenceTree, names.init, site, argtypes, typeargtypes, maxPhase);
|
||||
if (site.isRaw()) {
|
||||
this.site = new ClassType(site.getEnclosingType(), site.tsym.type.getTypeArguments(), site.tsym);
|
||||
this.site = new ClassType(site.getEnclosingType(), site.tsym.type.getTypeArguments(), site.tsym, site.getAnnotationMirrors());
|
||||
needsInference = true;
|
||||
}
|
||||
}
|
||||
|
@ -624,18 +624,18 @@ public class ClassReader {
|
||||
case '+': {
|
||||
sigp++;
|
||||
Type t = sigToType();
|
||||
return new WildcardType(t, BoundKind.EXTENDS,
|
||||
syms.boundClass);
|
||||
return new WildcardType(t, BoundKind.EXTENDS, syms.boundClass,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
case '*':
|
||||
sigp++;
|
||||
return new WildcardType(syms.objectType, BoundKind.UNBOUND,
|
||||
syms.boundClass);
|
||||
syms.boundClass, Type.noAnnotations);
|
||||
case '-': {
|
||||
sigp++;
|
||||
Type t = sigToType();
|
||||
return new WildcardType(t, BoundKind.SUPER,
|
||||
syms.boundClass);
|
||||
return new WildcardType(t, BoundKind.SUPER, syms.boundClass,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
case 'B':
|
||||
sigp++;
|
||||
@ -680,7 +680,8 @@ public class ClassReader {
|
||||
return syms.booleanType;
|
||||
case '[':
|
||||
sigp++;
|
||||
return new ArrayType(sigToType(), syms.arrayClass);
|
||||
return new ArrayType(sigToType(), syms.arrayClass,
|
||||
Type.noAnnotations);
|
||||
case '(':
|
||||
sigp++;
|
||||
List<Type> argtypes = sigToTypes(')');
|
||||
@ -735,7 +736,8 @@ public class ClassReader {
|
||||
try {
|
||||
return (outer == Type.noType) ?
|
||||
t.erasure(types) :
|
||||
new ClassType(outer, List.<Type>nil(), t);
|
||||
new ClassType(outer, List.<Type>nil(), t,
|
||||
Type.noAnnotations);
|
||||
} finally {
|
||||
sbp = startSbp;
|
||||
}
|
||||
@ -745,7 +747,8 @@ public class ClassReader {
|
||||
ClassSymbol t = syms.enterClass(names.fromUtf(signatureBuffer,
|
||||
startSbp,
|
||||
sbp - startSbp));
|
||||
outer = new ClassType(outer, sigToTypes('>'), t) {
|
||||
outer = new ClassType(outer, sigToTypes('>'), t,
|
||||
Type.noAnnotations) {
|
||||
boolean completed = false;
|
||||
@Override
|
||||
public Type getEnclosingType() {
|
||||
@ -808,7 +811,8 @@ public class ClassReader {
|
||||
t = syms.enterClass(names.fromUtf(signatureBuffer,
|
||||
startSbp,
|
||||
sbp - startSbp));
|
||||
outer = new ClassType(outer, List.<Type>nil(), t);
|
||||
outer = new ClassType(outer, List.<Type>nil(), t,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
signatureBuffer[sbp++] = (byte)'$';
|
||||
continue;
|
||||
@ -871,7 +875,8 @@ public class ClassReader {
|
||||
Name name = names.fromUtf(signature, start, sigp - start);
|
||||
TypeVar tvar;
|
||||
if (sigEnterPhase) {
|
||||
tvar = new TypeVar(name, currentOwner, syms.botType);
|
||||
tvar = new TypeVar(name, currentOwner, syms.botType,
|
||||
Type.noAnnotations);
|
||||
typevars.enter(tvar.tsym);
|
||||
} else {
|
||||
tvar = (TypeVar)findTypeVar(name);
|
||||
@ -910,7 +915,8 @@ public class ClassReader {
|
||||
// we don't know for sure if this owner is correct. It could
|
||||
// be a method and there is no way to tell before reading the
|
||||
// enclosing method attribute.
|
||||
TypeVar t = new TypeVar(name, currentOwner, syms.botType);
|
||||
TypeVar t = new TypeVar(name, currentOwner, syms.botType,
|
||||
Type.noAnnotations);
|
||||
missingTypeVariables = missingTypeVariables.prepend(t);
|
||||
// System.err.println("Missing type var " + name);
|
||||
return t;
|
||||
@ -1534,35 +1540,41 @@ public class ClassReader {
|
||||
// local variable
|
||||
case LOCAL_VARIABLE: {
|
||||
final int table_length = nextChar();
|
||||
final TypeAnnotationPosition position =
|
||||
TypeAnnotationPosition.localVariable(readTypePath());
|
||||
|
||||
position.lvarOffset = new int[table_length];
|
||||
position.lvarLength = new int[table_length];
|
||||
position.lvarIndex = new int[table_length];
|
||||
final int[] newLvarOffset = new int[table_length];
|
||||
final int[] newLvarLength = new int[table_length];
|
||||
final int[] newLvarIndex = new int[table_length];
|
||||
|
||||
for (int i = 0; i < table_length; ++i) {
|
||||
position.lvarOffset[i] = nextChar();
|
||||
position.lvarLength[i] = nextChar();
|
||||
position.lvarIndex[i] = nextChar();
|
||||
newLvarOffset[i] = nextChar();
|
||||
newLvarLength[i] = nextChar();
|
||||
newLvarIndex[i] = nextChar();
|
||||
}
|
||||
|
||||
final TypeAnnotationPosition position =
|
||||
TypeAnnotationPosition.localVariable(readTypePath());
|
||||
position.lvarOffset = newLvarOffset;
|
||||
position.lvarLength = newLvarLength;
|
||||
position.lvarIndex = newLvarIndex;
|
||||
return position;
|
||||
}
|
||||
// resource variable
|
||||
case RESOURCE_VARIABLE: {
|
||||
final int table_length = nextChar();
|
||||
final TypeAnnotationPosition position =
|
||||
TypeAnnotationPosition.resourceVariable(readTypePath());
|
||||
|
||||
position.lvarOffset = new int[table_length];
|
||||
position.lvarLength = new int[table_length];
|
||||
position.lvarIndex = new int[table_length];
|
||||
final int[] newLvarOffset = new int[table_length];
|
||||
final int[] newLvarLength = new int[table_length];
|
||||
final int[] newLvarIndex = new int[table_length];
|
||||
|
||||
for (int i = 0; i < table_length; ++i) {
|
||||
position.lvarOffset[i] = nextChar();
|
||||
position.lvarLength[i] = nextChar();
|
||||
position.lvarIndex[i] = nextChar();
|
||||
newLvarOffset[i] = nextChar();
|
||||
newLvarLength[i] = nextChar();
|
||||
newLvarIndex[i] = nextChar();
|
||||
}
|
||||
|
||||
final TypeAnnotationPosition position =
|
||||
TypeAnnotationPosition.resourceVariable(readTypePath());
|
||||
position.lvarOffset = newLvarOffset;
|
||||
position.lvarLength = newLvarLength;
|
||||
position.lvarIndex = newLvarIndex;
|
||||
return position;
|
||||
}
|
||||
// exception parameter
|
||||
|
@ -286,7 +286,6 @@ public class ClassWriter extends ClassFile {
|
||||
*/
|
||||
@Override
|
||||
public void assembleSig(Type type) {
|
||||
type = type.unannotatedType();
|
||||
switch (type.getTag()) {
|
||||
case UNINITIALIZED_THIS:
|
||||
case UNINITIALIZED_OBJECT:
|
||||
@ -354,7 +353,7 @@ public class ClassWriter extends ClassFile {
|
||||
} else if (t.hasTag(ARRAY)) {
|
||||
return typeSig(types.erasure(t));
|
||||
} else {
|
||||
throw new AssertionError("xClassName");
|
||||
throw new AssertionError("xClassName expects class or array type, got " + t);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -928,7 +928,7 @@ public class Code {
|
||||
if (o instanceof Pool.MethodHandle) return syms.methodHandleType;
|
||||
if (o instanceof UniqueType) return typeForPool(((UniqueType)o).type);
|
||||
if (o instanceof Type) {
|
||||
Type ty = ((Type)o).unannotatedType();
|
||||
Type ty = (Type) o;
|
||||
|
||||
if (ty instanceof Type.ArrayType) return syms.classType;
|
||||
if (ty instanceof Type.MethodType) return syms.methodTypeType;
|
||||
@ -1579,8 +1579,8 @@ public class Code {
|
||||
|
||||
/** Add a catch clause to code.
|
||||
*/
|
||||
public void addCatch(
|
||||
char startPc, char endPc, char handlerPc, char catchType) {
|
||||
public void addCatch(char startPc, char endPc,
|
||||
char handlerPc, char catchType) {
|
||||
catchInfo.append(new char[]{startPc, endPc, handlerPc, catchType});
|
||||
}
|
||||
|
||||
@ -2149,7 +2149,7 @@ public class Code {
|
||||
for (Attribute.TypeCompound ta : lv.sym.getRawTypeAttributes()) {
|
||||
TypeAnnotationPosition p = ta.position;
|
||||
if (p.hasCatchType()) {
|
||||
final int idx = findExceptionIndex(p.getCatchType());
|
||||
final int idx = findExceptionIndex(p);
|
||||
if (idx == -1)
|
||||
Assert.error("Could not find exception index for type annotation " +
|
||||
ta + " on exception parameter");
|
||||
@ -2159,14 +2159,17 @@ public class Code {
|
||||
}
|
||||
}
|
||||
|
||||
private int findExceptionIndex(int catchType) {
|
||||
private int findExceptionIndex(TypeAnnotationPosition p) {
|
||||
final int catchType = p.getCatchType();
|
||||
final int startPos = p.getStartPos();
|
||||
final int len = catchInfo.length();
|
||||
List<char[]> iter = catchInfo.toList();
|
||||
int len = catchInfo.length();
|
||||
for (int i = 0; i < len; ++i) {
|
||||
char[] catchEntry = iter.head;
|
||||
iter = iter.tail;
|
||||
char ct = catchEntry[3];
|
||||
if (catchType == ct) {
|
||||
int ct = catchEntry[3];
|
||||
int sp = catchEntry[0];
|
||||
if (catchType == ct && sp == startPos) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
@ -317,10 +317,6 @@ public class Gen extends JCTree.Visitor {
|
||||
int makeRef(DiagnosticPosition pos, Type type) {
|
||||
checkDimension(pos, type);
|
||||
if (type.isAnnotated()) {
|
||||
// Treat annotated types separately - we don't want
|
||||
// to collapse all of them - at least for annotated
|
||||
// exceptions.
|
||||
// TODO: review this.
|
||||
return pool.put((Object)type);
|
||||
} else {
|
||||
return pool.put(type.hasTag(CLASS) ? (Object)type.tsym : (Object)type);
|
||||
@ -1647,7 +1643,7 @@ public class Gen extends JCTree.Visitor {
|
||||
if (subCatch.type.isAnnotated()) {
|
||||
for (Attribute.TypeCompound tc :
|
||||
subCatch.type.getAnnotationMirrors()) {
|
||||
tc.position.setCatchType(catchType);
|
||||
tc.position.setCatchInfo(catchType, startpc);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1664,7 +1660,7 @@ public class Gen extends JCTree.Visitor {
|
||||
if (subCatch.type.isAnnotated()) {
|
||||
for (Attribute.TypeCompound tc :
|
||||
subCatch.type.getAnnotationMirrors()) {
|
||||
tc.position.setCatchType(catchType);
|
||||
tc.position.setCatchInfo(catchType, startpc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -673,11 +673,6 @@ public class JNIWriter {
|
||||
return defaultAction(t, p);
|
||||
}
|
||||
|
||||
@Override
|
||||
public R visitAnnotatedType(Type.AnnotatedType t, P p) {
|
||||
return defaultAction(t, p);
|
||||
}
|
||||
|
||||
@Override
|
||||
public R visitType(Type t, P p) {
|
||||
return defaultAction(t, p);
|
||||
|
@ -102,10 +102,11 @@ public class Pool {
|
||||
*/
|
||||
public int put(Object value) {
|
||||
value = makePoolValue(value);
|
||||
// assert !(value instanceof Type.TypeVar);
|
||||
Assert.check(!(value instanceof Type.TypeVar));
|
||||
Assert.check(!(value instanceof Types.UniqueType &&
|
||||
((UniqueType) value).type instanceof Type.TypeVar));
|
||||
Integer index = indices.get(value);
|
||||
if (index == null) {
|
||||
// System.err.println("put " + value + " " + value.getClass());//DEBUG
|
||||
index = pp;
|
||||
indices.put(value, index);
|
||||
pool = ArrayUtils.ensureCapacity(pool, pp);
|
||||
|
@ -26,6 +26,7 @@
|
||||
package com.sun.tools.javac.jvm;
|
||||
|
||||
import com.sun.tools.javac.code.*;
|
||||
import com.sun.tools.javac.util.List;
|
||||
|
||||
import static com.sun.tools.javac.code.TypeTag.UNINITIALIZED_OBJECT;
|
||||
import static com.sun.tools.javac.code.TypeTag.UNINITIALIZED_THIS;
|
||||
@ -41,19 +42,27 @@ import static com.sun.tools.javac.code.TypeTag.UNINITIALIZED_THIS;
|
||||
class UninitializedType extends Type.DelegatedType {
|
||||
|
||||
public static UninitializedType uninitializedThis(Type qtype) {
|
||||
return new UninitializedType(UNINITIALIZED_THIS, qtype, -1);
|
||||
return new UninitializedType(UNINITIALIZED_THIS, qtype, -1,
|
||||
qtype.getAnnotationMirrors());
|
||||
}
|
||||
|
||||
public static UninitializedType uninitializedObject(Type qtype, int offset) {
|
||||
return new UninitializedType(UNINITIALIZED_OBJECT, qtype, offset);
|
||||
return new UninitializedType(UNINITIALIZED_OBJECT, qtype, offset,
|
||||
qtype.getAnnotationMirrors());
|
||||
}
|
||||
|
||||
public final int offset; // PC where allocation took place
|
||||
private UninitializedType(TypeTag tag, Type qtype, int offset) {
|
||||
super(tag, qtype);
|
||||
private UninitializedType(TypeTag tag, Type qtype, int offset,
|
||||
List<Attribute.TypeCompound> typeAnnotations) {
|
||||
super(tag, qtype, typeAnnotations);
|
||||
this.offset = offset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UninitializedType annotatedType(List<Attribute.TypeCompound> typeAnnotations) {
|
||||
return new UninitializedType(tag, qtype, offset, typeAnnotations);
|
||||
}
|
||||
|
||||
Type initializedType() {
|
||||
return qtype;
|
||||
}
|
||||
|
@ -35,9 +35,6 @@ import java.util.MissingResourceException;
|
||||
import java.util.Queue;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Handler;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.annotation.processing.Processor;
|
||||
import javax.lang.model.SourceVersion;
|
||||
@ -1292,11 +1289,16 @@ public class JavaCompiler {
|
||||
* Perform dataflow checks on an attributed parse tree.
|
||||
*/
|
||||
protected void flow(Env<AttrContext> env, Queue<Env<AttrContext>> results) {
|
||||
if (compileStates.isDone(env, CompileState.FLOW)) {
|
||||
results.add(env);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
if (shouldStop(CompileState.FLOW))
|
||||
return;
|
||||
|
||||
if (relax || compileStates.isDone(env, CompileState.FLOW)) {
|
||||
if (relax) {
|
||||
results.add(env);
|
||||
return;
|
||||
}
|
||||
|
@ -168,7 +168,8 @@ public class JavacTypes implements javax.lang.model.util.Types {
|
||||
case PACKAGE:
|
||||
throw new IllegalArgumentException(componentType.toString());
|
||||
}
|
||||
return new Type.ArrayType((Type) componentType, syms.arrayClass);
|
||||
return new Type.ArrayType((Type) componentType, syms.arrayClass,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
|
||||
public WildcardType getWildcardType(TypeMirror extendsBound,
|
||||
@ -193,7 +194,8 @@ public class JavacTypes implements javax.lang.model.util.Types {
|
||||
case DECLARED:
|
||||
case ERROR:
|
||||
case TYPEVAR:
|
||||
return new Type.WildcardType(bound, bkind, syms.boundClass);
|
||||
return new Type.WildcardType(bound, bkind, syms.boundClass,
|
||||
Type.noAnnotations);
|
||||
default:
|
||||
throw new IllegalArgumentException(bound.toString());
|
||||
}
|
||||
@ -243,7 +245,8 @@ public class JavacTypes implements javax.lang.model.util.Types {
|
||||
}
|
||||
// TODO: Would like a way to check that type args match formals.
|
||||
|
||||
return (DeclaredType) new Type.ClassType(outer, targs.toList(), sym);
|
||||
return (DeclaredType) new Type.ClassType(outer, targs.toList(), sym,
|
||||
Type.noAnnotations);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1089,7 +1089,8 @@ public class JavacProcessingEnvironment implements ProcessingEnvironment, Closea
|
||||
for (ClassSymbol cs : symtab.classes.values()) {
|
||||
if (cs.classfile != null || cs.kind == Kinds.ERR) {
|
||||
cs.reset();
|
||||
cs.type = new ClassType(cs.type.getEnclosingType(), null, cs);
|
||||
cs.type = new ClassType(cs.type.getEnclosingType(),
|
||||
null, cs, Type.noAnnotations);
|
||||
if (cs.completer == null) {
|
||||
cs.completer = initialCompleter;
|
||||
}
|
||||
|
@ -643,6 +643,9 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
|
||||
super.setPos(pos);
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isPoly() { return false; }
|
||||
public boolean isStandalone() { return true; }
|
||||
}
|
||||
|
||||
/**
|
||||
@ -663,6 +666,9 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
|
||||
|
||||
/** is this poly expression a 'true' poly expression? */
|
||||
public PolyKind polyKind;
|
||||
|
||||
@Override public boolean isPoly() { return polyKind == PolyKind.POLY; }
|
||||
@Override public boolean isStandalone() { return polyKind == PolyKind.STANDALONE; }
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -65,7 +65,7 @@ public class AnnotatedTypeImpl
|
||||
|
||||
@Override
|
||||
public com.sun.javadoc.Type underlyingType() {
|
||||
return TypeMaker.getType(env, type.unannotatedType(), true, false);
|
||||
return TypeMaker.getType(env, type, true, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -140,9 +140,6 @@ public class TypeMaker {
|
||||
*/
|
||||
static String getTypeString(DocEnv env, Type t, boolean full) {
|
||||
// TODO: should annotations be included here?
|
||||
if (t.isAnnotated()) {
|
||||
t = t.unannotatedType();
|
||||
}
|
||||
switch (t.getTag()) {
|
||||
case ARRAY:
|
||||
StringBuilder s = new StringBuilder();
|
||||
|
@ -186,6 +186,12 @@ ifdef JTREG_TIMEOUT_FACTOR
|
||||
JTREG_OPTIONS += -timeoutFactor:$(JTREG_TIMEOUT_FACTOR)
|
||||
endif
|
||||
|
||||
# Default verbosity setting for jtreg
|
||||
JTREG_VERBOSE = fail,error,nopass
|
||||
|
||||
# Default verbosity setting for jck
|
||||
JCK_VERBOSE = non-pass
|
||||
|
||||
# Assertions: some tests show failures when assertions are enabled.
|
||||
# Since javac is typically loaded via the bootclassloader (either via TESTJAVA
|
||||
# or TESTBOOTCLASSPATH), you may need -esa to enable assertions in javac.
|
||||
@ -256,6 +262,8 @@ jdeps: JTREG_TESTDIRS = tools/jdeps
|
||||
# Version of java used to run jtreg. Should normally be the same as TESTJAVA
|
||||
# TESTJAVA
|
||||
# Version of java to be tested.
|
||||
# JTREG_VERBOSE
|
||||
# Verbosity setting for jtreg
|
||||
# JTREG_OPTIONS
|
||||
# Additional options for jtreg
|
||||
# JTREG_TESTDIRS
|
||||
@ -273,7 +281,7 @@ jtreg-tests: check-jtreg FRC
|
||||
JT_JAVA=$(JT_JAVA) $(JTREG) \
|
||||
-J-Xmx512m \
|
||||
-vmoption:-Xmx768m \
|
||||
-a -ignore:quiet -v:fail,error,nopass \
|
||||
-a -ignore:quiet $(if $(JTREG_VERBOSE),-v:$(JTREG_VERBOSE)) \
|
||||
-r:$(JTREG_OUTPUT_DIR)/JTreport \
|
||||
-w:$(JTREG_OUTPUT_DIR)/JTwork \
|
||||
-jdk:$(TESTJAVA) \
|
||||
@ -312,6 +320,8 @@ check-jtreg: $(PRODUCT_HOME) $(JTREG)
|
||||
# Default is JDK 7
|
||||
# TESTJAVA
|
||||
# Version of java to be tested.
|
||||
# JCK_VERBOSE
|
||||
# Verbosity setting for jtjck
|
||||
# JCK_COMPILER_OPTIONS
|
||||
# Additional options for JCK-compiler
|
||||
# JCK_COMPILER_TESTDIRS
|
||||
@ -325,9 +335,9 @@ jck-compiler-tests: check-jck FRC
|
||||
@rm -f -r $(JCK_COMPILER_OUTPUT_DIR)/work $(JCK_COMPILER_OUTPUT_DIR)/report \
|
||||
$(JCK_COMPILER_OUTPUT_DIR)/diff.html $(JCK_COMPILER_OUTPUT_DIR)/status.txt
|
||||
@mkdir -p $(JCK_COMPILER_OUTPUT_DIR)
|
||||
$(JT_JAVA)/bin/java -XX:MaxPermSize=256m -Xmx512m \
|
||||
$(JT_JAVA)/bin/java -Xmx512m \
|
||||
-jar $(JCK_HOME)/JCK-compiler-8/lib/jtjck.jar \
|
||||
-v:non-pass \
|
||||
$(if $(JCK_VERBOSE),-v:$(JCK_VERBOSE)) \
|
||||
-r:$(JCK_COMPILER_OUTPUT_DIR)/report \
|
||||
-w:$(JCK_COMPILER_OUTPUT_DIR)/work \
|
||||
-jdk:$(TESTJAVA) \
|
||||
@ -361,6 +371,8 @@ jck-compiler-summary: FRC
|
||||
# Version of java used to run JCK. Should normally be the same as TESTJAVA
|
||||
# TESTJAVA
|
||||
# Version of java to be tested.
|
||||
# JCK_VERBOSE
|
||||
# Verbosity setting for jtjck
|
||||
# JCK_RUNTIME_OPTIONS
|
||||
# Additional options for JCK-runtime
|
||||
# JCK_RUNTIME_TESTDIRS
|
||||
@ -374,9 +386,9 @@ jck-runtime-tests: check-jck FRC
|
||||
@rm -f -r $(JCK_RUNTIME_OUTPUT_DIR)/work $(JCK_RUNTIME_OUTPUT_DIR)/report \
|
||||
$(JCK_RUNTIME_OUTPUT_DIR)/diff.html $(JCK_RUNTIME_OUTPUT_DIR)/status.txt
|
||||
@mkdir -p $(JCK_RUNTIME_OUTPUT_DIR)
|
||||
$(JT_JAVA)/bin/java -XX:MaxPermSize=256m -Xmx512m \
|
||||
$(JT_JAVA)/bin/java -Xmx512m \
|
||||
-jar $(JCK_HOME)/JCK-runtime-8/lib/jtjck.jar \
|
||||
-v:non-pass \
|
||||
$(if $(JCK_VERBOSE),-v:$(JCK_VERBOSE)) \
|
||||
-r:$(JCK_RUNTIME_OUTPUT_DIR)/report \
|
||||
-w:$(JCK_RUNTIME_OUTPUT_DIR)/work \
|
||||
-jdk:$(TESTJAVA) \
|
||||
|
@ -25,23 +25,24 @@
|
||||
* @test
|
||||
* @bug 5093723
|
||||
* @summary REGRESSION: ClassCastException in SingleIndexWriter
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build T5093723
|
||||
* @run main T5093723
|
||||
*/
|
||||
|
||||
public class T5093723 extends JavadocTester {
|
||||
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR + ".out", "-Xdoclint:none",
|
||||
SRC_DIR + "/DocumentedClass.java",
|
||||
SRC_DIR + "/UndocumentedClass.java"
|
||||
};
|
||||
|
||||
public static void main(String... args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
T5093723 tester = new T5093723();
|
||||
if (tester.runJavadoc(ARGS) != 0)
|
||||
throw new AssertionError("non-zero return code from javadoc");
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-Xdoclint:none",
|
||||
testSrc("DocumentedClass.java"),
|
||||
testSrc("UndocumentedClass.java"));
|
||||
checkExit(Exit.OK);
|
||||
}
|
||||
}
|
||||
|
@ -26,142 +26,31 @@
|
||||
* @bug 4706779 4956908
|
||||
* @summary Add text equivalent of class tree ASCII art for accessibility
|
||||
* @author dkramer
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main AccessAsciiArt
|
||||
*/
|
||||
|
||||
public class AccessAsciiArt extends JavadocTester {
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
|
||||
/**
|
||||
* Runs javadoc and runs regression tests on the resulting HTML.
|
||||
* It reads each file, complete with newlines, into a string to easily
|
||||
* find strings that contain newlines.
|
||||
*/
|
||||
public class AccessAsciiArt {
|
||||
|
||||
private static final String BUGID = "4706779-4956908";
|
||||
private static final String BUGNAME = "AccessAsciiArt";
|
||||
private static final String TMPDEST_DIR1 = "./docs1/";
|
||||
private static final String TMPDEST_DIR2 = "./docs2/";
|
||||
|
||||
// Subtest number. Needed because runResultsOnHTML is run twice,
|
||||
// and subtestNum should increment across subtest runs.
|
||||
public static int subtestNum = 0;
|
||||
public static int numSubtestsPassed = 0;
|
||||
|
||||
// Entry point
|
||||
public static void main(String[] args) {
|
||||
|
||||
// Directory that contains source files that javadoc runs on
|
||||
String srcdir = System.getProperty("test.src", ".");
|
||||
|
||||
// Test for all cases except the split index page
|
||||
runJavadoc(new String[] {"-d", TMPDEST_DIR1,
|
||||
"-sourcepath", srcdir,
|
||||
"p1", "p1.subpkg"});
|
||||
runTestsOnHTML(testArray);
|
||||
|
||||
printSummary();
|
||||
public static void main(String... args) throws Exception {
|
||||
AccessAsciiArt tester = new AccessAsciiArt();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
/** Run javadoc */
|
||||
public static void runJavadoc(String[] javadocArgs) {
|
||||
if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
|
||||
throw new Error("Javadoc failed to execute");
|
||||
}
|
||||
}
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"p1", "p1.subpkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
/**
|
||||
* Assign value for [ stringToFind, filename ]
|
||||
* NOTE: The standard doclet uses the same separator "\n" for all OS's
|
||||
*/
|
||||
private static final String[][] testArray = {
|
||||
|
||||
// Test the top line of the class tree
|
||||
{
|
||||
"<li><a href=\"../../p1/C.html\" title=\"class in p1\">p1.C</a></li>",
|
||||
TMPDEST_DIR1 + "p1/subpkg/SSC.html" },
|
||||
|
||||
// Test the second line of the class tree
|
||||
{
|
||||
"<li><a href=\"../../p1/SC.html\" title=\"class in p1\">p1.SC</a></li>",
|
||||
TMPDEST_DIR1 + "p1/subpkg/SSC.html" },
|
||||
|
||||
// Test the third line of the class tree
|
||||
{
|
||||
"<li>p1.subpkg.SSC</li>",
|
||||
TMPDEST_DIR1 + "p1/subpkg/SSC.html" },
|
||||
|
||||
};
|
||||
|
||||
public static void runTestsOnHTML(String[][] testArray) {
|
||||
|
||||
for (int i = 0; i < testArray.length; i++) {
|
||||
|
||||
subtestNum += 1;
|
||||
|
||||
// Read contents of file into a string
|
||||
String fileString = readFileToString(testArray[i][1]);
|
||||
|
||||
// Get string to find
|
||||
String stringToFind = testArray[i][0];
|
||||
|
||||
// Find string in file's contents
|
||||
if (findString(fileString, stringToFind) == -1) {
|
||||
System.out.println("\nSub-test " + (subtestNum)
|
||||
+ " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
|
||||
+ "when searching for:\n"
|
||||
+ stringToFind);
|
||||
} else {
|
||||
numSubtestsPassed += 1;
|
||||
System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void printSummary() {
|
||||
if ( numSubtestsPassed == subtestNum ) {
|
||||
System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
|
||||
} else {
|
||||
throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
|
||||
+ " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Read the file into a String
|
||||
public static String readFileToString(String filename) {
|
||||
try {
|
||||
File file = new File(filename);
|
||||
if ( !file.exists() ) {
|
||||
System.out.println("\nFILE DOES NOT EXIST: " + filename);
|
||||
}
|
||||
BufferedReader in = new BufferedReader(new FileReader(file));
|
||||
|
||||
// Create an array of characters the size of the file
|
||||
char[] allChars = new char[(int)file.length()];
|
||||
|
||||
// Read the characters into the allChars array
|
||||
in.read(allChars, 0, (int)file.length());
|
||||
in.close();
|
||||
|
||||
// Convert to a string
|
||||
String allCharsString = new String(allChars);
|
||||
|
||||
return allCharsString;
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
} catch (IOException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static int findString(String fileString, String stringToFind) {
|
||||
return fileString.indexOf(stringToFind);
|
||||
checkOutput("p1/subpkg/SSC.html", true,
|
||||
// Test the top line of the class tree
|
||||
"<li><a href=\"../../p1/C.html\" title=\"class in p1\">p1.C</a></li>",
|
||||
// Test the second line of the class tree
|
||||
"<li><a href=\"../../p1/SC.html\" title=\"class in p1\">p1.SC</a></li>",
|
||||
// Test the third line of the class tree
|
||||
"<li>p1.subpkg.SSC</li>");
|
||||
}
|
||||
}
|
||||
|
@ -26,141 +26,32 @@
|
||||
* @bug 4636655
|
||||
* @summary Add title attribute to <FRAME> tags for accessibility
|
||||
* @author dkramer
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main AccessFrameTitle
|
||||
*/
|
||||
|
||||
public class AccessFrameTitle extends JavadocTester {
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
|
||||
/**
|
||||
* Runs javadoc and runs regression tests on the resulting HTML.
|
||||
* It reads each file, complete with newlines, into a string to easily
|
||||
* find strings that contain newlines.
|
||||
*/
|
||||
public class AccessFrameTitle {
|
||||
|
||||
private static final String BUGID = "4636655";
|
||||
private static final String BUGNAME = "AccessFrameTitle";
|
||||
private static final String TMPDEST_DIR1 = "./docs1/";
|
||||
private static final String TMPDEST_DIR2 = "./docs2/";
|
||||
|
||||
// Subtest number. Needed because runResultsOnHTML is run twice,
|
||||
// and subtestNum should increment across subtest runs.
|
||||
public static int subtestNum = 0;
|
||||
public static int numSubtestsPassed = 0;
|
||||
|
||||
// Entry point
|
||||
public static void main(String[] args) {
|
||||
|
||||
// Directory that contains source files that javadoc runs on
|
||||
String srcdir = System.getProperty("test.src", ".");
|
||||
|
||||
// Test for all cases except the split index page
|
||||
runJavadoc(new String[] {"-d", TMPDEST_DIR1,
|
||||
"-sourcepath", srcdir,
|
||||
"p1", "p2"});
|
||||
runTestsOnHTML(testArray);
|
||||
|
||||
printSummary();
|
||||
public static void main(String... args) throws Exception {
|
||||
AccessFrameTitle tester = new AccessFrameTitle();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
/** Run javadoc */
|
||||
public static void runJavadoc(String[] javadocArgs) {
|
||||
if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
|
||||
throw new Error("Javadoc failed to execute");
|
||||
}
|
||||
}
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"p1", "p2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
/**
|
||||
* Assign value for [ stringToFind, filename ]
|
||||
* NOTE: The standard doclet uses the same separator "\n" for all OS's
|
||||
*/
|
||||
private static final String[][] testArray = {
|
||||
|
||||
// Testing only for the presence of the title attributes.
|
||||
// To make this test more robust, only
|
||||
// the initial part of each title string is tested for,
|
||||
// in case the ending part of the string later changes
|
||||
|
||||
{ "title=\"All classes and interfaces (except non-static nested types)\"",
|
||||
TMPDEST_DIR1 + "index.html" },
|
||||
|
||||
{ "title=\"All Packages\"",
|
||||
TMPDEST_DIR1 + "index.html" },
|
||||
|
||||
{ "title=\"Package, class and interface descriptions\"",
|
||||
TMPDEST_DIR1 + "index.html" },
|
||||
|
||||
};
|
||||
|
||||
public static void runTestsOnHTML(String[][] testArray) {
|
||||
|
||||
for (int i = 0; i < testArray.length; i++) {
|
||||
|
||||
subtestNum += 1;
|
||||
|
||||
// Read contents of file into a string
|
||||
String fileString = readFileToString(testArray[i][1]);
|
||||
|
||||
// Get string to find
|
||||
String stringToFind = testArray[i][0];
|
||||
|
||||
// Find string in file's contents
|
||||
if (findString(fileString, stringToFind) == -1) {
|
||||
System.out.println("\nSub-test " + (subtestNum)
|
||||
+ " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
|
||||
+ "when searching for:\n"
|
||||
+ stringToFind);
|
||||
} else {
|
||||
numSubtestsPassed += 1;
|
||||
System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void printSummary() {
|
||||
if ( numSubtestsPassed == subtestNum ) {
|
||||
System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
|
||||
} else {
|
||||
throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
|
||||
+ " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Read the file into a String
|
||||
public static String readFileToString(String filename) {
|
||||
try {
|
||||
File file = new File(filename);
|
||||
if ( !file.exists() ) {
|
||||
System.out.println("\nFILE DOES NOT EXIST: " + filename);
|
||||
}
|
||||
BufferedReader in = new BufferedReader(new FileReader(file));
|
||||
|
||||
// Create an array of characters the size of the file
|
||||
char[] allChars = new char[(int)file.length()];
|
||||
|
||||
// Read the characters into the allChars array
|
||||
in.read(allChars, 0, (int)file.length());
|
||||
in.close();
|
||||
|
||||
// Convert to a string
|
||||
String allCharsString = new String(allChars);
|
||||
|
||||
return allCharsString;
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
} catch (IOException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static int findString(String fileString, String stringToFind) {
|
||||
return fileString.indexOf(stringToFind);
|
||||
// Testing only for the presence of the title attributes.
|
||||
// To make this test more robust, only
|
||||
// the initial part of each title string is tested for,
|
||||
// in case the ending part of the string later changes
|
||||
checkOutput("index.html", true,
|
||||
"title=\"All classes and interfaces (except non-static nested types)\"",
|
||||
"title=\"All Packages\"",
|
||||
"title=\"Package, class and interface descriptions\"");
|
||||
}
|
||||
}
|
||||
|
@ -26,141 +26,35 @@
|
||||
* @bug 4636667 7052425 8016549
|
||||
* @summary Use <H1, <H2>, and <H3> in proper sequence for accessibility
|
||||
* @author dkramer
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main AccessH1
|
||||
*/
|
||||
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
public class AccessH1 extends JavadocTester {
|
||||
|
||||
|
||||
/**
|
||||
* Runs javadoc and runs regression tests on the resulting HTML.
|
||||
* It reads each file, complete with newlines, into a string to easily
|
||||
* find strings that contain newlines.
|
||||
*/
|
||||
public class AccessH1 {
|
||||
|
||||
protected static final String NL = System.getProperty("line.separator");
|
||||
|
||||
private static final String BUGID = "4636667-7052425";
|
||||
private static final String BUGNAME = "AccessH1";
|
||||
private static final String TMPDEST_DIR1 = "./docs1/";
|
||||
private static final String TMPDEST_DIR2 = "./docs2/";
|
||||
|
||||
// Subtest number. Needed because runResultsOnHTML is run twice,
|
||||
// and subtestNum should increment across subtest runs.
|
||||
public static int subtestNum = 0;
|
||||
public static int numSubtestsPassed = 0;
|
||||
|
||||
// Entry point
|
||||
public static void main(String[] args) {
|
||||
|
||||
// Directory that contains source files that javadoc runs on
|
||||
String srcdir = System.getProperty("test.src", ".");
|
||||
|
||||
// Test for all cases except the split index page
|
||||
runJavadoc(new String[] {"-d", TMPDEST_DIR1,
|
||||
"-doctitle", "Document Title",
|
||||
"-sourcepath", srcdir,
|
||||
"p1", "p2"});
|
||||
runTestsOnHTML(testArray);
|
||||
|
||||
printSummary();
|
||||
public static void main(String... args) throws Exception {
|
||||
AccessH1 tester = new AccessH1();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
/** Run javadoc */
|
||||
public static void runJavadoc(String[] javadocArgs) {
|
||||
if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
|
||||
throw new Error("Javadoc failed to execute");
|
||||
}
|
||||
}
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-doctitle", "Document Title",
|
||||
"-sourcepath", testSrc,
|
||||
"p1", "p2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
/**
|
||||
* Assign value for [ stringToFind, filename ]
|
||||
* NOTE: The standard doclet uses the same separator "\n" for all OS's
|
||||
*/
|
||||
private static final String[][] testArray = {
|
||||
// Test the style sheet
|
||||
{
|
||||
"h1 {\n" +
|
||||
" font-size:20px;\n" +
|
||||
"}",
|
||||
TMPDEST_DIR1 + "stylesheet.css"
|
||||
},
|
||||
checkOutput("stylesheet.css", true,
|
||||
"h1 {\n"
|
||||
+ " font-size:20px;\n"
|
||||
+ "}");
|
||||
|
||||
// Test the doc title in the overview page
|
||||
{
|
||||
"<h1 class=\"title\">Document Title</h1>",
|
||||
TMPDEST_DIR1 + "overview-summary.html"
|
||||
}
|
||||
};
|
||||
|
||||
public static void runTestsOnHTML(String[][] testArray) {
|
||||
|
||||
for (int i = 0; i < testArray.length; i++) {
|
||||
|
||||
subtestNum += 1;
|
||||
|
||||
// Read contents of file into a string
|
||||
String fileString = readFileToString(testArray[i][1]);
|
||||
|
||||
// Get string to find
|
||||
String stringToFind = testArray[i][0];
|
||||
|
||||
// Find string in file's contents
|
||||
if (findString(fileString, stringToFind) == -1) {
|
||||
System.out.println("\nSub-test " + (subtestNum)
|
||||
+ " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
|
||||
+ "when searching for:\n"
|
||||
+ stringToFind);
|
||||
} else {
|
||||
numSubtestsPassed += 1;
|
||||
System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void printSummary() {
|
||||
if ( numSubtestsPassed == subtestNum ) {
|
||||
System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
|
||||
} else {
|
||||
throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
|
||||
+ " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Read the file into a String
|
||||
public static String readFileToString(String filename) {
|
||||
try {
|
||||
File file = new File(filename);
|
||||
if ( !file.exists() ) {
|
||||
System.out.println("\nFILE DOES NOT EXIST: " + filename);
|
||||
}
|
||||
BufferedReader in = new BufferedReader(new FileReader(file));
|
||||
|
||||
// Create an array of characters the size of the file
|
||||
char[] allChars = new char[(int)file.length()];
|
||||
|
||||
// Read the characters into the allChars array
|
||||
in.read(allChars, 0, (int)file.length());
|
||||
in.close();
|
||||
|
||||
// Convert to a string
|
||||
String allCharsString = new String(allChars);
|
||||
|
||||
return allCharsString;
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
} catch (IOException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static int findString(String fileString, String stringToFind) {
|
||||
return fileString.replace(NL, "\n").indexOf(stringToFind);
|
||||
checkOutput("overview-summary.html", true,
|
||||
"<h1 class=\"title\">Document Title</h1>");
|
||||
}
|
||||
}
|
||||
|
@ -26,150 +26,40 @@
|
||||
* @bug 4638136 7198273 8025633
|
||||
* @summary Add ability to skip over nav bar for accessibility
|
||||
* @author dkramer
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main AccessSkipNav
|
||||
*/
|
||||
|
||||
public class AccessSkipNav extends JavadocTester {
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
|
||||
/**
|
||||
* Runs javadoc and runs regression tests on the resulting HTML.
|
||||
* It reads each file, complete with newlines, into a string to easily
|
||||
* find strings that contain newlines.
|
||||
*/
|
||||
public class AccessSkipNav {
|
||||
|
||||
protected static final String NL = System.getProperty("line.separator");
|
||||
|
||||
private static final String BUGID = "4638136 - 7198273";
|
||||
private static final String BUGNAME = "AccessSkipNav";
|
||||
private static final String TMPDEST_DIR1 = "./docs1/";
|
||||
private static final String TMPDEST_DIR2 = "./docs2/";
|
||||
|
||||
// Subtest number. Needed because runResultsOnHTML is run twice,
|
||||
// and subtestNum should increment across subtest runs.
|
||||
public static int subtestNum = 0;
|
||||
public static int numSubtestsPassed = 0;
|
||||
|
||||
// Entry point
|
||||
public static void main(String[] args) {
|
||||
|
||||
// Directory that contains source files that javadoc runs on
|
||||
String srcdir = System.getProperty("test.src", ".");
|
||||
|
||||
// Test for all cases except the split index page
|
||||
runJavadoc(new String[] {"-d", TMPDEST_DIR1,
|
||||
"-sourcepath", srcdir,
|
||||
"p1", "p2"});
|
||||
runTestsOnHTML(testArray);
|
||||
|
||||
printSummary();
|
||||
public static void main(String... args) throws Exception {
|
||||
AccessSkipNav tester = new AccessSkipNav();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
/** Run javadoc */
|
||||
public static void runJavadoc(String[] javadocArgs) {
|
||||
if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
|
||||
throw new Error("Javadoc failed to execute");
|
||||
}
|
||||
}
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"p1", "p2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
/**
|
||||
* Assign value for [ stringToFind, filename ]
|
||||
* NOTE: The standard doclet uses the same separator "\n" for all OS's
|
||||
*/
|
||||
private static final String[][] testArray = {
|
||||
// Testing only for the presence of the <a href> and <a name>
|
||||
checkOutput("p1/C1.html", true,
|
||||
// Top navbar <a href>
|
||||
"<a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a>",
|
||||
// Top navbar <a name>
|
||||
"<a name=\"skip.navbar.top\">\n"
|
||||
+ "<!-- -->\n"
|
||||
+ "</a>",
|
||||
// Bottom navbar <a href>
|
||||
"<a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a>",
|
||||
// Bottom navbar <a name>
|
||||
"<a name=\"skip.navbar.bottom\">\n"
|
||||
+ "<!-- -->\n"
|
||||
+ "</a>");
|
||||
|
||||
// Testing only for the presence of the <a href> and <a name>
|
||||
|
||||
// Top navbar <a href>
|
||||
{ "<a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a>",
|
||||
TMPDEST_DIR1 + "p1/C1.html" },
|
||||
|
||||
// Top navbar <a name>
|
||||
{ "<a name=\"skip.navbar.top\">\n" +
|
||||
"<!-- -->\n" +
|
||||
"</a>",
|
||||
TMPDEST_DIR1 + "p1/C1.html" },
|
||||
|
||||
// Bottom navbar <a href>
|
||||
{ "<a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a>",
|
||||
TMPDEST_DIR1 + "p1/C1.html" },
|
||||
|
||||
// Bottom navbar <a name>
|
||||
{ "<a name=\"skip.navbar.bottom\">\n" +
|
||||
"<!-- -->\n" +
|
||||
"</a>",
|
||||
TMPDEST_DIR1 + "p1/C1.html" }
|
||||
};
|
||||
|
||||
public static void runTestsOnHTML(String[][] testArray) {
|
||||
|
||||
for (int i = 0; i < testArray.length; i++) {
|
||||
|
||||
subtestNum += 1;
|
||||
|
||||
// Read contents of file into a string
|
||||
String fileString = readFileToString(testArray[i][1]);
|
||||
|
||||
// Get string to find
|
||||
String stringToFind = testArray[i][0];
|
||||
|
||||
// Find string in file's contents
|
||||
if (findString(fileString, stringToFind) == -1) {
|
||||
System.out.println("\nSub-test " + (subtestNum)
|
||||
+ " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
|
||||
+ "when searching for:\n"
|
||||
+ stringToFind);
|
||||
} else {
|
||||
numSubtestsPassed += 1;
|
||||
System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void printSummary() {
|
||||
if ( numSubtestsPassed == subtestNum ) {
|
||||
System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
|
||||
} else {
|
||||
throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
|
||||
+ " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Read the file into a String
|
||||
public static String readFileToString(String filename) {
|
||||
try {
|
||||
File file = new File(filename);
|
||||
if ( !file.exists() ) {
|
||||
System.out.println("\nFILE DOES NOT EXIST: " + filename);
|
||||
}
|
||||
BufferedReader in = new BufferedReader(new FileReader(file));
|
||||
|
||||
// Create an array of characters the size of the file
|
||||
char[] allChars = new char[(int)file.length()];
|
||||
|
||||
// Read the characters into the allChars array
|
||||
in.read(allChars, 0, (int)file.length());
|
||||
in.close();
|
||||
|
||||
// Convert to a string
|
||||
String allCharsString = new String(allChars);
|
||||
|
||||
return allCharsString;
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
} catch (IOException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static int findString(String fileString, String stringToFind) {
|
||||
return fileString.replace(NL, "\n").indexOf(stringToFind);
|
||||
}
|
||||
}
|
||||
|
@ -26,45 +26,35 @@
|
||||
* @bug 4637604 4775148
|
||||
* @summary Test the tables for summary attribute
|
||||
* @author dkramer
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build AccessSummary
|
||||
* @run main AccessSummary
|
||||
*/
|
||||
|
||||
public class AccessSummary extends JavadocTester {
|
||||
|
||||
/**
|
||||
* Assign value for [ fileToSearch, stringToFind ]
|
||||
*/
|
||||
private static final String[][] TESTARRAY1 = {
|
||||
|
||||
// Test that the summary attribute appears
|
||||
{ "overview-summary.html",
|
||||
"summary=\"Packages table, listing packages, and an explanation\"" },
|
||||
|
||||
// Test that the summary attribute appears
|
||||
{ "p1/C1.html",
|
||||
"summary=\"Constructor Summary table, listing constructors, and an explanation\"" },
|
||||
|
||||
// Test that the summary attribute appears
|
||||
{ "constant-values.html",
|
||||
"summary=\"Constant Field Values table, listing constant fields, and values\"" }
|
||||
};
|
||||
|
||||
// First test with -header only
|
||||
private static final String[] JAVADOC_ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR,
|
||||
"-sourcepath", SRC_DIR,
|
||||
"p1", "p2"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
* @throws Exception if the test fails
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
JavadocTester tester = new AccessSummary();
|
||||
tester.run(JAVADOC_ARGS, TESTARRAY1, new String[][] {});
|
||||
tester.printSummary(); // Necessary for string search
|
||||
public static void main(String... args) throws Exception {
|
||||
AccessSummary tester = new AccessSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testAccessSummary() {
|
||||
javadoc("-d", "out", "-sourcepath", testSrc, "p1", "p2");
|
||||
checkExit(Exit.OK);
|
||||
checkOutput("overview-summary.html", true,
|
||||
"summary=\"Packages table, listing packages, and an explanation\"");
|
||||
|
||||
// Test that the summary attribute appears
|
||||
checkOutput("p1/C1.html", true,
|
||||
"summary=\"Constructor Summary table, listing constructors, and an explanation\"");
|
||||
|
||||
// Test that the summary attribute appears
|
||||
checkOutput("constant-values.html", true,
|
||||
"summary=\"Constant Field Values table, listing constant fields, and values\"");
|
||||
}
|
||||
}
|
||||
|
@ -26,143 +26,37 @@
|
||||
* @bug 4651598 8026567
|
||||
* @summary Javadoc wrongly inserts </DD> tags when using multiple @author tags
|
||||
* @author dkramer
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main AuthorDD
|
||||
*/
|
||||
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
|
||||
/**
|
||||
* Runs javadoc and runs regression tests on the resulting HTML.
|
||||
* It reads each file, complete with newlines, into a string to easily
|
||||
* find strings that contain newlines.
|
||||
*/
|
||||
public class AuthorDD
|
||||
{
|
||||
public class AuthorDD extends JavadocTester {
|
||||
|
||||
protected static final String NL = System.getProperty("line.separator");
|
||||
|
||||
private static final String BUGID = "4651598";
|
||||
private static final String BUGNAME = "AuthorDD";
|
||||
|
||||
// Subtest number. Needed because runResultsOnHTML is run twice, and subtestNum
|
||||
// should increment across subtest runs.
|
||||
public static int subtestNum = 0;
|
||||
public static int numSubtestsPassed = 0;
|
||||
|
||||
// Entry point
|
||||
public static void main(String[] args) {
|
||||
|
||||
// Directory that contains source files that javadoc runs on
|
||||
String srcdir = System.getProperty("test.src", ".");
|
||||
public static void main(String... args) throws Exception {
|
||||
AuthorDD tester = new AuthorDD();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
// Test for all cases except the split index page
|
||||
runJavadoc(new String[] {"-d", BUGID,
|
||||
"-author",
|
||||
"-version",
|
||||
"-sourcepath", srcdir,
|
||||
"p1"});
|
||||
runTestsOnHTML(testArray);
|
||||
javadoc("-d", "out",
|
||||
"-author",
|
||||
"-version",
|
||||
"-sourcepath", testSrc,
|
||||
"p1");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
printSummary();
|
||||
}
|
||||
|
||||
/** Run javadoc */
|
||||
public static void runJavadoc(String[] javadocArgs) {
|
||||
if (com.sun.tools.javadoc.Main.execute(AuthorDD.class.getClassLoader(),
|
||||
javadocArgs) != 0) {
|
||||
throw new Error("Javadoc failed to execute");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign value for [ stringToFind, filename ]
|
||||
* NOTE: The standard doclet uses the same separator "\n" for all OS's
|
||||
*/
|
||||
private static final String[][] testArray = {
|
||||
|
||||
// Test single @since tag:
|
||||
|
||||
{ "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
|
||||
"<dd>JDK 1.0</dd>",
|
||||
BUGID + "/p1/C1.html" },
|
||||
|
||||
// Test multiple @author tags:
|
||||
|
||||
{ "<dt><span class=\"simpleTagLabel\">Author:</span></dt>\n" +
|
||||
"<dd>Doug Kramer, Jamie, Neal</dd>",
|
||||
BUGID + "/p1/C1.html" },
|
||||
|
||||
};
|
||||
|
||||
public static void runTestsOnHTML(String[][] testArray) {
|
||||
|
||||
for (int i = 0; i < testArray.length; i++) {
|
||||
|
||||
subtestNum += 1;
|
||||
|
||||
// Read contents of file into a string
|
||||
String fileString = readFileToString(testArray[i][1]);
|
||||
|
||||
// Get string to find
|
||||
String stringToFind = testArray[i][0];
|
||||
|
||||
// Find string in file's contents
|
||||
if (findString(fileString, stringToFind) == -1) {
|
||||
System.out.println("\nSub-test " + (subtestNum)
|
||||
+ " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
|
||||
+ "when searching for:\n"
|
||||
+ stringToFind);
|
||||
} else {
|
||||
numSubtestsPassed += 1;
|
||||
System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void printSummary() {
|
||||
if ( numSubtestsPassed == subtestNum ) {
|
||||
System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
|
||||
} else {
|
||||
throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
|
||||
+ " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Read the file into a String
|
||||
public static String readFileToString(String filename) {
|
||||
try {
|
||||
File file = new File(filename);
|
||||
if ( !file.exists() ) {
|
||||
System.out.println("\nFILE DOES NOT EXIST: " + filename);
|
||||
}
|
||||
BufferedReader in = new BufferedReader(new FileReader(file));
|
||||
|
||||
// Create an array of characters the size of the file
|
||||
char[] allChars = new char[(int)file.length()];
|
||||
|
||||
// Read the characters into the allChars array
|
||||
in.read(allChars, 0, (int)file.length());
|
||||
in.close();
|
||||
|
||||
// Convert to a string
|
||||
String allCharsString = new String(allChars);
|
||||
|
||||
return allCharsString;
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
} catch (IOException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static int findString(String fileString, String stringToFind) {
|
||||
return fileString.replace(NL, "\n").indexOf(stringToFind);
|
||||
checkOutput("p1/C1.html", true,
|
||||
// Test single @since tag:
|
||||
"<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
|
||||
+ "<dd>JDK 1.0</dd>",
|
||||
// Test multiple @author tags:
|
||||
"<dt><span class=\"simpleTagLabel\">Author:</span></dt>\n"
|
||||
+ "<dd>Doug Kramer, Jamie, Neal</dd>");
|
||||
}
|
||||
}
|
||||
|
@ -26,13 +26,11 @@
|
||||
* @bug 4524350 4662945 4633447
|
||||
* @summary stddoclet: {@docRoot} inserts an extra trailing "/"
|
||||
* @author dkramer
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main DocRootSlash
|
||||
*/
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
import java.nio.*;
|
||||
import java.util.regex.*;
|
||||
|
||||
/**
|
||||
@ -40,149 +38,55 @@ import java.util.regex.*;
|
||||
* It reads each file, complete with newlines, into a string to easily
|
||||
* find strings that contain newlines.
|
||||
*/
|
||||
public class DocRootSlash
|
||||
{
|
||||
private static final String BUGID = "4524350, 4662945, or 4633447";
|
||||
private static final String BUGNAME = "DocRootSlash";
|
||||
private static final String TMPDIR_STRING1 = "./docs1/";
|
||||
public class DocRootSlash extends JavadocTester {
|
||||
|
||||
// Test number. Needed because runResultsOnHTMLFile is run twice, and subtestNum
|
||||
// should increment across test runs.
|
||||
public static int subtestNum = 0;
|
||||
public static int numOfSubtestsPassed = 0;
|
||||
|
||||
// Entry point
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
DocRootSlash tester = new DocRootSlash();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
// Directory that contains source files that javadoc runs on
|
||||
String srcdir = System.getProperty("test.src", ".");
|
||||
|
||||
runJavadoc(new String[] {"-d", TMPDIR_STRING1,
|
||||
"-Xdoclint:none",
|
||||
"-overview", (srcdir + "/overview.html"),
|
||||
"-header", "<A HREF=\"{@docroot}/package-list\">{@docroot}</A> <A HREF=\"{@docRoot}/help-doc\">{@docRoot}</A>",
|
||||
"-sourcepath", srcdir,
|
||||
"p1", "p2"});
|
||||
runTestsOnHTMLFiles(filenameArray);
|
||||
javadoc("-d", "out",
|
||||
"-Xdoclint:none",
|
||||
"-overview", (srcdir + "/overview.html"),
|
||||
"-header", "<A HREF=\"{@docroot}/package-list\">{@docroot}</A> <A HREF=\"{@docRoot}/help-doc\">{@docRoot}</A>",
|
||||
"-sourcepath", srcdir,
|
||||
"p1", "p2");
|
||||
|
||||
printSummary();
|
||||
}
|
||||
|
||||
/** Run javadoc */
|
||||
public static void runJavadoc(String[] javadocArgs) {
|
||||
if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
|
||||
throw new Error("Javadoc failed to execute");
|
||||
}
|
||||
}
|
||||
|
||||
/** The array of filenames to test */
|
||||
private static final String[] filenameArray = {
|
||||
TMPDIR_STRING1 + "p1/C1.html" ,
|
||||
TMPDIR_STRING1 + "p1/package-summary.html",
|
||||
TMPDIR_STRING1 + "overview-summary.html"
|
||||
};
|
||||
|
||||
public static void runTestsOnHTMLFiles(String[] filenameArray) {
|
||||
String fileString;
|
||||
|
||||
// Bugs 4524350 4662945
|
||||
for (int i = 0; i < filenameArray.length; i++ ) {
|
||||
|
||||
// Read contents of file (whose filename is in filenames) into a string
|
||||
fileString = readFileToString(filenameArray[i]);
|
||||
|
||||
System.out.println("\nSub-tests for file: " + filenameArray[i]
|
||||
+ " --------------");
|
||||
|
||||
// Loop over all tests in a single file
|
||||
for ( int j = 0; j < 11; j++ ) {
|
||||
subtestNum += 1;
|
||||
|
||||
// Compare actual to expected string for a single subtest
|
||||
compareActualToExpected(fileString);
|
||||
}
|
||||
}
|
||||
checkFiles(
|
||||
"p1/C1.html" ,
|
||||
"p1/package-summary.html",
|
||||
"overview-summary.html");
|
||||
|
||||
// Bug 4633447: Special test for overview-frame.html
|
||||
// Find two strings in file "overview-frame.html"
|
||||
String filename = TMPDIR_STRING1 + "overview-frame.html";
|
||||
fileString = readFileToString(filename);
|
||||
|
||||
// Find first string <A HREF="./package-list"> in overview-frame.html
|
||||
subtestNum += 1;
|
||||
String stringToFind = "<A HREF=\"./package-list\">";
|
||||
String result;
|
||||
if ( fileString.indexOf(stringToFind) == -1 ) {
|
||||
result = "FAILED";
|
||||
} else {
|
||||
result = "succeeded";
|
||||
numOfSubtestsPassed += 1;
|
||||
}
|
||||
System.out.println("\nSub-test " + (subtestNum)
|
||||
+ " for bug " + BUGID + " (" + BUGNAME + ") " + result + "\n"
|
||||
+ "when searching for:\n"
|
||||
+ stringToFind + "\n"
|
||||
+ "in file " + filename);
|
||||
|
||||
// Find second string <A HREF="./help-doc"> in overview-frame.html
|
||||
subtestNum += 1;
|
||||
stringToFind = "<A HREF=\"./help-doc\">";
|
||||
if ( fileString.indexOf(stringToFind) == -1 ) {
|
||||
result = "FAILED";
|
||||
} else {
|
||||
result = "succeeded";
|
||||
numOfSubtestsPassed += 1;
|
||||
}
|
||||
System.out.println("\nSub-test " + (subtestNum)
|
||||
+ " for bug " + BUGID + " (" + BUGNAME + ") " + result + "\n"
|
||||
+ "when searching for:\n"
|
||||
+ stringToFind + "\n"
|
||||
+ "in file " + filename);
|
||||
checkOutput("overview-frame.html", true,
|
||||
"<A HREF=\"./package-list\">",
|
||||
"<A HREF=\"./help-doc\">");
|
||||
}
|
||||
|
||||
public static void printSummary() {
|
||||
System.out.println("");
|
||||
if ( numOfSubtestsPassed == subtestNum ) {
|
||||
System.out.println("\nAll " + numOfSubtestsPassed + " subtests passed");
|
||||
} else {
|
||||
throw new Error("\n" + (subtestNum - numOfSubtestsPassed) + " of " + (subtestNum)
|
||||
+ " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
}
|
||||
}
|
||||
void checkFiles(String... filenameArray) {
|
||||
int count = 0;
|
||||
|
||||
// Read the contents of the file into a String
|
||||
public static String readFileToString(String filename) {
|
||||
try {
|
||||
File file = new File(filename);
|
||||
if ( !file.exists() ) {
|
||||
System.out.println("\nFILE DOES NOT EXIST: " + filename);
|
||||
for (String f : filenameArray) {
|
||||
// Read contents of file into a string
|
||||
String fileString = readFile(f);
|
||||
System.out.println("\nSub-tests for file: " + f + " --------------");
|
||||
// Loop over all tests in a single file
|
||||
for ( int j = 0; j < 11; j++ ) {
|
||||
|
||||
// Compare actual to expected string for a single subtest
|
||||
compareActualToExpected(++count, fileString);
|
||||
}
|
||||
|
||||
BufferedReader in = new BufferedReader(new FileReader(file));
|
||||
|
||||
// Create an array of characters the size of the file
|
||||
char[] allChars = new char[(int)file.length()];
|
||||
|
||||
// Read the characters into the allChars array
|
||||
in.read(allChars, 0, (int)file.length());
|
||||
in.close();
|
||||
|
||||
// Convert to a string
|
||||
String allCharsString = new String(allChars);
|
||||
|
||||
return allCharsString;
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
} catch (IOException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Regular expression pattern matching code adapted from Eric's
|
||||
* /java/pubs/dev/linkfix/src/LinkFix.java
|
||||
* Regular expression pattern matching code
|
||||
*
|
||||
* Prefix Pattern:
|
||||
* flag (?i) (case insensitive, so "a href" == "A HREF" and all combinations)
|
||||
@ -197,34 +101,33 @@ public class DocRootSlash
|
||||
* group4 (.*?) (label - zero or more characters)
|
||||
* group5 (</a>) (end tag)
|
||||
*/
|
||||
static String prefix = "(?i)(<a\\s+href="; // <a href= (start group1)
|
||||
static String ref1 = "\")([^\"]*)(\".*?>)"; // doublequotes (end group1, group2, group3)
|
||||
static String ref2 = ")(\\S+?)([^<>]*>)"; // no quotes (end group1, group2, group3)
|
||||
static String label = "(.*?)"; // text label (group4)
|
||||
static String end = "(</a>)"; // </a> (group5)
|
||||
private static final String prefix = "(?i)(<a\\s+href="; // <a href= (start group1)
|
||||
private static final String ref1 = "\")([^\"]*)(\".*?>)"; // doublequotes (end group1, group2, group3)
|
||||
private static final String ref2 = ")(\\S+?)([^<>]*>)"; // no quotes (end group1, group2, group3)
|
||||
private static final String label = "(.*?)"; // text label (group4)
|
||||
private static final String end = "(</a>)"; // </a> (group5)
|
||||
|
||||
/**
|
||||
* Compares the actual string to the expected string in the specified string
|
||||
* str String to search through
|
||||
* @param str String to search through
|
||||
*/
|
||||
static void compareActualToExpected(String str) {
|
||||
// Pattern must be compiled each run because subtestNum is incremented
|
||||
void compareActualToExpected(int count, String str) {
|
||||
checking("comparison for " + str);
|
||||
|
||||
// Pattern must be compiled each run because numTestsRun is incremented
|
||||
Pattern actualLinkPattern1 =
|
||||
Pattern.compile("Sub-test " + subtestNum + " Actual: " + prefix + ref1, Pattern.DOTALL);
|
||||
Pattern.compile("Sub-test " + count + " Actual: " + prefix + ref1, Pattern.DOTALL);
|
||||
Pattern expectLinkPattern1 =
|
||||
Pattern.compile("Sub-test " + subtestNum + " Expect: " + prefix + ref1, Pattern.DOTALL);
|
||||
Pattern.compile("Sub-test " + count + " Expect: " + prefix + ref1, Pattern.DOTALL);
|
||||
// Pattern linkPattern2 = Pattern.compile(prefix + ref2 + label + end, Pattern.DOTALL);
|
||||
|
||||
CharBuffer charBuffer = CharBuffer.wrap(str);
|
||||
Matcher actualLinkMatcher1 = actualLinkPattern1.matcher(charBuffer);
|
||||
Matcher expectLinkMatcher1 = expectLinkPattern1.matcher(charBuffer);
|
||||
String result;
|
||||
if ( expectLinkMatcher1.find() && actualLinkMatcher1.find() ) {
|
||||
Matcher actualLinkMatcher1 = actualLinkPattern1.matcher(str);
|
||||
Matcher expectLinkMatcher1 = expectLinkPattern1.matcher(str);
|
||||
if (expectLinkMatcher1.find() && actualLinkMatcher1.find()) {
|
||||
String expectRef = expectLinkMatcher1.group(2);
|
||||
String actualRef = actualLinkMatcher1.group(2);
|
||||
if ( actualRef.equals(expectRef) ) {
|
||||
result = "succeeded";
|
||||
numOfSubtestsPassed += 1;
|
||||
if (actualRef.equals(expectRef)) {
|
||||
passed(expectRef);
|
||||
// System.out.println("pattern: " + actualLinkPattern1.pattern());
|
||||
// System.out.println("actualRef: " + actualRef);
|
||||
// System.out.println("group0: " + actualLinkMatcher1.group());
|
||||
@ -233,15 +136,13 @@ public class DocRootSlash
|
||||
// System.out.println("group3: " + actualLinkMatcher1.group(3));
|
||||
// System.exit(0);
|
||||
} else {
|
||||
result = "FAILED";
|
||||
failed("\n"
|
||||
+ "Actual: \"" + actualRef + "\"\n"
|
||||
+ "Expect: \"" + expectRef + "\"");
|
||||
}
|
||||
System.out.println("\nSub-test " + (subtestNum)
|
||||
+ " for bug " + BUGID + " (" + BUGNAME + ") " + result + "\n"
|
||||
+ "Actual: \"" + actualRef + "\"" + "\n"
|
||||
+ "Expect: \"" + expectRef + "\"");
|
||||
} else {
|
||||
System.out.println("Didn't find <A HREF> that fits the pattern: "
|
||||
+ expectLinkPattern1.pattern() );
|
||||
failed("Didn't find <A HREF> that fits the pattern: "
|
||||
+ expectLinkPattern1.pattern());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 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
|
||||
@ -26,11 +26,11 @@
|
||||
* @bug 8008768
|
||||
* @summary Using {@inheritDoc} in simple tag defined via -tag fails
|
||||
* @author Mike Duigou
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main DocTest
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
|
||||
/**
|
||||
* DocTest documentation.
|
||||
*
|
||||
@ -38,41 +38,27 @@ import java.io.*;
|
||||
* @implSpec DocTest implementation spec.
|
||||
* @implNote DocTest implementation note.
|
||||
*/
|
||||
public class DocTest {
|
||||
public class DocTest extends JavadocTester {
|
||||
public static void main(String... args) throws Exception {
|
||||
String[] javadoc_args = {
|
||||
"-verbose",
|
||||
"-d", "DocTest",
|
||||
"-tag", "apiNote:optcm:<em>API Note</em>",
|
||||
"-tag", "implSpec:optcm:<em>Implementation Requirements</em>:",
|
||||
"-tag", "implNote:optcm:<em>Implementation Note</em>:",
|
||||
"-package",
|
||||
new File(System.getProperty("test.src"), "DocTest.java").getPath()
|
||||
};
|
||||
DocTest tester = new DocTest();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-verbose",
|
||||
"-d", "DocTest",
|
||||
"-tag", "apiNote:optcm:<em>API Note</em>",
|
||||
"-tag", "implSpec:optcm:<em>Implementation Requirements</em>:",
|
||||
"-tag", "implNote:optcm:<em>Implementation Note</em>:",
|
||||
"-package",
|
||||
testSrc("DocTest.java")
|
||||
);
|
||||
checkExit(Exit.OK);
|
||||
|
||||
// javadoc does not report an exit code for an internal exception (!)
|
||||
// so monitor stderr for stack dumps.
|
||||
PrintStream prevErr = System.err;
|
||||
ByteArrayOutputStream err_baos = new ByteArrayOutputStream();
|
||||
PrintStream err_ps = new PrintStream(err_baos);
|
||||
System.setErr(err_ps);
|
||||
|
||||
int rc;
|
||||
try {
|
||||
rc = com.sun.tools.javadoc.Main.execute(javadoc_args);
|
||||
} finally {
|
||||
err_ps.close();
|
||||
System.setErr(prevErr);
|
||||
}
|
||||
|
||||
String err = err_baos.toString();
|
||||
System.err.println(err);
|
||||
|
||||
if (rc != 0)
|
||||
throw new Exception("javadoc exited with rc=" + rc);
|
||||
|
||||
if (err.contains("at com.sun."))
|
||||
throw new Exception("javadoc output contains stack trace");
|
||||
checkOutput(Output.STDERR, false, "at com.sun");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -27,172 +27,49 @@
|
||||
* @summary Javascript IE load error when linked by -linkoffline
|
||||
* Window title shouldn't change when loading left frames (javascript)
|
||||
* @author dkramer
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main JavascriptWinTitle
|
||||
*/
|
||||
|
||||
public class JavascriptWinTitle extends JavadocTester {
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
|
||||
/**
|
||||
* Runs javadoc and runs regression tests on the resulting HTML.
|
||||
* It reads each file, complete with newlines, into a string to easily
|
||||
* find strings that contain newlines.
|
||||
*/
|
||||
public class JavascriptWinTitle {
|
||||
|
||||
protected static final String NL = System.getProperty("line.separator");
|
||||
|
||||
private static final String BUGID = "4645058";
|
||||
private static final String BUGNAME = "JavascriptWinTitle";
|
||||
private static final String TMPDEST_DIR1 = "./docs1/";
|
||||
private static final String TMPDEST_DIR2 = "./docs2/";
|
||||
|
||||
// Subtest number. Needed because runResultsOnHTML is run twice,
|
||||
// and subtestNum should increment across subtest runs.
|
||||
public static int subtestNum = 0;
|
||||
public static int numSubtestsPassed = 0;
|
||||
|
||||
// Entry point
|
||||
public static void main(String[] args) {
|
||||
|
||||
// Directory that contains source files that javadoc runs on
|
||||
String srcdir = System.getProperty("test.src", ".");
|
||||
|
||||
// Test for all cases except the split index page
|
||||
runJavadoc(new String[] {"-d", TMPDEST_DIR1,
|
||||
"-doctitle", "Document Title",
|
||||
"-windowtitle", "Window Title",
|
||||
"-overview", (srcdir + "/overview.html"),
|
||||
"-linkoffline",
|
||||
"http://java.sun.com/j2se/1.4/docs/api", srcdir,
|
||||
"-sourcepath", srcdir,
|
||||
"p1", "p2"});
|
||||
runTestsOnHTML(testArray);
|
||||
|
||||
printSummary();
|
||||
public static void main(String... args) throws Exception {
|
||||
JavascriptWinTitle tester = new JavascriptWinTitle();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
/** Run javadoc */
|
||||
public static void runJavadoc(String[] javadocArgs) {
|
||||
if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
|
||||
throw new Error("Javadoc failed to execute");
|
||||
}
|
||||
}
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-doctitle", "Document Title",
|
||||
"-windowtitle", "Window Title",
|
||||
"-overview", testSrc("overview.html"),
|
||||
"-linkoffline", "http://java.sun.com/j2se/1.4/docs/api", testSrc,
|
||||
"-sourcepath", testSrc,
|
||||
"p1", "p2");
|
||||
checkExit(Exit.OK);
|
||||
checkOutput("overview-summary.html", true,
|
||||
"<script type=\"text/javascript\">",
|
||||
"<body>");
|
||||
|
||||
/**
|
||||
* Assign value for [ stringToFind, filename ]
|
||||
* NOTE: The standard doclet uses the same separator "\n" for all OS's
|
||||
*/
|
||||
private static final String[][] testArray = {
|
||||
// Test that "onload" is not present in BODY tag:
|
||||
checkOutput("p1/package-summary.html", true, "<body>");
|
||||
checkOutput("overview-frame.html", true, "<body>");
|
||||
checkOutput("allclasses-frame.html", true, "<body>");
|
||||
checkOutput("p1/package-frame.html", true, "<body>");
|
||||
|
||||
// Test the javascript "type" attribute is present:
|
||||
{ "<script type=\"text/javascript\">",
|
||||
TMPDEST_DIR1 + "overview-summary.html" },
|
||||
|
||||
// Test onload is absent:
|
||||
{ "<body>",
|
||||
TMPDEST_DIR1 + "overview-summary.html" },
|
||||
|
||||
// Test onload is present:
|
||||
{ "<body>",
|
||||
TMPDEST_DIR1 + "/p1/package-summary.html" },
|
||||
|
||||
// Test that "onload" is not present in BODY tag:
|
||||
{ "<body>",
|
||||
TMPDEST_DIR1 + "overview-frame.html" },
|
||||
|
||||
// Test that "onload" is not present in BODY tag:
|
||||
{ "<body>",
|
||||
TMPDEST_DIR1 + "allclasses-frame.html" },
|
||||
|
||||
// Test that "onload" is not present in BODY tag:
|
||||
{ "<body>",
|
||||
TMPDEST_DIR1 + "/p1/package-frame.html" },
|
||||
|
||||
// Test that win title javascript is followed by NOSCRIPT code.
|
||||
{"<script type=\"text/javascript\"><!--\n" +
|
||||
" try {\n" +
|
||||
" if (location.href.indexOf('is-external=true') == -1) {\n" +
|
||||
" parent.document.title=\"C (Window Title)\";\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" catch(err) {\n" +
|
||||
" }\n" +
|
||||
"//-->\n" +
|
||||
"</script>",
|
||||
TMPDEST_DIR1 + "/p1/C.html"
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
public static void runTestsOnHTML(String[][] testArray) {
|
||||
|
||||
for (int i = 0; i < testArray.length; i++) {
|
||||
|
||||
subtestNum += 1;
|
||||
|
||||
// Read contents of file into a string
|
||||
String fileString = readFileToString(testArray[i][1]);
|
||||
|
||||
// Get string to find
|
||||
String stringToFind = testArray[i][0];
|
||||
|
||||
// Find string in file's contents
|
||||
if (findString(fileString, stringToFind) == -1) {
|
||||
System.out.println("\nSub-test " + (subtestNum)
|
||||
+ " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
|
||||
+ "when searching for:\n"
|
||||
+ stringToFind);
|
||||
} else {
|
||||
numSubtestsPassed += 1;
|
||||
System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void printSummary() {
|
||||
if ( numSubtestsPassed == subtestNum ) {
|
||||
System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
|
||||
} else {
|
||||
throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
|
||||
+ " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Read the file into a String
|
||||
public static String readFileToString(String filename) {
|
||||
try {
|
||||
File file = new File(filename);
|
||||
if ( !file.exists() ) {
|
||||
System.out.println("\nFILE DOES NOT EXIST: " + filename);
|
||||
}
|
||||
BufferedReader in = new BufferedReader(new FileReader(file));
|
||||
|
||||
// Create an array of characters the size of the file
|
||||
char[] allChars = new char[(int)file.length()];
|
||||
|
||||
// Read the characters into the allChars array
|
||||
in.read(allChars, 0, (int)file.length());
|
||||
in.close();
|
||||
|
||||
// Convert to a string
|
||||
String allCharsString = new String(allChars);
|
||||
|
||||
return allCharsString;
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
} catch (IOException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static int findString(String fileString, String stringToFind) {
|
||||
return fileString.replace(NL, "\n").indexOf(stringToFind);
|
||||
// Test that win title javascript is followed by NOSCRIPT code.
|
||||
checkOutput("p1/C.html", true,
|
||||
"<script type=\"text/javascript\"><!--\n"
|
||||
+ " try {\n"
|
||||
+ " if (location.href.indexOf('is-external=true') == -1) {\n"
|
||||
+ " parent.document.title=\"C (Window Title)\";\n"
|
||||
+ " }\n"
|
||||
+ " }\n"
|
||||
+ " catch(err) {\n"
|
||||
+ " }\n"
|
||||
+ "//-->\n"
|
||||
+ "</script>");
|
||||
}
|
||||
}
|
||||
|
@ -21,114 +21,94 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 4034096 4764726 6235799
|
||||
* @summary Add support for HTML keywords via META tag for
|
||||
* class and member names to improve API search
|
||||
* @author dkramer
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build MetaTag
|
||||
* @run main MetaTag
|
||||
*/
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
public class MetaTag extends JavadocTester {
|
||||
|
||||
//Test information.
|
||||
private static final SimpleDateFormat m_dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR,
|
||||
"-sourcepath", SRC_DIR,
|
||||
"-keywords",
|
||||
"-doctitle", "Sample Packages",
|
||||
"p1", "p2"
|
||||
};
|
||||
|
||||
private static final String[] ARGS_NO_TIMESTAMP_NO_KEYWORDS = new String[] {
|
||||
"-d", OUTPUT_DIR + "-2",
|
||||
"-sourcepath", SRC_DIR,
|
||||
"-notimestamp",
|
||||
"-doctitle", "Sample Packages",
|
||||
"p1", "p2"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
|
||||
{ "p1/C1.html",
|
||||
"<meta name=\"keywords\" content=\"p1.C1 class\">" },
|
||||
|
||||
{ "p1/C1.html",
|
||||
"<meta name=\"keywords\" content=\"field1\">" },
|
||||
|
||||
{ "p1/C1.html",
|
||||
"<meta name=\"keywords\" content=\"field2\">" },
|
||||
|
||||
{ "p1/C1.html",
|
||||
"<meta name=\"keywords\" content=\"method1()\">" },
|
||||
|
||||
{ "p1/C1.html",
|
||||
"<meta name=\"keywords\" content=\"method2()\">" },
|
||||
|
||||
{ "p1/package-summary.html",
|
||||
"<meta name=\"keywords\" content=\"p1 package\">" },
|
||||
|
||||
{ "overview-summary.html",
|
||||
"<meta name=\"keywords\" content=\"Overview, Sample Packages\">" },
|
||||
|
||||
//NOTE: Hopefully, this regression test is not run at midnight. If the output
|
||||
//was generated yesterday and this test is run today, the test will fail.
|
||||
{ "overview-summary.html",
|
||||
"<meta name=\"date\" "
|
||||
+ "content=\"" + m_dateFormat.format(new Date()) + "\">"},
|
||||
};
|
||||
|
||||
private static final String[][] NEGATED_TEST2 = {
|
||||
//No keywords when -keywords is not used.
|
||||
{ "p1/C1.html",
|
||||
"<META NAME=\"keywords\" CONTENT=\"p1.C1 class\">" },
|
||||
|
||||
{ "p1/C1.html",
|
||||
"<META NAME=\"keywords\" CONTENT=\"field1\">" },
|
||||
|
||||
{ "p1/C1.html",
|
||||
"<META NAME=\"keywords\" CONTENT=\"field2\">" },
|
||||
|
||||
{ "p1/C1.html",
|
||||
"<META NAME=\"keywords\" CONTENT=\"method1()\">" },
|
||||
|
||||
{ "p1/C1.html",
|
||||
"<META NAME=\"keywords\" CONTENT=\"method2()\">" },
|
||||
|
||||
{ "p1/package-summary.html",
|
||||
"<META NAME=\"keywords\" CONTENT=\"p1 package\">" },
|
||||
|
||||
{ "overview-summary.html",
|
||||
"<META NAME=\"keywords\" CONTENT=\"Overview Summary, Sample Packages\">" },
|
||||
|
||||
//The date metatag should not show up when -notimestamp is used.
|
||||
|
||||
//NOTE: Hopefully, this regression test is not run at midnight. If the output
|
||||
//was generated yesterday and this test is run today, the test will fail.
|
||||
{ "overview-summary.html",
|
||||
"<META NAME=\"date\" "
|
||||
+ "CONTENT=\"" + m_dateFormat.format(new Date()) + "\">"},
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
* @param args the array of command line arguments
|
||||
* @throws Exception if the test fails
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
MetaTag tester = new MetaTag();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.run(ARGS_NO_TIMESTAMP_NO_KEYWORDS, NO_TEST, NEGATED_TEST2);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testStandard() {
|
||||
javadoc("-d", "out-1",
|
||||
"-sourcepath", testSrc,
|
||||
"-keywords",
|
||||
"-doctitle", "Sample Packages",
|
||||
"p1", "p2");
|
||||
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("p1/C1.html", true,
|
||||
"<meta name=\"keywords\" content=\"p1.C1 class\">",
|
||||
"<meta name=\"keywords\" content=\"field1\">",
|
||||
"<meta name=\"keywords\" content=\"field2\">",
|
||||
"<meta name=\"keywords\" content=\"method1()\">",
|
||||
"<meta name=\"keywords\" content=\"method2()\">");
|
||||
|
||||
checkOutput("p1/package-summary.html", true,
|
||||
"<meta name=\"keywords\" content=\"p1 package\">");
|
||||
|
||||
checkOutput("overview-summary.html", true,
|
||||
"<meta name=\"keywords\" content=\"Overview, Sample Packages\">");
|
||||
|
||||
// NOTE: Hopefully, this regression test is not run at midnight. If the output
|
||||
// was generated yesterday and this test is run today, the test will fail.
|
||||
checkOutput("overview-summary.html", true,
|
||||
"<meta name=\"date\" content=\"" + date() + "\">");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNoTimestamp() {
|
||||
javadoc("-d", "out-2",
|
||||
"-sourcepath", testSrc,
|
||||
"-notimestamp",
|
||||
"-doctitle", "Sample Packages",
|
||||
"p1", "p2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
// No keywords when -keywords is not used.
|
||||
checkOutput("p1/C1.html", false,
|
||||
"<META NAME=\"keywords\" CONTENT=\"p1.C1 class\">",
|
||||
"<META NAME=\"keywords\" CONTENT=\"field1\">",
|
||||
"<META NAME=\"keywords\" CONTENT=\"field2\">",
|
||||
"<META NAME=\"keywords\" CONTENT=\"method1()\">",
|
||||
"<META NAME=\"keywords\" CONTENT=\"method2()\">");
|
||||
|
||||
checkOutput("p1/package-summary.html", false,
|
||||
"<META NAME=\"keywords\" CONTENT=\"p1 package\">");
|
||||
|
||||
checkOutput("overview-summary.html", false,
|
||||
"<META NAME=\"keywords\" CONTENT=\"Overview Summary, Sample Packages\">");
|
||||
|
||||
// The date metatag should not show up when -notimestamp is used.
|
||||
// NOTE: Hopefully, this regression test is not run at midnight. If the output
|
||||
// was generated yesterday and this test is run today, the test will fail.
|
||||
checkOutput("overview-summary.html", false,
|
||||
"<META NAME=\"date\" CONTENT=\"" + date() + "\">");
|
||||
}
|
||||
|
||||
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||
|
||||
String date() {
|
||||
return dateFormat.format(new Date());
|
||||
}
|
||||
}
|
||||
|
@ -28,83 +28,62 @@
|
||||
* is present for three sets of options: (1) -header,
|
||||
* (2) -packagesheader, and (3) -header -packagesheader
|
||||
* @author dkramer
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build PackagesHeader
|
||||
* @run main PackagesHeader
|
||||
*/
|
||||
|
||||
public class PackagesHeader extends JavadocTester {
|
||||
|
||||
//Test information.
|
||||
private static final String OUTPUT_DIR1 = OUTPUT_DIR + "-1/";
|
||||
private static final String OUTPUT_DIR2 = OUTPUT_DIR + "-2/";
|
||||
private static final String OUTPUT_DIR3 = OUTPUT_DIR + "-3/";
|
||||
public static void main(String... args) throws Exception {
|
||||
JavadocTester tester = new PackagesHeader();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign value for [ fileToSearch, stringToFind ]
|
||||
*/
|
||||
private static final String[][] TESTARRAY1 = {
|
||||
@Test
|
||||
void testHeader() {
|
||||
// First test with -header only
|
||||
javadoc("-d", "out-header",
|
||||
"-header", "Main Frame Header",
|
||||
"-sourcepath", testSrc,
|
||||
"p1", "p2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
// Test that the -header shows up in the packages frame
|
||||
{ "overview-frame.html",
|
||||
"Main Frame Header" }
|
||||
};
|
||||
checkOutput("overview-frame.html", true,
|
||||
"Main Frame Header");
|
||||
}
|
||||
|
||||
private static final String[][] TESTARRAY2 = {
|
||||
@Test
|
||||
void testPackagesHeader() {
|
||||
// Second test with -packagesheader only
|
||||
javadoc("-d", "out-packages-header",
|
||||
"-packagesheader", "Packages Frame Header",
|
||||
"-sourcepath", testSrc,
|
||||
"p1", "p2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
// Test that the -packagesheader string shows
|
||||
// up in the packages frame
|
||||
checkOutput("overview-frame.html", true,
|
||||
"Packages Frame Header");
|
||||
}
|
||||
|
||||
{ "overview-frame.html",
|
||||
"Packages Frame Header" }
|
||||
};
|
||||
|
||||
private static final String[][] TESTARRAY3 = {
|
||||
@Test
|
||||
void testBothHeaders() {
|
||||
// Third test with both -packagesheader and -header
|
||||
javadoc("-d", "out-both",
|
||||
"-packagesheader", "Packages Frame Header",
|
||||
"-header", "Main Frame Header",
|
||||
"-sourcepath", testSrc,
|
||||
"p1", "p2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
// Test that the both headers show up and are different
|
||||
checkOutput("overview-frame.html", true,
|
||||
"Packages Frame Header");
|
||||
|
||||
{ "overview-frame.html",
|
||||
"Packages Frame Header" },
|
||||
|
||||
{ "overview-summary.html",
|
||||
"Main Frame Header" }
|
||||
};
|
||||
|
||||
// First test with -header only
|
||||
private static final String[] JAVADOC_ARGS1 = new String[] {
|
||||
"-d", OUTPUT_DIR1,
|
||||
"-header", "Main Frame Header",
|
||||
"-sourcepath", SRC_DIR,
|
||||
"p1", "p2"};
|
||||
|
||||
// Second test with -packagesheader only
|
||||
private static final String[] JAVADOC_ARGS2 = new String[] {
|
||||
"-d", OUTPUT_DIR2,
|
||||
"-packagesheader", "Packages Frame Header",
|
||||
"-sourcepath", SRC_DIR,
|
||||
"p1", "p2"};
|
||||
|
||||
// Third test with both -packagesheader and -header
|
||||
private static final String[] JAVADOC_ARGS3 = new String[] {
|
||||
"-d", OUTPUT_DIR3,
|
||||
"-packagesheader", "Packages Frame Header",
|
||||
"-header", "Main Frame Header",
|
||||
"-sourcepath", SRC_DIR,
|
||||
"p1", "p2"};
|
||||
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
JavadocTester tester = new PackagesHeader();
|
||||
|
||||
tester.run(JAVADOC_ARGS1, TESTARRAY1, NO_TEST);
|
||||
tester.run(JAVADOC_ARGS2, TESTARRAY2, NO_TEST);
|
||||
tester.run(JAVADOC_ARGS3, TESTARRAY3, NO_TEST);
|
||||
|
||||
tester.printSummary();
|
||||
checkOutput("overview-summary.html", true,
|
||||
"Main Frame Header");
|
||||
}
|
||||
}
|
||||
|
@ -25,24 +25,24 @@
|
||||
* @test
|
||||
* @bug 6735320
|
||||
* @summary javadoc throws exception if serialField value is missing
|
||||
* @library ../lib/
|
||||
* @build JavadocTester T6735320
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main T6735320
|
||||
*/
|
||||
|
||||
public class T6735320 extends JavadocTester {
|
||||
|
||||
private static final String[] ARGS = new String[]{
|
||||
"-d", OUTPUT_DIR + ".out",
|
||||
SRC_DIR + "/SerialFieldTest.java"
|
||||
};
|
||||
|
||||
public static void main(String... args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
T6735320 tester = new T6735320();
|
||||
if (tester.runJavadoc(ARGS) == 0) {
|
||||
throw new AssertionError("zero return code from javadoc");
|
||||
}
|
||||
if (tester.getErrorOutput().contains("StringIndexOutOfBoundsException")) {
|
||||
throw new AssertionError("javadoc threw StringIndexOutOfBoundsException");
|
||||
}
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
testSrc("SerialFieldTest.java"));
|
||||
checkExit(Exit.FAILED);
|
||||
checkOutput(Output.STDERR, false,
|
||||
"StringIndexOutOfBoundsException");
|
||||
}
|
||||
}
|
||||
|
@ -30,174 +30,52 @@
|
||||
* <NOFRAMES> not allowed outside <FRAMESET> element
|
||||
* HTML table tags inserted in wrong place in pakcage use page
|
||||
* @author dkramer
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main ValidHtml
|
||||
*/
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
public class ValidHtml extends JavadocTester {
|
||||
|
||||
/**
|
||||
* Runs javadoc and runs regression tests on the resulting HTML.
|
||||
* It reads each file, complete with newlines, into a string to easily
|
||||
* find strings that contain newlines.
|
||||
*/
|
||||
public class ValidHtml {
|
||||
|
||||
protected static final String NL = System.getProperty("line.separator");
|
||||
|
||||
private static final String BUGID = "4275630";
|
||||
private static final String BUGNAME = "ValidHtml";
|
||||
private static final String TMPDEST_DIR1 = "./docs1/";
|
||||
private static final String TMPDEST_DIR2 = "./docs2/";
|
||||
|
||||
// Subtest number. Needed because runResultsOnHTML is run twice,
|
||||
// and subtestNum should increment across subtest runs.
|
||||
public static int subtestNum = 0;
|
||||
public static int numSubtestsPassed = 0;
|
||||
|
||||
// Entry point
|
||||
public static void main(String[] args) {
|
||||
|
||||
// Directory that contains source files that javadoc runs on
|
||||
String srcdir = System.getProperty("test.src", ".");
|
||||
public static void main(String... args) throws Exception {
|
||||
ValidHtml tester = new ValidHtml();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
// Test for all cases except the split index page
|
||||
runJavadoc(new String[]{"-d", TMPDEST_DIR1,
|
||||
javadoc("-d", "out",
|
||||
"-doctitle", "Document Title",
|
||||
"-windowtitle", "Window Title",
|
||||
"-use",
|
||||
"-overview", (srcdir + "/overview.html"),
|
||||
"-sourcepath", srcdir,
|
||||
"p1", "p2"
|
||||
});
|
||||
runTestsOnHTML(testArray);
|
||||
"-overview", testSrc("overview.html"),
|
||||
"-sourcepath", testSrc,
|
||||
"p1", "p2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
printSummary();
|
||||
}
|
||||
// Test the proper DOCTYPE element are present:
|
||||
checkOutput("index.html", true, FRAMESET);
|
||||
checkOutput("overview-summary.html", true, LOOSE);
|
||||
checkOutput("p1/package-summary.html", true, LOOSE);
|
||||
checkOutput("p1/C.html", true, LOOSE);
|
||||
checkOutput("overview-frame.html", true, LOOSE);
|
||||
checkOutput("allclasses-frame.html", true, LOOSE);
|
||||
checkOutput("p1/package-frame.html", true, LOOSE);
|
||||
|
||||
/** Run javadoc */
|
||||
public static void runJavadoc(String[] javadocArgs) {
|
||||
if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
|
||||
throw new Error("Javadoc failed to execute");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign value for [ stringToFind, filename ]
|
||||
* NOTE: The standard doclet uses the same separator "\n" for all OS's
|
||||
*/
|
||||
private static final String[][] testArray = {
|
||||
// Test the proper DOCTYPE element is present:
|
||||
{
|
||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">",
|
||||
TMPDEST_DIR1 + "index.html"
|
||||
},
|
||||
// Test the proper DOCTYPE element is present:
|
||||
{
|
||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
|
||||
TMPDEST_DIR1 + "overview-summary.html"
|
||||
},
|
||||
// Test the proper DOCTYPE element is present:
|
||||
{
|
||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
|
||||
TMPDEST_DIR1 + "p1/package-summary.html"
|
||||
},
|
||||
// Test the proper DOCTYPE element is present:
|
||||
{
|
||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
|
||||
TMPDEST_DIR1 + "p1/C.html"
|
||||
},
|
||||
// Test the proper DOCTYPE element is present:
|
||||
{
|
||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
|
||||
TMPDEST_DIR1 + "overview-frame.html"
|
||||
},
|
||||
// Test the proper DOCTYPE element is present:
|
||||
{
|
||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
|
||||
TMPDEST_DIR1 + "allclasses-frame.html"
|
||||
},
|
||||
// Test the proper DOCTYPE element is present:
|
||||
{
|
||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
|
||||
TMPDEST_DIR1 + "p1/package-frame.html"
|
||||
},
|
||||
// Test that <NOFRAMES> is inside <FRAMESET> element:
|
||||
{
|
||||
"</noframes>\n" +
|
||||
"</frameset>",
|
||||
TMPDEST_DIR1 + "index.html"
|
||||
},
|
||||
checkOutput("index.html", true,
|
||||
"</noframes>\n"
|
||||
+ "</frameset>");
|
||||
|
||||
// Test the table elements are in the correct order:
|
||||
{
|
||||
"</td>\n" +
|
||||
"</tr>",
|
||||
TMPDEST_DIR1 + "/p1/package-use.html"
|
||||
}
|
||||
};
|
||||
|
||||
public static void runTestsOnHTML(String[][] testArray) {
|
||||
|
||||
for (int i = 0; i < testArray.length; i++) {
|
||||
|
||||
subtestNum += 1;
|
||||
|
||||
// Read contents of file into a string
|
||||
String fileString = readFileToString(testArray[i][1]);
|
||||
|
||||
// Get string to find
|
||||
String stringToFind = testArray[i][0];
|
||||
|
||||
// Find string in file's contents
|
||||
if (findString(fileString, stringToFind) == -1) {
|
||||
System.out.println("\nSub-test " + (subtestNum) + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n" + "when searching for:\n" + stringToFind);
|
||||
} else {
|
||||
numSubtestsPassed += 1;
|
||||
System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
|
||||
}
|
||||
}
|
||||
checkOutput("p1/package-use.html", true,
|
||||
"</td>\n"
|
||||
+ "</tr>");
|
||||
}
|
||||
|
||||
public static void printSummary() {
|
||||
if (numSubtestsPassed == subtestNum) {
|
||||
System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
|
||||
} else {
|
||||
throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum) + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Read the file into a String
|
||||
public static String readFileToString(String filename) {
|
||||
try {
|
||||
File file = new File(filename);
|
||||
if (!file.exists()) {
|
||||
System.out.println("\nFILE DOES NOT EXIST: " + filename);
|
||||
}
|
||||
BufferedReader in = new BufferedReader(new FileReader(file));
|
||||
|
||||
// Create an array of characters the size of the file
|
||||
char[] allChars = new char[(int) file.length()];
|
||||
|
||||
// Read the characters into the allChars array
|
||||
in.read(allChars, 0, (int) file.length());
|
||||
in.close();
|
||||
|
||||
// Convert to a string
|
||||
String allCharsString = new String(allChars);
|
||||
|
||||
return allCharsString;
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
} catch (IOException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static int findString(String fileString, String stringToFind) {
|
||||
return fileString.replace(NL, "\n").indexOf(stringToFind);
|
||||
}
|
||||
private static final String FRAMESET =
|
||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">";
|
||||
private static final String LOOSE =
|
||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">";
|
||||
}
|
||||
|
@ -26,131 +26,31 @@
|
||||
* @bug 4720849
|
||||
* @summary com.sun.tools.doclets.standard.Standard contains hard-coded version number
|
||||
* @author dkramer
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main VersionNumber
|
||||
*/
|
||||
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
|
||||
/**
|
||||
* Runs javadoc and runs regression tests on the resulting HTML.
|
||||
* It reads each file, complete with newlines, into a string to easily
|
||||
* find strings that contain newlines.
|
||||
*/
|
||||
public class VersionNumber {
|
||||
public class VersionNumber extends JavadocTester {
|
||||
|
||||
private static final String BUGID = "4720849";
|
||||
private static final String BUGNAME = "VersionNumber";
|
||||
private static final String TMPDEST_DIR1 = "./docs1/";
|
||||
private static final String TMPDEST_DIR2 = "./docs2/";
|
||||
|
||||
// Subtest number. Needed because runResultsOnHTML is run twice,
|
||||
// and subtestNum should increment across subtest runs.
|
||||
public static int subtestNum = 0;
|
||||
public static int numSubtestsPassed = 0;
|
||||
|
||||
// Entry point
|
||||
public static void main(String[] args) {
|
||||
|
||||
// Directory that contains source files that javadoc runs on
|
||||
String srcdir = System.getProperty("test.src", ".");
|
||||
|
||||
// Test for all cases except the split index page
|
||||
runJavadoc(new String[] {"-d", TMPDEST_DIR1,
|
||||
"p1"});
|
||||
runTestsOnHTML(testArray);
|
||||
|
||||
printSummary();
|
||||
public static void main(String... args) throws Exception {
|
||||
VersionNumber tester = new VersionNumber();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
/** Run javadoc */
|
||||
public static void runJavadoc(String[] javadocArgs) {
|
||||
if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
|
||||
throw new Error("Javadoc failed to execute");
|
||||
}
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"p1");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
// Test the proper DOCTYPE element is present:
|
||||
checkOutput("p1/C.html", true,
|
||||
"<!-- Generated by javadoc (");
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign value for [ stringToFind, filename ]
|
||||
* NOTE: The standard doclet uses the same separator "\n" for all OS's
|
||||
*/
|
||||
private static final String[][] testArray = {
|
||||
|
||||
// Test the proper DOCTYPE element is present:
|
||||
{
|
||||
"<!-- Generated by javadoc (",
|
||||
TMPDEST_DIR1 + "p1/C.html" },
|
||||
|
||||
};
|
||||
|
||||
public static void runTestsOnHTML(String[][] testArray) {
|
||||
|
||||
for (int i = 0; i < testArray.length; i++) {
|
||||
|
||||
subtestNum += 1;
|
||||
|
||||
// Read contents of file into a string
|
||||
String fileString = readFileToString(testArray[i][1]);
|
||||
|
||||
// Get string to find
|
||||
String stringToFind = testArray[i][0];
|
||||
|
||||
// Find string in file's contents
|
||||
if (findString(fileString, stringToFind) == -1) {
|
||||
System.out.println("\nSub-test " + (subtestNum)
|
||||
+ " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
|
||||
+ "when searching for:\n"
|
||||
+ stringToFind);
|
||||
} else {
|
||||
numSubtestsPassed += 1;
|
||||
System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void printSummary() {
|
||||
if ( numSubtestsPassed == subtestNum ) {
|
||||
System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
|
||||
} else {
|
||||
throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
|
||||
+ " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Read the file into a String
|
||||
public static String readFileToString(String filename) {
|
||||
try {
|
||||
File file = new File(filename);
|
||||
if ( !file.exists() ) {
|
||||
System.out.println("\nFILE DOES NOT EXIST: " + filename);
|
||||
}
|
||||
BufferedReader in = new BufferedReader(new FileReader(file));
|
||||
|
||||
// Create an array of characters the size of the file
|
||||
char[] allChars = new char[(int)file.length()];
|
||||
|
||||
// Read the characters into the allChars array
|
||||
in.read(allChars, 0, (int)file.length());
|
||||
in.close();
|
||||
|
||||
// Convert to a string
|
||||
String allCharsString = new String(allChars);
|
||||
|
||||
return allCharsString;
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
} catch (IOException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static int findString(String fileString, String stringToFind) {
|
||||
return fileString.indexOf(stringToFind);
|
||||
}
|
||||
}
|
||||
|
@ -26,193 +26,62 @@
|
||||
* @bug 4530730
|
||||
* @summary stddoclet: With frames off, window titles have "()" appended
|
||||
* @author dkramer
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main WindowTitles
|
||||
*/
|
||||
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
// If needing regular expression pattern matching,
|
||||
// see /java/pubs/dev/linkfix/src/LinkFix.java
|
||||
|
||||
/**
|
||||
* Runs javadoc and runs regression tests on the resulting HTML.
|
||||
* It reads each file, complete with newlines, into a string to easily
|
||||
* find strings that contain newlines.
|
||||
*/
|
||||
public class WindowTitles
|
||||
{
|
||||
private static final String BUGID = "4530730";
|
||||
private static final String BUGNAME = "WindowTitles";
|
||||
private static final String TMPDIR_STRING1 = "./docs1/";
|
||||
private static final String TMPDIR_STRING2 = "./docs2/";
|
||||
public class WindowTitles extends JavadocTester {
|
||||
|
||||
// Subtest number. Needed because runResultsOnHTML is run twice, and subtestNum
|
||||
// should increment across subtest runs.
|
||||
public static int subtestNum = 0;
|
||||
public static int numSubtestsPassed = 0;
|
||||
|
||||
// Entry point
|
||||
public static void main(String[] args) {
|
||||
|
||||
// Directory that contains source files that javadoc runs on
|
||||
String srcdir = System.getProperty("test.src", ".");
|
||||
public static void main(String... args) throws Exception {
|
||||
WindowTitles tester = new WindowTitles();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
// Test for all cases except the split index page
|
||||
runJavadoc(new String[] {"-d", TMPDIR_STRING1,
|
||||
"-use",
|
||||
"-sourcepath", srcdir,
|
||||
"p1", "p2"});
|
||||
runTestsOnHTML(testArray);
|
||||
javadoc("-d", "out-1",
|
||||
"-use",
|
||||
"-sourcepath", testSrc,
|
||||
"p1", "p2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkTitle("overview-summary.html", "Overview");
|
||||
checkTitle("overview-tree.html", "Class Hierarchy");
|
||||
checkTitle("overview-frame.html", "Overview List");
|
||||
checkTitle("p1/package-summary.html", "p1");
|
||||
checkTitle("p1/package-frame.html", "p1");
|
||||
checkTitle("p1/package-tree.html", "p1 Class Hierarchy");
|
||||
checkTitle("p1/package-use.html", "Uses of Package p1");
|
||||
checkTitle("p1/C1.html", "C1");
|
||||
checkTitle("allclasses-frame.html", "All Classes");
|
||||
checkTitle("allclasses-noframe.html", "All Classes");
|
||||
checkTitle("constant-values.html", "Constant Field Values");
|
||||
checkTitle("deprecated-list.html", "Deprecated List");
|
||||
checkTitle("serialized-form.html", "Serialized Form");
|
||||
checkTitle("help-doc.html", "API Help");
|
||||
checkTitle("index-all.html", "Index");
|
||||
checkTitle("p1/class-use/C1.html", "Uses of Class p1.C1");
|
||||
}
|
||||
|
||||
@Test
|
||||
void test2() {
|
||||
// Test only for the split-index case (and run on only one package)
|
||||
System.out.println(""); // blank line
|
||||
runJavadoc(new String[] {"-d", TMPDIR_STRING2,
|
||||
"-splitindex",
|
||||
"-sourcepath", System.getProperty("test.src", "."),
|
||||
"p1"});
|
||||
runTestsOnHTML(testSplitIndexArray);
|
||||
javadoc("-d", "out-2",
|
||||
"-splitindex",
|
||||
"-sourcepath", testSrc,
|
||||
"p1");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
printSummary();
|
||||
checkTitle("index-files/index-1.html", "C-Index");
|
||||
}
|
||||
|
||||
/** Run javadoc */
|
||||
public static void runJavadoc(String[] javadocArgs) {
|
||||
if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
|
||||
throw new Error("Javadoc failed to execute");
|
||||
}
|
||||
void checkTitle(String file, String title) {
|
||||
checkOutput(file, true, "<title>" + title + "</title>");
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign value for [ stringToFind, filename ]
|
||||
* NOTE: The standard doclet uses platform-specific line separators ("\n")
|
||||
*/
|
||||
private static final String[][] testArray = {
|
||||
|
||||
{ "<title>Overview</title>",
|
||||
TMPDIR_STRING1 + "overview-summary.html" },
|
||||
|
||||
{ "<title>Class Hierarchy</title>",
|
||||
TMPDIR_STRING1 + "overview-tree.html" },
|
||||
|
||||
{ "<title>Overview List</title>",
|
||||
TMPDIR_STRING1 + "overview-frame.html" },
|
||||
|
||||
{ "<title>p1</title>",
|
||||
TMPDIR_STRING1 + "p1/package-summary.html" },
|
||||
|
||||
{ "<title>p1</title>",
|
||||
TMPDIR_STRING1 + "p1/package-frame.html" },
|
||||
|
||||
{ "<title>p1 Class Hierarchy</title>",
|
||||
TMPDIR_STRING1 + "p1/package-tree.html" },
|
||||
|
||||
{ "<title>Uses of Package p1</title>",
|
||||
TMPDIR_STRING1 + "p1/package-use.html" },
|
||||
|
||||
{ "<title>C1</title>",
|
||||
TMPDIR_STRING1 + "p1/C1.html" },
|
||||
|
||||
{ "<title>All Classes</title>",
|
||||
TMPDIR_STRING1 + "allclasses-frame.html" },
|
||||
|
||||
{ "<title>All Classes</title>",
|
||||
TMPDIR_STRING1 + "allclasses-noframe.html" },
|
||||
|
||||
{ "<title>Constant Field Values</title>",
|
||||
TMPDIR_STRING1 + "constant-values.html" },
|
||||
|
||||
{ "<title>Deprecated List</title>",
|
||||
TMPDIR_STRING1 + "deprecated-list.html" },
|
||||
|
||||
{ "<title>Serialized Form</title>",
|
||||
TMPDIR_STRING1 + "serialized-form.html" },
|
||||
|
||||
{ "<title>API Help</title>",
|
||||
TMPDIR_STRING1 + "help-doc.html" },
|
||||
|
||||
{ "<title>Index</title>",
|
||||
TMPDIR_STRING1 + "index-all.html" },
|
||||
|
||||
{ "<title>Uses of Class p1.C1</title>",
|
||||
TMPDIR_STRING1 + "p1/class-use/C1.html" },
|
||||
};
|
||||
|
||||
/**
|
||||
* Assign value for [ stringToFind, filename ] for split index page
|
||||
*/
|
||||
private static final String[][] testSplitIndexArray = {
|
||||
{ "<title>C-Index</title>",
|
||||
TMPDIR_STRING2 + "index-files/index-1.html" },
|
||||
};
|
||||
|
||||
public static void runTestsOnHTML(String[][] testArray) {
|
||||
|
||||
for (int i = 0; i < testArray.length; i++) {
|
||||
|
||||
subtestNum += 1;
|
||||
|
||||
// Read contents of file into a string
|
||||
String fileString = readFileToString(testArray[i][1]);
|
||||
|
||||
// Get string to find
|
||||
String stringToFind = testArray[i][0];
|
||||
|
||||
// Find string in file's contents
|
||||
if (findString(fileString, stringToFind) == -1) {
|
||||
System.out.println("\nSub-test " + (subtestNum)
|
||||
+ " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
|
||||
+ "when searching for:\n"
|
||||
+ stringToFind);
|
||||
} else {
|
||||
numSubtestsPassed += 1;
|
||||
System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void printSummary() {
|
||||
if ( numSubtestsPassed == subtestNum ) {
|
||||
System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
|
||||
} else {
|
||||
throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
|
||||
+ " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Read the file into a String
|
||||
public static String readFileToString(String filename) {
|
||||
try {
|
||||
File file = new File(filename);
|
||||
if ( !file.exists() ) {
|
||||
System.out.println("\nFILE DOES NOT EXIST: " + filename);
|
||||
}
|
||||
BufferedReader in = new BufferedReader(new FileReader(file));
|
||||
|
||||
// Create an array of characters the size of the file
|
||||
char[] allChars = new char[(int)file.length()];
|
||||
|
||||
// Read the characters into the allChars array
|
||||
in.read(allChars, 0, (int)file.length());
|
||||
in.close();
|
||||
|
||||
// Convert to a string
|
||||
String allCharsString = new String(allChars);
|
||||
|
||||
return allCharsString;
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
} catch (IOException e) {
|
||||
System.err.println(e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static int findString(String fileString, String stringToFind) {
|
||||
return fileString.indexOf(stringToFind);
|
||||
}
|
||||
}
|
||||
|
@ -26,42 +26,30 @@
|
||||
* @bug 4504730 4526070 5077317
|
||||
* @summary Test the generation of constant-values.html.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestConstantValuesDriver
|
||||
* @run main TestConstantValuesDriver
|
||||
*/
|
||||
public class TestConstantValuesDriver extends JavadocTester {
|
||||
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, SRC_DIR + "/TestConstantValues.java",
|
||||
SRC_DIR + "/TestConstantValues2.java",
|
||||
SRC_DIR + "/A.java"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
String[][] tests = new String[5][2];
|
||||
for (int i = 0; i < tests.length-1; i++) {
|
||||
tests[i][0] = "constant-values.html";
|
||||
tests[i][1] = "TEST"+(i+1)+"PASSES";
|
||||
}
|
||||
tests[tests.length-1][0] = "constant-values.html";
|
||||
tests[tests.length-1][1] = "<code>\"<Hello World>\"</code>";
|
||||
public static void main(String... args) throws Exception {
|
||||
TestConstantValuesDriver tester = new TestConstantValuesDriver();
|
||||
tester.run(ARGS, tests, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws java.io.IOException Test 1 passes
|
||||
* @throws java.io.IOException Test 2 passes
|
||||
* @throws java.lang.NullPointerException comment three
|
||||
* @throws java.io.IOException Test 3 passes
|
||||
*/
|
||||
public void method(){}
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
testSrc("TestConstantValues.java"),
|
||||
testSrc("TestConstantValues2.java"),
|
||||
testSrc("A.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("constant-values.html", true,
|
||||
"TEST1PASSES",
|
||||
"TEST2PASSES",
|
||||
"TEST3PASSES",
|
||||
"TEST4PASSES",
|
||||
"<code>\"<Hello World>\"</code>");
|
||||
}
|
||||
}
|
||||
|
@ -26,30 +26,28 @@
|
||||
* @bug 4525364
|
||||
* @summary Determine if duplicate throws tags can be used.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestDupThrowsTags
|
||||
* @run main TestDupThrowsTags
|
||||
*/
|
||||
public class TestDupThrowsTags extends JavadocTester {
|
||||
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, SRC_DIR + "/TestDupThrowsTags.java"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
String[][] tests = new String[4][2];
|
||||
for (int i = 0; i < tests.length; i++) {
|
||||
tests[i][0] = "TestDupThrowsTags.html";
|
||||
tests[i][1] = "Test "+(i+1)+" passes";
|
||||
}
|
||||
public static void main(String... args) throws Exception {
|
||||
TestDupThrowsTags tester = new TestDupThrowsTags();
|
||||
tester.run(ARGS, tests, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
testSrc("TestDupThrowsTags.java"));
|
||||
checkExit(Exit.FAILED);
|
||||
|
||||
checkOutput("TestDupThrowsTags.html", true,
|
||||
"Test 1 passes",
|
||||
"Test 2 passes",
|
||||
"Test 3 passes",
|
||||
"Test 4 passes");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -58,6 +56,6 @@ public class TestDupThrowsTags extends JavadocTester {
|
||||
* @throws java.lang.NullPointerException Test 3 passes
|
||||
* @throws java.io.IOException Test 4 passes
|
||||
*/
|
||||
public void method(){}
|
||||
public void method() {}
|
||||
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -26,33 +26,31 @@
|
||||
* @bug 4640745
|
||||
* @summary This test verifys that the -link option handles absolute paths.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestAbsLinkPath
|
||||
* @run main TestAbsLinkPath
|
||||
*/
|
||||
|
||||
public class TestAbsLinkPath extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg1/C1.html", "C2.html"}};
|
||||
|
||||
private static final String[] ARGS1 =
|
||||
new String[] {
|
||||
"-d", "tmp2", "-sourcepath", SRC_DIR, "pkg2"};
|
||||
private static final String[] ARGS2 =
|
||||
new String[] {
|
||||
"-d", "tmp", "-sourcepath", SRC_DIR,
|
||||
"-link", "../tmp2", "pkg1"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestAbsLinkPath tester = new TestAbsLinkPath();
|
||||
tester.run(ARGS1, NO_TEST, NO_TEST);
|
||||
tester.run(ARGS2, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test1() {
|
||||
String out1 = "out1";
|
||||
javadoc("-d", out1, "-sourcepath", testSrc, "pkg2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
javadoc("-d", "out2",
|
||||
"-sourcepath", testSrc,
|
||||
"-link", "../" + out1,
|
||||
"pkg1");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"C2.html");
|
||||
}
|
||||
}
|
||||
|
@ -27,80 +27,72 @@
|
||||
* @summary Make sure that the abstract method is identified correctly
|
||||
* if the abstract modifier is present explicitly or implicitly.
|
||||
* @author bpatel
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestAbstractMethod
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestAbstractMethod
|
||||
*/
|
||||
|
||||
public class TestAbstractMethod extends JavadocTester {
|
||||
|
||||
//Test information.
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg/A.html",
|
||||
"<td class=\"colFirst\"><code>default void</code></td>"},
|
||||
{ "pkg/A.html",
|
||||
"<caption><span id=\"t0\" class=\"activeTableTab\"><span>" +
|
||||
"All Methods</span><span class=\"tabEnd\"> </span></span>" +
|
||||
"<span id=\"t2\" class=\"tableTab\"><span>" +
|
||||
"<a href=\"javascript:show(2);\">Instance Methods</a></span>" +
|
||||
"<span class=\"tabEnd\"> </span></span><span id=\"t3\" " +
|
||||
"class=\"tableTab\"><span><a href=\"javascript:show(4);\">" +
|
||||
"Abstract Methods</a></span><span class=\"tabEnd\"> </span>" +
|
||||
"</span><span id=\"t5\" class=\"tableTab\"><span>" +
|
||||
"<a href=\"javascript:show(16);\">Default Methods</a></span>" +
|
||||
"<span class=\"tabEnd\"> </span></span></caption>"},
|
||||
{ "pkg/B.html",
|
||||
"<caption><span id=\"t0\" class=\"activeTableTab\"><span>" +
|
||||
"All Methods</span><span class=\"tabEnd\"> </span></span>" +
|
||||
"<span id=\"t2\" class=\"tableTab\"><span>" +
|
||||
"<a href=\"javascript:show(2);\">Instance Methods</a></span>" +
|
||||
"<span class=\"tabEnd\"> </span></span><span id=\"t3\" " +
|
||||
"class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract " +
|
||||
"Methods</a></span><span class=\"tabEnd\"> </span></span>" +
|
||||
"<span id=\"t4\" class=\"tableTab\"><span>" +
|
||||
"<a href=\"javascript:show(8);\">Concrete Methods</a></span>" +
|
||||
"<span class=\"tabEnd\"> </span></span></caption>"},
|
||||
{ "pkg/B.html",
|
||||
"<td class=\"colFirst\"><code>abstract void</code></td>"},
|
||||
{ "pkg/C.html",
|
||||
"<caption><span id=\"t0\" class=\"activeTableTab\"><span>" +
|
||||
"All Methods</span><span class=\"tabEnd\"> </span></span>" +
|
||||
"<span id=\"t2\" class=\"tableTab\"><span>" +
|
||||
"<a href=\"javascript:show(2);\">Instance Methods</a></span>" +
|
||||
"<span class=\"tabEnd\"> </span></span>" +
|
||||
"<span id=\"t5\" class=\"tableTab\"><span>" +
|
||||
"<a href=\"javascript:show(16);\">Default Methods</a></span>" +
|
||||
"<span class=\"tabEnd\"> </span></span></caption>"},
|
||||
{ "pkg/C.html",
|
||||
"<td class=\"colFirst\"><code>default void</code></td>"}
|
||||
};
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
{ "pkg/A.html",
|
||||
"<td class=\"colFirst\"><code>abstract void</code></td>"},
|
||||
{ "pkg/B.html",
|
||||
"<span><a href=\"javascript:show(16);\">Default Methods</a></span>" +
|
||||
"<span class=\"tabEnd\"> </span>"},
|
||||
{ "pkg/B.html",
|
||||
"<td class=\"colFirst\"><code>default void</code></td>"},
|
||||
{ "pkg/C.html",
|
||||
"<span><a href=\"javascript:show(4);\">Abstract Methods</a></span>" +
|
||||
"<span class=\"tabEnd\"> </span>"}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestAbstractMethod tester = new TestAbstractMethod();
|
||||
tester.run(ARGS, TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/A.html", true,
|
||||
"<td class=\"colFirst\"><code>default void</code></td>",
|
||||
"<caption><span id=\"t0\" class=\"activeTableTab\"><span>"
|
||||
+ "All Methods</span><span class=\"tabEnd\"> </span></span>"
|
||||
+ "<span id=\"t2\" class=\"tableTab\"><span>"
|
||||
+ "<a href=\"javascript:show(2);\">Instance Methods</a></span>"
|
||||
+ "<span class=\"tabEnd\"> </span></span><span id=\"t3\" "
|
||||
+ "class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
|
||||
+ "Abstract Methods</a></span><span class=\"tabEnd\"> </span>"
|
||||
+ "</span><span id=\"t5\" class=\"tableTab\"><span>"
|
||||
+ "<a href=\"javascript:show(16);\">Default Methods</a></span>"
|
||||
+ "<span class=\"tabEnd\"> </span></span></caption>");
|
||||
|
||||
checkOutput("pkg/B.html", true,
|
||||
"<caption><span id=\"t0\" class=\"activeTableTab\"><span>"
|
||||
+ "All Methods</span><span class=\"tabEnd\"> </span></span>"
|
||||
+ "<span id=\"t2\" class=\"tableTab\"><span>"
|
||||
+ "<a href=\"javascript:show(2);\">Instance Methods</a></span>"
|
||||
+ "<span class=\"tabEnd\"> </span></span><span id=\"t3\" "
|
||||
+ "class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract "
|
||||
+ "Methods</a></span><span class=\"tabEnd\"> </span></span>"
|
||||
+ "<span id=\"t4\" class=\"tableTab\"><span>"
|
||||
+ "<a href=\"javascript:show(8);\">Concrete Methods</a></span>"
|
||||
+ "<span class=\"tabEnd\"> </span></span></caption>",
|
||||
"<td class=\"colFirst\"><code>abstract void</code></td>");
|
||||
|
||||
checkOutput("pkg/C.html", true,
|
||||
"<caption><span id=\"t0\" class=\"activeTableTab\"><span>"
|
||||
+ "All Methods</span><span class=\"tabEnd\"> </span></span>"
|
||||
+ "<span id=\"t2\" class=\"tableTab\"><span>"
|
||||
+ "<a href=\"javascript:show(2);\">Instance Methods</a></span>"
|
||||
+ "<span class=\"tabEnd\"> </span></span>"
|
||||
+ "<span id=\"t5\" class=\"tableTab\"><span>"
|
||||
+ "<a href=\"javascript:show(16);\">Default Methods</a></span>"
|
||||
+ "<span class=\"tabEnd\"> </span></span></caption>",
|
||||
"<td class=\"colFirst\"><code>default void</code></td>");
|
||||
|
||||
checkOutput("pkg/A.html", false,
|
||||
"<td class=\"colFirst\"><code>abstract void</code></td>");
|
||||
|
||||
checkOutput("pkg/B.html", false,
|
||||
"<span><a href=\"javascript:show(16);\">Default Methods</a></span>"
|
||||
+ "<span class=\"tabEnd\"> </span>",
|
||||
"<td class=\"colFirst\"><code>default void</code></td>");
|
||||
|
||||
checkOutput("pkg/C.html", false,
|
||||
"<span><a href=\"javascript:show(4);\">Abstract Methods</a></span>"
|
||||
+ "<span class=\"tabEnd\"> </span>");
|
||||
}
|
||||
}
|
||||
|
@ -26,250 +26,136 @@
|
||||
* @bug 8025633 8025524
|
||||
* @summary Test for valid name attribute in HTML anchors.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestAnchorNames
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestAnchorNames
|
||||
*/
|
||||
|
||||
public class TestAnchorNames extends JavadocTester {
|
||||
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
|
||||
//Test some section markers and links to these markers
|
||||
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"skip.navbar.top\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"#skip.navbar.top\" title=\"Skip navigation links\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"nested.class.summary\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"#nested.class.summary\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"method.summary\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"#method.summary\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"field.detail\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"#field.detail\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"constructor.detail\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"#constructor.detail\">"
|
||||
},
|
||||
|
||||
//Test some members and link to these members
|
||||
|
||||
//The marker for this appears in the serialized-form.html which we will
|
||||
//test below
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../serialized-form.html#pkg1.RegClass\">"
|
||||
},
|
||||
//Test some fields
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"Z:Z_\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z_\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"Z:Z_:D\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z_:D\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"Z:Z:D_\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z:D_\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"Z:Z:Dfield\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z:Dfield\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"fieldInCla:D:D\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#fieldInCla:D:D\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"S_:D:D:D:D:DINT\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#S_:D:D:D:D:DINT\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"method:D:D\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#method:D:D\">"
|
||||
},
|
||||
{ "pkg1/DeprMemClass.html",
|
||||
"<a name=\"Z:Z_field_In_Class\">"
|
||||
},
|
||||
{ "pkg1/DeprMemClass.html",
|
||||
"<a href=\"../pkg1/DeprMemClass.html#Z:Z_field_In_Class\">"
|
||||
},
|
||||
//Test constructor
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"RegClass-java.lang.String-int-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#RegClass-java.lang.String-int-\">"
|
||||
},
|
||||
//Test some methods
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"Z:Z_methodInClass-java.lang.String-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z_methodInClass-java.lang.String-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"method--\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#method--\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"foo-java.util.Map-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#foo-java.util.Map-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"methodInCla:Ds-java.lang.String:A-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#methodInCla:Ds-java.lang.String:A-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"Z:Z_methodInClas:D-java.lang.String-int-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z_methodInClas:D-java.lang.String-int-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"methodD-pkg1.RegClass.:DA-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.:DA-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a name=\"methodD-pkg1.RegClass.D:A-\">"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
"<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.D:A-\">"
|
||||
},
|
||||
{ "pkg1/DeprMemClass.html",
|
||||
"<a name=\"Z:Z:Dmethod_In_Class--\">"
|
||||
},
|
||||
{ "pkg1/DeprMemClass.html",
|
||||
"<a href=\"../pkg1/DeprMemClass.html#Z:Z:Dmethod_In_Class--\">"
|
||||
},
|
||||
|
||||
//Test enum
|
||||
|
||||
{ "pkg1/RegClass.Te$t_Enum.html",
|
||||
"<a name=\"Z:Z:DFLD2\">"
|
||||
},
|
||||
{ "pkg1/RegClass.Te$t_Enum.html",
|
||||
"<a href=\"../pkg1/RegClass.Te$t_Enum.html#Z:Z:DFLD2\">"
|
||||
},
|
||||
|
||||
//Test nested class
|
||||
|
||||
{ "pkg1/RegClass._NestedClas$.html",
|
||||
"<a name=\"Z:Z_NestedClas:D--\">"
|
||||
},
|
||||
{ "pkg1/RegClass._NestedClas$.html",
|
||||
"<a href=\"../pkg1/RegClass._NestedClas$.html#Z:Z_NestedClas:D--\">"
|
||||
},
|
||||
|
||||
//Test class use page
|
||||
|
||||
{ "pkg1/class-use/DeprMemClass.html",
|
||||
"<a href=\"../../pkg1/RegClass.html#d____mc\">"
|
||||
},
|
||||
|
||||
//Test deprecated list page
|
||||
|
||||
{ "deprecated-list.html",
|
||||
"<a href=\"pkg1/DeprMemClass.html#Z:Z_field_In_Class\">"
|
||||
},
|
||||
{ "deprecated-list.html",
|
||||
"<a href=\"pkg1/DeprMemClass.html#Z:Z:Dmethod_In_Class--\">"
|
||||
},
|
||||
|
||||
//Test constant values page
|
||||
|
||||
{ "constant-values.html",
|
||||
"<a href=\"pkg1/RegClass.html#S_:D:D:D:D:DINT\">"
|
||||
},
|
||||
|
||||
//Test serialized form page
|
||||
|
||||
//This is the marker for the link that appears in the pkg1.RegClass.html page
|
||||
{ "serialized-form.html",
|
||||
"<a name=\"pkg1.RegClass\">"
|
||||
},
|
||||
|
||||
//Test member name index page
|
||||
|
||||
{ "index-all.html",
|
||||
"<a name=\"I:Z:Z:D\">"
|
||||
},
|
||||
{ "index-all.html",
|
||||
"<a href=\"#I:Z:Z:D\">$"
|
||||
},
|
||||
{ "index-all.html",
|
||||
"<a href=\"#I:Z:Z_\">_"
|
||||
}
|
||||
};
|
||||
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
//The marker name conversion should only affect HTML anchors. It should not
|
||||
//affect the lables.
|
||||
{ "pkg1/RegClass.html",
|
||||
" Z:Z_"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
" Z:Z:Dfield"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
" Z:Z_field_In_Class"
|
||||
},
|
||||
{ "pkg1/RegClass.html",
|
||||
" S_:D:D:D:D:DINT"
|
||||
},
|
||||
};
|
||||
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1"
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) throws Exception {
|
||||
TestAnchorNames tester = new TestAnchorNames();
|
||||
tester.run(ARGS, TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-use",
|
||||
"pkg1");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
// Test some section markers and links to these markers
|
||||
checkOutput("pkg1/RegClass.html", true,
|
||||
"<a name=\"skip.navbar.top\">",
|
||||
"<a href=\"#skip.navbar.top\" title=\"Skip navigation links\">",
|
||||
"<a name=\"nested.class.summary\">",
|
||||
"<a href=\"#nested.class.summary\">",
|
||||
"<a name=\"method.summary\">",
|
||||
"<a href=\"#method.summary\">",
|
||||
"<a name=\"field.detail\">",
|
||||
"<a href=\"#field.detail\">",
|
||||
"<a name=\"constructor.detail\">",
|
||||
"<a href=\"#constructor.detail\">");
|
||||
|
||||
// Test some members and link to these members
|
||||
checkOutput("pkg1/RegClass.html", true,
|
||||
//The marker for this appears in the serialized-form.html which we will
|
||||
//test below
|
||||
"<a href=\"../serialized-form.html#pkg1.RegClass\">");
|
||||
|
||||
// Test some fields
|
||||
checkOutput("pkg1/RegClass.html", true,
|
||||
"<a name=\"Z:Z_\">",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z_\">",
|
||||
"<a name=\"Z:Z_:D\">",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z_:D\">",
|
||||
"<a name=\"Z:Z:D_\">",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z:D_\">",
|
||||
"<a name=\"Z:Z:Dfield\">",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z:Dfield\">",
|
||||
"<a name=\"fieldInCla:D:D\">",
|
||||
"<a href=\"../pkg1/RegClass.html#fieldInCla:D:D\">",
|
||||
"<a name=\"S_:D:D:D:D:DINT\">",
|
||||
"<a href=\"../pkg1/RegClass.html#S_:D:D:D:D:DINT\">",
|
||||
"<a name=\"method:D:D\">",
|
||||
"<a href=\"../pkg1/RegClass.html#method:D:D\">");
|
||||
|
||||
checkOutput("pkg1/DeprMemClass.html", true,
|
||||
"<a name=\"Z:Z_field_In_Class\">",
|
||||
"<a href=\"../pkg1/DeprMemClass.html#Z:Z_field_In_Class\">");
|
||||
|
||||
// Test constructor
|
||||
checkOutput("pkg1/RegClass.html", true,
|
||||
"<a name=\"RegClass-java.lang.String-int-\">",
|
||||
"<a href=\"../pkg1/RegClass.html#RegClass-java.lang.String-int-\">");
|
||||
|
||||
// Test some methods
|
||||
checkOutput("pkg1/RegClass.html", true,
|
||||
"<a name=\"Z:Z_methodInClass-java.lang.String-\">",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z_methodInClass-java.lang.String-\">",
|
||||
"<a name=\"method--\">",
|
||||
"<a href=\"../pkg1/RegClass.html#method--\">",
|
||||
"<a name=\"foo-java.util.Map-\">",
|
||||
"<a href=\"../pkg1/RegClass.html#foo-java.util.Map-\">",
|
||||
"<a name=\"methodInCla:Ds-java.lang.String:A-\">",
|
||||
"<a href=\"../pkg1/RegClass.html#methodInCla:Ds-java.lang.String:A-\">",
|
||||
"<a name=\"Z:Z_methodInClas:D-java.lang.String-int-\">",
|
||||
"<a href=\"../pkg1/RegClass.html#Z:Z_methodInClas:D-java.lang.String-int-\">",
|
||||
"<a name=\"methodD-pkg1.RegClass.:DA-\">",
|
||||
"<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.:DA-\">",
|
||||
"<a name=\"methodD-pkg1.RegClass.D:A-\">",
|
||||
"<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.D:A-\">");
|
||||
|
||||
checkOutput("pkg1/DeprMemClass.html", true,
|
||||
"<a name=\"Z:Z:Dmethod_In_Class--\">",
|
||||
"<a href=\"../pkg1/DeprMemClass.html#Z:Z:Dmethod_In_Class--\">");
|
||||
|
||||
// Test enum
|
||||
checkOutput("pkg1/RegClass.Te$t_Enum.html", true,
|
||||
"<a name=\"Z:Z:DFLD2\">",
|
||||
"<a href=\"../pkg1/RegClass.Te$t_Enum.html#Z:Z:DFLD2\">");
|
||||
|
||||
// Test nested class
|
||||
checkOutput("pkg1/RegClass._NestedClas$.html", true,
|
||||
"<a name=\"Z:Z_NestedClas:D--\">",
|
||||
"<a href=\"../pkg1/RegClass._NestedClas$.html#Z:Z_NestedClas:D--\">");
|
||||
|
||||
// Test class use page
|
||||
checkOutput("pkg1/class-use/DeprMemClass.html", true,
|
||||
"<a href=\"../../pkg1/RegClass.html#d____mc\">");
|
||||
|
||||
// Test deprecated list page
|
||||
checkOutput("deprecated-list.html", true,
|
||||
"<a href=\"pkg1/DeprMemClass.html#Z:Z_field_In_Class\">",
|
||||
"<a href=\"pkg1/DeprMemClass.html#Z:Z:Dmethod_In_Class--\">");
|
||||
|
||||
// Test constant values page
|
||||
checkOutput("constant-values.html", true,
|
||||
"<a href=\"pkg1/RegClass.html#S_:D:D:D:D:DINT\">");
|
||||
|
||||
// Test serialized form page
|
||||
checkOutput("serialized-form.html", true,
|
||||
//This is the marker for the link that appears in the pkg1.RegClass.html page
|
||||
"<a name=\"pkg1.RegClass\">");
|
||||
|
||||
// Test member name index page
|
||||
checkOutput("index-all.html", true,
|
||||
"<a name=\"I:Z:Z:D\">",
|
||||
"<a href=\"#I:Z:Z:D\">$",
|
||||
"<a href=\"#I:Z:Z_\">_");
|
||||
|
||||
// The marker name conversion should only affect HTML anchors. It should not
|
||||
// affect the lables.
|
||||
checkOutput("pkg1/RegClass.html", false,
|
||||
" Z:Z_",
|
||||
" Z:Z:Dfield",
|
||||
" Z:Z_field_In_Class",
|
||||
" S_:D:D:D:D:DINT");
|
||||
}
|
||||
}
|
||||
|
@ -27,32 +27,26 @@
|
||||
* @summary Make sure that annotations types with optional elements have
|
||||
* element headers
|
||||
* @author Mahmood Ali
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestAnnotationOptional
|
||||
* @run main TestAnnotationOptional
|
||||
*/
|
||||
|
||||
public class TestAnnotationOptional extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg/AnnotationOptional.html",
|
||||
"<a name=\"annotation.type.element.detail\">"
|
||||
}
|
||||
};
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestAnnotationOptional tester = new TestAnnotationOptional();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/AnnotationOptional.html", true,
|
||||
"<a name=\"annotation.type.element.detail\">");
|
||||
}
|
||||
}
|
||||
|
@ -27,64 +27,52 @@
|
||||
* @summary Make sure that annotation types with 0 members does not have
|
||||
* extra HR tags.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestAnnotationTypes
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestAnnotationTypes
|
||||
*/
|
||||
|
||||
public class TestAnnotationTypes extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg/AnnotationTypeField.html",
|
||||
"<li>Summary: </li>\n" +
|
||||
"<li><a href=\"#annotation.type." +
|
||||
"field.summary\">Field</a> | </li>"},
|
||||
{ "pkg/AnnotationTypeField.html",
|
||||
"<li>Detail: </li>\n" +
|
||||
"<li><a href=\"#annotation.type." +
|
||||
"field.detail\">Field</a> | </li>"},
|
||||
{ "pkg/AnnotationTypeField.html",
|
||||
"<!-- =========== ANNOTATION TYPE FIELD SUMMARY =========== -->"},
|
||||
{ "pkg/AnnotationTypeField.html",
|
||||
"<h3>Field Summary</h3>"},
|
||||
{ "pkg/AnnotationTypeField.html",
|
||||
"<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../" +
|
||||
"pkg/AnnotationTypeField.html#DEFAULT_NAME\">DEFAULT_NAME</a></span>" +
|
||||
"</code> </td>"},
|
||||
{ "pkg/AnnotationTypeField.html",
|
||||
"<!-- ============ ANNOTATION TYPE FIELD DETAIL =========== -->"},
|
||||
{ "pkg/AnnotationTypeField.html",
|
||||
"<h4>DEFAULT_NAME</h4>\n" +
|
||||
"<pre>public static final java." +
|
||||
"lang.String DEFAULT_NAME</pre>"},
|
||||
{ "pkg/AnnotationType.html",
|
||||
"<li>Summary: </li>\n" +
|
||||
"<li>Field | </li>"},
|
||||
{ "pkg/AnnotationType.html",
|
||||
"<li>Detail: </li>\n" +
|
||||
"<li>Field | </li>"},
|
||||
};
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
{ "pkg/AnnotationType.html",
|
||||
"<HR>\n\n" +
|
||||
"<P>\n\n" +
|
||||
"<P>" +
|
||||
"<!-- ========= END OF CLASS DATA ========= -->" + "<HR>"}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestAnnotationTypes tester = new TestAnnotationTypes();
|
||||
tester.run(ARGS, TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/AnnotationTypeField.html", true,
|
||||
"<li>Summary: </li>\n"
|
||||
+ "<li><a href=\"#annotation.type."
|
||||
+ "field.summary\">Field</a> | </li>",
|
||||
"<li>Detail: </li>\n"
|
||||
+ "<li><a href=\"#annotation.type."
|
||||
+ "field.detail\">Field</a> | </li>",
|
||||
"<!-- =========== ANNOTATION TYPE FIELD SUMMARY =========== -->",
|
||||
"<h3>Field Summary</h3>",
|
||||
"<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../"
|
||||
+ "pkg/AnnotationTypeField.html#DEFAULT_NAME\">DEFAULT_NAME</a></span>"
|
||||
+ "</code> </td>",
|
||||
"<!-- ============ ANNOTATION TYPE FIELD DETAIL =========== -->",
|
||||
"<h4>DEFAULT_NAME</h4>\n"
|
||||
+ "<pre>public static final java."
|
||||
+ "lang.String DEFAULT_NAME</pre>");
|
||||
|
||||
checkOutput("pkg/AnnotationType.html", true,
|
||||
"<li>Summary: </li>\n"
|
||||
+ "<li>Field | </li>",
|
||||
"<li>Detail: </li>\n"
|
||||
+ "<li>Field | </li>");
|
||||
|
||||
checkOutput("pkg/AnnotationType.html", false,
|
||||
"<HR>\n\n"
|
||||
+ "<P>\n\n"
|
||||
+ "<P>"
|
||||
+ "<!-- ========= END OF CLASS DATA ========= -->" + "<HR>");
|
||||
}
|
||||
}
|
||||
|
@ -27,28 +27,27 @@
|
||||
* @summary Test to make sure that the link to source documentation
|
||||
* has a forward slash. It would be wrong to use a back slash.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestBackSlashInLink
|
||||
* @run main TestBackSlashInLink
|
||||
*/
|
||||
|
||||
public class TestBackSlashInLink extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST = {
|
||||
{ "C.html", "src-html/C.html#line.7"}};
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
|
||||
"-linksource", SRC_DIR + "/C.java"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestBackSlashInLink tester = new TestBackSlashInLink();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-linksource",
|
||||
testSrc("C.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("C.html", true,
|
||||
"src-html/C.html#line.7");
|
||||
}
|
||||
}
|
||||
|
@ -27,33 +27,27 @@
|
||||
* @summary Test to make sure that Javadoc emits a useful warning
|
||||
* when a bad package.html file is in the JAR.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestBadPackageFileInJar
|
||||
* @run main TestBadPackageFileInJar
|
||||
*/
|
||||
|
||||
public class TestBadPackageFileInJar extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST =
|
||||
new String[][] {
|
||||
{ERROR_OUTPUT,
|
||||
"badPackageFileInJar.jar" + FS + "pkg/package.html: error - Body tag missing from HTML"}
|
||||
};
|
||||
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-classpath",
|
||||
SRC_DIR + "/badPackageFileInJar.jar", "pkg"};
|
||||
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestBadPackageFileInJar tester = new TestBadPackageFileInJar();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-classpath", testSrc("badPackageFileInJar.jar"),
|
||||
"pkg");
|
||||
checkExit(Exit.FAILED);
|
||||
|
||||
checkOutput(Output.ERROR, true,
|
||||
"badPackageFileInJar.jar" + FS + "pkg/package.html: error - Body tag missing from HTML");
|
||||
}
|
||||
}
|
||||
|
@ -27,27 +27,28 @@
|
||||
* @summary Make sure exception is not thrown if there is a bad source
|
||||
* file in the same directory as the file being documented.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestBadSourceFile
|
||||
* @run main TestBadSourceFile
|
||||
*/
|
||||
|
||||
public class TestBadSourceFile extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-Xdoclint:none", "-d", OUTPUT_DIR, SRC_DIR + "/C2.java"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
* @param args the array of command line arguments
|
||||
* @throws Exception if the test fails
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestBadSourceFile tester = new TestBadSourceFile();
|
||||
int exitCode = tester.run(ARGS, NO_TEST, NO_TEST);
|
||||
tester.checkExitCode(0, exitCode);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-Xdoclint:none",
|
||||
"-d", "out",
|
||||
testSrc("C2.java"));
|
||||
checkExit(Exit.OK);
|
||||
}
|
||||
}
|
||||
|
@ -26,29 +26,25 @@
|
||||
* @bug 4197513
|
||||
* @summary Javadoc does not process base class.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build BaseClass
|
||||
* @build JavadocTester
|
||||
* @build TestBaseClass
|
||||
* @run main TestBaseClass
|
||||
*/
|
||||
|
||||
public class TestBaseClass extends JavadocTester {
|
||||
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-sourcepath", SRC_DIR,
|
||||
"-docletpath", SRC_DIR, "-doclet", "BaseClass",
|
||||
SRC_DIR + "/Bar.java", "baz"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestBaseClass tester = new TestBaseClass();
|
||||
if (tester.run(ARGS, NO_TEST, NO_TEST) != 0) {
|
||||
throw new Error("Javadoc failed to execute.");
|
||||
}
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-sourcepath", testSrc,
|
||||
"-docletpath", testSrc,
|
||||
"-doclet", "BaseClass",
|
||||
testSrc("Bar.java"), "baz");
|
||||
checkExit(Exit.OK);
|
||||
}
|
||||
}
|
||||
|
@ -29,29 +29,27 @@
|
||||
* Correct Answer: "The class is empty (i.e. it has no members)."
|
||||
* Wrong Answer: "The class is empty (i.e."
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestBreakIterator
|
||||
* @run main TestBreakIterator
|
||||
*/
|
||||
|
||||
public class TestBreakIterator extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg/BreakIteratorTest.html",
|
||||
"The class is empty (i.e. it has no members)."}};
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
|
||||
"-breakiterator", "pkg"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestBreakIterator tester = new TestBreakIterator();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-breakiterator",
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/BreakIteratorTest.html", true,
|
||||
"The class is empty (i.e. it has no members).");
|
||||
}
|
||||
}
|
||||
|
@ -26,9 +26,8 @@
|
||||
* @bug 4979486
|
||||
* @summary Make sure tool parses CR line separators properly.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestCRLineSeparator
|
||||
* @run main TestCRLineSeparator
|
||||
*/
|
||||
|
||||
@ -37,32 +36,27 @@ import java.util.*;
|
||||
|
||||
public class TestCRLineSeparator extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", ".", "pkg"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg/MyClass.html", "Line 1\n" +
|
||||
" Line 2"}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) throws Exception {
|
||||
initFiles(new File(SRC_DIR), new File("."), "pkg");
|
||||
public static void main(String... args) throws Exception {
|
||||
TestCRLineSeparator tester = new TestCRLineSeparator();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() throws IOException {
|
||||
initFiles(new File(testSrc), new File("src"), "pkg");
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", "src",
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/MyClass.html", true,
|
||||
"Line 1\n"
|
||||
+ " Line 2");
|
||||
}
|
||||
|
||||
// recursively copy files from fromDir to toDir, replacing newlines
|
||||
// with \r
|
||||
static void initFiles(File fromDir, File toDir, String f) throws IOException {
|
||||
void initFiles(File fromDir, File toDir, String f) throws IOException {
|
||||
File from_f = new File(fromDir, f);
|
||||
File to_f = new File(toDir, f);
|
||||
if (from_f.isDirectory()) {
|
||||
@ -71,23 +65,17 @@ public class TestCRLineSeparator extends JavadocTester {
|
||||
initFiles(from_f, to_f, child);
|
||||
}
|
||||
} else {
|
||||
List<String> lines = new ArrayList<String>();
|
||||
BufferedReader in = new BufferedReader(new FileReader(from_f));
|
||||
try {
|
||||
List<String> lines = new ArrayList<>();
|
||||
try (BufferedReader in = new BufferedReader(new FileReader(from_f))) {
|
||||
String line;
|
||||
while ((line = in.readLine()) != null)
|
||||
lines.add(line);
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
BufferedWriter out = new BufferedWriter(new FileWriter(to_f));
|
||||
try {
|
||||
try (BufferedWriter out = new BufferedWriter(new FileWriter(to_f))) {
|
||||
for (String line: lines) {
|
||||
out.write(line);
|
||||
out.write("\r");
|
||||
}
|
||||
} finally {
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -27,39 +27,34 @@
|
||||
* @summary Run a test on -charset to make sure the charset gets generated as a
|
||||
* part of the meta tag.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestCharset
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestCharset
|
||||
*/
|
||||
|
||||
public class TestCharset extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-charset", "UTF-8", "-sourcepath", SRC_DIR, "pkg"
|
||||
};
|
||||
|
||||
private static final String[][] TEST = {
|
||||
{ "index.html",
|
||||
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"},
|
||||
{ "pkg/Foo.html",
|
||||
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"}
|
||||
};
|
||||
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
{ "index.html",
|
||||
"<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">"},
|
||||
{ "pkg/Foo.html",
|
||||
"<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">"}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestCharset tester = new TestCharset();
|
||||
tester.run(ARGS, TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-charset", "UTF-8",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("index.html", true,
|
||||
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
|
||||
checkOutput("pkg/Foo.html", true,
|
||||
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
|
||||
|
||||
checkOutput("index.html", false,
|
||||
"<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">");
|
||||
checkOutput("pkg/Foo.html", false,
|
||||
"<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">");
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,7 @@
|
||||
* @bug 4652655 4857717 8025633 8026567
|
||||
* @summary This test verifies that class cross references work properly.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestClassCrossReferences
|
||||
* @run main TestClassCrossReferences
|
||||
@ -34,37 +34,34 @@
|
||||
|
||||
public class TestClassCrossReferences extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST = {
|
||||
{ "C.html",
|
||||
"<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/package-summary.html?is-external=true\"><code>Link to math package</code></a>"},
|
||||
{ "C.html",
|
||||
"<a href=\"http://java.sun.com/j2se/1.4/docs/api/javax/swing/text/AbstractDocument.AttributeContext.html?is-external=true\" " +
|
||||
"title=\"class or interface in javax.swing.text\"><code>Link to AttributeContext innerclass</code></a>"},
|
||||
{ "C.html",
|
||||
"<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigDecimal.html?is-external=true\" " +
|
||||
"title=\"class or interface in java.math\"><code>Link to external class BigDecimal</code></a>"},
|
||||
{ "C.html",
|
||||
"<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html?is-external=true#gcd-java.math.BigInteger-\" " +
|
||||
"title=\"class or interface in java.math\"><code>Link to external member gcd</code></a>"},
|
||||
{ "C.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
|
||||
"<dd><code>toString</code> in class <code>java.lang.Object</code></dd>\n" +
|
||||
"</dl>"}
|
||||
};
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
|
||||
"-linkoffline", "http://java.sun.com/j2se/1.4/docs/api/",
|
||||
SRC_DIR, SRC_DIR + "/C.java"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestClassCrossReferences tester = new TestClassCrossReferences();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
final String uri = "http://java.sun.com/j2se/1.4/docs/api/";
|
||||
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-linkoffline", uri, testSrc,
|
||||
testSrc("C.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("C.html", true,
|
||||
"<a href=\"" + uri + "java/math/package-summary.html?is-external=true\">"
|
||||
+ "<code>Link to math package</code></a>",
|
||||
"<a href=\"" + uri + "javax/swing/text/AbstractDocument.AttributeContext.html?is-external=true\" "
|
||||
+ "title=\"class or interface in javax.swing.text\"><code>Link to AttributeContext innerclass</code></a>",
|
||||
"<a href=\"" + uri + "java/math/BigDecimal.html?is-external=true\" "
|
||||
+ "title=\"class or interface in java.math\"><code>Link to external class BigDecimal</code></a>",
|
||||
"<a href=\"" + uri + "java/math/BigInteger.html?is-external=true#gcd-java.math.BigInteger-\" "
|
||||
+ "title=\"class or interface in java.math\"><code>Link to external member gcd</code></a>",
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
|
||||
+ "<dd><code>toString</code> in class <code>java.lang.Object</code></dd>\n"
|
||||
+ "</dl>");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -29,64 +29,52 @@
|
||||
* Make sure class tree includes heirarchy for enums and annotation
|
||||
* types.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestClassTree
|
||||
* @run main TestClassTree
|
||||
*/
|
||||
|
||||
public class TestClassTree extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg/package-tree.html",
|
||||
"<ul>\n" +
|
||||
"<li type=\"circle\">pkg.<a href=\"../pkg/ParentClass.html\" " +
|
||||
"title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a>"},
|
||||
|
||||
{ "pkg/package-tree.html",
|
||||
"<h2 title=\"Annotation Type Hierarchy\">Annotation Type Hierarchy</h2>\n" +
|
||||
"<ul>\n" +
|
||||
"<li type=\"circle\">pkg.<a href=\"../pkg/AnnotationType.html\" " +
|
||||
"title=\"annotation in pkg\"><span class=\"typeNameLink\">AnnotationType</span></a> " +
|
||||
"(implements java.lang.annotation.Annotation)</li>\n" +
|
||||
"</ul>"},
|
||||
|
||||
{ "pkg/package-tree.html",
|
||||
"<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n" +
|
||||
"<ul>\n" +
|
||||
"<li type=\"circle\">java.lang.Object\n" +
|
||||
"<ul>\n" +
|
||||
"<li type=\"circle\">java.lang.Enum<E> (implements java.lang." +
|
||||
"Comparable<T>, java.io.Serializable)\n" +
|
||||
"<ul>\n" +
|
||||
"<li type=\"circle\">pkg.<a href=\"../pkg/Coin.html\" " +
|
||||
"title=\"enum in pkg\"><span class=\"typeNameLink\">Coin</span></a></li>\n" +
|
||||
"</ul>\n" +
|
||||
"</li>\n" +
|
||||
"</ul>\n" +
|
||||
"</li>\n" +
|
||||
"</ul>"
|
||||
},
|
||||
};
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
{ "pkg/package-tree.html",
|
||||
"<li type=\"circle\">class pkg.<a href=\"../pkg/ParentClass.html\" " +
|
||||
"title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a></li>"}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestClassTree tester = new TestClassTree();
|
||||
tester.run(ARGS, TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/package-tree.html", true,
|
||||
"<ul>\n"
|
||||
+ "<li type=\"circle\">pkg.<a href=\"../pkg/ParentClass.html\" "
|
||||
+ "title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a>",
|
||||
"<h2 title=\"Annotation Type Hierarchy\">Annotation Type Hierarchy</h2>\n"
|
||||
+ "<ul>\n"
|
||||
+ "<li type=\"circle\">pkg.<a href=\"../pkg/AnnotationType.html\" "
|
||||
+ "title=\"annotation in pkg\"><span class=\"typeNameLink\">AnnotationType</span></a> "
|
||||
+ "(implements java.lang.annotation.Annotation)</li>\n"
|
||||
+ "</ul>",
|
||||
"<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n"
|
||||
+ "<ul>\n"
|
||||
+ "<li type=\"circle\">java.lang.Object\n"
|
||||
+ "<ul>\n"
|
||||
+ "<li type=\"circle\">java.lang.Enum<E> (implements java.lang."
|
||||
+ "Comparable<T>, java.io.Serializable)\n"
|
||||
+ "<ul>\n"
|
||||
+ "<li type=\"circle\">pkg.<a href=\"../pkg/Coin.html\" "
|
||||
+ "title=\"enum in pkg\"><span class=\"typeNameLink\">Coin</span></a></li>\n"
|
||||
+ "</ul>\n"
|
||||
+ "</li>\n"
|
||||
+ "</ul>\n"
|
||||
+ "</li>\n"
|
||||
+ "</ul>");
|
||||
|
||||
checkOutput("pkg/package-tree.html", false,
|
||||
"<li type=\"circle\">class pkg.<a href=\"../pkg/ParentClass.html\" "
|
||||
+ "title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a></li>");
|
||||
}
|
||||
}
|
||||
|
@ -28,47 +28,44 @@
|
||||
* when specifying packages on the command line and specifying individual
|
||||
* classes.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestCmndLineClass
|
||||
* @run main TestCmndLineClass
|
||||
*/
|
||||
|
||||
public class TestCmndLineClass extends JavadocTester {
|
||||
|
||||
private static final String OUTPUT_DIR1 = "4506980-tmp1";
|
||||
private static final String OUTPUT_DIR2 = "4506980-tmp2";
|
||||
private static final String[] ARGS1 =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR1, "-sourcepath", SRC_DIR,
|
||||
"-notimestamp", SRC_DIR + "/C5.java", "pkg1", "pkg2"
|
||||
};
|
||||
private static final String[] ARGS2 =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR2, "-sourcepath", SRC_DIR,
|
||||
"-notimestamp", SRC_DIR + "/C5.java",
|
||||
SRC_DIR + "/pkg1/C1.java",
|
||||
SRC_DIR + "/pkg1/C2.java",
|
||||
SRC_DIR + "/pkg2/C3.java",
|
||||
SRC_DIR + "/pkg2/C4.java"
|
||||
};
|
||||
private static final String[] FILES_TO_DIFF = {
|
||||
"C5.html",
|
||||
"pkg1/C1.html",
|
||||
"pkg1/C2.html",
|
||||
"pkg2/C3.html",
|
||||
"pkg2/C4.html"
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestCmndLineClass tester = new TestCmndLineClass();
|
||||
tester.run(ARGS1, NO_TEST, NO_TEST);
|
||||
tester.run(ARGS2, NO_TEST, NO_TEST);
|
||||
tester.runDiffs(OUTPUT_DIR1, OUTPUT_DIR2, FILES_TO_DIFF);
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
String outdir1 = "out-1";
|
||||
String outdir2 = "out-2";
|
||||
|
||||
javadoc("-d", outdir1,
|
||||
"-sourcepath", testSrc,
|
||||
"-notimestamp",
|
||||
testSrc("C5.java"), "pkg1", "pkg2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
javadoc("-d", outdir2,
|
||||
"-sourcepath", testSrc,
|
||||
"-notimestamp",
|
||||
testSrc("C5.java"),
|
||||
testSrc("pkg1/C1.java"),
|
||||
testSrc("pkg1/C2.java"),
|
||||
testSrc("pkg2/C3.java"),
|
||||
testSrc("pkg2/C4.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
diff(outdir1, outdir2,
|
||||
"C5.html",
|
||||
"pkg1/C1.html",
|
||||
"pkg1/C2.html",
|
||||
"pkg2/C3.html",
|
||||
"pkg2/C4.html");
|
||||
}
|
||||
}
|
||||
|
@ -26,32 +26,28 @@
|
||||
* @bug 8027977
|
||||
* @summary Test to verify javadoc executes without CompletionFailure exception.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestCompletionFailure
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestCompletionFailure
|
||||
*/
|
||||
|
||||
public class TestCompletionFailure extends JavadocTester {
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
{ERROR_OUTPUT, "TestCompletionFailure: error - " +
|
||||
"com.sun.tools.javac.code.Symbol$CompletionFailure: class file for " +
|
||||
"sun.util.locale.provider.LocaleProviderAdapter not found"
|
||||
}
|
||||
};
|
||||
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) throws Exception {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestCompletionFailure tester = new TestCompletionFailure();
|
||||
tester.run(ARGS, NO_TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg1");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput(Output.STDERR, false,
|
||||
"TestCompletionFailure: error - "
|
||||
+ "com.sun.tools.javac.code.Symbol$CompletionFailure: class file for "
|
||||
+ "sun.util.locale.provider.LocaleProviderAdapter not found");
|
||||
}
|
||||
}
|
||||
|
@ -27,28 +27,26 @@
|
||||
* @summary Test to make sure that constant values page does not get
|
||||
* generated when doclet has nothing to document.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestConstantValuesPage
|
||||
* @run main TestConstantValuesPage
|
||||
*/
|
||||
|
||||
public class TestConstantValuesPage extends JavadocTester {
|
||||
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
{NOTICE_OUTPUT, "constant-values.html..."}
|
||||
};
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "foo"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestConstantValuesPage tester = new TestConstantValuesPage();
|
||||
tester.run(ARGS, NO_TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"foo");
|
||||
checkExit(Exit.FAILED);
|
||||
|
||||
checkOutput(Output.NOTICE, false,
|
||||
"constant-values.html...");
|
||||
}
|
||||
}
|
||||
|
@ -27,37 +27,31 @@
|
||||
* @summary The constructor comments should be surrounded by
|
||||
* <dl></dl>. Check for this in the output.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestConstructorIndent
|
||||
* @run main TestConstructorIndent
|
||||
*/
|
||||
|
||||
public class TestConstructorIndent extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
{ "C.html", "<div class=\"block\">" +
|
||||
"This is just a simple constructor.</div>\n" +
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"paramLabel\">Parameters:</span></dt>\n" +
|
||||
"<dd><code>i</code> - a param.</dd>\n" +
|
||||
"</dl>"
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestConstructorIndent tester = new TestConstructorIndent();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
testSrc("C.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("C.html", true,
|
||||
"<div class=\"block\">"
|
||||
+ "This is just a simple constructor.</div>\n"
|
||||
+ "<dl>\n"
|
||||
+ "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n"
|
||||
+ "<dd><code>i</code> - a param.</dd>\n"
|
||||
+ "</dl>");
|
||||
}
|
||||
}
|
||||
|
@ -26,106 +26,66 @@
|
||||
* @bug 8025524 8031625
|
||||
* @summary Test for constructor name which should be a non-qualified name.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestConstructors
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestConstructors
|
||||
*/
|
||||
|
||||
public class TestConstructors extends JavadocTester {
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg1/Outer.html",
|
||||
"<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
|
||||
"<dd><a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, \n" +
|
||||
"<a href=\"../pkg1/Outer.Inner.html#Inner-int-\"><code>Inner(int)</code></a>, \n" +
|
||||
"<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner--\"><code>NestedInner()</code></a>, \n" +
|
||||
"<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\"><code>NestedInner(int)</code></a>, \n" +
|
||||
"<a href=\"../pkg1/Outer.html#Outer--\"><code>Outer()</code></a>, \n" +
|
||||
"<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>"
|
||||
},
|
||||
{ "pkg1/Outer.html",
|
||||
"Link: <a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, " +
|
||||
"<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>, " +
|
||||
"<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\"><code>" +
|
||||
"NestedInner(int)</code></a>"
|
||||
},
|
||||
{ "pkg1/Outer.html",
|
||||
"<a href=\"../pkg1/Outer.html#Outer--\">Outer</a></span>()"
|
||||
},
|
||||
{ "pkg1/Outer.html",
|
||||
"<a name=\"Outer--\">"
|
||||
},
|
||||
{ "pkg1/Outer.html",
|
||||
"<a href=\"../pkg1/Outer.html#Outer-int-\">Outer</a></span>(int i)"
|
||||
},
|
||||
{ "pkg1/Outer.html",
|
||||
"<a name=\"Outer-int-\">"
|
||||
},
|
||||
{ "pkg1/Outer.Inner.html",
|
||||
"<a href=\"../pkg1/Outer.Inner.html#Inner--\">Inner</a></span>()"
|
||||
},
|
||||
{ "pkg1/Outer.Inner.html",
|
||||
"<a name=\"Inner--\">"
|
||||
},
|
||||
{ "pkg1/Outer.Inner.html",
|
||||
"<a href=\"../pkg1/Outer.Inner.html#Inner-int-\">Inner</a></span>(int i)"
|
||||
},
|
||||
{ "pkg1/Outer.Inner.html",
|
||||
"<a name=\"Inner-int-\">"
|
||||
},
|
||||
{ "pkg1/Outer.Inner.NestedInner.html",
|
||||
"<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner--\">NestedInner</a></span>()"
|
||||
},
|
||||
{ "pkg1/Outer.Inner.NestedInner.html",
|
||||
"<a name=\"NestedInner--\">"
|
||||
},
|
||||
{ "pkg1/Outer.Inner.NestedInner.html",
|
||||
"<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\">NestedInner</a></span>(int i)"
|
||||
},
|
||||
{ "pkg1/Outer.Inner.NestedInner.html",
|
||||
"<a name=\"NestedInner-int-\">"
|
||||
}
|
||||
};
|
||||
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
{ "pkg1/Outer.Inner.html",
|
||||
"Outer.Inner--"
|
||||
},
|
||||
{ "pkg1/Outer.Inner.html",
|
||||
"Outer.Inner-int-"
|
||||
},
|
||||
{ "pkg1/Outer.Inner.NestedInner.html",
|
||||
"Outer.Inner.NestedInner--"
|
||||
},
|
||||
{ "pkg1/Outer.Inner.NestedInner.html",
|
||||
"Outer.Inner.NestedInner-int-"
|
||||
},
|
||||
{ "pkg1/Outer.html",
|
||||
"<a href=\"../pkg1/Outer.Inner.html#Outer.Inner--\"><code>Outer.Inner()</code></a>"
|
||||
},
|
||||
{ "pkg1/Outer.html",
|
||||
"<a href=\"../pkg1/Outer.Inner.html#Outer.Inner-int-\"><code>Outer.Inner(int)</code></a>"
|
||||
},
|
||||
{ "pkg1/Outer.html",
|
||||
"<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner--\"><code>Outer.Inner.NestedInner()</code></a>"
|
||||
},
|
||||
{ "pkg1/Outer.html",
|
||||
"<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner-int-\"><code>Outer.Inner.NestedInner(int)</code></a>"
|
||||
}
|
||||
};
|
||||
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) throws Exception {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestConstructors tester = new TestConstructors();
|
||||
tester.run(ARGS, TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg1");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg1/Outer.html", true,
|
||||
"<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
|
||||
+ "<dd><a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, \n"
|
||||
+ "<a href=\"../pkg1/Outer.Inner.html#Inner-int-\"><code>Inner(int)</code></a>, \n"
|
||||
+ "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner--\"><code>NestedInner()</code></a>, \n"
|
||||
+ "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\"><code>NestedInner(int)</code></a>, \n"
|
||||
+ "<a href=\"../pkg1/Outer.html#Outer--\"><code>Outer()</code></a>, \n"
|
||||
+ "<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>",
|
||||
"Link: <a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, "
|
||||
+ "<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>, "
|
||||
+ "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\"><code>"
|
||||
+ "NestedInner(int)</code></a>",
|
||||
"<a href=\"../pkg1/Outer.html#Outer--\">Outer</a></span>()",
|
||||
"<a name=\"Outer--\">",
|
||||
"<a href=\"../pkg1/Outer.html#Outer-int-\">Outer</a></span>(int i)",
|
||||
"<a name=\"Outer-int-\">");
|
||||
|
||||
checkOutput("pkg1/Outer.Inner.html", true,
|
||||
"<a href=\"../pkg1/Outer.Inner.html#Inner--\">Inner</a></span>()",
|
||||
"<a name=\"Inner--\">",
|
||||
"<a href=\"../pkg1/Outer.Inner.html#Inner-int-\">Inner</a></span>(int i)",
|
||||
"<a name=\"Inner-int-\">");
|
||||
|
||||
checkOutput("pkg1/Outer.Inner.NestedInner.html", true,
|
||||
"<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner--\">NestedInner</a></span>()",
|
||||
"<a name=\"NestedInner--\">",
|
||||
"<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\">NestedInner</a></span>(int i)",
|
||||
"<a name=\"NestedInner-int-\">");
|
||||
|
||||
checkOutput("pkg1/Outer.Inner.html", false,
|
||||
"Outer.Inner--",
|
||||
"Outer.Inner-int-");
|
||||
|
||||
checkOutput("pkg1/Outer.Inner.NestedInner.html", false,
|
||||
"Outer.Inner.NestedInner--",
|
||||
"Outer.Inner.NestedInner-int-");
|
||||
|
||||
checkOutput("pkg1/Outer.html", false,
|
||||
"<a href=\"../pkg1/Outer.Inner.html#Outer.Inner--\"><code>Outer.Inner()</code></a>",
|
||||
"<a href=\"../pkg1/Outer.Inner.html#Outer.Inner-int-\"><code>Outer.Inner(int)</code></a>",
|
||||
"<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner--\"><code>Outer.Inner.NestedInner()</code></a>",
|
||||
"<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner-int-\"><code>Outer.Inner.NestedInner(int)</code></a>");
|
||||
}
|
||||
}
|
||||
|
@ -26,69 +26,67 @@
|
||||
* @bug 8006248
|
||||
* @summary Test custom tag. Verify that an unknown tag generates appropriate warnings.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @build JavadocTester taglets.CustomTag TestCustomTag
|
||||
* @library ../lib
|
||||
* @build JavadocTester taglets.CustomTag
|
||||
* @run main TestCustomTag
|
||||
*/
|
||||
|
||||
public class TestCustomTag extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-Xdoclint:none", "-d", OUTPUT_DIR, "-tagletpath", SRC_DIR,
|
||||
"-taglet", "taglets.CustomTag", "-sourcepath",
|
||||
SRC_DIR, SRC_DIR + "/TagTestClass.java"
|
||||
};
|
||||
|
||||
private static final String[] ARGS1 = new String[] {
|
||||
"-d", OUTPUT_DIR + "-1", "-tagletpath",
|
||||
SRC_DIR, "-taglet", "taglets.CustomTag",
|
||||
"-sourcepath", SRC_DIR, SRC_DIR + "/TagTestClass.java"
|
||||
};
|
||||
private static final String[] ARGS2 = new String[] {
|
||||
"-Xdoclint:none", "-d", OUTPUT_DIR + "-2", "-sourcepath",
|
||||
SRC_DIR, SRC_DIR + "/TagTestClass.java"
|
||||
};
|
||||
|
||||
private static final String[] ARGS3 = new String[] {
|
||||
"-d", OUTPUT_DIR + "-3", "-sourcepath",
|
||||
SRC_DIR, SRC_DIR + "/TagTestClass.java"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = new String[][] {
|
||||
{WARNING_OUTPUT, "warning - @unknownTag is an unknown tag."
|
||||
}
|
||||
};
|
||||
|
||||
private static final String[][] TEST1 = new String[][] {
|
||||
{ERROR_OUTPUT, "error: unknown tag: unknownTag"
|
||||
}
|
||||
};
|
||||
private static final String[][] TEST2 = new String[][] {
|
||||
{WARNING_OUTPUT, "warning - @customTag is an unknown tag."
|
||||
},
|
||||
{WARNING_OUTPUT, "warning - @unknownTag is an unknown tag."
|
||||
}
|
||||
};
|
||||
|
||||
private static final String[][] TEST3 = new String[][] {
|
||||
{ERROR_OUTPUT, "error: unknown tag: customTag"
|
||||
},
|
||||
{ERROR_OUTPUT, "error: unknown tag: unknownTag"
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestCustomTag tester = new TestCustomTag();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.run(ARGS1, TEST1, NO_TEST);
|
||||
tester.run(ARGS2, TEST2, NO_TEST);
|
||||
tester.run(ARGS3, TEST3, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test1() {
|
||||
javadoc("-Xdoclint:none",
|
||||
"-d", "out-1",
|
||||
"-tagletpath", testSrc, // TODO: probably useless
|
||||
"-taglet", "taglets.CustomTag",
|
||||
"-sourcepath", testSrc,
|
||||
testSrc("TagTestClass.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput(Output.WARNING, true,
|
||||
"warning - @unknownTag is an unknown tag.");
|
||||
}
|
||||
|
||||
@Test
|
||||
void test2() {
|
||||
javadoc("-d", "out-2",
|
||||
"-tagletpath", testSrc, // TODO: probably useless
|
||||
"-taglet", "taglets.CustomTag",
|
||||
"-sourcepath", testSrc,
|
||||
testSrc("TagTestClass.java"));
|
||||
checkExit(Exit.FAILED);
|
||||
|
||||
checkOutput(Output.ERROR, true,
|
||||
"error: unknown tag: unknownTag");
|
||||
}
|
||||
|
||||
@Test
|
||||
void test3() {
|
||||
javadoc("-Xdoclint:none",
|
||||
"-d", "out-3",
|
||||
"-sourcepath", testSrc,
|
||||
testSrc("TagTestClass.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput(Output.WARNING, true,
|
||||
"warning - @customTag is an unknown tag.",
|
||||
"warning - @unknownTag is an unknown tag.");
|
||||
}
|
||||
|
||||
@Test
|
||||
void test4() {
|
||||
javadoc("-d", "out-4",
|
||||
"-sourcepath", testSrc,
|
||||
testSrc("TagTestClass.java"));
|
||||
checkExit(Exit.FAILED);
|
||||
|
||||
checkOutput(Output.ERROR, true,
|
||||
"error: unknown tag: customTag",
|
||||
"error: unknown tag: unknownTag");
|
||||
}
|
||||
}
|
||||
|
@ -26,76 +26,65 @@
|
||||
* @bug 4927552 8026567
|
||||
* @summary <DESC>
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestDeprecatedDocs
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestDeprecatedDocs
|
||||
*/
|
||||
|
||||
public class TestDeprecatedDocs extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
|
||||
};
|
||||
|
||||
private static final String TARGET_FILE =
|
||||
"deprecated-list.html";
|
||||
|
||||
private static final String TARGET_FILE2 =
|
||||
"pkg/DeprecatedClassByAnnotation.html";
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
{TARGET_FILE, "annotation_test1 passes"},
|
||||
{TARGET_FILE, "annotation_test2 passes"},
|
||||
{TARGET_FILE, "annotation_test3 passes"},
|
||||
{TARGET_FILE, "class_test1 passes"},
|
||||
{TARGET_FILE, "class_test2 passes"},
|
||||
{TARGET_FILE, "class_test3 passes"},
|
||||
{TARGET_FILE, "class_test4 passes"},
|
||||
{TARGET_FILE, "enum_test1 passes"},
|
||||
{TARGET_FILE, "enum_test2 passes"},
|
||||
{TARGET_FILE, "error_test1 passes"},
|
||||
{TARGET_FILE, "error_test2 passes"},
|
||||
{TARGET_FILE, "error_test3 passes"},
|
||||
{TARGET_FILE, "error_test4 passes"},
|
||||
{TARGET_FILE, "exception_test1 passes"},
|
||||
{TARGET_FILE, "exception_test2 passes"},
|
||||
{TARGET_FILE, "exception_test3 passes"},
|
||||
{TARGET_FILE, "exception_test4 passes"},
|
||||
{TARGET_FILE, "interface_test1 passes"},
|
||||
{TARGET_FILE, "interface_test2 passes"},
|
||||
{TARGET_FILE, "interface_test3 passes"},
|
||||
{TARGET_FILE, "interface_test4 passes"},
|
||||
{TARGET_FILE, "pkg.DeprecatedClassByAnnotation"},
|
||||
{TARGET_FILE, "pkg.DeprecatedClassByAnnotation()"},
|
||||
{TARGET_FILE, "pkg.DeprecatedClassByAnnotation.method()"},
|
||||
{TARGET_FILE, "pkg.DeprecatedClassByAnnotation.field"},
|
||||
|
||||
{TARGET_FILE2, "<pre>@Deprecated\n" +
|
||||
"public class <span class=\"typeNameLabel\">DeprecatedClassByAnnotation</span>\n" +
|
||||
"extends java.lang.Object</pre>"},
|
||||
|
||||
{TARGET_FILE2, "<pre>@Deprecated\n" +
|
||||
"public int field</pre>\n" +
|
||||
"<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>"},
|
||||
|
||||
{TARGET_FILE2, "<pre>@Deprecated\n" +
|
||||
"public DeprecatedClassByAnnotation()</pre>\n" +
|
||||
"<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>"},
|
||||
|
||||
{TARGET_FILE2, "<pre>@Deprecated\n" +
|
||||
"public void method()</pre>\n" +
|
||||
"<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>"},
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestDeprecatedDocs tester = new TestDeprecatedDocs();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("deprecated-list.html", true,
|
||||
"annotation_test1 passes",
|
||||
"annotation_test2 passes",
|
||||
"annotation_test3 passes",
|
||||
"class_test1 passes",
|
||||
"class_test2 passes",
|
||||
"class_test3 passes",
|
||||
"class_test4 passes",
|
||||
"enum_test1 passes",
|
||||
"enum_test2 passes",
|
||||
"error_test1 passes",
|
||||
"error_test2 passes",
|
||||
"error_test3 passes",
|
||||
"error_test4 passes",
|
||||
"exception_test1 passes",
|
||||
"exception_test2 passes",
|
||||
"exception_test3 passes",
|
||||
"exception_test4 passes",
|
||||
"interface_test1 passes",
|
||||
"interface_test2 passes",
|
||||
"interface_test3 passes",
|
||||
"interface_test4 passes",
|
||||
"pkg.DeprecatedClassByAnnotation",
|
||||
"pkg.DeprecatedClassByAnnotation()",
|
||||
"pkg.DeprecatedClassByAnnotation.method()",
|
||||
"pkg.DeprecatedClassByAnnotation.field"
|
||||
);
|
||||
|
||||
checkOutput("pkg/DeprecatedClassByAnnotation.html", true,
|
||||
"<pre>@Deprecated\n"
|
||||
+ "public class <span class=\"typeNameLabel\">DeprecatedClassByAnnotation</span>\n"
|
||||
+ "extends java.lang.Object</pre>",
|
||||
"<pre>@Deprecated\n"
|
||||
+ "public int field</pre>\n"
|
||||
+ "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>",
|
||||
"<pre>@Deprecated\n"
|
||||
+ "public DeprecatedClassByAnnotation()</pre>\n"
|
||||
+ "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>",
|
||||
"<pre>@Deprecated\n"
|
||||
+ "public void method()</pre>\n"
|
||||
+ "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>");
|
||||
}
|
||||
}
|
||||
|
@ -31,36 +31,30 @@
|
||||
* @summary Run tests on -docencoding to see if the value is
|
||||
used for stylesheet as well.
|
||||
* @author jayashree viswanathan
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestDocEncoding
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestDocEncoding
|
||||
*/
|
||||
|
||||
public class TestDocEncoding extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR,
|
||||
"-docencoding", "Cp930",
|
||||
"-sourcepath", SRC_DIR,
|
||||
"-notimestamp",
|
||||
"pkg"
|
||||
};
|
||||
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
{ "stylesheet.css",
|
||||
"body {\n" +
|
||||
" background-color:#ffffff;"}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestDocEncoding tester = new TestDocEncoding();
|
||||
tester.run(ARGS, NO_TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-docencoding", "Cp930",
|
||||
"-sourcepath", testSrc,
|
||||
"-notimestamp",
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("stylesheet.css", false,
|
||||
"body {\n"
|
||||
+ " background-color:#ffffff;");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,31 +27,30 @@
|
||||
* @summary Make sure that option validation errors and sent to the
|
||||
* DocErrorReporter.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestDocErrorReporter
|
||||
* @run main TestDocErrorReporter
|
||||
*/
|
||||
|
||||
public class TestDocErrorReporter extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-encoding", "xyz",
|
||||
SRC_DIR + "/TestDocErrorReporter.java"
|
||||
};
|
||||
|
||||
//Input for Javadoc return code test.
|
||||
private static final int EXPECTED_EXIT_CODE = 1;
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
* @param args the array of command line arguments
|
||||
* @throws Exception if the test fails
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestDocErrorReporter tester = new TestDocErrorReporter();
|
||||
int actualExitCode = tester.run(ARGS, NO_TEST, NO_TEST);
|
||||
tester.checkExitCode(EXPECTED_EXIT_CODE, actualExitCode);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-encoding", "xyz",
|
||||
testSrc("TestDocErrorReporter.java"));
|
||||
|
||||
checkExit(Exit.FAILED);
|
||||
}
|
||||
}
|
||||
|
@ -21,8 +21,6 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 4258405 4973606 8024096
|
||||
@ -31,68 +29,59 @@ import java.io.File;
|
||||
* directory.
|
||||
* Also test that -docfilessubdirs and -excludedocfilessubdir both work.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestDocFileDir
|
||||
* @run main TestDocFileDir
|
||||
*/
|
||||
|
||||
public class TestDocFileDir extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST1 = {
|
||||
{ "pkg/doc-files/testfile.txt",
|
||||
"This doc file did not get trashed."}
|
||||
};
|
||||
|
||||
private static final String[] FILE_TEST2 = {
|
||||
"pkg/doc-files/subdir-used1/testfile.txt",
|
||||
"pkg/doc-files/subdir-used2/testfile.txt"
|
||||
};
|
||||
private static final String[] FILE_NEGATED_TEST2 = {
|
||||
"pkg/doc-files/subdir-excluded1/testfile.txt",
|
||||
"pkg/doc-files/subdir-excluded2/testfile.txt"
|
||||
};
|
||||
|
||||
private static final String[][] TEST0 = {
|
||||
{"pkg/doc-files/testfile.txt",
|
||||
"This doc file did not get trashed."}
|
||||
};
|
||||
|
||||
//Output dir = Input Dir
|
||||
private static final String[] ARGS1 =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR + "-1",
|
||||
"-sourcepath",
|
||||
"blah" + File.pathSeparator + OUTPUT_DIR + "-1" +
|
||||
File.pathSeparator + "blah", "pkg"};
|
||||
|
||||
//Exercising -docfilessubdirs and -excludedocfilessubdir
|
||||
private static final String[] ARGS2 =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR + "-2",
|
||||
"-sourcepath", SRC_DIR,
|
||||
"-docfilessubdirs",
|
||||
"-excludedocfilessubdir", "subdir-excluded1:subdir-excluded2",
|
||||
"pkg"};
|
||||
|
||||
//Output dir = "", Input dir = ""
|
||||
private static final String[] ARGS0 =
|
||||
new String[] {"pkg/C.java"};
|
||||
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestDocFileDir tester = new TestDocFileDir();
|
||||
tester.setCheckOutputDirectoryCheck(DirectoryCheck.NO_HTML_FILES);
|
||||
copyDir(SRC_DIR + "/pkg", ".");
|
||||
tester.run(ARGS0, TEST0, NO_TEST);
|
||||
copyDir(SRC_DIR + "/pkg", OUTPUT_DIR + "-1");
|
||||
tester.run(ARGS1, TEST1, NO_TEST);
|
||||
tester.setCheckOutputDirectoryCheck(DirectoryCheck.NONE);
|
||||
tester.run(ARGS2, NO_TEST, NO_TEST, FILE_TEST2, FILE_NEGATED_TEST2);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
// Output dir = "", Input dir = ""
|
||||
@Test
|
||||
void test1() {
|
||||
copyDir(testSrc("pkg"), ".");
|
||||
setOutputDirectoryCheck(DirectoryCheck.NO_HTML_FILES);
|
||||
javadoc("pkg/C.java");
|
||||
checkExit(Exit.OK);
|
||||
checkOutput("pkg/doc-files/testfile.txt", true,
|
||||
"This doc file did not get trashed.");
|
||||
}
|
||||
|
||||
// Output dir = Input Dir
|
||||
@Test
|
||||
void test2() {
|
||||
String outdir = "out2";
|
||||
copyDir(testSrc("pkg"), outdir);
|
||||
setOutputDirectoryCheck(DirectoryCheck.NO_HTML_FILES);
|
||||
javadoc("-d", outdir,
|
||||
"-sourcepath", "blah" + PS + outdir + PS + "blah",
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
checkOutput("pkg/doc-files/testfile.txt", true,
|
||||
"This doc file did not get trashed.");
|
||||
}
|
||||
|
||||
// Exercising -docfilessubdirs and -excludedocfilessubdir
|
||||
@Test
|
||||
void test3() {
|
||||
String outdir = "out3";
|
||||
setOutputDirectoryCheck(DirectoryCheck.NONE);
|
||||
javadoc("-d", outdir,
|
||||
"-sourcepath", testSrc,
|
||||
"-docfilessubdirs",
|
||||
"-excludedocfilessubdir", "subdir-excluded1:subdir-excluded2",
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
checkFiles(true,
|
||||
"pkg/doc-files/subdir-used1/testfile.txt",
|
||||
"pkg/doc-files/subdir-used2/testfile.txt");
|
||||
checkFiles(false,
|
||||
"pkg/doc-files/subdir-excluded1/testfile.txt",
|
||||
"pkg/doc-files/subdir-excluded2/testfile.txt");
|
||||
}
|
||||
}
|
||||
|
@ -25,28 +25,26 @@
|
||||
* @test
|
||||
* @bug 8008949
|
||||
* @summary verify that doc-files get copied
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestDocFiles
|
||||
* @run main TestDocFiles
|
||||
*/
|
||||
|
||||
public class TestDocFiles extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg/doc-files/test.txt", "test file"}};
|
||||
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-d", "tmp", "-sourcepath", SRC_DIR, "pkg"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestDocFiles tester = new TestDocFiles();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/doc-files/test.txt", true,
|
||||
"test file");
|
||||
}
|
||||
}
|
||||
|
@ -28,42 +28,38 @@
|
||||
* If docRoot performs as documented, the test passes.
|
||||
* Make sure that the docRoot tag works with the -bottom option.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestDocRootInlineTag
|
||||
* @run main TestDocRootInlineTag
|
||||
*/
|
||||
|
||||
public class TestDocRootInlineTag extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST = {
|
||||
{ "TestDocRootTag.html",
|
||||
"<a href=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
|
||||
"title=\"class or interface in java.io\"><code>File</code></a>"},
|
||||
{ "TestDocRootTag.html",
|
||||
"<a href=\"./glossary.html\">glossary</a>"},
|
||||
{ "TestDocRootTag.html",
|
||||
"<a href=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
|
||||
"title=\"class or interface in java.io\"><code>Second File Link</code></a>"},
|
||||
{ "TestDocRootTag.html", "The value of @docRoot is \"./\""},
|
||||
{ "index-all.html", "My package page is " +
|
||||
"<a href=\"./pkg/package-summary.html\">here</a>"}
|
||||
};
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-bottom", "The value of @docRoot is \"{@docRoot}\"",
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
|
||||
"-linkoffline", "http://www.java.sun.com/j2se/1.4/docs/api",
|
||||
SRC_DIR, SRC_DIR + "/TestDocRootTag.java", "pkg"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestDocRootInlineTag tester = new TestDocRootInlineTag();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
String uri = "http://www.java.sun.com/j2se/1.4/docs/api";
|
||||
|
||||
javadoc("-bottom", "The value of @docRoot is \"{@docRoot}\"",
|
||||
"-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-linkoffline", uri, testSrc,
|
||||
testSrc("TestDocRootTag.java"), "pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("TestDocRootTag.html", true,
|
||||
"<a href=\"" + uri + "/java/io/File.html?is-external=true\" "
|
||||
+ "title=\"class or interface in java.io\"><code>File</code></a>",
|
||||
"<a href=\"./glossary.html\">glossary</a>",
|
||||
"<a href=\"" + uri + "/java/io/File.html?is-external=true\" "
|
||||
+ "title=\"class or interface in java.io\"><code>Second File Link</code></a>",
|
||||
"The value of @docRoot is \"./\"");
|
||||
|
||||
checkOutput("index-all.html", true,
|
||||
"My package page is <a href=\"./pkg/package-summary.html\">here</a>");
|
||||
}
|
||||
}
|
||||
|
@ -26,109 +26,78 @@
|
||||
* @bug 6553182 8025416 8029504
|
||||
* @summary This test verifies the -Xdocrootparent option.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestDocRootLink
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestDocRootLink
|
||||
*/
|
||||
public class TestDocRootLink extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST1 = {
|
||||
{ "pkg1/C1.html",
|
||||
"Refer <a href=\"../../technotes/guides/index.html\">Here</a>"
|
||||
},
|
||||
{ "pkg1/C1.html",
|
||||
"This <a href=\"../pkg2/C2.html\">Here</a> should not be replaced\n" +
|
||||
" with an absolute link."
|
||||
},
|
||||
{ "pkg1/C1.html",
|
||||
"Testing <a href=\"../technotes/guides/index.html\">Link 1</a> and\n" +
|
||||
" <a href=\"../pkg2/C2.html\">Link 2</a>."
|
||||
},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<a href=\"../../technotes/guides/index.html\">\n" +
|
||||
" Test document 1</a>"
|
||||
},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<a href=\"../pkg2/C2.html\">\n" +
|
||||
" Another Test document 1</a>"
|
||||
},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<a href=\"../technotes/guides/index.html\">\n" +
|
||||
" Another Test document 2.</a>"
|
||||
}
|
||||
};
|
||||
private static final String[][] NEGATED_TEST1 = {
|
||||
{ "pkg1/C1.html",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">"
|
||||
},
|
||||
{ "pkg1/C1.html",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/pkg2/C2.html\">"
|
||||
},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">"
|
||||
},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/pkg2/C2.html\">"
|
||||
}
|
||||
};
|
||||
private static final String[][] TEST2 = {
|
||||
{ "pkg2/C2.html",
|
||||
"Refer <a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">Here</a>"
|
||||
},
|
||||
{ "pkg2/C2.html",
|
||||
"This <a href=\"../pkg1/C1.html\">Here</a> should not be replaced\n" +
|
||||
" with an absolute link."
|
||||
},
|
||||
{ "pkg2/C2.html",
|
||||
"Testing <a href=\"../technotes/guides/index.html\">Link 1</a> and\n" +
|
||||
" <a href=\"../pkg1/C1.html\">Link 2</a>."
|
||||
},
|
||||
{ "pkg2/package-summary.html",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">\n" +
|
||||
" Test document 1</a>"
|
||||
},
|
||||
{ "pkg2/package-summary.html",
|
||||
"<a href=\"../pkg1/C1.html\">\n" +
|
||||
" Another Test document 1</a>"
|
||||
},
|
||||
{ "pkg2/package-summary.html",
|
||||
"<a href=\"../technotes/guides/index.html\">\n" +
|
||||
" Another Test document 2.</a>"
|
||||
}
|
||||
};
|
||||
private static final String[][] NEGATED_TEST2 = {
|
||||
{ "pkg2/C2.html",
|
||||
"<a href=\"../../technotes/guides/index.html\">"
|
||||
},
|
||||
{ "pkg2/C2.html",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/pkg1/C1.html\">"
|
||||
},
|
||||
{ "pkg2/package-summary.html",
|
||||
"<a href=\"../../technotes/guides/index.html\">"
|
||||
},
|
||||
{ "pkg2/package-summary.html",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/pkg1/C1.html\">"
|
||||
}
|
||||
};
|
||||
private static final String[] ARGS1 =
|
||||
new String[]{
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1", "pkg2"
|
||||
};
|
||||
private static final String[] ARGS2 =
|
||||
new String[]{
|
||||
"-d", OUTPUT_DIR + "-1", "-Xdocrootparent",
|
||||
"http://download.oracle.com/javase/7/docs", "-sourcepath",
|
||||
SRC_DIR, "pkg1", "pkg2"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestDocRootLink tester = new TestDocRootLink();
|
||||
tester.run(ARGS1, TEST1, NEGATED_TEST1);
|
||||
tester.run(ARGS2, TEST2, NEGATED_TEST2);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test1() {
|
||||
javadoc("-d", "out-1",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg1", "pkg2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"Refer <a href=\"../../technotes/guides/index.html\">Here</a>",
|
||||
"This <a href=\"../pkg2/C2.html\">Here</a> should not be replaced\n" +
|
||||
" with an absolute link.",
|
||||
"Testing <a href=\"../technotes/guides/index.html\">Link 1</a> and\n" +
|
||||
" <a href=\"../pkg2/C2.html\">Link 2</a>.");
|
||||
|
||||
checkOutput("pkg1/package-summary.html", true,
|
||||
"<a href=\"../../technotes/guides/index.html\">\n" +
|
||||
" Test document 1</a>",
|
||||
"<a href=\"../pkg2/C2.html\">\n" +
|
||||
" Another Test document 1</a>",
|
||||
"<a href=\"../technotes/guides/index.html\">\n" +
|
||||
" Another Test document 2.</a>");
|
||||
|
||||
// TODO: should this check *any* reference to http://download.oracle.com/
|
||||
checkOutput("pkg1/C1.html", false,
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/pkg2/C2.html\">");
|
||||
|
||||
checkOutput("pkg1/package-summary.html", false,
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/pkg2/C2.html\">");
|
||||
}
|
||||
|
||||
@Test
|
||||
void test2() {
|
||||
javadoc("-d", "out-2",
|
||||
"-Xdocrootparent", "http://download.oracle.com/javase/7/docs",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg1", "pkg2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg2/C2.html", true,
|
||||
"Refer <a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">Here</a>",
|
||||
"This <a href=\"../pkg1/C1.html\">Here</a> should not be replaced\n" +
|
||||
" with an absolute link.",
|
||||
"Testing <a href=\"../technotes/guides/index.html\">Link 1</a> and\n" +
|
||||
" <a href=\"../pkg1/C1.html\">Link 2</a>.");
|
||||
|
||||
checkOutput("pkg2/package-summary.html", true,
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">\n" +
|
||||
" Test document 1</a>",
|
||||
"<a href=\"../pkg1/C1.html\">\n" +
|
||||
" Another Test document 1</a>",
|
||||
"<a href=\"../technotes/guides/index.html\">\n" +
|
||||
" Another Test document 2.</a>");
|
||||
|
||||
checkOutput("pkg2/C2.html", false,
|
||||
"<a href=\"../../technotes/guides/index.html\">",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/pkg1/C1.html\">");
|
||||
|
||||
checkOutput("pkg2/package-summary.html", false,
|
||||
"<a href=\"../../technotes/guides/index.html\">",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/pkg1/C1.html\">");
|
||||
}
|
||||
}
|
||||
|
@ -27,28 +27,26 @@
|
||||
* @summary Test to ensure that the doclet does not print out bad
|
||||
* warning messages about duplicate param tags.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestDupParamWarn
|
||||
* @run main TestDupParamWarn
|
||||
*/
|
||||
|
||||
public class TestDupParamWarn extends JavadocTester {
|
||||
|
||||
private static final String[] ARGS =
|
||||
new String[] {"-d", OUTPUT_DIR, "-sourcepath",
|
||||
SRC_DIR + "/", "pkg"};
|
||||
private static final String[][] NEGATED_TEST =
|
||||
new String[][] {{WARNING_OUTPUT,
|
||||
"Parameter \"a\" is documented more than once."}};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
JavadocTester tester = new TestDupParamWarn();
|
||||
tester.run(ARGS, NO_TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput(Output.WARNING, false,
|
||||
"Parameter \"a\" is documented more than once.");
|
||||
}
|
||||
}
|
||||
|
@ -27,39 +27,32 @@
|
||||
* @summary Test to make sure that Javadoc behaves properly when
|
||||
* run on a completely empty class (no comments or members).
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestEmptyClass
|
||||
* @run main TestEmptyClass
|
||||
*/
|
||||
|
||||
public class TestEmptyClass extends JavadocTester {
|
||||
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestEmptyClass tester = new TestEmptyClass();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-classpath", testSrc("src"),
|
||||
"-d", "out",
|
||||
"-sourcepath", testSrc("src"),
|
||||
testSrc("src/Empty.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
//The overview tree should not link to classes that were not documented
|
||||
{ "overview-tree.html", "<A HREF=\"TestEmptyClass.html\">"},
|
||||
checkOutput("overview-tree.html", false,
|
||||
"<A HREF=\"TestEmptyClass.html\">");
|
||||
|
||||
//The index page should not link to classes that were not documented
|
||||
{ "index-all.html", "<A HREF=\"TestEmptyClass.html\">"},
|
||||
};
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-classpath", SRC_DIR + "/src",
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR + "/src",
|
||||
SRC_DIR + "/src/Empty.java"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
TestEmptyClass tester = new TestEmptyClass();
|
||||
int exitCode = tester.run(ARGS, NO_TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
if (exitCode != 0) {
|
||||
throw new Error("Error found while executing Javadoc");
|
||||
}
|
||||
checkOutput("index-all.html", false,
|
||||
"<A HREF=\"TestEmptyClass.html\">");
|
||||
}
|
||||
}
|
||||
|
@ -26,31 +26,26 @@
|
||||
* @bug 5008230
|
||||
* @summary Check the outer class when documenting enclosing class/interface.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestEnclosingClass
|
||||
* @run main TestEnclosingClass
|
||||
*/
|
||||
|
||||
public class TestEnclosingClass extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg/MyClass.MyInterface.html", "Enclosing class:"}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestEnclosingClass tester = new TestEnclosingClass();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/MyClass.MyInterface.html", true,
|
||||
"Enclosing class:");
|
||||
}
|
||||
}
|
||||
|
@ -27,32 +27,28 @@
|
||||
* @summary This test determines if the value of the -encoding option is
|
||||
* properly passed from Javadoc to the source file parser.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestEncoding
|
||||
* @run main TestEncoding
|
||||
*/
|
||||
|
||||
public class TestEncoding extends JavadocTester {
|
||||
|
||||
|
||||
//If ??? is found in the output, the source file was not read with the correct encoding setting.
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
{ "EncodeTest.html", "??"}
|
||||
};
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
|
||||
"-encoding", "iso-8859-1", SRC_DIR + "/EncodeTest.java"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestEncoding tester = new TestEncoding();
|
||||
tester.run(ARGS, NO_TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-encoding", "iso-8859-1",
|
||||
testSrc("EncodeTest.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
// If ??? is found in the output, the source file was not read with the correct encoding setting.
|
||||
checkOutput("EncodeTest.html", false,
|
||||
"??");
|
||||
}
|
||||
}
|
||||
|
@ -28,41 +28,38 @@
|
||||
* are documented properly. The method should still include "implements" or
|
||||
* "overrides" documentation even though the method is external.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester TestExternalOverridenMethod
|
||||
* @run main TestExternalOverridenMethod
|
||||
*/
|
||||
|
||||
public class TestExternalOverridenMethod extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg/XReader.html",
|
||||
"<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
|
||||
"<dd><code><a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true#read--\" " +
|
||||
"title=\"class or interface in java.io\">read</a></code> in class <code>" +
|
||||
"<a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true\" " +
|
||||
"title=\"class or interface in java.io\">FilterReader</a></code></dd>"},
|
||||
{ "pkg/XReader.html",
|
||||
"<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" +
|
||||
"<dd><code><a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true#readInt--\" " +
|
||||
"title=\"class or interface in java.io\">readInt</a></code> in interface <code>" +
|
||||
"<a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true\" " +
|
||||
"title=\"class or interface in java.io\">DataInput</a></code></dd>"}};
|
||||
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
|
||||
"-linkoffline", "http://java.sun.com/j2se/1.4.1/docs/api", SRC_DIR,
|
||||
"pkg"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestExternalOverridenMethod tester = new TestExternalOverridenMethod();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
String uri = "http://java.sun.com/j2se/1.4.1/docs/api";
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-linkoffline", uri, testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/XReader.html", true,
|
||||
"<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
|
||||
+ "<dd><code><a href=\"" + uri + "/java/io/FilterReader.html?is-external=true#read--\" "
|
||||
+ "title=\"class or interface in java.io\">read</a></code> in class <code>"
|
||||
+ "<a href=\"" + uri + "/java/io/FilterReader.html?is-external=true\" "
|
||||
+ "title=\"class or interface in java.io\">FilterReader</a></code></dd>",
|
||||
"<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n"
|
||||
+ "<dd><code><a href=\"" + uri + "/java/io/DataInput.html?is-external=true#readInt--\" "
|
||||
+ "title=\"class or interface in java.io\">readInt</a></code> in interface <code>"
|
||||
+ "<a href=\"" + uri + "/java/io/DataInput.html?is-external=true\" "
|
||||
+ "title=\"class or interface in java.io\">DataInput</a></code></dd>"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -25,14 +25,41 @@
|
||||
* @test
|
||||
* @bug 8000418 8024288
|
||||
* @summary Verify that files use a common Generated By string
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestGeneratedBy
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestGeneratedBy
|
||||
*/
|
||||
|
||||
public class TestGeneratedBy extends JavadocTester {
|
||||
|
||||
private static final String[] FILES = {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestGeneratedBy tester = new TestGeneratedBy();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTimestamp() {
|
||||
javadoc("-d", "out-timestamp",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkTimestamps(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNoTimestamp() {
|
||||
javadoc("-d", "out-notimestamp",
|
||||
"-notimestamp",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkTimestamps(false);
|
||||
}
|
||||
|
||||
void checkTimestamps(boolean timestamp) {
|
||||
checkTimestamps(timestamp,
|
||||
"pkg/MyClass.html",
|
||||
"pkg/package-summary.html",
|
||||
"pkg/package-frame.html",
|
||||
@ -45,63 +72,25 @@ public class TestGeneratedBy extends JavadocTester {
|
||||
"serialized-form.html",
|
||||
"help-doc.html",
|
||||
"index-all.html",
|
||||
"index.html"
|
||||
};
|
||||
"index.html");
|
||||
|
||||
private static final String[] STD_ARGS =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR,
|
||||
"-sourcepath", SRC_DIR,
|
||||
"pkg"
|
||||
};
|
||||
|
||||
private static final String[] NO_TIMESTAMP_ARGS =
|
||||
new String[] {
|
||||
"-notimestamp",
|
||||
"-d", OUTPUT_DIR + "-1",
|
||||
"-sourcepath", SRC_DIR,
|
||||
"pkg"
|
||||
};
|
||||
|
||||
|
||||
private static String[][] getTests(boolean timestamp) {
|
||||
String version = System.getProperty("java.version");
|
||||
String[][] tests = new String[FILES.length][];
|
||||
for (int i = 0; i < FILES.length; i++) {
|
||||
String genBy = "Generated by javadoc";
|
||||
if (timestamp) genBy += " (" + version + ") on ";
|
||||
tests[i] = new String[] {
|
||||
FILES[i], genBy
|
||||
};
|
||||
}
|
||||
return tests;
|
||||
}
|
||||
|
||||
private static String[][] getNegatedTests(boolean timestamp) {
|
||||
String[][] tests = new String[FILES.length][];
|
||||
for (int i = 0; i < FILES.length; i++) {
|
||||
tests[i] = new String[] {
|
||||
FILES[i],
|
||||
void checkTimestamps(boolean timestamp, String... files) {
|
||||
String version = System.getProperty("java.version");
|
||||
String genBy = "Generated by javadoc";
|
||||
if (timestamp) genBy += " (" + version + ") on ";
|
||||
|
||||
for (String file: files) {
|
||||
// genBy is the current standard "Generated by" text
|
||||
checkOutput(file, true, genBy);
|
||||
|
||||
// These are older versions of the "Generated by" text
|
||||
checkOutput(file, false,
|
||||
(timestamp
|
||||
? "Generated by javadoc (version"
|
||||
: "Generated by javadoc ("),
|
||||
"Generated by javadoc on"
|
||||
};
|
||||
}
|
||||
return tests;
|
||||
}
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
TestGeneratedBy tester = new TestGeneratedBy();
|
||||
int ec1 = tester.run(STD_ARGS, getTests(true), getNegatedTests(true));
|
||||
int ec2 = tester.run(NO_TIMESTAMP_ARGS, getTests(false), getNegatedTests(false));
|
||||
tester.printSummary();
|
||||
if (ec1 != 0 || ec2 != 0) {
|
||||
throw new Error("Error found while executing Javadoc");
|
||||
"Generated by javadoc on");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -27,49 +27,46 @@
|
||||
* @summary Test to make sure the -group option does not cause a bad warning
|
||||
* to be printed.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestGroupOption
|
||||
* @run main TestGroupOption
|
||||
*/
|
||||
|
||||
public class TestGroupOption extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS1 = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
|
||||
"-group", "Package One", "pkg1",
|
||||
"-group", "Package Two", "pkg2",
|
||||
"-group", "Package Three", "pkg3",
|
||||
"pkg1", "pkg2", "pkg3"
|
||||
};
|
||||
|
||||
private static final String[] ARGS2 = new String[] {
|
||||
"-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR,
|
||||
"-group", "Package One", "pkg1",
|
||||
"-group", "Package One", "pkg2",
|
||||
"-group", "Package One", "pkg3",
|
||||
"pkg1", "pkg2", "pkg3"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] NEGATED_TEST1 = {{WARNING_OUTPUT, "-group"}};
|
||||
|
||||
private static final String[][] TEST2 = {{WARNING_OUTPUT, "-group"}};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
//Make sure the warning is not printed when -group is used correctly.
|
||||
public static void main(String... args) throws Exception {
|
||||
TestGroupOption tester = new TestGroupOption();
|
||||
tester.run(ARGS1, NO_TEST, NEGATED_TEST1);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test1() {
|
||||
//Make sure the warning is not printed when -group is used correctly.
|
||||
javadoc("-d", "out-1",
|
||||
"-sourcepath", testSrc,
|
||||
"-group", "Package One", "pkg1",
|
||||
"-group", "Package Two", "pkg2",
|
||||
"-group", "Package Three", "pkg3",
|
||||
"pkg1", "pkg2", "pkg3");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput(Output.WARNING, false,
|
||||
"-group");
|
||||
}
|
||||
|
||||
@Test
|
||||
void test2() {
|
||||
//Make sure the warning is printed when -group is not used correctly.
|
||||
tester = new TestGroupOption();
|
||||
tester.run(ARGS2, TEST2, NO_TEST);
|
||||
tester.printSummary();
|
||||
javadoc("-d", "out-2",
|
||||
"-sourcepath", testSrc,
|
||||
"-group", "Package One", "pkg1",
|
||||
"-group", "Package One", "pkg2",
|
||||
"-group", "Package One", "pkg3",
|
||||
"pkg1", "pkg2", "pkg3");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput(Output.WARNING, true,
|
||||
"-group");
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,7 @@
|
||||
* @bug 4905786 6259611
|
||||
* @summary Make sure that headings use the TH tag instead of the TD tag.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestHeadings
|
||||
* @run main TestHeadings
|
||||
@ -34,87 +34,82 @@
|
||||
|
||||
public class TestHeadings extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "-header", "Test Files",
|
||||
"pkg1", "pkg2"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
//Package summary
|
||||
{ "pkg1/package-summary.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">" +
|
||||
"Class</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\"" +
|
||||
">Description</th>"
|
||||
|
||||
{
|
||||
},
|
||||
{ "serialized-form.html"
|
||||
},
|
||||
{ "serialized-form.html"
|
||||
},
|
||||
|
||||
// Class documentation
|
||||
{ "pkg1/C1.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Field and Description</th>"
|
||||
{
|
||||
},
|
||||
{ "pkg1/C1.html",
|
||||
"<h3>Methods inherited from class java.lang.Object</h3>"
|
||||
{ "overview-frame.html"
|
||||
},
|
||||
|
||||
// Class use documentation
|
||||
{ "pkg1/class-use/C1.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Description</th>"
|
||||
},
|
||||
{ "pkg1/class-use/C1.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Field and Description</th>"
|
||||
},
|
||||
|
||||
// Deprecated
|
||||
{ "deprecated-list.html",
|
||||
"<th class=\"colOne\" scope=\"col\">Method and Description</th>"
|
||||
},
|
||||
|
||||
// Constant values
|
||||
{ "constant-values.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">" +
|
||||
"Modifier and Type</th>\n" +
|
||||
"<th scope=\"col\">Constant Field</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Value</th>"
|
||||
},
|
||||
|
||||
// Serialized Form
|
||||
{ "serialized-form.html",
|
||||
"<h2 title=\"Package\">Package pkg1</h2>"
|
||||
},
|
||||
{ "serialized-form.html",
|
||||
"<h3>Class <a href=\"pkg1/C1.html\" title=\"class in pkg1\">" +
|
||||
"pkg1.C1</a> extends java.lang.Object implements Serializable</h3>"
|
||||
},
|
||||
{ "serialized-form.html",
|
||||
"<h3>Serialized Fields</h3>"
|
||||
},
|
||||
|
||||
// Overview Frame
|
||||
{ "overview-frame.html",
|
||||
"<h1 title=\"Test Files\" class=\"bar\">Test Files</h1>"
|
||||
},
|
||||
{ "overview-frame.html",
|
||||
"<title>Overview List</title>"
|
||||
},
|
||||
|
||||
// Overview Summary
|
||||
{ "overview-summary.html",
|
||||
"<title>Overview</title>"
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHeadings tester = new TestHeadings();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-use",
|
||||
"-header", "Test Files",
|
||||
"pkg1", "pkg2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
//Package summary
|
||||
checkOutput("pkg1/package-summary.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">"
|
||||
+ "Class</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\""
|
||||
+ ">Description</th>");
|
||||
|
||||
// Class documentation
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Field and Description</th>",
|
||||
"<h3>Methods inherited from class java.lang.Object</h3>");
|
||||
|
||||
// Class use documentation
|
||||
checkOutput("pkg1/class-use/C1.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Package</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Description</th>",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Field and Description</th>");
|
||||
|
||||
// Deprecated
|
||||
checkOutput("deprecated-list.html", true,
|
||||
"<th class=\"colOne\" scope=\"col\">Method and Description</th>");
|
||||
|
||||
// Constant values
|
||||
checkOutput("constant-values.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">"
|
||||
+ "Modifier and Type</th>\n"
|
||||
+ "<th scope=\"col\">Constant Field</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Value</th>");
|
||||
|
||||
// Serialized Form
|
||||
checkOutput("serialized-form.html", true,
|
||||
"<h2 title=\"Package\">Package pkg1</h2>",
|
||||
"<h3>Class <a href=\"pkg1/C1.html\" title=\"class in pkg1\">"
|
||||
+ "pkg1.C1</a> extends java.lang.Object implements Serializable</h3>",
|
||||
"<h3>Serialized Fields</h3>");
|
||||
|
||||
// Overview Frame
|
||||
checkOutput("overview-frame.html", true,
|
||||
"<h1 title=\"Test Files\" class=\"bar\">Test Files</h1>",
|
||||
"<title>Overview List</title>");
|
||||
|
||||
// Overview Summary
|
||||
checkOutput("overview-summary.html", true,
|
||||
"<title>Overview</title>");
|
||||
}
|
||||
}
|
||||
|
@ -26,32 +26,26 @@
|
||||
* @bug 7132631
|
||||
* @summary Make sure that the help file is generated correctly.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestHelpFile
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestHelpFile
|
||||
*/
|
||||
|
||||
public class TestHelpFile extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
|
||||
SRC_DIR + "/TestHelpFile.java"
|
||||
};
|
||||
|
||||
private static final String[][] TEST = {
|
||||
{ "help-doc.html",
|
||||
"<a href=\"constant-values.html\">Constant Field Values</a>"
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHelpFile tester = new TestHelpFile();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
testSrc("TestHelpFile.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("help-doc.html", true,
|
||||
"<a href=\"constant-values.html\">Constant Field Values</a>");
|
||||
}
|
||||
}
|
||||
|
@ -27,81 +27,79 @@
|
||||
* @summary Make sure that the -help option works properly. Make sure
|
||||
* the help link appears in the documentation.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester TestHelpOption
|
||||
* @run main TestHelpOption
|
||||
*/
|
||||
|
||||
public class TestHelpOption extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-help",
|
||||
SRC_DIR + "/TestHelpOption.java"
|
||||
};
|
||||
|
||||
private static final String[] ARGS2 = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
|
||||
SRC_DIR + "/TestHelpOption.java"
|
||||
};
|
||||
|
||||
private static final String[][] TEST = {
|
||||
{STANDARD_OUTPUT, "-d "},
|
||||
{STANDARD_OUTPUT, "-use "},
|
||||
{STANDARD_OUTPUT, "-version "},
|
||||
{STANDARD_OUTPUT, "-author "},
|
||||
{STANDARD_OUTPUT, "-docfilessubdirs "},
|
||||
{STANDARD_OUTPUT, "-splitindex "},
|
||||
{STANDARD_OUTPUT, "-windowtitle "},
|
||||
{STANDARD_OUTPUT, "-doctitle "},
|
||||
{STANDARD_OUTPUT, "-header "},
|
||||
{STANDARD_OUTPUT, "-footer "},
|
||||
{STANDARD_OUTPUT, "-bottom "},
|
||||
{STANDARD_OUTPUT, "-link "},
|
||||
{STANDARD_OUTPUT, "-linkoffline "},
|
||||
{STANDARD_OUTPUT, "-excludedocfilessubdir "},
|
||||
{STANDARD_OUTPUT, "-group "},
|
||||
{STANDARD_OUTPUT, "-nocomment "},
|
||||
{STANDARD_OUTPUT, "-nodeprecated "},
|
||||
{STANDARD_OUTPUT, "-noqualifier "},
|
||||
{STANDARD_OUTPUT, "-nosince "},
|
||||
{STANDARD_OUTPUT, "-notimestamp "},
|
||||
{STANDARD_OUTPUT, "-nodeprecatedlist "},
|
||||
{STANDARD_OUTPUT, "-notree "},
|
||||
{STANDARD_OUTPUT, "-noindex "},
|
||||
{STANDARD_OUTPUT, "-nohelp "},
|
||||
{STANDARD_OUTPUT, "-nonavbar "},
|
||||
{STANDARD_OUTPUT, "-serialwarn "},
|
||||
{STANDARD_OUTPUT, "-tag "},
|
||||
{STANDARD_OUTPUT, "-taglet "},
|
||||
{STANDARD_OUTPUT, "-tagletpath "},
|
||||
{STANDARD_OUTPUT, "-charset "},
|
||||
{STANDARD_OUTPUT, "-helpfile "},
|
||||
{STANDARD_OUTPUT, "-linksource "},
|
||||
{STANDARD_OUTPUT, "-sourcetab "},
|
||||
{STANDARD_OUTPUT, "-keywords "},
|
||||
{STANDARD_OUTPUT, "-stylesheetfile "},
|
||||
{STANDARD_OUTPUT, "-docencoding "},
|
||||
};
|
||||
|
||||
private static final String[][] TEST2 = {
|
||||
{ "TestHelpOption.html",
|
||||
"<li><a href=\"help-doc.html\">Help</a></li>"
|
||||
},
|
||||
};
|
||||
|
||||
//The help option should not crash the doclet.
|
||||
private static final int EXPECTED_EXIT_CODE = 0;
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHelpOption tester = new TestHelpOption();
|
||||
int actualExitCode = tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.checkExitCode(EXPECTED_EXIT_CODE, actualExitCode);
|
||||
tester.run(ARGS2, TEST2, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testWithOption() {
|
||||
javadoc("-d", "out1",
|
||||
"-sourcepath", testSrc,
|
||||
"-help",
|
||||
testSrc("TestHelpOption.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testWithoutOption() {
|
||||
javadoc("-d", "out2",
|
||||
"-sourcepath", testSrc,
|
||||
testSrc("TestHelpOption.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput(false);
|
||||
}
|
||||
|
||||
private void checkOutput(boolean withOption) {
|
||||
checkOutput(Output.STDOUT, withOption,
|
||||
"-d ",
|
||||
"-use ",
|
||||
"-version ",
|
||||
"-author ",
|
||||
"-docfilessubdirs ",
|
||||
"-splitindex ",
|
||||
"-windowtitle ",
|
||||
"-doctitle ",
|
||||
"-header ",
|
||||
"-footer ",
|
||||
"-bottom ",
|
||||
"-link ",
|
||||
"-linkoffline ",
|
||||
"-excludedocfilessubdir ",
|
||||
"-group ",
|
||||
"-nocomment ",
|
||||
"-nodeprecated ",
|
||||
"-noqualifier ",
|
||||
"-nosince ",
|
||||
"-notimestamp ",
|
||||
"-nodeprecatedlist ",
|
||||
"-notree ",
|
||||
"-noindex ",
|
||||
"-nohelp ",
|
||||
"-nonavbar ",
|
||||
"-serialwarn ",
|
||||
"-tag ",
|
||||
"-taglet ",
|
||||
"-tagletpath ",
|
||||
"-charset ",
|
||||
"-helpfile ",
|
||||
"-linksource ",
|
||||
"-sourcetab ",
|
||||
"-keywords ",
|
||||
"-stylesheetfile ",
|
||||
"-docencoding ");
|
||||
|
||||
checkOutput("TestHelpOption.html", !withOption,
|
||||
"<li><a href=\"help-doc.html\">Help</a></li>");
|
||||
}
|
||||
}
|
||||
|
@ -27,34 +27,37 @@
|
||||
* @summary Test to make sure that hidden overriden members are not
|
||||
* documented as inherited.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestHiddenMembers
|
||||
* @run main TestHiddenMembers
|
||||
*/
|
||||
|
||||
public class TestHiddenMembers extends JavadocTester {
|
||||
|
||||
|
||||
//We should not inherit any members from BaseClass because they are all overriden and hidden
|
||||
//(declared as private).
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
{ "pkg/SubClass.html",
|
||||
"inherited from class pkg.<A HREF=\"../pkg/BaseClass.html\">BaseClass</A>"}
|
||||
{ }
|
||||
};
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
|
||||
"pkg"
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHiddenMembers tester = new TestHiddenMembers();
|
||||
tester.run(ARGS, NO_TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
// We should not inherit any members from BaseClass because they are all overriden and hidden
|
||||
// (declared as private).
|
||||
// TODO: check normal case of generated tags: upper case of lower case
|
||||
checkOutput("pkg/SubClass.html", false,
|
||||
"inherited from class pkg.<A HREF=\"../pkg/BaseClass.html\">BaseClass</A>");
|
||||
}
|
||||
}
|
||||
|
@ -26,73 +26,57 @@
|
||||
* @bug 4663254 8016328 8025633 8026567
|
||||
* @summary Verify that spaces do not appear in hrefs and anchors.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestHref
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestHref
|
||||
*/
|
||||
|
||||
public class TestHref extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-linkoffline",
|
||||
"http://java.sun.com/j2se/1.4/docs/api/", SRC_DIR, "pkg"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
//External link.
|
||||
{ "pkg/C1.html",
|
||||
"href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait-long-int-\""
|
||||
},
|
||||
//Member summary table link.
|
||||
{ "pkg/C1.html",
|
||||
"href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\""
|
||||
},
|
||||
//Anchor test.
|
||||
{ "pkg/C1.html",
|
||||
"<a name=\"method-int-int-java.util.ArrayList-\">\n" +
|
||||
"<!-- -->\n" +
|
||||
"</a>"
|
||||
},
|
||||
//Backward compatibility anchor test.
|
||||
{ "pkg/C1.html",
|
||||
"<a name=\"method-int-int-java.util.ArrayList-\">\n" +
|
||||
"<!-- -->\n" +
|
||||
"</a>"
|
||||
},
|
||||
//{@link} test.
|
||||
{ "pkg/C2.html",
|
||||
"Link: <a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">"
|
||||
},
|
||||
//@see test.
|
||||
{ "pkg/C2.html",
|
||||
"See Also:</span></dt>\n" +
|
||||
"<dd><a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">"
|
||||
},
|
||||
|
||||
//Header does not link to the page itself.
|
||||
{ "pkg/C4.html",
|
||||
"Class C4<E extends C4<E>></h2>"
|
||||
},
|
||||
|
||||
//Signature does not link to the page itself.
|
||||
{ "pkg/C4.html",
|
||||
"public abstract class <span class=\"typeNameLabel\">C4<E extends C4<E>></span>"
|
||||
},
|
||||
};
|
||||
private static final String[][] NEGATED_TEST =
|
||||
{
|
||||
{WARNING_OUTPUT, "<a> tag is malformed"}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHref tester = new TestHref();
|
||||
tester.run(ARGS, TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-Xdoclint:none",
|
||||
"-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-linkoffline", "http://java.sun.com/j2se/1.4/docs/api/", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/C1.html", true,
|
||||
//External link.
|
||||
"href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait-long-int-\"",
|
||||
//Member summary table link.
|
||||
"href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\"",
|
||||
//Anchor test.
|
||||
"<a name=\"method-int-int-java.util.ArrayList-\">\n"
|
||||
+ "<!-- -->\n"
|
||||
+ "</a>",
|
||||
//Backward compatibility anchor test."pkg/C1.html",
|
||||
"<a name=\"method-int-int-java.util.ArrayList-\">\n"
|
||||
+ "<!-- -->\n"
|
||||
+ "</a>");
|
||||
|
||||
checkOutput("pkg/C2.html", true,
|
||||
//{@link} test.
|
||||
"Link: <a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">",
|
||||
//@see test.
|
||||
"See Also:</span></dt>\n"
|
||||
+ "<dd><a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">"
|
||||
);
|
||||
|
||||
checkOutput("pkg/C4.html", true,
|
||||
//Header does not link to the page itself.
|
||||
"Class C4<E extends C4<E>></h2>",
|
||||
//Signature does not link to the page itself.
|
||||
"public abstract class <span class=\"typeNameLabel\">C4<E extends C4<E>></span>"
|
||||
);
|
||||
|
||||
checkOutput(Output.WARNING, false,
|
||||
"<a> tag is malformed");
|
||||
}
|
||||
}
|
||||
|
@ -27,26 +27,22 @@
|
||||
* @summary Determine if Hrefs are processed properly when they
|
||||
* appear in doc comments.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestHrefInDocComment
|
||||
* @run main TestHrefInDocComment
|
||||
*/
|
||||
|
||||
public class TestHrefInDocComment extends JavadocTester {
|
||||
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHrefInDocComment tester = new TestHrefInDocComment();
|
||||
if (tester.run(ARGS, NO_TEST, NO_TEST) != 0) {
|
||||
throw new Error("Javadoc failed to execute properly with given source.");
|
||||
}
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc, "pkg");
|
||||
checkExit(Exit.OK);
|
||||
}
|
||||
}
|
||||
|
@ -27,32 +27,26 @@
|
||||
* @summary The field detail comment should not show up in the output if there
|
||||
* are no fields to document.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestHtmlComments
|
||||
* @run main TestHtmlComments
|
||||
*/
|
||||
|
||||
public class TestHtmlComments extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] NEGATED_TEST = {
|
||||
{ "C.html",
|
||||
"<!-- ============ FIELD DETAIL =========== -->"}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHtmlComments tester = new TestHtmlComments();
|
||||
tester.run(ARGS, NO_TEST, NEGATED_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void run() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
testSrc("C.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("C.html", false,
|
||||
"<!-- ============ FIELD DETAIL =========== -->");
|
||||
}
|
||||
}
|
||||
|
@ -28,159 +28,250 @@
|
||||
* @bug 6786690 6820360 8025633 8026567
|
||||
* @summary This test verifies the nesting of definition list tags.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestHtmlDefinitionListTag
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestHtmlDefinitionListTag
|
||||
*/
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class TestHtmlDefinitionListTag extends JavadocTester {
|
||||
|
||||
// Test common to all runs of javadoc. The class signature should print
|
||||
// properly enclosed definition list tags and the Annotation Type
|
||||
// Optional Element should print properly nested definition list tags
|
||||
// for default value.
|
||||
private static final String[][] TEST_ALL = {
|
||||
{ "pkg1/C1.html",
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHtmlDefinitionListTag tester = new TestHtmlDefinitionListTag();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_Comment_Deprecated() {
|
||||
// tester.run(ARGS1, TEST_ALL, NEGATED_TEST_NO_C5);
|
||||
// tester.runTestsOnHTML(NO_TEST, NEGATED_TEST_C5);
|
||||
// tester.runTestsOnHTML(TEST_CMNT_DEPR, NO_TEST);
|
||||
javadoc("-Xdoclint:none",
|
||||
"-d", "out-1",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg1");
|
||||
checkExit(Exit.OK);
|
||||
checkCommon(true);
|
||||
checkCommentDeprecated(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_NoComment_Deprecated() {
|
||||
// tester.run(ARGS2, TEST_ALL, NEGATED_TEST_NO_C5);
|
||||
// tester.runTestsOnHTML(NO_TEST, NEGATED_TEST_C5);
|
||||
// tester.runTestsOnHTML(NO_TEST, TEST_CMNT_DEPR);
|
||||
javadoc("-Xdoclint:none",
|
||||
"-d", "out-2",
|
||||
"-nocomment",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg1");
|
||||
checkExit(Exit.OK);
|
||||
checkCommon(true);
|
||||
checkCommentDeprecated(false); // ??
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_Comment_NoDeprecated() {
|
||||
// tester.run(ARGS3, TEST_ALL, NEGATED_TEST_NO_C5);
|
||||
// tester.runTestsOnHTML(TEST_NODEPR, TEST_NOCMNT_NODEPR);
|
||||
javadoc("-Xdoclint:none",
|
||||
"-d", "out-3",
|
||||
"-nodeprecated",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg1");
|
||||
checkExit(Exit.OK);
|
||||
checkCommon(false);
|
||||
checkNoDeprecated();
|
||||
checkNoCommentNoDeprecated(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNoCommentNoDeprecated() {
|
||||
// tester.run(ARGS4, TEST_ALL, NEGATED_TEST_NO_C5);
|
||||
// tester.runTestsOnHTML(TEST_NOCMNT_NODEPR, TEST_CMNT_DEPR);
|
||||
javadoc("-Xdoclint:none",
|
||||
"-d", "out-4",
|
||||
"-nocomment",
|
||||
"-nodeprecated",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg1");
|
||||
checkExit(Exit.OK);
|
||||
checkCommon(false);
|
||||
checkNoCommentNoDeprecated(true);
|
||||
checkCommentDeprecated(false);
|
||||
}
|
||||
|
||||
void checkCommon(boolean checkC5) {
|
||||
// Test common to all runs of javadoc. The class signature should print
|
||||
// properly enclosed definition list tags and the Annotation Type
|
||||
// Optional Element should print properly nested definition list tags
|
||||
// for default value.
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"<pre>public class <span class=\"typeNameLabel\">C1</span>\n" +
|
||||
"extends java.lang.Object\n" +
|
||||
"implements java.io.Serializable</pre>"},
|
||||
{ "pkg1/C4.html",
|
||||
"implements java.io.Serializable</pre>");
|
||||
checkOutput("pkg1/C4.html", true,
|
||||
"<dl>\n" +
|
||||
"<dt>Default:</dt>\n" +
|
||||
"<dd>true</dd>\n" +
|
||||
"</dl>"}};
|
||||
"</dl>");
|
||||
|
||||
// Test for normal run of javadoc in which various ClassDocs and
|
||||
// serialized form should have properly nested definition list tags
|
||||
// enclosing comments, tags and deprecated information.
|
||||
private static final String[][] TEST_CMNT_DEPR = {
|
||||
{ "pkg1/package-summary.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
|
||||
"<dd>JDK1.0</dd>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C1.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
|
||||
"<dd>JDK1.0</dd>\n" +
|
||||
"<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
|
||||
"<dd><a href=\"../pkg1/C2.html\" title=\"class in pkg1\"><code>" +
|
||||
"C2</code></a>, \n" +
|
||||
"<a href=\"../serialized-form.html#pkg1.C1\">" +
|
||||
"Serialized Form</a></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C1.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
|
||||
"<dd>1.4</dd>\n" +
|
||||
"<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
|
||||
"<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>setUndecorated(boolean)</code></a></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C1.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"paramLabel\">Parameters:</span></dt>\n" +
|
||||
"<dd><code>title</code> - the title</dd>\n" +
|
||||
"<dd><code>test</code> - boolean value" +
|
||||
"</dd>\n" +
|
||||
"<dt><span class=\"throwsLabel\">Throws:</span></dt>\n" +
|
||||
"<dd><code>java.lang.IllegalArgumentException</code> - if the " +
|
||||
"<code>owner</code>'s\n" +
|
||||
" <code>GraphicsConfiguration</code> is not from a screen " +
|
||||
"device</dd>\n" +
|
||||
"<dd><code>HeadlessException</code></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C1.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"paramLabel\">Parameters:</span></dt>\n" +
|
||||
"<dd><code>undecorated" +
|
||||
"</code> - <code>true</code> if no decorations are\n" +
|
||||
" to be enabled;\n" +
|
||||
" <code>false</code> " +
|
||||
"if decorations are to be enabled.</dd>\n" +
|
||||
"<dt><span class=\"simpleTagLabel\">Since:" +
|
||||
"</span></dt>\n" +
|
||||
"<dd>1.4</dd>\n" +
|
||||
"<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
|
||||
"<dd>" +
|
||||
"<a href=\"../pkg1/C1.html#readObject--\"><code>readObject()" +
|
||||
"</code></a></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C1.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"throwsLabel\">Throws:</span></dt>\n" +
|
||||
"<dd><code>java.io.IOException</code></dd>\n" +
|
||||
"<dt><span class=\"seeLabel\">See Also:" +
|
||||
"</span></dt>\n" +
|
||||
"<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>setUndecorated(boolean)</code></a></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C2.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"paramLabel\">Parameters:" +
|
||||
"</span></dt>\n" +
|
||||
"<dd><code>set</code> - boolean</dd>\n" +
|
||||
"<dt><span class=\"simpleTagLabel\">" +
|
||||
"Since:</span></dt>\n" +
|
||||
"<dd>1.4</dd>\n" +
|
||||
"</dl>"},
|
||||
{ "serialized-form.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"throwsLabel\">Throws:</span>" +
|
||||
"</dt>\n" +
|
||||
"<dd><code>" +
|
||||
"java.io.IOException</code></dd>\n" +
|
||||
"<dt><span class=\"seeLabel\">See Also:</span>" +
|
||||
"</dt>\n" +
|
||||
"<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "serialized-form.html",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>" +
|
||||
" <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
|
||||
" <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
|
||||
"<div class=\"block\">This field indicates whether the C1 is " +
|
||||
"undecorated.</div>\n" +
|
||||
" \n" +
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
|
||||
"<dd>1.4</dd>\n" +
|
||||
"<dt><span class=\"seeLabel\">See Also:</span>" +
|
||||
"</dt>\n" +
|
||||
"<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "serialized-form.html",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>" +
|
||||
" <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
|
||||
" <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
|
||||
"<div class=\"block\">Reads the object stream.</div>\n" +
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"throwsLabel\">Throws:" +
|
||||
"</span></dt>\n" +
|
||||
"<dd><code><code>" +
|
||||
"IOException</code></code></dd>\n" +
|
||||
"<dd><code>java.io.IOException</code></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "serialized-form.html",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>" +
|
||||
" </div>\n" +
|
||||
"<div class=\"block\">The name for this class.</div>"}};
|
||||
// Test for valid HTML generation which should not comprise of empty
|
||||
// definition list tags.
|
||||
List<String> files= new ArrayList<>(Arrays.asList(
|
||||
"pkg1/package-summary.html",
|
||||
"pkg1/C1.html",
|
||||
"pkg1/C1.ModalExclusionType.html",
|
||||
"pkg1/C2.html",
|
||||
"pkg1/C2.ModalType.html",
|
||||
"pkg1/C3.html",
|
||||
"pkg1/C4.html",
|
||||
"overview-tree.html",
|
||||
"serialized-form.html"
|
||||
));
|
||||
|
||||
// Test with -nodeprecated option. The ClassDocs should have properly nested
|
||||
// definition list tags enclosing comments and tags. The ClassDocs should not
|
||||
// display definition list for deprecated information. The serialized form
|
||||
// should display properly nested definition list tags for comments, tags
|
||||
// and deprecated information.
|
||||
private static final String[][] TEST_NODEPR = {
|
||||
{ "pkg1/package-summary.html",
|
||||
if (checkC5)
|
||||
files.add("pkg1/C5.html");
|
||||
|
||||
for (String f: files) {
|
||||
checkOutput(f, false,
|
||||
"<dl></dl>",
|
||||
"<dl>\n</dl>");
|
||||
}
|
||||
}
|
||||
|
||||
void checkCommentDeprecated(boolean expectFound) {
|
||||
// Test for normal run of javadoc in which various ClassDocs and
|
||||
// serialized form should have properly nested definition list tags
|
||||
// enclosing comments, tags and deprecated information.
|
||||
checkOutput("pkg1/package-summary.html", expectFound,
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
|
||||
"<dd>JDK1.0</dd>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C1.html",
|
||||
"</dl>");
|
||||
|
||||
checkOutput("pkg1/C1.html", expectFound,
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
|
||||
+ "<dd>JDK1.0</dd>\n"
|
||||
+ "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
|
||||
+ "<dd><a href=\"../pkg1/C2.html\" title=\"class in pkg1\"><code>"
|
||||
+ "C2</code></a>, \n"
|
||||
+ "<a href=\"../serialized-form.html#pkg1.C1\">"
|
||||
+ "Serialized Form</a></dd>\n"
|
||||
+ "</dl>",
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
|
||||
+ "<dd>1.4</dd>\n"
|
||||
+ "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
|
||||
+ "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">"
|
||||
+ "<code>setUndecorated(boolean)</code></a></dd>\n"
|
||||
+ "</dl>",
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n"
|
||||
+ "<dd><code>title</code> - the title</dd>\n"
|
||||
+ "<dd><code>test</code> - boolean value"
|
||||
+ "</dd>\n"
|
||||
+ "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n"
|
||||
+ "<dd><code>java.lang.IllegalArgumentException</code> - if the "
|
||||
+ "<code>owner</code>'s\n"
|
||||
+ " <code>GraphicsConfiguration</code> is not from a screen "
|
||||
+ "device</dd>\n"
|
||||
+ "<dd><code>HeadlessException</code></dd>\n"
|
||||
+ "</dl>",
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n"
|
||||
+ "<dd><code>undecorated"
|
||||
+ "</code> - <code>true</code> if no decorations are\n"
|
||||
+ " to be enabled;\n"
|
||||
+ " <code>false</code> "
|
||||
+ "if decorations are to be enabled.</dd>\n"
|
||||
+ "<dt><span class=\"simpleTagLabel\">Since:"
|
||||
+ "</span></dt>\n"
|
||||
+ "<dd>1.4</dd>\n"
|
||||
+ "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
|
||||
+ "<dd>"
|
||||
+ "<a href=\"../pkg1/C1.html#readObject--\"><code>readObject()"
|
||||
+ "</code></a></dd>\n"
|
||||
+ "</dl>",
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n"
|
||||
+ "<dd><code>java.io.IOException</code></dd>\n"
|
||||
+ "<dt><span class=\"seeLabel\">See Also:"
|
||||
+ "</span></dt>\n"
|
||||
+ "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">"
|
||||
+ "<code>setUndecorated(boolean)</code></a></dd>\n"
|
||||
+ "</dl>");
|
||||
|
||||
checkOutput("pkg1/C2.html", expectFound,
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"paramLabel\">Parameters:"
|
||||
+ "</span></dt>\n"
|
||||
+ "<dd><code>set</code> - boolean</dd>\n"
|
||||
+ "<dt><span class=\"simpleTagLabel\">"
|
||||
+ "Since:</span></dt>\n"
|
||||
+ "<dd>1.4</dd>\n"
|
||||
+ "</dl>");
|
||||
|
||||
checkOutput("serialized-form.html", expectFound,
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"throwsLabel\">Throws:</span>"
|
||||
+ "</dt>\n"
|
||||
+ "<dd><code>"
|
||||
+ "java.io.IOException</code></dd>\n"
|
||||
+ "<dt><span class=\"seeLabel\">See Also:</span>"
|
||||
+ "</dt>\n"
|
||||
+ "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
|
||||
+ "<code>C1.setUndecorated(boolean)</code></a></dd>\n"
|
||||
+ "</dl>",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>"
|
||||
+ " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n"
|
||||
+ " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
|
||||
+ "<code>setUndecorated(boolean)</code></a>.</span></div>\n"
|
||||
+ "<div class=\"block\">This field indicates whether the C1 is "
|
||||
+ "undecorated.</div>\n"
|
||||
+ " \n"
|
||||
+ "<dl>\n"
|
||||
+ "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
|
||||
+ "<dd>1.4</dd>\n"
|
||||
+ "<dt><span class=\"seeLabel\">See Also:</span>"
|
||||
+ "</dt>\n"
|
||||
+ "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
|
||||
+ "<code>C1.setUndecorated(boolean)</code></a></dd>\n"
|
||||
+ "</dl>",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>"
|
||||
+ " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n"
|
||||
+ " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
|
||||
+ "<code>setUndecorated(boolean)</code></a>.</span></div>\n"
|
||||
+ "<div class=\"block\">Reads the object stream.</div>\n"
|
||||
+ "<dl>\n"
|
||||
+ "<dt><span class=\"throwsLabel\">Throws:"
|
||||
+ "</span></dt>\n"
|
||||
+ "<dd><code><code>"
|
||||
+ "IOException</code></code></dd>\n"
|
||||
+ "<dd><code>java.io.IOException</code></dd>\n"
|
||||
+ "</dl>",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>"
|
||||
+ " </div>\n"
|
||||
+ "<div class=\"block\">The name for this class.</div>");
|
||||
}
|
||||
|
||||
void checkNoDeprecated() {
|
||||
// Test with -nodeprecated option. The ClassDocs should have properly nested
|
||||
// definition list tags enclosing comments and tags. The ClassDocs should not
|
||||
// display definition list for deprecated information. The serialized form
|
||||
// should display properly nested definition list tags for comments, tags
|
||||
// and deprecated information.
|
||||
checkOutput("pkg1/package-summary.html", true,
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
|
||||
"<dd>JDK1.0</dd>\n" +
|
||||
"</dl>");
|
||||
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"simpleTagLabel\">Since:</span>" +
|
||||
"</dt>\n" +
|
||||
@ -191,216 +282,124 @@ public class TestHtmlDefinitionListTag extends JavadocTester {
|
||||
"<code>C2</code></a>, \n" +
|
||||
"<a href=\"../serialized-form.html#pkg1.C1\">" +
|
||||
"Serialized Form</a></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C1.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"paramLabel\">Parameters:" +
|
||||
"</span></dt>\n" +
|
||||
"<dd><code>title</code> - the title</dd>\n" +
|
||||
"<dd><code>" +
|
||||
"test</code> - boolean value</dd>\n" +
|
||||
"<dt><span class=\"throwsLabel\">Throws:" +
|
||||
"</span></dt>\n" +
|
||||
"<dd><code>java.lang.IllegalArgumentException" +
|
||||
"</code> - if the <code>owner</code>'s\n" +
|
||||
" <code>GraphicsConfiguration" +
|
||||
"</code> is not from a screen device</dd>\n" +
|
||||
"<dd><code>" +
|
||||
"HeadlessException</code></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C1.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"paramLabel\">Parameters:" +
|
||||
"</span></dt>\n" +
|
||||
"<dd><code>undecorated</code> - <code>true</code>" +
|
||||
" if no decorations are\n" +
|
||||
" to be enabled;\n" +
|
||||
" <code>false</code> if decorations are to be enabled." +
|
||||
"</dd>\n" +
|
||||
"<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
|
||||
"<dd>1.4</dd>\n" +
|
||||
"<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
|
||||
"<dd><a href=\"../pkg1/C1.html#readObject--\">" +
|
||||
"<code>readObject()</code></a></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C1.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"throwsLabel\">Throws:</span>" +
|
||||
"</dt>\n" +
|
||||
"<dd><code>java.io.IOException</code></dd>\n" +
|
||||
"<dt>" +
|
||||
"<span class=\"seeLabel\">See Also:</span></dt>\n" +
|
||||
"<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>setUndecorated(boolean)</code></a></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "serialized-form.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"throwsLabel\">Throws:</span>" +
|
||||
"</dt>\n" +
|
||||
"<dd><code>" +
|
||||
"java.io.IOException</code></dd>\n" +
|
||||
"<dt><span class=\"seeLabel\">See Also:</span>" +
|
||||
"</dt>\n" +
|
||||
"<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "serialized-form.html",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>" +
|
||||
" <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
|
||||
" <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
|
||||
"<div class=\"block\">This field indicates whether the C1 is " +
|
||||
"undecorated.</div>\n" +
|
||||
" \n" +
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
|
||||
"<dd>1.4</dd>\n" +
|
||||
"<dt><span class=\"seeLabel\">See Also:</span>" +
|
||||
"</dt>\n" +
|
||||
"<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "serialized-form.html",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>" +
|
||||
" <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
|
||||
" <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
|
||||
"<div class=\"block\">Reads the object stream.</div>\n" +
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"throwsLabel\">Throws:" +
|
||||
"</span></dt>\n" +
|
||||
"<dd><code><code>" +
|
||||
"IOException</code></code></dd>\n" +
|
||||
"<dd><code>java.io.IOException</code></dd>\n" +
|
||||
"</dl>"},
|
||||
{ "serialized-form.html",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>" +
|
||||
" </div>\n" +
|
||||
"<div class=\"block\">" +
|
||||
"The name for this class.</div>"}};
|
||||
"</dl>");
|
||||
|
||||
// Test with -nocomment and -nodeprecated options. The ClassDocs whould
|
||||
// not display definition lists for any member details.
|
||||
private static final String[][] TEST_NOCMNT_NODEPR = {
|
||||
{ "pkg1/C1.html",
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"paramLabel\">Parameters:"
|
||||
+ "</span></dt>\n"
|
||||
+ "<dd><code>title</code> - the title</dd>\n"
|
||||
+ "<dd><code>"
|
||||
+ "test</code> - boolean value</dd>\n"
|
||||
+ "<dt><span class=\"throwsLabel\">Throws:"
|
||||
+ "</span></dt>\n"
|
||||
+ "<dd><code>java.lang.IllegalArgumentException"
|
||||
+ "</code> - if the <code>owner</code>'s\n"
|
||||
+ " <code>GraphicsConfiguration"
|
||||
+ "</code> is not from a screen device</dd>\n"
|
||||
+ "<dd><code>"
|
||||
+ "HeadlessException</code></dd>\n"
|
||||
+ "</dl>",
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"paramLabel\">Parameters:"
|
||||
+ "</span></dt>\n"
|
||||
+ "<dd><code>undecorated</code> - <code>true</code>"
|
||||
+ " if no decorations are\n"
|
||||
+ " to be enabled;\n"
|
||||
+ " <code>false</code> if decorations are to be enabled."
|
||||
+ "</dd>\n"
|
||||
+ "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
|
||||
+ "<dd>1.4</dd>\n"
|
||||
+ "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
|
||||
+ "<dd><a href=\"../pkg1/C1.html#readObject--\">"
|
||||
+ "<code>readObject()</code></a></dd>\n"
|
||||
+ "</dl>",
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"throwsLabel\">Throws:</span>"
|
||||
+ "</dt>\n"
|
||||
+ "<dd><code>java.io.IOException</code></dd>\n"
|
||||
+ "<dt>"
|
||||
+ "<span class=\"seeLabel\">See Also:</span></dt>\n"
|
||||
+ "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">"
|
||||
+ "<code>setUndecorated(boolean)</code></a></dd>\n"
|
||||
+ "</dl>");
|
||||
|
||||
checkOutput("serialized-form.html", true,
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"throwsLabel\">Throws:</span>"
|
||||
+ "</dt>\n"
|
||||
+ "<dd><code>"
|
||||
+ "java.io.IOException</code></dd>\n"
|
||||
+ "<dt><span class=\"seeLabel\">See Also:</span>"
|
||||
+ "</dt>\n"
|
||||
+ "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
|
||||
+ "<code>C1.setUndecorated(boolean)</code></a></dd>\n"
|
||||
+ "</dl>",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>"
|
||||
+ " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n"
|
||||
+ " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
|
||||
+ "<code>setUndecorated(boolean)</code></a>.</span></div>\n"
|
||||
+ "<div class=\"block\">This field indicates whether the C1 is "
|
||||
+ "undecorated.</div>\n"
|
||||
+ " \n"
|
||||
+ "<dl>\n"
|
||||
+ "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
|
||||
+ "<dd>1.4</dd>\n"
|
||||
+ "<dt><span class=\"seeLabel\">See Also:</span>"
|
||||
+ "</dt>\n"
|
||||
+ "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
|
||||
+ "<code>C1.setUndecorated(boolean)</code></a></dd>\n"
|
||||
+ "</dl>",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>"
|
||||
+ " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n"
|
||||
+ " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
|
||||
+ "<code>setUndecorated(boolean)</code></a>.</span></div>\n"
|
||||
+ "<div class=\"block\">Reads the object stream.</div>\n"
|
||||
+ "<dl>\n"
|
||||
+ "<dt><span class=\"throwsLabel\">Throws:"
|
||||
+ "</span></dt>\n"
|
||||
+ "<dd><code><code>"
|
||||
+ "IOException</code></code></dd>\n"
|
||||
+ "<dd><code>java.io.IOException</code></dd>\n"
|
||||
+ "</dl>",
|
||||
"<span class=\"deprecatedLabel\">Deprecated.</span>"
|
||||
+ " </div>\n"
|
||||
+ "<div class=\"block\">"
|
||||
+ "The name for this class.</div>");
|
||||
}
|
||||
|
||||
void checkNoCommentNoDeprecated(boolean expectFound) {
|
||||
// Test with -nocomment and -nodeprecated options. The ClassDocs whould
|
||||
// not display definition lists for any member details.
|
||||
checkOutput("pkg1/C1.html", expectFound,
|
||||
"<pre>public void readObject()\n" +
|
||||
" throws java.io.IOException</pre>\n" +
|
||||
"</li>"},
|
||||
{ "pkg1/C2.html", "<pre>public C2()</pre>\n" +
|
||||
"</li>"},
|
||||
{ "pkg1/C1.ModalExclusionType.html", "<pre>public " +
|
||||
"</li>");
|
||||
|
||||
checkOutput("pkg1/C2.html", expectFound,
|
||||
"<pre>public C2()</pre>\n" +
|
||||
"</li>");
|
||||
|
||||
checkOutput("pkg1/C1.ModalExclusionType.html", expectFound,
|
||||
"<pre>public " +
|
||||
"static final <a href=\"../pkg1/C1.ModalExclusionType.html\" " +
|
||||
"title=\"enum in pkg1\">C1.ModalExclusionType</a> " +
|
||||
"APPLICATION_EXCLUDE</pre>\n" +
|
||||
"</li>"},
|
||||
{ "serialized-form.html", "<pre>boolean " +
|
||||
"</li>");
|
||||
|
||||
checkOutput("serialized-form.html", expectFound,
|
||||
"<pre>boolean " +
|
||||
"undecorated</pre>\n" +
|
||||
"<div class=\"block\"><span class=\"deprecatedLabel\">" +
|
||||
"Deprecated.</span> <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
|
||||
" <a href=\"pkg1/C1.html#setUndecorated-boolean-\"><code>" +
|
||||
"setUndecorated(boolean)</code></a>.</span></div>\n" +
|
||||
"</li>"},
|
||||
{ "serialized-form.html", "<span class=\"deprecatedLabel\">" +
|
||||
"</li>",
|
||||
"<span class=\"deprecatedLabel\">" +
|
||||
"Deprecated.</span> <span class=\"deprecationComment\">As of JDK version" +
|
||||
" 1.5, replaced by\n" +
|
||||
" <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
|
||||
"<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
|
||||
"</li>"}};
|
||||
|
||||
// Test for valid HTML generation which should not comprise of empty
|
||||
// definition list tags.
|
||||
private static final String[][] NEGATED_TEST_NO_C5 = {
|
||||
{ "pkg1/package-summary.html",
|
||||
"<dl></dl>"},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<dl>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C1.html",
|
||||
"<dl></dl>"},
|
||||
{ "pkg1/C1.html",
|
||||
"<dl>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C1.ModalExclusionType.html",
|
||||
"<dl></dl>"},
|
||||
{ "pkg1/C1.ModalExclusionType.html",
|
||||
"<dl>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C2.html",
|
||||
"<dl></dl>"},
|
||||
{ "pkg1/C2.html",
|
||||
"<dl>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C2.ModalType.html",
|
||||
"<dl></dl>"},
|
||||
{ "pkg1/C2.ModalType.html",
|
||||
"<dl>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C3.html",
|
||||
"<dl></dl>"},
|
||||
{ "pkg1/C3.html",
|
||||
"<dl>\n" +
|
||||
"</dl>"},
|
||||
{ "pkg1/C4.html",
|
||||
"<dl></dl>"},
|
||||
{ "pkg1/C4.html",
|
||||
"<dl>\n" +
|
||||
"</dl>"},
|
||||
{ "overview-tree.html",
|
||||
"<dl></dl>"},
|
||||
{ "overview-tree.html",
|
||||
"<dl>\n" +
|
||||
"</dl>"},
|
||||
{ "serialized-form.html",
|
||||
"<dl></dl>"},
|
||||
{ "serialized-form.html",
|
||||
"<dl>\n" +
|
||||
"</dl>"}};
|
||||
private static final String[][] NEGATED_TEST_C5 = {
|
||||
{ "pkg1/C5.html",
|
||||
"<dl></dl>"},
|
||||
{ "pkg1/C5.html",
|
||||
"<dl>\n" +
|
||||
"</dl>"}};
|
||||
|
||||
private static final String[] ARGS1 =
|
||||
new String[] {
|
||||
"-Xdoclint:none", "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "pkg1"};
|
||||
|
||||
private static final String[] ARGS2 =
|
||||
new String[] {
|
||||
"-Xdoclint:none", "-d", OUTPUT_DIR + "-2", "-nocomment", "-sourcepath",
|
||||
SRC_DIR, "pkg1"};
|
||||
|
||||
private static final String[] ARGS3 =
|
||||
new String[] {
|
||||
"-Xdoclint:none", "-d", OUTPUT_DIR + "-3", "-nodeprecated", "-sourcepath",
|
||||
SRC_DIR, "pkg1"};
|
||||
|
||||
private static final String[] ARGS4 =
|
||||
new String[] {
|
||||
"-Xdoclint:none", "-d", OUTPUT_DIR + "-4", "-nocomment", "-nodeprecated",
|
||||
"-sourcepath", SRC_DIR, "pkg1"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
TestHtmlDefinitionListTag tester = new TestHtmlDefinitionListTag();
|
||||
tester.run(ARGS1, TEST_ALL, NEGATED_TEST_NO_C5);
|
||||
tester.runTestsOnHTML(NO_TEST, NEGATED_TEST_C5);
|
||||
tester.runTestsOnHTML(TEST_CMNT_DEPR, NO_TEST);
|
||||
|
||||
tester.run(ARGS2, TEST_ALL, NEGATED_TEST_NO_C5);
|
||||
tester.runTestsOnHTML(NO_TEST, NEGATED_TEST_C5);
|
||||
tester.runTestsOnHTML(NO_TEST, TEST_CMNT_DEPR);
|
||||
|
||||
tester.run(ARGS3, TEST_ALL, NEGATED_TEST_NO_C5);
|
||||
tester.runTestsOnHTML(TEST_NODEPR, TEST_NOCMNT_NODEPR);
|
||||
|
||||
tester.run(ARGS4, TEST_ALL, NEGATED_TEST_NO_C5);
|
||||
tester.runTestsOnHTML(TEST_NOCMNT_NODEPR, TEST_CMNT_DEPR);
|
||||
|
||||
tester.printSummary();
|
||||
"</li>");
|
||||
}
|
||||
}
|
||||
|
@ -27,33 +27,38 @@
|
||||
* @test
|
||||
* @bug 6851834
|
||||
* @summary This test verifies the HTML document generation for javadoc output.
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @author Bhavesh Patel
|
||||
* @build TestHtmlDocument
|
||||
* @run main TestHtmlDocument
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import com.sun.tools.doclets.formats.html.markup.*;
|
||||
|
||||
/**
|
||||
* The class reads each file, complete with newlines, into a string to easily
|
||||
* compare the existing markup with the generated markup.
|
||||
*/
|
||||
public class TestHtmlDocument {
|
||||
|
||||
protected static final String NL = System.getProperty("line.separator");
|
||||
|
||||
private static final String BUGID = "6851834";
|
||||
private static final String BUGNAME = "TestHtmlDocument";
|
||||
private static String srcdir = System.getProperty("test.src", ".");
|
||||
public class TestHtmlDocument extends JavadocTester {
|
||||
|
||||
// Entry point
|
||||
public static void main(String[] args) throws IOException {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHtmlDocument tester = new TestHtmlDocument();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
checking("markup");
|
||||
// Check whether the generated markup is same as the existing markup.
|
||||
if (generateHtmlTree().equals(readFileToString(srcdir + "/testMarkup.html"))) {
|
||||
System.out.println("\nTest passed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
String expected = readFile(testSrc, "testMarkup.html").replace("\n", NL);
|
||||
String actual = generateHtmlTree();
|
||||
if (actual.equals(expected)) {
|
||||
passed("");
|
||||
} else {
|
||||
throw new Error("\nTest failed for bug " + BUGID + " (" + BUGNAME + ")\n");
|
||||
failed("expected content in " + testSrc("testMarkup.html") + "\n"
|
||||
+ "Actual output:\n"
|
||||
+ actual);
|
||||
}
|
||||
}
|
||||
|
||||
@ -136,25 +141,4 @@ public class TestHtmlDocument {
|
||||
HtmlDocument htmlDoc = new HtmlDocument(htmlDocType, html);
|
||||
return htmlDoc.toString();
|
||||
}
|
||||
|
||||
// Read the file into a String
|
||||
public static String readFileToString(String filename) throws IOException {
|
||||
File file = new File(filename);
|
||||
if ( !file.exists() ) {
|
||||
System.out.println("\nFILE DOES NOT EXIST: " + filename);
|
||||
}
|
||||
BufferedReader in = new BufferedReader(new FileReader(file));
|
||||
StringBuilder fileString = new StringBuilder();
|
||||
// Create an array of characters the size of the file
|
||||
try {
|
||||
String line;
|
||||
while ((line = in.readLine()) != null) {
|
||||
fileString.append(line);
|
||||
fileString.append(NL);
|
||||
}
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
return fileString.toString();
|
||||
}
|
||||
}
|
||||
|
@ -26,44 +26,49 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 6786028 8026567
|
||||
* @summary This test verifys the use of <strong> HTML tag instead of <B> by Javadoc std doclet.
|
||||
* @summary This test verifies the use of <strong> HTML tag instead of <B> by Javadoc std doclet.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestHtmlStrongTag
|
||||
* @run main TestHtmlStrongTag
|
||||
*/
|
||||
|
||||
public class TestHtmlStrongTag extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST1 = {
|
||||
{ "pkg1/C1.html",
|
||||
"<span class=\"seeLabel\">See Also:</span>"}};
|
||||
private static final String[][] NEGATED_TEST1 = {
|
||||
{ "pkg1/C1.html", "<STRONG>Method Summary</STRONG>"},
|
||||
{ "pkg1/C1.html", "<B>"},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<STRONG>Class Summary</STRONG>"}};
|
||||
private static final String[][] TEST2 = {
|
||||
{ "pkg2/C2.html", "<B>Comments:</B>"}};
|
||||
private static final String[][] NEGATED_TEST2 = {
|
||||
{ "pkg2/C2.html", "<STRONG>Method Summary</STRONG>"}};
|
||||
|
||||
private static final String[] ARGS1 =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "pkg1"};
|
||||
private static final String[] ARGS2 =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR, "pkg2"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHtmlStrongTag tester = new TestHtmlStrongTag();
|
||||
tester.run(ARGS1, TEST1, NEGATED_TEST1);
|
||||
tester.run(ARGS2, TEST2, NEGATED_TEST2);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test1() {
|
||||
javadoc("-d", "out-1",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg1");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"<span class=\"seeLabel\">See Also:</span>");
|
||||
|
||||
checkOutput("pkg1/C1.html", false,
|
||||
"<STRONG>Method Summary</STRONG>",
|
||||
"<B>");
|
||||
|
||||
checkOutput("pkg1/package-summary.html", false,
|
||||
"<STRONG>Class Summary</STRONG>");
|
||||
}
|
||||
|
||||
@Test
|
||||
void test2() {
|
||||
javadoc("-d", "out-2",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg2/C2.html", true,
|
||||
"<B>Comments:</B>");
|
||||
|
||||
checkOutput("pkg2/C2.html", false,
|
||||
"<STRONG>Method Summary</STRONG>");
|
||||
}
|
||||
}
|
||||
|
@ -26,69 +26,59 @@
|
||||
* @bug 8008164
|
||||
* @summary Test styles on HTML tables generated by javadoc.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestHtmlTableStyles
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestHtmlTableStyles
|
||||
*/
|
||||
|
||||
public class TestHtmlTableStyles extends JavadocTester {
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
{ "pkg1/TestTable.html",
|
||||
"<table border cellpadding=3 cellspacing=1>"
|
||||
},
|
||||
{ "pkg1/TestTable.html",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Field Summary table, listing fields, " +
|
||||
"and an explanation\">"
|
||||
},
|
||||
{ "pkg1/TestTable.html",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Constructor Summary table, listing " +
|
||||
"constructors, and an explanation\">"
|
||||
},
|
||||
{ "pkg1/TestTable.html",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Method Summary table, listing methods, " +
|
||||
"and an explanation\">"
|
||||
},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Class Summary table, listing classes, " +
|
||||
"and an explanation\">"
|
||||
},
|
||||
{ "pkg1/class-use/TestTable.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Use table, listing fields, and an explanation\">"
|
||||
},
|
||||
{ "overview-summary.html",
|
||||
"<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Packages table, listing packages, and an explanation\">"
|
||||
},
|
||||
{ "deprecated-list.html",
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHtmlTableStyles tester = new TestHtmlTableStyles();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-use",
|
||||
"pkg1", "pkg2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg1/TestTable.html", true,
|
||||
"<table border cellpadding=3 cellspacing=1>",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Field Summary table, listing fields, "
|
||||
+ "and an explanation\">",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Constructor Summary table, listing "
|
||||
+ "constructors, and an explanation\">",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Method Summary table, listing methods, "
|
||||
+ "and an explanation\">");
|
||||
|
||||
checkOutput("pkg1/package-summary.html", true,
|
||||
"<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Class Summary table, listing classes, "
|
||||
+ "and an explanation\">");
|
||||
|
||||
checkOutput("pkg1/class-use/TestTable.html", true,
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Use table, listing fields, and an explanation\">");
|
||||
|
||||
checkOutput("overview-summary.html", true,
|
||||
"<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Packages table, listing packages, and an explanation\">");
|
||||
|
||||
checkOutput("deprecated-list.html", true,
|
||||
"<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Deprecated Methods table, listing " +
|
||||
"deprecated methods, and an explanation\">"
|
||||
},
|
||||
{ "constant-values.html",
|
||||
"deprecated methods, and an explanation\">");
|
||||
|
||||
checkOutput("constant-values.html", true,
|
||||
"<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Constant Field Values table, listing " +
|
||||
"constant fields, and values\">"
|
||||
},
|
||||
};
|
||||
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) throws Exception {
|
||||
TestHtmlTableStyles tester = new TestHtmlTableStyles();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
"constant fields, and values\">");
|
||||
}
|
||||
}
|
||||
|
@ -26,9 +26,8 @@
|
||||
* @bug 6786688 8008164
|
||||
* @summary HTML tables should have table summary, caption and table headers.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestHtmlTableTags
|
||||
* @run main TestHtmlTableTags
|
||||
*/
|
||||
|
||||
@ -36,400 +35,350 @@ public class TestHtmlTableTags extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
|
||||
|
||||
};
|
||||
|
||||
//Input for string tests for HTML table tags.
|
||||
private static final String[][] TABLE_TAGS_TEST = {
|
||||
/*
|
||||
* Test for validating summary for HTML tables
|
||||
*/
|
||||
|
||||
//Package summary
|
||||
{ "pkg1/package-summary.html",
|
||||
"<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
|
||||
" cellspacing=\"0\" summary=\"Class Summary table, " +
|
||||
"listing classes, and an explanation\">"
|
||||
},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
|
||||
" cellspacing=\"0\" summary=\"Interface Summary table, " +
|
||||
"listing interfaces, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/package-summary.html",
|
||||
"<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
|
||||
" cellspacing=\"0\" summary=\"Enum Summary table, " +
|
||||
"listing enums, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/package-summary.html",
|
||||
"<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
|
||||
" cellspacing=\"0\" summary=\"Annotation Types Summary table, " +
|
||||
"listing annotation types, and an explanation\">"
|
||||
},
|
||||
// Class documentation
|
||||
{ "pkg1/C1.html",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Field Summary table, listing fields, " +
|
||||
"and an explanation\">"
|
||||
},
|
||||
{ "pkg1/C1.html",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Method Summary table, listing methods, " +
|
||||
"and an explanation\">"
|
||||
},
|
||||
{ "pkg2/C2.html",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Nested Class Summary table, listing " +
|
||||
"nested classes, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/C2.html",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Constructor Summary table, listing " +
|
||||
"constructors, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/C2.ModalExclusionType.html",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Enum Constant Summary table, listing " +
|
||||
"enum constants, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/C3.html",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Required Element Summary table, " +
|
||||
"listing required elements, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/C4.html",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Optional Element Summary table, " +
|
||||
"listing optional elements, and an explanation\">"
|
||||
},
|
||||
// Class use documentation
|
||||
{ "pkg1/class-use/I1.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
|
||||
"table, listing packages, and an explanation\">"
|
||||
},
|
||||
{ "pkg1/class-use/C1.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
|
||||
"table, listing fields, and an explanation\">"
|
||||
},
|
||||
{ "pkg1/class-use/C1.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
|
||||
"table, listing methods, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/class-use/C2.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
|
||||
"table, listing fields, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/class-use/C2.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
|
||||
"table, listing methods, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/class-use/C2.ModalExclusionType.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
|
||||
"table, listing packages, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/class-use/C2.ModalExclusionType.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
|
||||
"table, listing methods, and an explanation\">"
|
||||
},
|
||||
// Package use documentation
|
||||
{ "pkg1/package-use.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
|
||||
"table, listing packages, and an explanation\">"
|
||||
},
|
||||
{ "pkg1/package-use.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
|
||||
"table, listing classes, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/package-use.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
|
||||
"table, listing packages, and an explanation\">"
|
||||
},
|
||||
{ "pkg2/package-use.html",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
|
||||
"table, listing classes, and an explanation\">"
|
||||
},
|
||||
// Deprecated
|
||||
{ "deprecated-list.html",
|
||||
"<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
|
||||
"summary=\"Deprecated Fields table, listing deprecated fields, " +
|
||||
"and an explanation\">"
|
||||
},
|
||||
{ "deprecated-list.html",
|
||||
"<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
|
||||
"summary=\"Deprecated Methods table, listing deprecated methods, " +
|
||||
"and an explanation\">"
|
||||
},
|
||||
// Constant values
|
||||
{ "constant-values.html",
|
||||
"<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
|
||||
"summary=\"Constant Field Values table, listing " +
|
||||
"constant fields, and values\">"
|
||||
},
|
||||
// Overview Summary
|
||||
{ "overview-summary.html",
|
||||
"<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
|
||||
"cellspacing=\"0\" summary=\"Packages table, " +
|
||||
"listing packages, and an explanation\">"
|
||||
},
|
||||
|
||||
/*
|
||||
* Test for validating caption for HTML tables
|
||||
*/
|
||||
|
||||
//Package summary
|
||||
{ "pkg1/package-summary.html",
|
||||
"<caption><span>Class Summary</span><span class=\"tabEnd\">" +
|
||||
" </span></caption>"
|
||||
},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<caption><span>Interface Summary</span><span class=\"tabEnd\">" +
|
||||
" </span></caption>"
|
||||
},
|
||||
{ "pkg2/package-summary.html",
|
||||
"<caption><span>Enum Summary</span><span class=\"tabEnd\">" +
|
||||
" </span></caption>"
|
||||
},
|
||||
{ "pkg2/package-summary.html",
|
||||
"<caption><span>Annotation Types Summary</span><span class=\"tabEnd\">" +
|
||||
" </span></caption>"
|
||||
},
|
||||
// Class documentation
|
||||
{ "pkg1/C1.html",
|
||||
"<caption><span>Fields</span><span class=\"tabEnd\"> </span></caption>"
|
||||
},
|
||||
{ "pkg1/C1.html",
|
||||
"<caption><span id=\"t0\" class=\"activeTableTab\"><span>All " +
|
||||
"Methods</span><span class=\"tabEnd\"> </span></span>" +
|
||||
"<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">" +
|
||||
"Instance Methods</a></span><span class=\"tabEnd\"> </span></span>" +
|
||||
"<span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">" +
|
||||
"Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>" +
|
||||
"<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">" +
|
||||
"Deprecated Methods</a></span><span class=\"tabEnd\"> </span></span>" +
|
||||
"</caption>"
|
||||
},
|
||||
{ "pkg2/C2.html",
|
||||
"<caption><span>Nested Classes</span><span class=\"tabEnd\"> </span></caption>"
|
||||
},
|
||||
{ "pkg2/C2.html",
|
||||
"<caption><span>Constructors</span><span class=\"tabEnd\"> </span></caption>"
|
||||
},
|
||||
{ "pkg2/C2.ModalExclusionType.html",
|
||||
"<caption><span>Enum Constants</span><span class=\"tabEnd\"> </span></caption>"
|
||||
},
|
||||
{ "pkg2/C3.html",
|
||||
"<caption><span>Required Elements</span><span class=\"tabEnd\"> " +
|
||||
"</span></caption>"
|
||||
},
|
||||
{ "pkg2/C4.html",
|
||||
"<caption><span>Optional Elements</span><span class=\"tabEnd\"> " +
|
||||
"</span></caption>"
|
||||
},
|
||||
// Class use documentation
|
||||
{ "pkg1/class-use/I1.html",
|
||||
"<caption><span>Packages that use <a href=\"../../pkg1/I1.html\" " +
|
||||
"title=\"interface in pkg1\">I1</a></span><span class=\"tabEnd\">" +
|
||||
" </span></caption>"
|
||||
},
|
||||
{ "pkg1/class-use/C1.html",
|
||||
"<caption><span>Fields in <a href=\"../../pkg2/package-summary.html\">" +
|
||||
"pkg2</a> declared as <a href=\"../../pkg1/C1.html\" " +
|
||||
"title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\"> " +
|
||||
"</span></caption>"
|
||||
},
|
||||
{ "pkg1/class-use/C1.html",
|
||||
"<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">" +
|
||||
"pkg2</a> that return <a href=\"../../pkg1/C1.html\" " +
|
||||
"title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">" +
|
||||
" </span></caption>"
|
||||
},
|
||||
{ "pkg2/class-use/C2.html",
|
||||
"<caption><span>Fields in <a href=\"../../pkg1/package-summary.html\">" +
|
||||
"pkg1</a> declared as <a href=\"../../pkg2/C2.html\" " +
|
||||
"title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">" +
|
||||
" </span></caption>"
|
||||
},
|
||||
{ "pkg2/class-use/C2.html",
|
||||
"<caption><span>Methods in <a href=\"../../pkg1/package-summary.html\">" +
|
||||
"pkg1</a> that return <a href=\"../../pkg2/C2.html\" " +
|
||||
"title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">" +
|
||||
" </span></caption>"
|
||||
},
|
||||
{ "pkg2/class-use/C2.ModalExclusionType.html",
|
||||
"<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">" +
|
||||
"pkg2</a> that return <a href=\"../../pkg2/C2.ModalExclusionType.html\" " +
|
||||
"title=\"enum in pkg2\">C2.ModalExclusionType</a></span>" +
|
||||
"<span class=\"tabEnd\"> </span></caption>"
|
||||
},
|
||||
// Package use documentation
|
||||
{ "pkg1/package-use.html",
|
||||
"<caption><span>Packages that use <a href=\"../pkg1/package-summary.html\">" +
|
||||
"pkg1</a></span><span class=\"tabEnd\"> </span></caption>"
|
||||
},
|
||||
{ "pkg1/package-use.html",
|
||||
"<caption><span>Classes in <a href=\"../pkg1/package-summary.html\">" +
|
||||
"pkg1</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>" +
|
||||
"</span><span class=\"tabEnd\"> </span></caption>"
|
||||
},
|
||||
{ "pkg2/package-use.html",
|
||||
"<caption><span>Packages that use <a href=\"../pkg2/package-summary.html\">" +
|
||||
"pkg2</a></span><span class=\"tabEnd\"> </span></caption>"
|
||||
},
|
||||
{ "pkg2/package-use.html",
|
||||
"<caption><span>Classes in <a href=\"../pkg2/package-summary.html\">" +
|
||||
"pkg2</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>" +
|
||||
"</span><span class=\"tabEnd\"> </span></caption>"
|
||||
},
|
||||
// Deprecated
|
||||
{ "deprecated-list.html",
|
||||
"<caption><span>Deprecated Fields</span><span class=\"tabEnd\">" +
|
||||
" </span></caption>"
|
||||
},
|
||||
{ "deprecated-list.html",
|
||||
"<caption><span>Deprecated Methods</span><span class=\"tabEnd\">" +
|
||||
" </span></caption>"
|
||||
},
|
||||
// Constant values
|
||||
{ "constant-values.html",
|
||||
"<caption><span>pkg1.<a href=\"pkg1/C1.html\" title=\"class in pkg1\">" +
|
||||
"C1</a></span><span class=\"tabEnd\"> </span></caption>"
|
||||
},
|
||||
// Overview Summary
|
||||
{ "overview-summary.html",
|
||||
"<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>"
|
||||
},
|
||||
|
||||
/*
|
||||
* Test for validating headers for HTML tables
|
||||
*/
|
||||
|
||||
//Package summary
|
||||
{ "pkg1/package-summary.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">" +
|
||||
"Class</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\"" +
|
||||
">Description</th>"
|
||||
},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">" +
|
||||
"Interface</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\"" +
|
||||
">Description</th>"
|
||||
},
|
||||
{ "pkg2/package-summary.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">" +
|
||||
"Enum</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\"" +
|
||||
">Description</th>"
|
||||
},
|
||||
{ "pkg2/package-summary.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">" +
|
||||
"Annotation Type</th>\n" +
|
||||
"<th class=\"colLast\"" +
|
||||
" scope=\"col\">Description</th>"
|
||||
},
|
||||
// Class documentation
|
||||
{ "pkg1/C1.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Field and Description</th>"
|
||||
},
|
||||
{ "pkg1/C1.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Method and Description</th>"
|
||||
},
|
||||
{ "pkg2/C2.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Class and Description</th>"
|
||||
},
|
||||
{ "pkg2/C2.html",
|
||||
"<th class=\"colOne\" scope=\"col\">Constructor and Description</th>"
|
||||
},
|
||||
{ "pkg2/C2.ModalExclusionType.html",
|
||||
"<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>"
|
||||
},
|
||||
{ "pkg2/C3.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Required Element and Description</th>"
|
||||
},
|
||||
{ "pkg2/C4.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Optional Element and Description</th>"
|
||||
},
|
||||
// Class use documentation
|
||||
{ "pkg1/class-use/I1.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Description</th>"
|
||||
},
|
||||
{ "pkg1/class-use/C1.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Field and Description</th>"
|
||||
},
|
||||
{ "pkg1/class-use/C1.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Method and Description</th>"
|
||||
},
|
||||
{ "pkg2/class-use/C2.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Field and Description</th>"
|
||||
},
|
||||
{ "pkg2/class-use/C2.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Method and Description</th>"
|
||||
},
|
||||
{ "pkg2/class-use/C2.ModalExclusionType.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Description</th>"
|
||||
},
|
||||
{ "pkg2/class-use/C2.ModalExclusionType.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Method and Description</th>"
|
||||
},
|
||||
// Package use documentation
|
||||
{ "pkg1/package-use.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Description</th>"
|
||||
},
|
||||
{ "pkg1/package-use.html",
|
||||
"<th class=\"colOne\" scope=\"col\">Class and Description</th>"
|
||||
},
|
||||
{ "pkg2/package-use.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Description</th>"
|
||||
},
|
||||
{ "pkg2/package-use.html",
|
||||
"<th class=\"colOne\" scope=\"col\">Class and Description</th>"
|
||||
},
|
||||
// Deprecated
|
||||
{ "deprecated-list.html",
|
||||
"<th class=\"colOne\" scope=\"col\">Field and Description</th>"
|
||||
},
|
||||
{ "deprecated-list.html",
|
||||
"<th class=\"colOne\" scope=\"col\">Method and Description</th>"
|
||||
},
|
||||
// Constant values
|
||||
{ "constant-values.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">" +
|
||||
"Modifier and Type</th>\n" +
|
||||
"<th" +
|
||||
" scope=\"col\">Constant Field</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\">Value</th>"
|
||||
},
|
||||
// Overview Summary
|
||||
{ "overview-summary.html",
|
||||
"<th class=\"colFirst\" scope=\"col\">" +
|
||||
"Package</th>\n" +
|
||||
"<th class=\"colLast\" scope=\"col\"" +
|
||||
">Description</th>"
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHtmlTableTags tester = new TestHtmlTableTags();
|
||||
tester.run(ARGS, TABLE_TAGS_TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"-use",
|
||||
"pkg1", "pkg2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkHtmlTableSummaries();
|
||||
checkHtmlTableCaptions();
|
||||
checkHtmlTableHeaders();
|
||||
}
|
||||
|
||||
/*
|
||||
* Tests for validating summary for HTML tables
|
||||
*/
|
||||
void checkHtmlTableSummaries() {
|
||||
//Package summary
|
||||
checkOutput("pkg1/package-summary.html", true,
|
||||
"<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\""
|
||||
+ " cellspacing=\"0\" summary=\"Class Summary table, "
|
||||
+ "listing classes, and an explanation\">",
|
||||
"<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\""
|
||||
+ " cellspacing=\"0\" summary=\"Interface Summary table, "
|
||||
+ "listing interfaces, and an explanation\">");
|
||||
|
||||
checkOutput("pkg2/package-summary.html", true,
|
||||
"<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\""
|
||||
+ " cellspacing=\"0\" summary=\"Enum Summary table, "
|
||||
+ "listing enums, and an explanation\">",
|
||||
"<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\""
|
||||
+ " cellspacing=\"0\" summary=\"Annotation Types Summary table, "
|
||||
+ "listing annotation types, and an explanation\">");
|
||||
|
||||
// Class documentation
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Field Summary table, listing fields, "
|
||||
+ "and an explanation\">",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Method Summary table, listing methods, "
|
||||
+ "and an explanation\">");
|
||||
|
||||
checkOutput("pkg2/C2.html", true,
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Nested Class Summary table, listing "
|
||||
+ "nested classes, and an explanation\">",
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Constructor Summary table, listing "
|
||||
+ "constructors, and an explanation\">");
|
||||
|
||||
checkOutput("pkg2/C2.ModalExclusionType.html", true,
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Enum Constant Summary table, listing "
|
||||
+ "enum constants, and an explanation\">");
|
||||
|
||||
checkOutput("pkg2/C3.html", true,
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Required Element Summary table, "
|
||||
+ "listing required elements, and an explanation\">");
|
||||
|
||||
checkOutput("pkg2/C4.html", true,
|
||||
"<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Optional Element Summary table, "
|
||||
+ "listing optional elements, and an explanation\">");
|
||||
|
||||
// Class use documentation
|
||||
checkOutput("pkg1/class-use/I1.html", true,
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
|
||||
+ "table, listing packages, and an explanation\">");
|
||||
|
||||
checkOutput("pkg1/class-use/C1.html", true,
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
|
||||
+ "table, listing fields, and an explanation\">",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
|
||||
+ "table, listing methods, and an explanation\">");
|
||||
|
||||
checkOutput("pkg2/class-use/C2.html", true,
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
|
||||
+ "table, listing fields, and an explanation\">",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
|
||||
+ "table, listing methods, and an explanation\">");
|
||||
|
||||
checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
|
||||
+ "table, listing packages, and an explanation\">");
|
||||
|
||||
checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
|
||||
+ "table, listing methods, and an explanation\">");
|
||||
|
||||
// Package use documentation
|
||||
checkOutput("pkg1/package-use.html", true,
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
|
||||
+ "table, listing packages, and an explanation\">",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
|
||||
+ "table, listing classes, and an explanation\">");
|
||||
|
||||
checkOutput("pkg2/package-use.html", true,
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
|
||||
+ "table, listing packages, and an explanation\">",
|
||||
"<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
|
||||
+ "table, listing classes, and an explanation\">");
|
||||
|
||||
// Deprecated
|
||||
checkOutput("deprecated-list.html", true,
|
||||
"<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
|
||||
+ "summary=\"Deprecated Fields table, listing deprecated fields, "
|
||||
+ "and an explanation\">",
|
||||
"<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
|
||||
+ "summary=\"Deprecated Methods table, listing deprecated methods, "
|
||||
+ "and an explanation\">");
|
||||
|
||||
// Constant values
|
||||
checkOutput("constant-values.html", true,
|
||||
"<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
|
||||
+ "summary=\"Constant Field Values table, listing "
|
||||
+ "constant fields, and values\">");
|
||||
|
||||
// Overview Summary
|
||||
checkOutput("overview-summary.html", true,
|
||||
"<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" "
|
||||
+ "cellspacing=\"0\" summary=\"Packages table, "
|
||||
+ "listing packages, and an explanation\">");
|
||||
}
|
||||
|
||||
/*
|
||||
* Tests for validating caption for HTML tables
|
||||
*/
|
||||
void checkHtmlTableCaptions() {
|
||||
//Package summary
|
||||
checkOutput("pkg1/package-summary.html", true,
|
||||
"<caption><span>Class Summary</span><span class=\"tabEnd\">"
|
||||
+ " </span></caption>",
|
||||
"<caption><span>Interface Summary</span><span class=\"tabEnd\">"
|
||||
+ " </span></caption>");
|
||||
|
||||
checkOutput("pkg2/package-summary.html", true,
|
||||
"<caption><span>Enum Summary</span><span class=\"tabEnd\">"
|
||||
+ " </span></caption>",
|
||||
"<caption><span>Annotation Types Summary</span><span class=\"tabEnd\">"
|
||||
+ " </span></caption>");
|
||||
|
||||
// Class documentation
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"<caption><span>Fields</span><span class=\"tabEnd\"> </span></caption>",
|
||||
"<caption><span id=\"t0\" class=\"activeTableTab\"><span>All "
|
||||
+ "Methods</span><span class=\"tabEnd\"> </span></span>"
|
||||
+ "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
|
||||
+ "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>"
|
||||
+ "<span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">"
|
||||
+ "Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>"
|
||||
+ "<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">"
|
||||
+ "Deprecated Methods</a></span><span class=\"tabEnd\"> </span></span>"
|
||||
+ "</caption>");
|
||||
|
||||
checkOutput("pkg2/C2.html", true,
|
||||
"<caption><span>Nested Classes</span><span class=\"tabEnd\"> </span></caption>",
|
||||
"<caption><span>Constructors</span><span class=\"tabEnd\"> </span></caption>");
|
||||
|
||||
checkOutput("pkg2/C2.ModalExclusionType.html", true,
|
||||
"<caption><span>Enum Constants</span><span class=\"tabEnd\"> </span></caption>");
|
||||
|
||||
checkOutput("pkg2/C3.html", true,
|
||||
"<caption><span>Required Elements</span><span class=\"tabEnd\"> "
|
||||
+ "</span></caption>");
|
||||
|
||||
checkOutput("pkg2/C4.html", true,
|
||||
"<caption><span>Optional Elements</span><span class=\"tabEnd\"> "
|
||||
+ "</span></caption>");
|
||||
|
||||
// Class use documentation
|
||||
checkOutput("pkg1/class-use/I1.html", true,
|
||||
"<caption><span>Packages that use <a href=\"../../pkg1/I1.html\" "
|
||||
+ "title=\"interface in pkg1\">I1</a></span><span class=\"tabEnd\">"
|
||||
+ " </span></caption>");
|
||||
|
||||
checkOutput("pkg1/class-use/C1.html", true,
|
||||
"<caption><span>Fields in <a href=\"../../pkg2/package-summary.html\">"
|
||||
+ "pkg2</a> declared as <a href=\"../../pkg1/C1.html\" "
|
||||
+ "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\"> "
|
||||
+ "</span></caption>",
|
||||
"<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">"
|
||||
+ "pkg2</a> that return <a href=\"../../pkg1/C1.html\" "
|
||||
+ "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">"
|
||||
+ " </span></caption>");
|
||||
|
||||
checkOutput("pkg2/class-use/C2.html", true,
|
||||
"<caption><span>Fields in <a href=\"../../pkg1/package-summary.html\">"
|
||||
+ "pkg1</a> declared as <a href=\"../../pkg2/C2.html\" "
|
||||
+ "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">"
|
||||
+ " </span></caption>",
|
||||
"<caption><span>Methods in <a href=\"../../pkg1/package-summary.html\">"
|
||||
+ "pkg1</a> that return <a href=\"../../pkg2/C2.html\" "
|
||||
+ "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">"
|
||||
+ " </span></caption>");
|
||||
|
||||
checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
|
||||
"<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">"
|
||||
+ "pkg2</a> that return <a href=\"../../pkg2/C2.ModalExclusionType.html\" "
|
||||
+ "title=\"enum in pkg2\">C2.ModalExclusionType</a></span>"
|
||||
+ "<span class=\"tabEnd\"> </span></caption>");
|
||||
|
||||
// Package use documentation
|
||||
checkOutput("pkg1/package-use.html", true,
|
||||
"<caption><span>Packages that use <a href=\"../pkg1/package-summary.html\">"
|
||||
+ "pkg1</a></span><span class=\"tabEnd\"> </span></caption>",
|
||||
"<caption><span>Classes in <a href=\"../pkg1/package-summary.html\">"
|
||||
+ "pkg1</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>"
|
||||
+ "</span><span class=\"tabEnd\"> </span></caption>");
|
||||
|
||||
checkOutput("pkg2/package-use.html", true,
|
||||
"<caption><span>Packages that use <a href=\"../pkg2/package-summary.html\">"
|
||||
+ "pkg2</a></span><span class=\"tabEnd\"> </span></caption>",
|
||||
"<caption><span>Classes in <a href=\"../pkg2/package-summary.html\">"
|
||||
+ "pkg2</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>"
|
||||
+ "</span><span class=\"tabEnd\"> </span></caption>");
|
||||
|
||||
// Deprecated
|
||||
checkOutput("deprecated-list.html", true,
|
||||
"<caption><span>Deprecated Fields</span><span class=\"tabEnd\">"
|
||||
+ " </span></caption>",
|
||||
"<caption><span>Deprecated Methods</span><span class=\"tabEnd\">"
|
||||
+ " </span></caption>");
|
||||
|
||||
// Constant values
|
||||
checkOutput("constant-values.html", true,
|
||||
"<caption><span>pkg1.<a href=\"pkg1/C1.html\" title=\"class in pkg1\">"
|
||||
+ "C1</a></span><span class=\"tabEnd\"> </span></caption>");
|
||||
|
||||
// Overview Summary
|
||||
checkOutput("overview-summary.html", true,
|
||||
"<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>");
|
||||
}
|
||||
|
||||
/*
|
||||
* Test for validating headers for HTML tables
|
||||
*/
|
||||
void checkHtmlTableHeaders() {
|
||||
//Package summary
|
||||
checkOutput("pkg1/package-summary.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">"
|
||||
+ "Class</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\""
|
||||
+ ">Description</th>",
|
||||
"<th class=\"colFirst\" scope=\"col\">"
|
||||
+ "Interface</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\""
|
||||
+ ">Description</th>");
|
||||
|
||||
checkOutput("pkg2/package-summary.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">"
|
||||
+ "Enum</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\""
|
||||
+ ">Description</th>",
|
||||
"<th class=\"colFirst\" scope=\"col\">"
|
||||
+ "Annotation Type</th>\n"
|
||||
+ "<th class=\"colLast\""
|
||||
+ " scope=\"col\">Description</th>");
|
||||
|
||||
// Class documentation
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Field and Description</th>",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Method and Description</th>");
|
||||
|
||||
checkOutput("pkg2/C2.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Class and Description</th>",
|
||||
"<th class=\"colOne\" scope=\"col\">Constructor and Description</th>");
|
||||
|
||||
checkOutput("pkg2/C2.ModalExclusionType.html", true,
|
||||
"<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>");
|
||||
|
||||
checkOutput("pkg2/C3.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Required Element and Description</th>");
|
||||
|
||||
checkOutput("pkg2/C4.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Optional Element and Description</th>");
|
||||
|
||||
// Class use documentation
|
||||
checkOutput("pkg1/class-use/I1.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Package</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Description</th>");
|
||||
|
||||
checkOutput("pkg1/class-use/C1.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Field and Description</th>",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Method and Description</th>");
|
||||
|
||||
checkOutput("pkg2/class-use/C2.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Field and Description</th>",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Method and Description</th>");
|
||||
|
||||
checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Package</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Description</th>",
|
||||
"<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Method and Description</th>");
|
||||
|
||||
// Package use documentation
|
||||
checkOutput("pkg1/package-use.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Package</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Description</th>",
|
||||
"<th class=\"colOne\" scope=\"col\">Class and Description</th>");
|
||||
|
||||
checkOutput("pkg2/package-use.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">Package</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Description</th>",
|
||||
"<th class=\"colOne\" scope=\"col\">Class and Description</th>");
|
||||
|
||||
// Deprecated
|
||||
checkOutput("deprecated-list.html", true,
|
||||
"<th class=\"colOne\" scope=\"col\">Field and Description</th>",
|
||||
"<th class=\"colOne\" scope=\"col\">Method and Description</th>");
|
||||
|
||||
// Constant values
|
||||
checkOutput("constant-values.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">"
|
||||
+ "Modifier and Type</th>\n"
|
||||
+ "<th"
|
||||
+ " scope=\"col\">Constant Field</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\">Value</th>");
|
||||
|
||||
// Overview Summary
|
||||
checkOutput("overview-summary.html", true,
|
||||
"<th class=\"colFirst\" scope=\"col\">"
|
||||
+ "Package</th>\n"
|
||||
+ "<th class=\"colLast\" scope=\"col\""
|
||||
+ ">Description</th>");
|
||||
}
|
||||
}
|
||||
|
@ -28,9 +28,8 @@
|
||||
* @bug 6786682
|
||||
* @summary This test verifies the use of lang attribute by <HTML>.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestHtmlTag
|
||||
* @run main TestHtmlTag
|
||||
*/
|
||||
|
||||
@ -38,43 +37,65 @@ import java.util.Locale;
|
||||
|
||||
public class TestHtmlTag extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST1 = {
|
||||
{ "pkg1/C1.html",
|
||||
"<html lang=\"" + Locale.getDefault().getLanguage() + "\">"},
|
||||
{ "pkg1/package-summary.html",
|
||||
"<html lang=\"" + Locale.getDefault().getLanguage() + "\">"}};
|
||||
private static final String[][] NEGATED_TEST1 = {
|
||||
{ "pkg1/C1.html", "<html>"}};
|
||||
private static final String[][] TEST2 = {
|
||||
{ "pkg2/C2.html", "<html lang=\"ja\">"},
|
||||
{ "pkg2/package-summary.html", "<html lang=\"ja\">"}};
|
||||
private static final String[][] NEGATED_TEST2 = {
|
||||
{ "pkg2/C2.html", "<html>"}};
|
||||
private static final String[][] TEST3 = {
|
||||
{ "pkg1/C1.html", "<html lang=\"en\">"},
|
||||
{ "pkg1/package-summary.html", "<html lang=\"en\">"}};
|
||||
private static final String[][] NEGATED_TEST3 = {
|
||||
{ "pkg1/C1.html", "<html>"}};
|
||||
|
||||
private static final String[] ARGS1 =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "pkg1"};
|
||||
private static final String[] ARGS2 =
|
||||
new String[] {
|
||||
"-locale", "ja", "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR, "pkg2"};
|
||||
private static final String[] ARGS3 =
|
||||
new String[] {
|
||||
"-locale", "en_US", "-d", OUTPUT_DIR + "-3", "-sourcepath", SRC_DIR, "pkg1"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestHtmlTag tester = new TestHtmlTag();
|
||||
tester.run(ARGS1, TEST1, NEGATED_TEST1);
|
||||
tester.run(ARGS2, TEST2, NEGATED_TEST2);
|
||||
tester.run(ARGS3, TEST3, NEGATED_TEST3);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_default() {
|
||||
javadoc("-d", "out-default",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg1");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
String defaultLanguage = Locale.getDefault().getLanguage();
|
||||
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"<html lang=\"" + defaultLanguage + "\">");
|
||||
|
||||
checkOutput("pkg1/package-summary.html", true,
|
||||
"<html lang=\"" + defaultLanguage + "\">");
|
||||
|
||||
checkOutput("pkg1/C1.html", false,
|
||||
"<html>");
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_ja() {
|
||||
// TODO: why does this test need/use pkg2; why can't it use pkg1
|
||||
// like the other two tests, so that we can share the check methods?
|
||||
javadoc("-locale", "ja",
|
||||
"-d", "out-ja",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg2");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg2/C2.html", true,
|
||||
"<html lang=\"ja\">");
|
||||
|
||||
checkOutput("pkg2/package-summary.html", true,
|
||||
"<html lang=\"ja\">");
|
||||
|
||||
checkOutput("pkg2/C2.html", false,
|
||||
"<html>");
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_en_US() {
|
||||
javadoc("-locale", "en_US",
|
||||
"-d", "out-en_US",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg1");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg1/C1.html", true,
|
||||
"<html lang=\"en\">");
|
||||
|
||||
checkOutput("pkg1/package-summary.html", true,
|
||||
"<html lang=\"en\">");
|
||||
|
||||
checkOutput("pkg1/C1.html", false,
|
||||
"<html>");
|
||||
}
|
||||
}
|
||||
|
@ -25,37 +25,30 @@
|
||||
* @test
|
||||
* @bug 8011288
|
||||
* @summary Erratic/inconsistent indentation of signatures
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @run main TestIndentation
|
||||
*/
|
||||
|
||||
public class TestIndentation extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "p"
|
||||
};
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
{ "p/Indent.html",
|
||||
"<pre>public <T> void m(T t1," },
|
||||
{ "p/Indent.html",
|
||||
"\n" +
|
||||
" T t2)" },
|
||||
{ "p/Indent.html",
|
||||
"\n" +
|
||||
" throws java.lang.Exception" }
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestIndentation tester = new TestIndentation();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"p");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("p/Indent.html", true,
|
||||
"<pre>public <T> void m(T t1,",
|
||||
"\n"
|
||||
+ " T t2)",
|
||||
"\n"
|
||||
+ " throws java.lang.Exception");
|
||||
}
|
||||
}
|
||||
|
@ -28,64 +28,53 @@
|
||||
* Also test that index-all.html has the appropriate output.
|
||||
* Test for unnamed package in index.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestIndex
|
||||
* @run main TestIndex
|
||||
*/
|
||||
|
||||
public class TestIndex extends JavadocTester {
|
||||
|
||||
//Javadoc arguments.
|
||||
private static final String[] ARGS = new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", SRC_DIR + "/NoPackage.java"
|
||||
};
|
||||
public static void main(String... args) throws Exception {
|
||||
TestIndex tester = new TestIndex();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg", testSrc("NoPackage.java"));
|
||||
checkExit(Exit.OK);
|
||||
|
||||
//Input for string search tests.
|
||||
private static final String[][] TEST = {
|
||||
//Make sure the horizontal scroll bar does not appear in class frame.
|
||||
{ "index.html",
|
||||
"<frame src=\"overview-summary.html\" name=\"classFrame\" title=\"" +
|
||||
"Package, class and interface descriptions\" scrolling=\"yes\">"},
|
||||
checkOutput("index.html", true,
|
||||
"<frame src=\"overview-summary.html\" name=\"classFrame\" title=\""
|
||||
+ "Package, class and interface descriptions\" scrolling=\"yes\">");
|
||||
|
||||
//Test index-all.html
|
||||
{ "index-all.html",
|
||||
"<a href=\"pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">C</span></a>" +
|
||||
" - Class in <a href=\"pkg/package-summary.html\">pkg</a>"},
|
||||
{ "index-all.html",
|
||||
"<a href=\"pkg/Interface.html\" title=\"interface in pkg\">" +
|
||||
"<span class=\"typeNameLink\">Interface</span></a> - Interface in " +
|
||||
"<a href=\"pkg/package-summary.html\">pkg</a>"},
|
||||
{ "index-all.html",
|
||||
"<a href=\"pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
|
||||
"<span class=\"typeNameLink\">AnnotationType</span></a> - Annotation Type in " +
|
||||
"<a href=\"pkg/package-summary.html\">pkg</a>"},
|
||||
{ "index-all.html",
|
||||
"<a href=\"pkg/Coin.html\" title=\"enum in pkg\">" +
|
||||
"<span class=\"typeNameLink\">Coin</span></a> - Enum in " +
|
||||
"<a href=\"pkg/package-summary.html\">pkg</a>"},
|
||||
{ "index-all.html",
|
||||
"Class in <a href=\"package-summary.html\"><Unnamed></a>"},
|
||||
{ "index-all.html",
|
||||
"<dl>\n" +
|
||||
"<dt><span class=\"memberNameLink\"><a href=\"pkg/C.html#Java\">" +
|
||||
"Java</a></span> - Static variable in class pkg.<a href=\"pkg/C.html\" " +
|
||||
"title=\"class in pkg\">C</a></dt>\n" +
|
||||
"<dd> </dd>\n" +
|
||||
"<dt><span class=\"memberNameLink\"><a href=\"pkg/C.html#JDK\">JDK</a></span> " +
|
||||
"- Static variable in class pkg.<a href=\"pkg/C.html\" title=\"class in pkg\">" +
|
||||
"C</a></dt>\n" +
|
||||
"<dd> </dd>\n" +
|
||||
"</dl>"},
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
TestIndex tester = new TestIndex();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
checkOutput("index-all.html", true,
|
||||
"<a href=\"pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">C</span></a>"
|
||||
+ " - Class in <a href=\"pkg/package-summary.html\">pkg</a>",
|
||||
"<a href=\"pkg/Interface.html\" title=\"interface in pkg\">"
|
||||
+ "<span class=\"typeNameLink\">Interface</span></a> - Interface in "
|
||||
+ "<a href=\"pkg/package-summary.html\">pkg</a>",
|
||||
"<a href=\"pkg/AnnotationType.html\" title=\"annotation in pkg\">"
|
||||
+ "<span class=\"typeNameLink\">AnnotationType</span></a> - Annotation Type in "
|
||||
+ "<a href=\"pkg/package-summary.html\">pkg</a>",
|
||||
"<a href=\"pkg/Coin.html\" title=\"enum in pkg\">"
|
||||
+ "<span class=\"typeNameLink\">Coin</span></a> - Enum in "
|
||||
+ "<a href=\"pkg/package-summary.html\">pkg</a>",
|
||||
"Class in <a href=\"package-summary.html\"><Unnamed></a>",
|
||||
"<dl>\n"
|
||||
+ "<dt><span class=\"memberNameLink\"><a href=\"pkg/C.html#Java\">"
|
||||
+ "Java</a></span> - Static variable in class pkg.<a href=\"pkg/C.html\" "
|
||||
+ "title=\"class in pkg\">C</a></dt>\n"
|
||||
+ "<dd> </dd>\n"
|
||||
+ "<dt><span class=\"memberNameLink\"><a href=\"pkg/C.html#JDK\">JDK</a></span> "
|
||||
+ "- Static variable in class pkg.<a href=\"pkg/C.html\" title=\"class in pkg\">"
|
||||
+ "C</a></dt>\n"
|
||||
+ "<dd> </dd>\n"
|
||||
+ "</dl>");
|
||||
}
|
||||
}
|
||||
|
@ -26,34 +26,29 @@
|
||||
* @bug 4524136
|
||||
* @summary Test to make sure label is used for inline links.
|
||||
* @author jamieh
|
||||
* @library ../lib/
|
||||
* @library ../lib
|
||||
* @build JavadocTester
|
||||
* @build TestInlineLinkLabel
|
||||
* @run main TestInlineLinkLabel
|
||||
*/
|
||||
|
||||
public class TestInlineLinkLabel extends JavadocTester {
|
||||
|
||||
private static final String[][] TEST = {
|
||||
//Search for the label to the package link.
|
||||
{ "pkg/C1.html" ,
|
||||
"<a href=\"../pkg/package-summary.html\"><code>Here is a link to a package</code></a>"},
|
||||
|
||||
//Search for the label to the class link
|
||||
{ "pkg/C1.html" ,
|
||||
"<a href=\"../pkg/C2.html\" title=\"class in pkg\"><code>Here is a link to a class</code></a>"}
|
||||
};
|
||||
private static final String[] ARGS =
|
||||
new String[] {
|
||||
"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
public static void main(String... args) throws Exception {
|
||||
TestInlineLinkLabel tester = new TestInlineLinkLabel();
|
||||
tester.run(ARGS, TEST, NO_TEST);
|
||||
tester.printSummary();
|
||||
tester.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
javadoc("-d", "out",
|
||||
"-sourcepath", testSrc,
|
||||
"pkg");
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/C1.html", true,
|
||||
//Search for the label to the package link.
|
||||
"<a href=\"../pkg/package-summary.html\"><code>Here is a link to a package</code></a>",
|
||||
//Search for the label to the class link
|
||||
"<a href=\"../pkg/C2.html\" title=\"class in pkg\"><code>Here is a link to a class</code></a>");
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user