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 }