提交 d4f7e595 编写于 作者: J jjg

8006263: Supplementary test cases needed for doclint

Reviewed-by: mcimadamore
Contributed-by: peter.jensen@oracle.com
上级 3e658696
...@@ -92,7 +92,7 @@ public class Checker extends DocTreeScanner<Void, Void> { ...@@ -92,7 +92,7 @@ public class Checker extends DocTreeScanner<Void, Void> {
boolean foundInheritDoc = false; boolean foundInheritDoc = false;
boolean foundReturn = false; boolean foundReturn = false;
enum Flag { public enum Flag {
TABLE_HAS_CAPTION, TABLE_HAS_CAPTION,
HAS_ELEMENT, HAS_ELEMENT,
HAS_TEXT HAS_TEXT
......
/* /*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -122,7 +122,7 @@ public class DocLint implements Plugin { ...@@ -122,7 +122,7 @@ public class DocLint implements Plugin {
if (javacFiles.isEmpty()) { if (javacFiles.isEmpty()) {
if (!needHelp) if (!needHelp)
System.out.println("no files given"); out.println("no files given");
} }
JavacTool tool = JavacTool.create(); JavacTool tool = JavacTool.create();
...@@ -179,11 +179,11 @@ public class DocLint implements Plugin { ...@@ -179,11 +179,11 @@ public class DocLint implements Plugin {
} }
} else if (arg.equals(STATS)) { } else if (arg.equals(STATS)) {
env.messages.setStatsEnabled(true); env.messages.setStatsEnabled(true);
} else if (arg.matches("-bootclasspath") && i + 1 < args.length) { } else if (arg.equals("-bootclasspath") && i + 1 < args.length) {
javacBootClassPath = splitPath(args[++i]); javacBootClassPath = splitPath(args[++i]);
} else if (arg.matches("-classpath") && i + 1 < args.length) { } else if (arg.equals("-classpath") && i + 1 < args.length) {
javacClassPath = splitPath(args[++i]); javacClassPath = splitPath(args[++i]);
} else if (arg.matches("-sourcepath") && i + 1 < args.length) { } else if (arg.equals("-sourcepath") && i + 1 < args.length) {
javacSourcePath = splitPath(args[++i]); javacSourcePath = splitPath(args[++i]);
} else if (arg.equals(XMSGS_OPTION)) { } else if (arg.equals(XMSGS_OPTION)) {
env.messages.setOptions(null); env.messages.setOptions(null);
...@@ -234,6 +234,8 @@ public class DocLint implements Plugin { ...@@ -234,6 +234,8 @@ public class DocLint implements Plugin {
out.println(" equivalent to -Xmsgs:all/protected, meaning that"); out.println(" equivalent to -Xmsgs:all/protected, meaning that");
out.println(" all messages are reported for protected and public"); out.println(" all messages are reported for protected and public");
out.println(" declarations only. "); out.println(" declarations only. ");
out.println(" -stats");
out.println(" Report statistics on the reported issues.");
out.println(" -h -help --help -usage -?"); out.println(" -h -help --help -usage -?");
out.println(" Show this message."); out.println(" Show this message.");
out.println(""); out.println("");
...@@ -247,7 +249,7 @@ public class DocLint implements Plugin { ...@@ -247,7 +249,7 @@ public class DocLint implements Plugin {
List<File> splitPath(String path) { List<File> splitPath(String path) {
List<File> files = new ArrayList<File>(); List<File> files = new ArrayList<File>();
for (String f: path.split(File.separator)) { for (String f: path.split(File.pathSeparator)) {
if (f.length() > 0) if (f.length() > 0)
files.add(new File(f)); files.add(new File(f));
} }
......
/* /*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -43,7 +43,7 @@ import java.util.Map; ...@@ -43,7 +43,7 @@ import java.util.Map;
* risk. This code and its internal interfaces are subject to change * risk. This code and its internal interfaces are subject to change
* or deletion without notice.</b></p> * or deletion without notice.</b></p>
*/ */
enum Entity { public enum Entity {
nbsp(160), nbsp(160),
iexcl(161), iexcl(161),
cent(162), cent(162),
......
/* /*
* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -273,7 +273,7 @@ public enum HtmlTag { ...@@ -273,7 +273,7 @@ public enum HtmlTag {
static final Map<String,Attr> index = new HashMap<String,Attr>(); static final Map<String,Attr> index = new HashMap<String,Attr>();
static { static {
for (Attr t: values()) { for (Attr t: values()) {
index.put(t.name().toLowerCase(), t); index.put(t.getText(), t);
} }
} }
} }
...@@ -346,7 +346,7 @@ public enum HtmlTag { ...@@ -346,7 +346,7 @@ public enum HtmlTag {
private static final Map<String,HtmlTag> index = new HashMap<String,HtmlTag>(); private static final Map<String,HtmlTag> index = new HashMap<String,HtmlTag>();
static { static {
for (HtmlTag t: values()) { for (HtmlTag t: values()) {
index.put(t.name().toLowerCase(), t); index.put(t.getText(), t);
} }
} }
......
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* @test
* @bug 8006263
* @summary Supplementary test cases needed for doclint
*/
import com.sun.tools.doclint.Checker;
import com.sun.tools.doclint.Entity;
import com.sun.tools.doclint.HtmlTag;
import com.sun.tools.doclint.Messages;
import java.util.Objects;
public class CoverageExtras {
public static void main(String... args) {
new CoverageExtras().run();
}
void run() {
check(HtmlTag.A, HtmlTag.valueOf("A"), HtmlTag.values());
check(HtmlTag.Attr.ABBR, HtmlTag.Attr.valueOf("ABBR"), HtmlTag.Attr.values());
check(HtmlTag.AttrKind.INVALID, HtmlTag.AttrKind.valueOf("INVALID"), HtmlTag.AttrKind.values());
check(HtmlTag.BlockType.BLOCK, HtmlTag.BlockType.valueOf("BLOCK"), HtmlTag.BlockType.values());
check(HtmlTag.EndKind.NONE, HtmlTag.EndKind.valueOf("NONE"), HtmlTag.EndKind.values());
check(HtmlTag.Flag.EXPECT_CONTENT, HtmlTag.Flag.valueOf("EXPECT_CONTENT"), HtmlTag.Flag.values());
check(Checker.Flag.TABLE_HAS_CAPTION, Checker.Flag.valueOf("TABLE_HAS_CAPTION"), Checker.Flag.values());
check(Entity.nbsp, Entity.valueOf("nbsp"), Entity.values());
check(Messages.Group.ACCESSIBILITY, Messages.Group.valueOf("ACCESSIBILITY"), Messages.Group.values());
}
<T extends Enum<T>> void check(T expect, T value, T[] values) {
if (!Objects.equals(expect, value)) {
error("Mismatch: '" + expect + "', '" + value + "'");
}
if (!Objects.equals(expect, values[0])) {
error("Mismatch: '" + expect + "', '" + values[0] + "'");
}
}
void error(String msg) {
System.err.println("Error: " + msg);
errors++;
}
int errors;
}
/* /*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -26,6 +26,7 @@ import java.util.ArrayList; ...@@ -26,6 +26,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.sun.tools.doclint.DocLint; import com.sun.tools.doclint.DocLint;
import com.sun.tools.doclint.DocLint.BadArgs;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
...@@ -45,6 +46,7 @@ public class DocLintTester { ...@@ -45,6 +46,7 @@ public class DocLintTester {
public void run(String... args) throws Exception { public void run(String... args) throws Exception {
String testSrc = System.getProperty("test.src"); String testSrc = System.getProperty("test.src");
boolean badArgs = false;
File refFile = null; File refFile = null;
List<String> opts = new ArrayList<String>(); List<String> opts = new ArrayList<String>();
List<File> files = new ArrayList<File>(); List<File> files = new ArrayList<File>();
...@@ -52,19 +54,25 @@ public class DocLintTester { ...@@ -52,19 +54,25 @@ public class DocLintTester {
String arg = args[i]; String arg = args[i];
if (arg.equals("-ref")) { if (arg.equals("-ref")) {
refFile = new File(testSrc, args[++i]); refFile = new File(testSrc, args[++i]);
} else if (arg.equals("-badargs")) {
badArgs = true;
} else if (arg.startsWith("-Xmsgs")) { } else if (arg.startsWith("-Xmsgs")) {
opts.add(arg); opts.add(arg);
} else if (arg.startsWith("-")) {
opts.add(arg);
if (i < args.length - 1 && !args[i+1].startsWith("-"))
opts.add(args[++i]);
} else } else
files.add(new File(testSrc, arg)); files.add(new File(testSrc, arg));
} }
check(opts, files, refFile); check(opts, files, badArgs, refFile);
if (errors > 0) if (errors > 0)
throw new Exception(errors + " errors occurred"); throw new Exception(errors + " errors occurred");
} }
void check(List<String> opts, List<File> files, File refFile) throws Exception { void check(List<String> opts, List<File> files, boolean expectBadArgs, File refFile) throws Exception {
List<String> args = new ArrayList<String>(); List<String> args = new ArrayList<String>();
args.addAll(opts); args.addAll(opts);
for (File file: files) for (File file: files)
...@@ -72,7 +80,14 @@ public class DocLintTester { ...@@ -72,7 +80,14 @@ public class DocLintTester {
StringWriter sw = new StringWriter(); StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw); PrintWriter pw = new PrintWriter(sw);
new DocLint().run(pw, args.toArray(new String[args.size()])); try {
new DocLint().run(pw, args.toArray(new String[args.size()]));
if (expectBadArgs)
error("expected exception not thrown");
} catch (BadArgs e) {
if (!expectBadArgs)
error("unexpected exception caught: " + e);
}
pw.flush(); pw.flush();
String out = normalizeNewlines(removeFileNames(sw.toString())).trim(); String out = normalizeNewlines(removeFileNames(sw.toString())).trim();
if (out != null) if (out != null)
......
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8006263
* @summary Supplementary test cases needed for doclint
* @library ..
* @build DocLintTester
* @run main DocLintTester -Xmsgs:-html EntitiesTest.java
* @run main DocLintTester -Xmsgs:html -ref EntitiesTest.out EntitiesTest.java
*/
/** */
class EntitiesTest {
/**
* &#32; &#x20;
* &#2126; &#x84e; &#x84E;
*/
void range_test() { }
/**
* &nbsp; &#160;
* &iexcl; &#161;
* &cent; &#162;
* &pound; &#163;
* &curren; &#164;
* &yen; &#165;
* &brvbar; &#166;
* &sect; &#167;
* &uml; &#168;
* &copy; &#169;
* &ordf; &#170;
* &laquo; &#171;
* &not; &#172;
* &shy; &#173;
* &reg; &#174;
* &macr; &#175;
* &deg; &#176;
* &plusmn; &#177;
* &sup2; &#178;
* &sup3; &#179;
* &acute; &#180;
* &micro; &#181;
* &para; &#182;
* &middot; &#183;
* &cedil; &#184;
* &sup1; &#185;
* &ordm; &#186;
* &raquo; &#187;
* &frac14; &#188;
* &frac12; &#189;
* &frac34; &#190;
* &iquest; &#191;
* &Agrave; &#192;
* &Aacute; &#193;
* &Acirc; &#194;
* &Atilde; &#195;
* &Auml; &#196;
* &Aring; &#197;
* &AElig; &#198;
* &Ccedil; &#199;
* &Egrave; &#200;
* &Eacute; &#201;
* &Ecirc; &#202;
* &Euml; &#203;
* &Igrave; &#204;
* &Iacute; &#205;
* &Icirc; &#206;
* &Iuml; &#207;
* &ETH; &#208;
* &Ntilde; &#209;
* &Ograve; &#210;
* &Oacute; &#211;
* &Ocirc; &#212;
* &Otilde; &#213;
* &Ouml; &#214;
* &times; &#215;
* &Oslash; &#216;
* &Ugrave; &#217;
* &Uacute; &#218;
* &Ucirc; &#219;
* &Uuml; &#220;
* &Yacute; &#221;
* &THORN; &#222;
* &szlig; &#223;
* &agrave; &#224;
* &aacute; &#225;
* &acirc; &#226;
* &atilde; &#227;
* &auml; &#228;
* &aring; &#229;
* &aelig; &#230;
* &ccedil; &#231;
* &egrave; &#232;
* &eacute; &#233;
* &ecirc; &#234;
* &euml; &#235;
* &igrave; &#236;
* &iacute; &#237;
* &icirc; &#238;
* &iuml; &#239;
* &eth; &#240;
* &ntilde; &#241;
* &ograve; &#242;
* &oacute; &#243;
* &ocirc; &#244;
* &otilde; &#245;
* &ouml; &#246;
* &divide; &#247;
* &oslash; &#248;
* &ugrave; &#249;
* &uacute; &#250;
* &ucirc; &#251;
* &uuml; &#252;
* &yacute; &#253;
* &thorn; &#254;
* &yuml; &#255;
* &fnof; &#402;
* &Alpha; &#913;
* &Beta; &#914;
* &Gamma; &#915;
* &Delta; &#916;
* &Epsilon; &#917;
* &Zeta; &#918;
* &Eta; &#919;
* &Theta; &#920;
* &Iota; &#921;
* &Kappa; &#922;
* &Lambda; &#923;
* &Mu; &#924;
* &Nu; &#925;
* &Xi; &#926;
* &Omicron; &#927;
* &Pi; &#928;
* &Rho; &#929;
* &Sigma; &#931;
* &Tau; &#932;
* &Upsilon; &#933;
* &Phi; &#934;
* &Chi; &#935;
* &Psi; &#936;
* &Omega; &#937;
* &alpha; &#945;
* &beta; &#946;
* &gamma; &#947;
* &delta; &#948;
* &epsilon; &#949;
* &zeta; &#950;
* &eta; &#951;
* &theta; &#952;
* &iota; &#953;
* &kappa; &#954;
* &lambda; &#955;
* &mu; &#956;
* &nu; &#957;
* &xi; &#958;
* &omicron; &#959;
* &pi; &#960;
* &rho; &#961;
* &sigmaf; &#962;
* &sigma; &#963;
* &tau; &#964;
* &upsilon; &#965;
* &phi; &#966;
* &chi; &#967;
* &psi; &#968;
* &omega; &#969;
* &thetasym; &#977;
* &upsih; &#978;
* &piv; &#982;
* &bull; &#8226;
* &hellip; &#8230;
* &prime; &#8242;
* &Prime; &#8243;
* &oline; &#8254;
* &frasl; &#8260;
* &weierp; &#8472;
* &image; &#8465;
* &real; &#8476;
* &trade; &#8482;
* &alefsym; &#8501;
* &larr; &#8592;
* &uarr; &#8593;
* &rarr; &#8594;
* &darr; &#8595;
* &harr; &#8596;
* &crarr; &#8629;
* &lArr; &#8656;
* &uArr; &#8657;
* &rArr; &#8658;
* &dArr; &#8659;
* &hArr; &#8660;
* &forall; &#8704;
* &part; &#8706;
* &exist; &#8707;
* &empty; &#8709;
* &nabla; &#8711;
* &isin; &#8712;
* &notin; &#8713;
* &ni; &#8715;
* &prod; &#8719;
* &sum; &#8721;
* &minus; &#8722;
* &lowast; &#8727;
* &radic; &#8730;
* &prop; &#8733;
* &infin; &#8734;
* &ang; &#8736;
* &and; &#8743;
* &or; &#8744;
* &cap; &#8745;
* &cup; &#8746;
* &_int; &#8747;
* &there4; &#8756;
* &sim; &#8764;
* &cong; &#8773;
* &asymp; &#8776;
* &ne; &#8800;
* &equiv; &#8801;
* &le; &#8804;
* &ge; &#8805;
* &sub; &#8834;
* &sup; &#8835;
* &nsub; &#8836;
* &sube; &#8838;
* &supe; &#8839;
* &oplus; &#8853;
* &otimes; &#8855;
* &perp; &#8869;
* &sdot; &#8901;
* &lceil; &#8968;
* &rceil; &#8969;
* &lfloor; &#8970;
* &rfloor; &#8971;
* &lang; &#9001;
* &rang; &#9002;
* &loz; &#9674;
* &spades; &#9824;
* &clubs; &#9827;
* &hearts; &#9829;
* &diams; &#9830;
* &quot; &#34;
* &amp; &#38;
* &lt; &#60;
* &gt; &#62;
* &OElig; &#338;
* &oelig; &#339;
* &Scaron; &#352;
* &scaron; &#353;
* &Yuml; &#376;
* &circ; &#710;
* &tilde; &#732;
* &ensp; &#8194;
* &emsp; &#8195;
* &thinsp; &#8201;
* &zwnj; &#8204;
* &zwj; &#8205;
* &lrm; &#8206;
* &rlm; &#8207;
* &ndash; &#8211;
* &mdash; &#8212;
* &lsquo; &#8216;
* &rsquo; &#8217;
* &sbquo; &#8218;
* &ldquo; &#8220;
* &rdquo; &#8221;
* &bdquo; &#8222;
* &dagger; &#8224;
* &Dagger; &#8225;
* &permil; &#8240;
* &lsaquo; &#8249;
* &rsaquo; &#8250;
* &euro; &#8364;
*/
void symbolic_entities() { }
/**
* &bad;
*/
void bad_name() { }
/**
* &#31;
* &#2127;
*/
void out_of_range() { }
/**
* &#8213;
* &#9003;
* &#xffff;
*/
void sparse_negative() { }
}
EntitiesTest.java:300: error: invalid entity &bad;
* &bad;
^
EntitiesTest.java:305: error: invalid entity &#31;
* &#31;
^
EntitiesTest.java:306: error: invalid entity &#2127;
* &#2127;
^
EntitiesTest.java:311: error: invalid entity &#8213;
* &#8213;
^
EntitiesTest.java:312: error: invalid entity &#9003;
* &#9003;
^
EntitiesTest.java:313: error: invalid entity &#xffff;
* &#xffff;
^
6 errors
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8006263
* @summary Supplementary test cases needed for doclint
* @library ..
* @build DocLintTester
* @run main DocLintTester -ref HelpTest.out
* @run main DocLintTester -ref HelpTest.out -h
* @run main DocLintTester -ref HelpTest.out -help
* @run main DocLintTester -ref HelpTest.out --help
* @run main DocLintTester -ref HelpTest.out -usage
* @run main DocLintTester -ref HelpTest.out -?
*/
Usage:
doclint [options] source-files...
Options:
-Xmsgs
Same as -Xmsgs:all
-Xmsgs:values
Specify categories of issues to be checked, where 'values'
is a comma-separated list of any of the following:
reference show places where comments contain incorrect
references to Java source code elements
syntax show basic syntax errors within comments
html show issues with HTML tags and attributes
accessibility show issues for accessibility
missing show issues with missing documentation
all all of the above
Precede a value with '-' to negate it
Categories may be qualified by one of:
/public /protected /package /private
For positive categories (not beginning with '-')
the qualifier applies to that access level and above.
For negative categories (beginning with '-')
the qualifier applies to that access level and below.
If a qualifier is missing, the category applies to
all access levels.
For example, -Xmsgs:all,-syntax/private
This will enable all messages, except syntax errors
in the doc comments of private methods.
If no -Xmsgs options are provided, the default is
equivalent to -Xmsgs:all/protected, meaning that
all messages are reported for protected and public
declarations only.
-stats
Report statistics on the reported issues.
-h -help --help -usage -?
Show this message.
The following javac options are also supported
-bootclasspath, -classpath, -sourcepath, -Xmaxerrs, -Xmaxwarns
To run doclint on part of a project, put the compiled classes for your
project on the classpath (or bootclasspath), then specify the source files
to be checked on the command line.
/*
* @test /nodynamiccopyright/
* @bug 8006263
* @summary Supplementary test cases needed for doclint
* @library ..
* @build DocLintTester
* @run main DocLintTester -ref MaxDiagsTest.out -Xmaxerrs 2 -Xmaxwarns 2 MaxDiagsTest.java
* @run main DocLintTester -badargs -Xmaxerrs
* @run main DocLintTester -badargs -Xmaxwarns
* @run main DocLintTester -badargs -Xmaxerrs two -Xmaxwarns two MaxDiagsTest.java
*/
public class MaxDiagsTest {
/**
* &#0; &#0; &#0; &#0;
*/
public void errors() { }
/** 4 undocumented signature items */
public int warnings(int a1, int a2) throws Exception { return 0; }
}
MaxDiagsTest.java:13: warning: no comment
public class MaxDiagsTest {
^
MaxDiagsTest.java:15: error: invalid entity &#0;
* &#0; &#0; &#0; &#0;
^
MaxDiagsTest.java:15: error: invalid entity &#0;
* &#0; &#0; &#0; &#0;
^
MaxDiagsTest.java:20: warning: no @param for a1
public int warnings(int a1, int a2) throws Exception { return 0; }
^
2 errors
2 warnings
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8006263
* @summary Supplementary test cases needed for doclint
*/
import com.sun.tools.doclint.DocLint;
import com.sun.tools.doclint.DocLint.BadArgs;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.regex.Pattern;
public class PathsTest {
public static void main(String... args) throws Exception {
new PathsTest().run();
}
void run() throws Exception {
String PS = File.pathSeparator;
writeFile("src1/p/A.java",
"package p; public class A { }");
compile("-d", "classes1", "src1/p/A.java");
writeFile("src2/q/B.java",
"package q; public class B extends p.A { }");
compile("-d", "classes2", "-classpath", "classes1", "src2/q/B.java");
writeFile("src/Test.java",
"/** &0; */ class Test extends q.B { }");
test("src/Test.java", "-sourcepath", "src1" + PS + "src2");
test("src/Test.java", "-classpath", "classes1" + PS + "classes2");
String sysBootClassPath = System.getProperty("sun.boot.class.path");
test("src/Test.java", "-bootclasspath",
sysBootClassPath + PS + "classes1" + PS + "classes2");
if (errors > 0)
throw new Exception(errors + " errors found");
}
Pattern pkgNotFound = Pattern.compile("package [a-z]+ does not exist");
Pattern badHtmlEntity = Pattern.compile("bad HTML entity");
void test(String file, String pathOpt, String path) throws BadArgs, IOException {
System.err.println("test " + pathOpt);
String out1 = doclint("-Xmsgs", file);
if (!pkgNotFound.matcher(out1).find())
error("message not found: " + pkgNotFound);
String out2 = doclint("-Xmsgs", pathOpt, path, file);
if (pkgNotFound.matcher(out2).find())
error("unexpected message found: " + pkgNotFound);
if (!badHtmlEntity.matcher(out1).find())
error("message not found: " + badHtmlEntity);
try {
doclint("-Xmsgs", pathOpt);
error("expected exception not thrown");
} catch (BadArgs e) {
System.err.println(e);
}
}
void compile(String... args) {
for (int i = 0; i < args.length; i++) {
if (args[i].equals("-d")) {
new File(args[++i]).mkdirs();
break;
}
}
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
int rc = com.sun.tools.javac.Main.compile(args, pw);
pw.close();
String out = sw.toString();
if (!out.isEmpty())
System.err.println(out);
if (rc != 0)
error("compilation failed: rc=" + rc);
}
String doclint(String... args) throws BadArgs, IOException {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
DocLint dl = new DocLint();
dl.run(pw, args);
pw.close();
String out = sw.toString();
if (!out.isEmpty())
System.err.println(out);
return out;
}
File writeFile(String path, String body) throws IOException {
File f = new File(path);
f.getParentFile().mkdirs();
try (FileWriter fw = new FileWriter(path)) {
fw.write(body);
}
return f;
}
void error(String msg) {
System.err.println("Error: " + msg);
errors++;
}
int errors;
}
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8006263
* @summary Supplementary test cases needed for doclint
*/
import com.sun.source.util.JavacTask;
import com.sun.tools.doclint.DocLint;
import com.sun.tools.doclint.DocLint.BadArgs;
import com.sun.tools.javac.api.JavacTool;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URI;
import java.security.Permission;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
public class RunTest {
static class SimpleSecurityManager extends SecurityManager {
boolean allowExit = false;
@Override
public void checkExit(int status) {
if (!allowExit)
throw new SecurityException("System.exit(" + status + ")");
}
@Override
public void checkPermission(Permission perm) { }
}
public static void main(String... args) throws Exception {
// if no security manager already installed, install one to
// prevent System.exit
SimpleSecurityManager secmgr = null;
if (System.getSecurityManager() == null) {
System.setSecurityManager(secmgr = new SimpleSecurityManager() { });
}
try {
new RunTest().run();
} finally {
if (secmgr != null)
secmgr.allowExit = true;
}
}
void run() throws Exception {
testMain();
testRun();
testInit();
testArgsNoFiles();
if (errors > 0)
throw new Exception(errors + " errors found");
}
void testMain() {
System.err.println("test main(String[])");
testMain(true, "-help");
testMain(false, "-unknownOption");
}
void testMain(boolean expectOK, String... args) {
try {
DocLint.main(args);
if (!expectOK)
error("expected SecurityException (from System.exit) not thrown");
} catch (SecurityException e) {
System.err.println(e);
if (expectOK)
error("unexpected SecurityException caught");
}
}
void testRun() throws BadArgs, IOException {
System.err.println("test run(String[])");
DocLint dl = new DocLint();
String[] args = { "-help" };
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
PrintStream prev = System.out;
try {
System.setOut(ps);
dl.run(args);
} finally {
System.setOut(prev);
}
ps.close();
String stdout = baos.toString();
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
dl.run(pw, args);
pw.close();
String direct = sw.toString();
if (!stdout.equals(direct)) {
error("unexpected output");
System.err.println("EXPECT>>" + direct + "<<");
System.err.println("FOUND>>" + stdout + "<<");
}
}
void testInit() {
System.err.println("test init");
DocLint dl = new DocLint();
String name = dl.getName();
if (!Objects.equals(name, "doclint"))
error("unexpected result for DocLint.getName()");
List<? extends JavaFileObject> files =
Arrays.asList(createFile("Test.java", "/** &0; */ class Test{ }"));
String[] goodArgs = { "-Xmsgs" };
testInit(true, goodArgs, files);
String[] badArgs = { "-unknown" };
testInit(false, badArgs, files);
}
void testInit(boolean expectOK, String[] args, List<? extends JavaFileObject> files) {
JavacTool javac = JavacTool.create();
JavacTask task = javac.getTask(null, null, null, null, null, files);
try {
DocLint dl = new DocLint();
dl.init(task, args, true);
if (!expectOK)
error("expected IllegalArgumentException not thrown");
task.call();
} catch (IllegalArgumentException e) {
System.err.println(e);
if (expectOK)
error("unexpected IllegalArgumentException caught");
}
}
void testArgsNoFiles() throws BadArgs, IOException {
System.err.println("test args, no files");
DocLint dl = new DocLint();
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
dl.run(pw, "-Xmsgs");
pw.close();
String out = sw.toString();
String expect = "no files given";
if (!Objects.equals(out.trim(), expect)) {
error("unexpected output");
System.err.println("EXPECT>>" + expect + "<<");
System.err.println("FOUND>>" + out + "<<");
}
}
JavaFileObject createFile(String name, final String body) {
return new SimpleJavaFileObject(URI.create(name), JavaFileObject.Kind.SOURCE) {
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
return body;
}
};
}
void error(String msg) {
System.err.println("Error: " + msg);
errors++;
}
int errors;
}
/*
* @test /nodynamiccopyright/
* @bug 8006263
* @summary Supplementary test cases needed for doclint
* @library ..
* @build DocLintTester
* @run main DocLintTester -ref StatsTest.out -stats -Xmsgs:all StatsTest.java
*/
// warning: missing comment
public class StatsTest {
/**
* &#0; &#0; &#0; &#0;
*/
public void errors() { }
/** 4 undocumented signature items */
public int warnings(int a1, int a2) throws Exception { return 0; }
}
StatsTest.java:11: warning: no comment
public class StatsTest {
^
StatsTest.java:13: error: invalid entity &#0;
* &#0; &#0; &#0; &#0;
^
StatsTest.java:13: error: invalid entity &#0;
* &#0; &#0; &#0; &#0;
^
StatsTest.java:13: error: invalid entity &#0;
* &#0; &#0; &#0; &#0;
^
StatsTest.java:13: error: invalid entity &#0;
* &#0; &#0; &#0; &#0;
^
StatsTest.java:18: warning: no @param for a1
public int warnings(int a1, int a2) throws Exception { return 0; }
^
StatsTest.java:18: warning: no @param for a2
public int warnings(int a1, int a2) throws Exception { return 0; }
^
StatsTest.java:18: warning: no @return
public int warnings(int a1, int a2) throws Exception { return 0; }
^
StatsTest.java:18: warning: no @throws for java.lang.Exception
public int warnings(int a1, int a2) throws Exception { return 0; }
^
By group...
5: missing
4: html
By diagnostic kind...
5: warning
4: error
By message kind...
4: invalid entity &{0};
2: no @param for {0}
1: no @return
1: no @throws for {0}
1: no comment
4 errors
5 warnings
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册