1 /* 2 * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 6958836 8002168 27 * @summary javadoc should support -Xmaxerrs and -Xmaxwarns 28 * @modules jdk.javadoc 29 */ 30 31 import java.io.*; 32 import java.util.*; 33 34 public class Test { 35 public static void main(String... args) throws Exception { 36 new Test().run(); 37 } 38 39 void run() throws Exception { 40 javadoc("errs", list(), 10, 0); 41 javadoc("errs", list("-Xmaxerrs", "0"), 10, 0); 42 javadoc("errs", list("-Xmaxerrs", "2"), 2, 0); 43 javadoc("errs", list("-Xmaxerrs", "4"), 4, 0); 44 javadoc("errs", list("-Xmaxerrs", "20"), 10, 0); 45 46 javadoc("warns", list(), 0, 10); 47 javadoc("warns", list("-Xmaxwarns", "0"), 0, 10); 48 javadoc("warns", list("-Xmaxwarns", "2"), 0, 2); 49 javadoc("warns", list("-Xmaxwarns", "4"), 0, 4); 50 javadoc("warns", list("-Xmaxwarns", "20"), 0, 10); 51 52 if (errors > 0) 53 throw new Exception(errors + " errors occurred."); 54 } 55 56 void javadoc(String pkg, List<String> testOpts, 57 int expectErrs, int expectWarns) { 58 System.err.println("Test " + (++count) + ": " + pkg + " " + testOpts); 59 File testOutDir = new File("test" + count); 60 61 List<String> opts = new ArrayList<String>(); 62 // Force en_US locale in lieu of something like -XDrawDiagnostics. 63 // For some reason, this must be the first option when used. 64 opts.addAll(list("-locale", "en_US")); 65 opts.add("-Xdoclint:none"); 66 opts.addAll(list("-classpath", System.getProperty("test.src"))); 67 opts.addAll(list("-d", testOutDir.getPath())); 68 opts.addAll(testOpts); 69 opts.add(pkg); 70 71 StringWriter errSW = new StringWriter(); 72 PrintWriter errPW = new PrintWriter(errSW); 73 StringWriter warnSW = new StringWriter(); 74 PrintWriter warnPW = new PrintWriter(warnSW); 75 StringWriter noteSW = new StringWriter(); 76 PrintWriter notePW = new PrintWriter(noteSW); 77 78 int rc = com.sun.tools.javadoc.Main.execute("javadoc", 79 errPW, warnPW, notePW, 80 "com.sun.tools.doclets.standard.Standard", 81 getClass().getClassLoader(), 82 opts.toArray(new String[opts.size()])); 83 System.err.println("rc: " + rc); 84 85 errPW.close(); 86 String errOut = errSW.toString(); 87 System.err.println("Errors:\n" + errOut); 88 warnPW.close(); 89 String warnOut = warnSW.toString(); 90 System.err.println("Warnings:\n" + warnOut); 91 notePW.close(); 92 String noteOut = noteSW.toString(); 93 System.err.println("Notes:\n" + noteOut); 94 95 check(errOut, "Errors.java", expectErrs); 96 check(warnOut, " warning ", expectWarns); // requires -locale en_US 97 } 98 99 void check(String text, String expectText, int expectCount) { 100 int foundCount = 0; 101 for (String line: text.split("[\r\n]+")) { 102 if (line.contains(expectText)) 103 foundCount++; 104 } 105 if (foundCount != expectCount) { 106 error("incorrect number of matches found: " + foundCount 107 + ", expected: " + expectCount); 108 } 109 } 110 111 private List<String> list(String... args) { 112 return Arrays.asList(args); 113 } 114 115 void error(String msg) { 116 System.err.println(msg); 117 errors++; 118 } 119 120 int count; 121 int errors; 122 }