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
31import java.io.*;
32import java.util.*;
33
34public 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}
123