/* * Copyright (c) 2015, 2020, 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 8141492 8071982 8141636 8147890 8166175 8168965 8176794 8175218 8147881 * 8181622 8182263 8074407 8187521 8198522 8182765 8199278 8196201 8196202 * 8184205 8214468 8222548 8223378 8234746 8241219 * @summary Test the search feature of javadoc. * @library ../../lib * @modules jdk.javadoc/jdk.javadoc.internal.tool * @build javadoc.tester.* * @run main TestSearch */ import java.util.Locale; import java.util.Set; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; import javadoc.tester.JavadocTester; public class TestSearch extends JavadocTester { public static void main(String... args) throws Exception { TestSearch tester = new TestSearch(); tester.runTests(); } @Test public void test1() { javadoc("-d", "out-1", "-sourcepath", "-use", testSrc("UnnamedPkgClass.java")); checkExit(Exit.OK); checkSearchOutput("UnnamedPkgClass.html", true, true); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.js", "module-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test2() { javadoc("-d", "out-2", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkInvalidUsageIndexTag(); checkSearchOutput(true); checkSingleIndex(true, true); checkSingleIndexSearchTagDuplication(); checkJqueryAndImageFiles(true); checkSearchJS(); checkAllPkgsAllClasses(); checkFiles(true, "member-search-index.js", "module-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test2a() { javadoc("-d", "out-2a", "-Xdoclint:all", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.ERROR); checkDocLintErrors(); checkSearchOutput(true); checkSingleIndex(true, true); checkSingleIndexSearchTagDuplication(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test3() { javadoc("-d", "out-3", "-noindex", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchOutput(false); checkJqueryAndImageFiles(false); checkFiles(false, "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js", "index-all.html", "allpackages-index.html", "allclasses-index.html"); } @Test public void test4() { javadoc("-d", "out-4", "-html5", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchOutput(true); checkSingleIndex(true, true); checkSingleIndexSearchTagDuplication(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test5() { javadoc("-d", "out-5", "-html5", "-noindex", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchOutput(false); checkJqueryAndImageFiles(false); checkFiles(false, "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js", "index-all.html"); } @Test public void test6() { javadoc("-d", "out-6", "-nocomment", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchOutput(true); checkIndexNoComment(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test7() { javadoc("-d", "out-7", "-nodeprecated", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchOutput(true); checkIndexNoDeprecated(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test8() { javadoc("-d", "out-8", "-splitindex", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkInvalidUsageIndexTag(); checkSearchOutput(true); checkSplitIndex(); checkSplitIndexSearchTagDuplication(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test9() { javadoc("-d", "out-9", "-sourcepath", testSrc, "-javafx", "--disable-javafx-strict-checks", "-package", "-use", "pkgfx", "pkg3"); checkExit(Exit.OK); checkSearchOutput(true); checkJavaFXOutput(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.js", "module-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void testURLEncoding() { javadoc("-d", "out-encode-html5", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchJS(); checkSearchIndex(true); } @Test public void testDefaultJapaneseLocale() { Locale prev = Locale.getDefault(); Locale.setDefault(Locale.forLanguageTag("ja-JP")); try { javadoc("-d", "out-jp-default", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkOutput(Output.OUT, true, "\u30d1\u30c3\u30b1\u30fc\u30b8pkg\u306e\u30bd\u30fc\u30b9\u30fb\u30d5\u30a1" + "\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...\n", "\u30d1\u30c3\u30b1\u30fc\u30b8pkg1\u306e\u30bd\u30fc\u30b9\u30fb\u30d5\u30a1" + "\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...\n"); checkSearchJS(); checkSearchIndex(true); } finally { Locale.setDefault(prev); } } @Test public void testJapaneseLocaleOption() { javadoc("-locale", "ja_JP", "-d", "out-jp-option", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkOutput(Output.OUT, true, """ Loading source files for package pkg... """, """ Loading source files for package pkg1... """); checkOutput("index.html", true, "\u30d1\u30c3\u30b1\u30fc\u30b8"); checkSearchJS(); checkSearchIndex(true); } @Test public void testDefaultChineseLocale() { Locale prev = Locale.getDefault(); Locale.setDefault(Locale.forLanguageTag("zh-CN")); try { javadoc("-d", "out-cn-default", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkOutput(Output.OUT, true, "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg\u7684\u6e90\u6587\u4ef6...\n", "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg1\u7684\u6e90\u6587\u4ef6...\n", "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg2\u7684\u6e90\u6587\u4ef6...\n", "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg3\u7684\u6e90\u6587\u4ef6...\n"); checkSearchJS(); checkSearchIndex(true); } finally { Locale.setDefault(prev); } } @Test public void testChineseLocaleOption() { javadoc("-locale", "zh_CN", "-d", "out-cn-option", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkOutput(Output.OUT, true, """ Loading source files for package pkg... """, """ Loading source files for package pkg1... """, """ Loading source files for package pkg2... """, """ Loading source files for package pkg3... """); checkOutput("index.html", true, "\u7a0b\u5e8f\u5305"); checkSearchJS(); checkSearchIndex(true); } void checkDocLintErrors() { checkOutput(Output.OUT, true, """ A sample method. Testing search tag for {@index "unclosed quote}.""", "Another test class. Testing empty {@index }.", "Constant field. Testing no text in index tag {@index}.", "A test field. Testing only white-spaces in index tag text {@index }."); } void checkSearchOutput(boolean expectedOutput) { checkSearchOutput("index.html", expectedOutput, true); } void checkSearchIndex(boolean expectedOutput) { checkOutput("member-search-index.js", expectedOutput, """ {"p":"pkg","c":"AnotherClass","l":"AnotherClass()","u":"%3Cinit%3E()"}""", """ {"p":"pkg1","c":"RegClass","l":"RegClass()","u":"%3Cinit%3E()"}""", """ {"p":"pkg2","c":"TestError","l":"TestError()","u":"%3Cinit%3E()"}""", """ {"p":"pkg","c":"AnotherClass","l":"method(byte[], int, String)","u":"method(byte[],int,java.lang.String)"}"""); checkOutput("member-search-index.js", !expectedOutput, """ {"p":"pkg","c":"AnotherClass","l":"method(RegClass)","u":"method-pkg1.RegClass-"}""", """ {"p":"pkg2","c":"TestClass","l":"TestClass()","u":"TestClass--"}""", """ {"p":"pkg","c":"TestError","l":"TestError()","u":"TestError--"}""", """ {"p":"pkg","c":"AnotherClass","l":"method(byte[], int, String)","u":"method-byte:A-int-java.lang.String-"}"""); } void checkSearchOutput(boolean expectedOutput, boolean moduleDirectoriesVar) { checkSearchOutput("index.html", expectedOutput, moduleDirectoriesVar); } void checkSearchOutput(String fileName, boolean expectedOutput, boolean moduleDirectoriesVar) { // Test for search related markup checkOutput(fileName, expectedOutput, """ """, """ """, """ """, """ var pathtoroot = "./"; loadScripts(document, 'script');""", "
All Classes|All Packages"""); checkOutput("index-files/index-10.html", true, """
All Classes|All Packages"""); } }