1 /*
   2  * Copyright (c) 2016, 2018, 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 8154119 8154262 8156077 8157987 8154261 8154817 8135291 8155995 8162363
  27  *      8168766 8168688 8162674 8160196 8175799 8174974 8176778 8177562 8175218
  28  *      8175823 8166306 8178043 8181622 8183511 8169819 8074407 8183037 8191464
  29         8164407 8192007 8182765 8196200 8196201 8196202 8196202 8205593
  30  * @summary Test modules support in javadoc.
  31  * @author bpatel
  32  * @library ../lib
  33  * @modules jdk.javadoc/jdk.javadoc.internal.tool
  34  * @build JavadocTester
  35  * @run main TestModules
  36  */
  37 public class TestModules extends JavadocTester {
  38 
  39     public static void main(String... args) throws Exception {
  40         TestModules tester = new TestModules();
  41         tester.runTests();
  42     }
  43 
  44     /**
  45      * Test generated module pages for HTML 4.
  46      */
  47     @Test
  48     void testHtml4() {
  49         javadoc("-d", "out",
  50                 "-html4",
  51                 "-use",
  52                 "-Xdoclint:none",
  53                 "-overview", testSrc("overview.html"),
  54                 "--frames",
  55                 "--module-source-path", testSrc,
  56                 "--module", "moduleA,moduleB",
  57                 "testpkgmdlA", "testpkgmdlB");
  58         checkExit(Exit.OK);
  59         checkDescription(true);
  60         checkNoDescription(false);
  61         checkOverviewSummaryModules();
  62         checkModuleLink();
  63         checkModuleClickThroughLinks();
  64         checkModuleClickThrough(true);
  65         checkModuleFilesAndLinks(true);
  66         checkModulesInSearch(true);
  67         checkOverviewFrame(true);
  68         checkAllPkgsAllClasses(false);
  69     }
  70 
  71     /**
  72      * Test generated module pages for HTML 5.
  73      */
  74     @Test
  75     void testHtml5() {
  76         javadoc("-d", "out-html5",
  77                 "-use",
  78                 "-Xdoclint:none",
  79                 "-overview", testSrc("overview.html"),
  80                 "--frames",
  81                 "--module-source-path", testSrc,
  82                 "--module", "moduleA,moduleB",
  83                 "testpkgmdlA", "testpkgmdlB");
  84         checkExit(Exit.OK);
  85         checkHtml5Description(true);
  86         checkHtml5NoDescription(false);
  87         checkHtml5OverviewSummaryModules();
  88         checkModuleLink();
  89         checkModuleClickThroughLinks();
  90         checkModuleClickThrough(true);
  91         checkModuleFilesAndLinks(true);
  92         checkModulesInSearch(true);
  93         checkOverviewFrame(true);
  94         checkAllPkgsAllClasses(true);
  95     }
  96 
  97     /**
  98      * Test generated module pages for HTML 4 with -nocomment option.
  99      */
 100     @Test
 101     void testHtml4NoComment() {
 102         javadoc("-d", "out-nocomment",
 103                 "-html4",
 104                 "-nocomment",
 105                 "-use",
 106                 "-Xdoclint:none",
 107                 "--frames",
 108                 "-overview", testSrc("overview.html"),
 109                 "--module-source-path", testSrc,
 110                 "--module", "moduleA,moduleB",
 111                 "testpkgmdlA", "testpkgmdlB");
 112         checkExit(Exit.OK);
 113         checkDescription(false);
 114         checkNoDescription(true);
 115         checkModuleLink();
 116         checkModuleFilesAndLinks(true);
 117         checkOverviewFrame(true);
 118     }
 119 
 120     /**
 121      * Test generated module pages for HTML 5 with -nocomment option.
 122      */
 123     @Test
 124     void testHtml5NoComment() {
 125         javadoc("-d", "out-html5-nocomment",
 126                 "-nocomment",
 127                 "-use",
 128                 "-Xdoclint:none",
 129                 "--frames",
 130                 "-overview", testSrc("overview.html"),
 131                 "--module-source-path", testSrc,
 132                 "--module", "moduleA,moduleB",
 133                 "testpkgmdlA", "testpkgmdlB");
 134         checkExit(Exit.OK);
 135         checkHtml5Description(false);
 136         checkHtml5NoDescription(true);
 137         checkModuleLink();
 138         checkModuleFilesAndLinks(true);
 139         checkOverviewFrame(true);
 140     }
 141 
 142     /**
 143      * Test generated pages, in an unnamed module, for HTML 4.
 144      */
 145     @Test
 146     void testHtml4UnnamedModule() {
 147         javadoc("-d", "out-nomodule",
 148                 "-html4",
 149                 "-use",
 150                 "--frames",
 151                 "-overview", testSrc("overview.html"),
 152                 "-sourcepath", testSrc,
 153                 "testpkgnomodule", "testpkgnomodule1");
 154         checkExit(Exit.OK);
 155         checkOverviewSummaryPackages();
 156         checkModuleClickThrough(false);
 157         checkModuleFilesAndLinks(false);
 158         checkModulesInSearch(false);
 159         checkOverviewFrame(false);
 160     }
 161 
 162     /**
 163      * Test generated pages, in an unnamed module, for HTML 5.
 164      */
 165     @Test
 166     void testHtml5UnnamedModule() {
 167         javadoc("-d", "out-html5-nomodule",
 168                 "-use",
 169                 "--frames",
 170                 "-overview", testSrc("overview.html"),
 171                 "-sourcepath", testSrc,
 172                 "testpkgnomodule", "testpkgnomodule1");
 173         checkExit(Exit.OK);
 174         checkHtml5OverviewSummaryPackages();
 175         checkModuleFilesAndLinks(false);
 176         checkModulesInSearch(false);
 177         checkOverviewFrame(false);
 178     }
 179 
 180     /**
 181      * Test generated module pages with javadoc tags.
 182      */
 183     @Test
 184     void testJDTagsInModules() {
 185         javadoc("-d", "out-mdltags",
 186                 "-author",
 187                 "-version",
 188                 "-Xdoclint:none",
 189                 "-tag", "regular:a:Regular Tag:",
 190                 "-tag", "moduletag:s:Module Tag:",
 191                 "--module-source-path", testSrc,
 192                 "--module", "moduletags,moduleB",
 193                 "testpkgmdltags", "testpkgmdlB");
 194         checkExit(Exit.OK);
 195         checkModuleTags();
 196     }
 197 
 198     /**
 199      * Test generated module pages with javadoc tags.
 200      */
 201     @Test
 202     void testJDTagsInModules_html4() {
 203         javadoc("-d", "out-mdltags-html4",
 204                 "-html4",
 205                 "-author",
 206                 "-version",
 207                 "-Xdoclint:none",
 208                 "-tag", "regular:a:Regular Tag:",
 209                 "-tag", "moduletag:s:Module Tag:",
 210                 "--module-source-path", testSrc,
 211                 "--module", "moduletags,moduleB",
 212                 "testpkgmdltags", "testpkgmdlB");
 213         checkExit(Exit.OK);
 214         checkModuleTags_html4();
 215     }
 216 
 217     /**
 218      * Test generated module summary page.
 219      */
 220     @Test
 221     void testModuleSummary() {
 222         javadoc("-d", "out-moduleSummary",
 223                 "-use",
 224                 "-Xdoclint:none",
 225                 "--module-source-path", testSrc,
 226                 "--module", "moduleA,moduleB",
 227                 "testpkgmdlA", "testpkgmdlB", "moduleB/testpkg2mdlB");
 228         checkExit(Exit.OK);
 229         checkModuleSummary();
 230         checkNegatedModuleSummary();
 231     }
 232 
 233     /**
 234      * Test generated module summary page.
 235      */
 236     @Test
 237     void testModuleSummary_html4() {
 238         javadoc("-d", "out-moduleSummary-html4",
 239                 "-html4",
 240                 "-use",
 241                 "-Xdoclint:none",
 242                 "--module-source-path", testSrc,
 243                 "--module", "moduleA,moduleB",
 244                 "testpkgmdlA", "testpkgmdlB", "moduleB/testpkg2mdlB");
 245         checkExit(Exit.OK);
 246         checkModuleSummary_html4();
 247         checkNegatedModuleSummary_html4();
 248     }
 249 
 250     /**
 251      * Test generated module summary page of an aggregating module.
 252      */
 253     @Test
 254     void testAggregatorModuleSummary() {
 255         setAutomaticCheckLinks(false); // @ignore JDK-8202628
 256         javadoc("-d", "out-aggregatorModuleSummary",
 257                 "-use",
 258                 "--module-source-path", testSrc,
 259                 "--expand-requires", "transitive",
 260                 "--module", "moduleT");
 261         setAutomaticCheckLinks(true); // @ignore JDK-8202628
 262         checkExit(Exit.OK);
 263         checkAggregatorModuleSummary();
 264     }
 265 
 266     /**
 267      * Test generated module pages and pages with link to modules.
 268      */
 269     @Test
 270     void testModuleFilesAndLinks() {
 271         javadoc("-d", "out-modulelinks",
 272                 "-Xdoclint:none",
 273                 "--frames",
 274                 "--module-source-path", testSrc,
 275                 "--module", "moduleA,moduleB",
 276                 "testpkgmdlA", "testpkgmdlB");
 277         checkExit(Exit.OK);
 278         checkModuleFilesAndLinks(true);
 279         checkOverviewFrame(true);
 280     }
 281 
 282     /**
 283      * Test generated module pages for a deprecated module.
 284      */
 285     @Test
 286     void testModuleDeprecation() {
 287         javadoc("-d", "out-moduledepr",
 288                 "-Xdoclint:none",
 289                 "-tag", "regular:a:Regular Tag:",
 290                 "-tag", "moduletag:s:Module Tag:",
 291                 "--module-source-path", testSrc,
 292                 "--module", "moduleA,moduleB,moduletags",
 293                 "testpkgmdlA", "testpkgmdlB", "testpkgmdltags");
 294         checkExit(Exit.OK);
 295         checkModuleDeprecation(true);
 296     }
 297 
 298     /**
 299      * Test annotations on modules.
 300      */
 301     @Test
 302     void testModuleAnnotation() {
 303         javadoc("-d", "out-moduleanno",
 304                 "-Xdoclint:none",
 305                 "--module-source-path", testSrc,
 306                 "--module", "moduleA,moduleB",
 307                 "testpkgmdlA", "testpkgmdlB");
 308         checkExit(Exit.OK);
 309         checkModuleAnnotation();
 310     }
 311 
 312     /**
 313      * Test annotations on modules.
 314      */
 315     @Test
 316     void testModuleAnnotation_html4() {
 317         javadoc("-d", "out-moduleanno-html4",
 318                 "-html4",
 319                 "-Xdoclint:none",
 320                 "--module-source-path", testSrc,
 321                 "--module", "moduleA,moduleB",
 322                 "testpkgmdlA", "testpkgmdlB");
 323         checkExit(Exit.OK);
 324         checkModuleAnnotation_html4();
 325     }
 326 
 327     /**
 328      * Test module summary pages in "api" mode.
 329      */
 330     @Test
 331     void testApiMode() {
 332         javadoc("-d", "out-api",
 333                 "-use",
 334                 "--show-module-contents=api",
 335                 "-author",
 336                 "-version",
 337                 "-Xdoclint:none",
 338                 "--frames",
 339                 "-tag", "regular:a:Regular Tag:",
 340                 "-tag", "moduletag:s:Module Tag:",
 341                 "--module-source-path", testSrc,
 342                 "--module", "moduleA,moduleB,moduleC,moduletags",
 343                 "testpkgmdlA", "moduleA/concealedpkgmdlA", "testpkgmdlB", "testpkg2mdlB", "testpkgmdlC", "testpkgmdltags");
 344         checkExit(Exit.OK);
 345         checkModuleModeCommon();
 346         checkModuleModeApi(true);
 347         checkModuleModeAll(false);
 348         checkModuleFrameFiles(true);
 349         checkAllModulesLink(true);
 350     }
 351 
 352     /**
 353      * Test module summary pages in "all" mode.
 354      */
 355     @Test
 356     void testAllMode() {
 357         javadoc("-d", "out-all",
 358                 "-use",
 359                 "--show-module-contents=all",
 360                 "-author",
 361                 "-version",
 362                 "-Xdoclint:none",
 363                 "--frames",
 364                 "-tag", "regular:a:Regular Tag:",
 365                 "-tag", "moduletag:s:Module Tag:",
 366                 "--module-source-path", testSrc,
 367                 "--module", "moduleA,moduleB,moduleC,moduletags",
 368                 "testpkgmdlA", "moduleA/concealedpkgmdlA", "testpkgmdlB", "testpkg2mdlB", "testpkgmdlC", "testpkgmdltags");
 369         checkExit(Exit.OK);
 370         checkModuleModeCommon();
 371         checkModuleModeApi(false);
 372         checkModuleModeAll(true);
 373         checkModuleFrameFiles(true);
 374         checkAllModulesLink(true);
 375     }
 376 
 377     /**
 378      * Test module summary pages in "all" mode.
 379      */
 380     @Test
 381     void testAllModeHtml4() {
 382         javadoc("-d", "out-all-html4",
 383                 "-html4",
 384                 "-use",
 385                 "--show-module-contents=all",
 386                 "-author",
 387                 "-version",
 388                 "-Xdoclint:none",
 389                 "--frames",
 390                 "-tag", "regular:a:Regular Tag:",
 391                 "-tag", "moduletag:s:Module Tag:",
 392                 "--module-source-path", testSrc,
 393                 "--module", "moduleA,moduleB,moduleC,moduletags",
 394                 "testpkgmdlA", "moduleA/concealedpkgmdlA", "testpkgmdlB", "testpkg2mdlB", "testpkgmdlC", "testpkgmdltags");
 395         checkExit(Exit.OK);
 396         checkModuleModeCommon_html4();
 397         checkModuleModeApi_html4(false);
 398     }
 399 
 400     /**
 401      * Test generated module summary page of a module with no exported package.
 402      */
 403     @Test
 404     void testModuleSummaryNoExportedPkgAll() {
 405         javadoc("-d", "out-ModuleSummaryNoExportedPkgAll",
 406                 "-use",
 407                 "--show-module-contents=all",
 408                 "-sourcepath", testSrc + "/moduleNoExport",
 409                 "--module", "moduleNoExport",
 410                 "testpkgmdlNoExport");
 411         checkExit(Exit.OK);
 412         checkModuleSummaryNoExported(true);
 413     }
 414 
 415     /**
 416      * Test generated module summary page of a module with no exported package.
 417      */
 418     @Test
 419     void testModuleSummaryNoExportedPkgAll_html4() {
 420         javadoc("-d", "out-ModuleSummaryNoExportedPkgAll-html4",
 421                 "-html4",
 422                 "-use",
 423                 "--show-module-contents=all",
 424                 "-sourcepath", testSrc + "/moduleNoExport",
 425                 "--module", "moduleNoExport",
 426                 "testpkgmdlNoExport");
 427         checkExit(Exit.OK);
 428         checkModuleSummaryNoExported_html4(true);
 429     }
 430 
 431     /**
 432      * Test generated module summary page of a module with no exported package.
 433      */
 434     @Test
 435     void testModuleSummaryNoExportedPkgApi() {
 436         javadoc("-d", "out-ModuleSummaryNoExportedPkgApi",
 437                 "-use",
 438                 "-sourcepath", testSrc + "/moduleNoExport",
 439                 "--module", "moduleNoExport",
 440                 "testpkgmdlNoExport");
 441         checkExit(Exit.OK);
 442         checkModuleSummaryNoExported(false);
 443     }
 444 
 445     /**
 446      * Test generated module summary page of a module with no exported package.
 447      */
 448     @Test
 449     void testModuleSummaryNoExportedPkgApi_html4() {
 450         javadoc("-d", "out-ModuleSummaryNoExportedPkgApi-html4",
 451                 "-html4",
 452                 "-use",
 453                 "-sourcepath", testSrc + "/moduleNoExport",
 454                 "--module", "moduleNoExport",
 455                 "testpkgmdlNoExport");
 456         checkExit(Exit.OK);
 457         checkModuleSummaryNoExported_html4(false);
 458     }
 459 
 460     /**
 461      * Test generated module pages for javadoc run for a single module having a single package.
 462      */
 463     @Test
 464     void testSingleModuleSinglePkg() {
 465         javadoc("-d", "out-singlemod",
 466                 "--frames",
 467                 "--module-source-path", testSrc,
 468                 "--module", "moduleC",
 469                 "testpkgmdlC");
 470         checkExit(Exit.OK);
 471         checkModuleFrameFiles(false);
 472     }
 473 
 474     /**
 475      * Test generated module pages for javadoc run for a single module having multiple packages.
 476      */
 477     @Test
 478     void testSingleModuleMultiplePkg() {
 479         javadoc("-d", "out-singlemodmultiplepkg",
 480                 "--show-module-contents=all",
 481                 "-Xdoclint:none",
 482                 "--frames",
 483                 "--module-source-path", testSrc,
 484                 "--module", "moduleB",
 485                 "testpkg2mdlB", "testpkgmdlB");
 486         checkExit(Exit.OK);
 487         checkAllModulesLink(false);
 488     }
 489 
 490     /**
 491      * Test -group option for modules. The overview-summary.html page should group the modules accordingly.
 492      */
 493     @Test
 494     void testGroupOption() {
 495         javadoc("-d", "out-group",
 496                 "--show-module-contents=all",
 497                 "-Xdoclint:none",
 498                 "--frames",
 499                 "-tag", "regular:a:Regular Tag:",
 500                 "-tag", "moduletag:s:Module Tag:",
 501                 "--module-source-path", testSrc,
 502                 "-group", "Module Group A", "moduleA*",
 503                 "-group", "Module Group B & C", "moduleB*:moduleC*",
 504                 "-group", "Java SE Modules", "java*",
 505                 "--module", "moduleA,moduleB,moduleC,moduletags",
 506                 "moduleA/concealedpkgmdlA", "testpkgmdlA", "testpkg2mdlB", "testpkgmdlB", "testpkgmdlC",
 507                 "testpkgmdltags");
 508         checkExit(Exit.OK);
 509         checkGroupOption();
 510     }
 511 
 512     /**
 513      * Test -group option for modules. The overview-summary.html page should group the modules accordingly.
 514      */
 515     @Test
 516     void testGroupOption_html4() {
 517         javadoc("-d", "out-group-html4",
 518                 "-html4",
 519                 "--show-module-contents=all",
 520                 "-Xdoclint:none",
 521                 "--frames",
 522                 "-tag", "regular:a:Regular Tag:",
 523                 "-tag", "moduletag:s:Module Tag:",
 524                 "--module-source-path", testSrc,
 525                 "-group", "Module Group A", "moduleA*",
 526                 "-group", "Module Group B & C", "moduleB*:moduleC*",
 527                 "-group", "Java SE Modules", "java*",
 528                 "--module", "moduleA,moduleB,moduleC,moduletags",
 529                 "moduleA/concealedpkgmdlA", "testpkgmdlA", "testpkg2mdlB", "testpkgmdlB", "testpkgmdlC",
 530                 "testpkgmdltags");
 531         checkExit(Exit.OK);
 532         checkGroupOption_html4();
 533     }
 534 
 535     /**
 536      * Test -group option for modules and the ordering of module groups.
 537      * The overview-summary.html page should group the modules accordingly and display the group tabs in
 538      * the order it was provided on the command-line.
 539      */
 540     @Test
 541     void testGroupOptionOrdering() {
 542         javadoc("-d", "out-groupOrder",
 543                 "--show-module-contents=all",
 544                 "-Xdoclint:none",
 545                 "--frames",
 546                 "-tag", "regular:a:Regular Tag:",
 547                 "-tag", "moduletag:s:Module Tag:",
 548                 "--module-source-path", testSrc,
 549                 "-group", "B Group", "moduleB*",
 550                 "-group", "C Group", "moduleC*",
 551                 "-group", "A Group", "moduleA*",
 552                 "-group", "Java SE Modules", "java*",
 553                 "--module", "moduleA,moduleB,moduleC,moduletags",
 554                 "moduleA/concealedpkgmdlA", "testpkgmdlA", "testpkg2mdlB", "testpkgmdlB", "testpkgmdlC",
 555                 "testpkgmdltags");
 556         checkExit(Exit.OK);
 557         checkGroupOptionOrdering();
 558     }
 559 
 560     /**
 561      * Test -group option for unnamed modules. The overview-summary.html page should group the packages accordingly.
 562      */
 563     @Test
 564     void testUnnamedModuleGroupOption() {
 565         javadoc("-d", "out-groupnomodule",
 566                 "-use",
 567                 "-Xdoclint:none",
 568                 "--frames",
 569                 "-overview", testSrc("overview.html"),
 570                 "-sourcepath", testSrc,
 571                 "-group", "Package Group 0", "testpkgnomodule",
 572                 "-group", "Package Group 1", "testpkgnomodule1",
 573                 "testpkgnomodule", "testpkgnomodule1");
 574         checkExit(Exit.OK);
 575         checkUnnamedModuleGroupOption();
 576     }
 577 
 578     /**
 579      * Test -group option for unnamed modules. The overview-summary.html page should group the packages accordingly.
 580      */
 581     @Test
 582     void testUnnamedModuleGroupOption_html4() {
 583         javadoc("-d", "out-groupnomodule-html4",
 584                 "-html4",
 585                 "-use",
 586                 "-Xdoclint:none",
 587                 "--frames",
 588                 "-overview", testSrc("overview.html"),
 589                 "-sourcepath", testSrc,
 590                 "-group", "Package Group 0", "testpkgnomodule",
 591                 "-group", "Package Group 1", "testpkgnomodule1",
 592                 "testpkgnomodule", "testpkgnomodule1");
 593         checkExit(Exit.OK);
 594         checkUnnamedModuleGroupOption_html4();
 595     }
 596 
 597     /**
 598      * Test -group option for unnamed modules and the ordering of package groups.
 599      * The overview-summary.html page should group the packages accordingly and display the group tabs in
 600      * the order it was provided on the command-line.
 601      */
 602     @Test
 603     void testGroupOptionPackageOrdering() {
 604         javadoc("-d", "out-groupPkgOrder",
 605                 "-use",
 606                 "-Xdoclint:none",
 607                 "--frames",
 608                 "-overview", testSrc("overview.html"),
 609                 "-sourcepath", testSrc,
 610                 "-group", "Z Group", "testpkgnomodule",
 611                 "-group", "A Group", "testpkgnomodule1",
 612                 "testpkgnomodule", "testpkgnomodule1");
 613         checkExit(Exit.OK);
 614         checkGroupOptionPackageOrdering();
 615     }
 616 
 617     /**
 618      * Test -group option for a single module.
 619      */
 620     @Test
 621     void testGroupOptionSingleModule() {
 622         javadoc("-d", "out-groupsinglemodule",
 623                 "-use",
 624                 "-Xdoclint:none",
 625                 "--frames",
 626                 "--module-source-path", testSrc,
 627                 "-group", "Module Group B", "moduleB*",
 628                 "--module", "moduleB",
 629                 "testpkg2mdlB", "testpkgmdlB");
 630         checkExit(Exit.OK);
 631         checkGroupOptionSingleModule();
 632     }
 633 
 634     /**
 635      * Test -group option for a single module.
 636      */
 637     @Test
 638     void testGroupOptionSingleModule_html4() {
 639         javadoc("-d", "out-groupsinglemodule-html4",
 640                 "-html4",
 641                 "-use",
 642                 "-Xdoclint:none",
 643                 "--frames",
 644                 "--module-source-path", testSrc,
 645                 "-group", "Module Group B", "moduleB*",
 646                 "--module", "moduleB",
 647                 "testpkg2mdlB", "testpkgmdlB");
 648         checkExit(Exit.OK);
 649         checkGroupOptionSingleModule_html4();
 650     }
 651 
 652     /**
 653      * Test -group option for a single module.
 654      */
 655     @Test
 656     void testModuleName() {
 657         javadoc("-d", "out-modulename",
 658                 "-use",
 659                 "-Xdoclint:none",
 660                 "--frames",
 661                 "--module-source-path", testSrc,
 662                 "--module", "moduleB,test.moduleFullName",
 663                 "testpkg2mdlB", "testpkgmdlB", "testpkgmdlfullname");
 664         checkExit(Exit.OK);
 665         checkModuleName(true);
 666     }
 667 
 668     /**
 669      * Test -linkoffline option.
 670      */
 671     @Test
 672     void testLinkOffline() {
 673         String url = "https://docs.oracle.com/javase/9/docs/api/";
 674         javadoc("-d", "out-linkoffline",
 675                 "-use",
 676                 "--show-module-contents=all",
 677                 "-Xdoclint:none",
 678                 "--module-source-path", testSrc,
 679                 "--module", "moduleA,moduleB",
 680                 "-linkoffline", url, testSrc + "/jdk",
 681                 "testpkgmdlA", "testpkgmdlB", "testpkg3mdlB");
 682         checkExit(Exit.OK);
 683         checkLinkOffline();
 684     }
 685 
 686     void checkDescription(boolean found) {
 687         checkOutput("moduleA/module-summary.html", found,
 688                 "<!-- ============ MODULE DESCRIPTION =========== -->\n"
 689                 + "<a name=\"module.description\">\n"
 690                 + "<!--   -->\n"
 691                 + "</a>\n"
 692                 + "<div class=\"block\">This is a test description for the moduleA module with a Search "
 693                 + "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>");
 694         checkOutput("moduleB/module-summary.html", found,
 695                 "<!-- ============ MODULE DESCRIPTION =========== -->\n"
 696                 + "<a name=\"module.description\">\n"
 697                 + "<!--   -->\n"
 698                 + "</a>\n"
 699                 + "<div class=\"block\">This is a test description for the moduleB module. Search "
 700                 + "word <a id=\"search_word\" class=\"searchTagResult\">search_word</a> with no description.</div>");
 701         checkOutput("overview-summary.html", found,
 702                 "</script>\n"
 703                 + "<div class=\"contentContainer\">\n"
 704                 + "<div class=\"block\">The overview summary page header.</div>\n"
 705                 + "</div>\n"
 706                 + "<div class=\"contentContainer\">\n"
 707                 + "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
 708                 + "<caption><span>Modules</span><span class=\"tabEnd\">&nbsp;</span></caption>");
 709         checkOutput("overview-summary.html", false,
 710                 "</table>\n"
 711                 + "</div>\n"
 712                 + "<div class=\"contentContainer\">\n"
 713                 + "<div class=\"block\">The overview summary page header.</div>\n"
 714                 + "</div>\n"
 715                 + "<div class=\"contentContainer\">\n"
 716                 + "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
 717                 + "<caption><span>Modules</span><span class=\"tabEnd\">&nbsp;</span></caption>");
 718     }
 719 
 720     void checkNoDescription(boolean found) {
 721         checkOutput("moduleA/module-summary.html", found,
 722                 "<div class=\"contentContainer\">\n"
 723                 + "<ul class=\"blockList\">\n"
 724                 + "<li class=\"blockList\">\n"
 725                 + "<ul class=\"blockList\">\n"
 726                 + "<li class=\"blockList\">\n"
 727                 + "<!-- ============ PACKAGES SUMMARY =========== -->");
 728         checkOutput("moduleB/module-summary.html", found,
 729                 "<div class=\"contentContainer\">\n"
 730                 + "<ul class=\"blockList\">\n"
 731                 + "<li class=\"blockList\">\n"
 732                 + "<ul class=\"blockList\">\n"
 733                 + "<li class=\"blockList\">\n"
 734                 + "<!-- ============ PACKAGES SUMMARY =========== -->");
 735     }
 736 
 737     void checkHtml5Description(boolean found) {
 738         checkOutput("moduleA/module-summary.html", found,
 739                 "<section role=\"region\">\n"
 740                 + "<div class=\"deprecationBlock\"><span class=\"deprecatedLabel\">Deprecated, for removal:"
 741                 + " This API element is subject to removal in a future version.</span>\n"
 742                 + "<div class=\"deprecationComment\">This module is deprecated.</div>\n"
 743                 + "</div>\n"
 744                 + "<!-- ============ MODULE DESCRIPTION =========== -->\n"
 745                 + "<a id=\"module.description\">\n"
 746                 + "<!--   -->\n"
 747                 + "</a>\n"
 748                 + "<div class=\"block\">This is a test description for the moduleA module with a Search "
 749                 + "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>");
 750         checkOutput("moduleB/module-summary.html", found,
 751                 "<section role=\"region\">\n"
 752                 + "<!-- ============ MODULE DESCRIPTION =========== -->\n"
 753                 + "<a id=\"module.description\">\n"
 754                 + "<!--   -->\n"
 755                 + "</a>\n"
 756                 + "<div class=\"block\">This is a test description for the moduleB module. Search "
 757                 + "word <a id=\"search_word\" class=\"searchTagResult\">search_word</a> with no description.</div>");
 758         checkOutput("overview-summary.html", found,
 759                 "</nav>\n"
 760                 + "</header>\n"
 761                 + "<main role=\"main\">\n"
 762                 + "<div class=\"contentContainer\">\n"
 763                 + "<div class=\"block\">The overview summary page header.</div>\n"
 764                 + "</div>\n"
 765                 + "<div class=\"contentContainer\">\n"
 766                 + "<table class=\"overviewSummary\">\n"
 767                 + "<caption><span>Modules</span><span class=\"tabEnd\">&nbsp;</span></caption>");
 768         checkOutput("overview-summary.html", false,
 769                 "</table>\n"
 770                 + "</div>\n"
 771                 + "</main>\n"
 772                 + "<main role=\"main\">\n"
 773                 + "<div class=\"contentContainer\">\n"
 774                 + "<div class=\"block\">The overview summary page header.</div>\n"
 775                 + "</div>\n"
 776                 + "<div class=\"contentContainer\">\n"
 777                 + "<table class=\"overviewSummary\">\n"
 778                 + "<caption><span>Modules</span><span class=\"tabEnd\">&nbsp;</span></caption>");
 779     }
 780 
 781     void checkHtml5NoDescription(boolean found) {
 782         checkOutput("moduleA/module-summary.html", found,
 783                 "<div class=\"contentContainer\">\n"
 784                 + "<ul class=\"blockList\">\n"
 785                 + "<li class=\"blockList\">\n"
 786                 + "<ul class=\"blockList\">\n"
 787                 + "<li class=\"blockList\">\n"
 788                 + "<!-- ============ PACKAGES SUMMARY =========== -->");
 789         checkOutput("moduleB/module-summary.html", found,
 790                 "<div class=\"contentContainer\">\n"
 791                 + "<ul class=\"blockList\">\n"
 792                 + "<li class=\"blockList\">\n"
 793                 + "<ul class=\"blockList\">\n"
 794                 + "<li class=\"blockList\">\n"
 795                 + "<!-- ============ PACKAGES SUMMARY =========== -->");
 796     }
 797 
 798     void checkModuleLink() {
 799         checkOutput("overview-summary.html", true,
 800                 "<li>Module</li>");
 801         checkOutput("moduleA/module-summary.html", true,
 802                 "<li class=\"navBarCell1Rev\">Module</li>");
 803         checkOutput("moduleB/module-summary.html", true,
 804                 "<li class=\"navBarCell1Rev\">Module</li>");
 805         checkOutput("moduleA/testpkgmdlA/class-use/TestClassInModuleA.html", true,
 806                 "<li><a href=\"../../module-summary.html\">Module</a></li>");
 807         checkOutput("moduleB/testpkgmdlB/package-summary.html", true,
 808                 "<li><a href=\"../module-summary.html\">Module</a></li>");
 809         checkOutput("moduleB/testpkgmdlB/TestClassInModuleB.html", true,
 810                 "<li><a href=\"../module-summary.html\">Module</a></li>");
 811         checkOutput("moduleB/testpkgmdlB/class-use/TestClassInModuleB.html", true,
 812                 "<li><a href=\"../../module-summary.html\">Module</a></li>");
 813     }
 814 
 815     void checkNoModuleLink() {
 816         checkOutput("testpkgnomodule/package-summary.html", true,
 817                 "<ul class=\"navList\" title=\"Navigation\">\n"
 818                 + "<li><a href=\"../testpkgnomodule/package-summary.html\">Package</a></li>");
 819         checkOutput("testpkgnomodule/TestClassNoModule.html", true,
 820                 "<ul class=\"navList\" title=\"Navigation\">\n"
 821                 + "<li><a href=\"../testpkgnomodule/package-summary.html\">Package</a></li>");
 822         checkOutput("testpkgnomodule/class-use/TestClassNoModule.html", true,
 823                 "<ul class=\"navList\" title=\"Navigation\">\n"
 824                 + "<li><a href=\"../../testpkgnomodule/package-summary.html\">Package</a></li>");
 825     }
 826 
 827     void checkModuleTags() {
 828         checkOutput("moduletags/module-summary.html", true,
 829                 "Type Link: <a href=\"testpkgmdltags/TestClassInModuleTags.html\" title=\"class in "
 830                 + "testpkgmdltags\"><code>TestClassInModuleTags</code></a>.",
 831                 "Member Link: <a href=\"testpkgmdltags/TestClassInModuleTags.html#"
 832                 + "testMethod(java.lang.String)\"><code>testMethod(String)</code></a>.",
 833                 "Package Link: <a href=\"testpkgmdltags/package-summary.html\"><code>testpkgmdltags</code></a>.",
 834                 "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
 835                 + "<dd>JDK 9</dd>",
 836                 "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
 837                 + "<dd>\"Test see tag\", \n"
 838                 + "<a href=\"testpkgmdltags/TestClassInModuleTags.html\" title=\"class in testpkgmdltags\"><code>"
 839                 + "TestClassInModuleTags</code></a></dd>",
 840                 "<dt><span class=\"simpleTagLabel\">Regular Tag:</span></dt>\n"
 841                 + "<dd>Just a regular simple tag.</dd>",
 842                 "<dt><span class=\"simpleTagLabel\">Module Tag:</span></dt>\n"
 843                 + "<dd>Just a simple module tag.</dd>",
 844                 "<dt><span class=\"simpleTagLabel\">Version:</span></dt>\n"
 845                 + "<dd>1.0</dd>",
 846                 "<dt><span class=\"simpleTagLabel\">Author:</span></dt>\n"
 847                 + "<dd>Bhavesh Patel</dd>");
 848         checkOutput("moduletags/testpkgmdltags/TestClassInModuleTags.html", false,
 849                 "<dt><span class=\"simpleTagLabel\">Module Tag:</span></dt>\n"
 850                 + "<dd>Just a simple module tag.</dd>");
 851     }
 852 
 853     void checkModuleTags_html4() {
 854         checkOutput("moduletags/module-summary.html", true,
 855                 "Member Link: <a href=\"testpkgmdltags/TestClassInModuleTags.html#"
 856                 + "testMethod-java.lang.String-\"><code>testMethod(String)</code></a>.");
 857     }
 858 
 859     void checkOverviewSummaryModules() {
 860         checkOutput("overview-summary.html", true,
 861                 "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
 862                 + "<caption><span>Modules</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
 863                 + "<tr>\n"
 864                 + "<th class=\"colFirst\" scope=\"col\">Module</th>\n"
 865                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
 866                 + "</tr>");
 867         checkOutput("overview-summary.html", false,
 868                 "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
 869                 + "<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
 870                 + "<tr>\n"
 871                 + "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
 872                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
 873                 + "</tr>");
 874     }
 875 
 876     void checkOverviewSummaryPackages() {
 877         checkOutput("overview-summary.html", false,
 878                 "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
 879                 + "<caption><span>Modules</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
 880                 + "<tr>\n"
 881                 + "<th class=\"colFirst\" scope=\"col\">Module</th>\n"
 882                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
 883                 + "</tr>",
 884                 "</table>\n"
 885                 + "</div>\n"
 886                 + "<div class=\"contentContainer\">\n"
 887                 + "<div class=\"block\">The overview summary page header.</div>\n"
 888                 + "</div>\n"
 889                 + "<div class=\"contentContainer\">\n"
 890                 + "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
 891                 + "<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>");
 892         checkOutput("overview-summary.html", true,
 893                 "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
 894                 + "<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
 895                 + "<tr>\n"
 896                 + "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
 897                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
 898                 + "</tr>",
 899                 "</script>\n"
 900                 + "<div class=\"contentContainer\">\n"
 901                 + "<div class=\"block\">The overview summary page header.</div>\n"
 902                 + "</div>\n"
 903                 + "<div class=\"contentContainer\">\n"
 904                 + "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
 905                 + "<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>");
 906     }
 907 
 908     void checkHtml5OverviewSummaryModules() {
 909         checkOutput("overview-summary.html", true,
 910                 "<table class=\"overviewSummary\">\n"
 911                 + "<caption><span>Modules</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
 912                 + "<tr>\n"
 913                 + "<th class=\"colFirst\" scope=\"col\">Module</th>\n"
 914                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
 915                 + "</tr>");
 916         checkOutput("overview-summary.html", false,
 917                 "<table class=\"overviewSummary\">\n"
 918                 + "<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
 919                 + "<tr>\n"
 920                 + "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
 921                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
 922                 + "</tr>");
 923     }
 924 
 925     void checkHtml5OverviewSummaryPackages() {
 926         checkOutput("overview-summary.html", false,
 927                 "<table class=\"overviewSummary\">\n"
 928                 + "<caption><span>Modules</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
 929                 + "<tr>\n"
 930                 + "<th class=\"colFirst\" scope=\"col\">Module</th>\n"
 931                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
 932                 + "</tr>",
 933                 "</table>\n"
 934                 + "</div>\n"
 935                 + "</main>\n"
 936                 + "<main role=\"main\">\n"
 937                 + "<div class=\"contentContainer\">\n"
 938                 + "<div class=\"block\">The overview summary page header.</div>\n"
 939                 + "</div>\n"
 940                 + "<div class=\"contentContainer\"><a id=\"Packages\">\n"
 941                 + "<!--   -->\n"
 942                 + "</a>\n"
 943                 + "<table class=\"overviewSummary\">\n"
 944                 + "<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>");
 945         checkOutput("overview-summary.html", true,
 946                 "<table class=\"overviewSummary\">\n"
 947                 + "<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
 948                 + "<tr>\n"
 949                 + "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
 950                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
 951                 + "</tr>",
 952                 "</script>\n"
 953                 + "</nav>\n"
 954                 + "</header>\n"
 955                 + "<main role=\"main\">\n"
 956                 + "<div class=\"contentContainer\">\n"
 957                 + "<div class=\"block\">The overview summary page header.</div>\n"
 958                 + "</div>\n"
 959                 + "<div class=\"contentContainer\">\n"
 960                 + "<table class=\"overviewSummary\">\n"
 961                 + "<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>");
 962     }
 963 
 964     void checkModuleSummary() {
 965         checkOutput("moduleA/module-summary.html", true,
 966                 "<ul class=\"subNavList\">\n"
 967                 + "<li>Module:&nbsp;</li>\n"
 968                 + "<li><a href=\"#module.description\">Description</a>&nbsp;|&nbsp;</li>\n"
 969                 + "<li><a href=\"#modules.summary\">Modules</a>&nbsp;|&nbsp;</li>\n"
 970                 + "<li><a href=\"#packages.summary\">Packages</a>&nbsp;|&nbsp;</li>\n"
 971                 + "<li>Services</li>\n"
 972                 + "</ul>",
 973                 "<!-- ============ MODULES SUMMARY =========== -->\n"
 974                 + "<a id=\"modules.summary\">\n"
 975                 + "<!--   -->\n"
 976                 + "</a>",
 977                 "<tr class=\"altColor\" id=\"i0\">\n"
 978                 + "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlA/package-summary.html\">testpkgmdlA</a></th>\n"
 979                 + "<td class=\"colLast\">&nbsp;</td>\n"
 980                 + "</tr>",
 981                 "<!-- ============ PACKAGES SUMMARY =========== -->\n"
 982                 + "<a id=\"packages.summary\">\n"
 983                 + "<!--   -->\n"
 984                 + "</a>",
 985                 "<tr class=\"altColor\">\n"
 986                 + "<td class=\"colFirst\">transitive</td>\n"
 987                 + "<th class=\"colSecond\" scope=\"row\"><a href=\"../moduleB/module-summary.html\">moduleB</a></th>\n"
 988                 + "<td class=\"colLast\">\n"
 989                 + "<div class=\"block\">This is a test description for the moduleB module.</div>\n"
 990                 + "</td>\n"
 991                 + "</tr>");
 992         checkOutput("moduleB/module-summary.html", true,
 993                 "<li><a href=\"#module.description\">Description</a>&nbsp;|&nbsp;</li>\n"
 994                 + "<li>Modules&nbsp;|&nbsp;</li>\n"
 995                 + "<li><a href=\"#packages.summary\">Packages</a>&nbsp;|&nbsp;</li>\n"
 996                 + "<li><a href=\"#services.summary\">Services</a></li>",
 997                 "<!-- ============ PACKAGES SUMMARY =========== -->\n"
 998                 + "<a id=\"packages.summary\">\n"
 999                 + "<!--   -->\n"
1000                 + "</a>",
1001                 "<tr class=\"altColor\" id=\"i0\">\n"
1002                 + "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlB/package-summary.html\">testpkgmdlB</a></th>\n"
1003                 + "<td class=\"colLast\">&nbsp;</td>\n"
1004                 + "</tr>",
1005                 "<!-- ============ PACKAGES SUMMARY =========== -->\n"
1006                 + "<a id=\"packages.summary\">\n"
1007                 + "<!--   -->\n"
1008                 + "</a>",
1009                 "<!-- ============ SERVICES SUMMARY =========== -->\n"
1010                 + "<a id=\"services.summary\">\n"
1011                 + "<!--   -->\n"
1012                 + "</a>",
1013                 "<tr class=\"altColor\">\n"
1014                 + "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlB/TestClassInModuleB.html\" title=\"class in testpkgmdlB\">TestClassInModuleB</a></th>\n"
1015                 + "<td class=\"colLast\">\n"
1016                 + "<div class=\"block\">With a test description for uses.</div>\n</td>\n"
1017                 + "</tr>",
1018                 "<caption><span>Opens</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1019                 + "<tr>\n"
1020                 + "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
1021                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
1022                 + "</tr>",
1023                 "<caption><span>Uses</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1024                 + "<tr>\n"
1025                 + "<th class=\"colFirst\" scope=\"col\">Type</th>\n"
1026                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
1027                 + "</tr>",
1028                 "<caption><span>Provides</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1029                 + "<tr>\n"
1030                 + "<th class=\"colFirst\" scope=\"col\">Type</th>\n"
1031                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
1032                 + "</tr>");
1033     }
1034 
1035     void checkModuleSummary_html4() {
1036         checkOutput("moduleA/module-summary.html", true,
1037                 "<!-- ============ MODULES SUMMARY =========== -->\n"
1038                 + "<a name=\"modules.summary\">\n"
1039                 + "<!--   -->\n"
1040                 + "</a>",
1041                 "<!-- ============ PACKAGES SUMMARY =========== -->\n"
1042                 + "<a name=\"packages.summary\">\n"
1043                 + "<!--   -->\n"
1044                 + "</a>");
1045         checkOutput("moduleB/module-summary.html", true,
1046                 "<!-- ============ PACKAGES SUMMARY =========== -->\n"
1047                 + "<a name=\"packages.summary\">\n"
1048                 + "<!--   -->\n"
1049                 + "</a>",
1050                 "<!-- ============ PACKAGES SUMMARY =========== -->\n"
1051                 + "<a name=\"packages.summary\">\n"
1052                 + "<!--   -->\n"
1053                 + "</a>",
1054                 "<!-- ============ SERVICES SUMMARY =========== -->\n"
1055                 + "<a name=\"services.summary\">\n"
1056                 + "<!--   -->\n"
1057                 + "</a>");
1058     }
1059 
1060     void checkAggregatorModuleSummary() {
1061         checkOutput("moduleT/module-summary.html", true,
1062                 "<div class=\"header\">\n"
1063                 + "<h1 title=\"Module\" class=\"title\">Module&nbsp;moduleT</h1>\n"
1064                 + "</div>",
1065                 "<div class=\"block\">This is a test description for the moduleT module. "
1066                 + "Search phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>. "
1067                 + "Make sure there are no exported packages.</div>",
1068                 "<tbody>\n"
1069                 + "<tr class=\"altColor\">\n"
1070                 + "<td class=\"colFirst\">transitive</td>\n"
1071                 + "<th class=\"colSecond\" scope=\"row\"><a href=\"../moduleA/module-summary.html\">moduleA</a></th>\n"
1072                 + "<td class=\"colLast\">\n"
1073                 + "<div class=\"block\">This is a test description for the moduleA module with a Search "
1074                 + "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>\n"
1075                 + "</td>\n"
1076                 + "</tr>\n"
1077                 + "<tr class=\"rowColor\">\n"
1078                 + "<td class=\"colFirst\">transitive</td>\n"
1079                 + "<th class=\"colSecond\" scope=\"row\"><a href=\"../moduleB/module-summary.html\">moduleB</a></th>\n"
1080                 + "<td class=\"colLast\">\n"
1081                 + "<div class=\"block\">This is a test description for the moduleB module.</div>\n"
1082                 + "</td>\n"
1083                 + "</tr>\n"
1084                 + "</tbody>");
1085     }
1086 
1087     void checkNegatedModuleSummary() {
1088         checkOutput("moduleA/module-summary.html", false,
1089                 "<!-- ============ SERVICES SUMMARY =========== -->\n"
1090                 + "<a id=\"services.summary\">\n"
1091                 + "<!--   -->\n"
1092                 + "</a>");
1093     }
1094 
1095     void checkNegatedModuleSummary_html4() {
1096         checkOutput("moduleA/module-summary.html", false,
1097                 "<!-- ============ SERVICES SUMMARY =========== -->\n"
1098                 + "<a name=\"services.summary\">\n"
1099                 + "<!--   -->\n"
1100                 + "</a>");
1101     }
1102 
1103     void checkModuleClickThroughLinks() {
1104         checkOutput("module-overview-frame.html", true,
1105                 "<li><a href=\"moduleA/module-frame.html\" target=\"packageListFrame\" "
1106                 + "onclick=\"updateModuleFrame('moduleA/module-type-frame.html','moduleA/module-summary.html');"
1107                 + "\">moduleA</a></li>",
1108                 "<li><a href=\"moduleB/module-frame.html\" target=\"packageListFrame\" "
1109                 + "onclick=\"updateModuleFrame('moduleB/module-type-frame.html','moduleB/module-summary.html');"
1110                 + "\">moduleB</a></li>");
1111         checkOutput("script.js", true,
1112                 "function updateModuleFrame(pFrame, cFrame) {\n"
1113                 + "    top.packageFrame.location = pFrame;\n"
1114                 + "    top.classFrame.location = cFrame;\n"
1115                 + "}");
1116     }
1117 
1118     void checkModuleClickThrough(boolean found) {
1119         checkFiles(found,
1120                 "moduleA/module-type-frame.html",
1121                 "moduleB/module-type-frame.html");
1122     }
1123 
1124     void checkModuleFilesAndLinks(boolean found) {
1125         checkFileAndOutput("moduleA/testpkgmdlA/package-summary.html", found,
1126                 "<li><a href=\"../module-summary.html\">Module</a></li>",
1127                 "<div class=\"subTitle\"><span class=\"moduleLabelInPackage\">Module</span>&nbsp;"
1128                 + "<a href=\"../module-summary.html\">moduleA</a></div>");
1129         checkFileAndOutput("moduleA/testpkgmdlA/TestClassInModuleA.html", found,
1130                 "<li><a href=\"../module-summary.html\">Module</a></li>",
1131                 "<div class=\"subTitle\"><span class=\"moduleLabelInType\">Module</span>&nbsp;"
1132                 + "<a href=\"../module-summary.html\">moduleA</a></div>");
1133         checkFileAndOutput("moduleB/testpkgmdlB/AnnotationType.html", found,
1134                 "<div class=\"subTitle\"><span class=\"moduleLabelInType\">Module</span>&nbsp;"
1135                 + "<a href=\"../module-summary.html\">moduleB</a></div>",
1136                 "<div class=\"subTitle\"><span class=\"packageLabelInType\">"
1137                 + "Package</span>&nbsp;<a href=\"package-summary.html\">testpkgmdlB</a></div>");
1138         checkFiles(found,
1139                 "moduleA/module-frame.html",
1140                 "moduleA/module-summary.html",
1141                 "module-overview-frame.html");
1142     }
1143 
1144     void checkModuleFrameFiles(boolean found) {
1145         checkFiles(found,
1146                 "moduleC/module-frame.html",
1147                 "moduleC/module-type-frame.html",
1148                 "module-overview-frame.html");
1149         checkFiles(true,
1150                 "moduleC/module-summary.html",
1151                 "allclasses-frame.html",
1152                 "allclasses-noframe.html");
1153     }
1154 
1155     void checkAllModulesLink(boolean found) {
1156         checkOutput("overview-frame.html", found,
1157                 "<li><a href=\"module-overview-frame.html\" target=\"packageListFrame\">All&nbsp;Modules</a></li>");
1158     }
1159 
1160     void checkModulesInSearch(boolean found) {
1161         checkOutput("index-all.html", found,
1162                 "<dl>\n"
1163                 + "<dt><a href=\"moduleA/module-summary.html\">moduleA</a> - module moduleA</dt>\n"
1164                 + "<dd>\n"
1165                 + "<div class=\"block\">This is a test description for the moduleA module with a Search "
1166                 + "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>\n"
1167                 + "</dd>\n"
1168                 + "<dt><a href=\"moduleB/module-summary.html\">moduleB</a> - module moduleB</dt>\n"
1169                 + "<dd>\n"
1170                 + "<div class=\"block\">This is a test description for the moduleB module.</div>\n"
1171                 + "</dd>\n"
1172                 + "</dl>",
1173                 "<dl>\n"
1174                 + "<dt><span class=\"searchTagLink\"><a href=\"moduleB/module-summary.html#search_word\">"
1175                 + "search_word</a></span> - Search tag in moduleB</dt>\n"
1176                 + "<dd>&nbsp;</dd>\n"
1177                 + "<dt><span class=\"searchTagLink\"><a href=\"moduleA/module-summary.html#searchphrase\">"
1178                 + "search phrase</a></span> - Search tag in moduleA</dt>\n"
1179                 + "<dd>with description</dd>\n"
1180                 + "</dl>");
1181         checkOutput("index-all.html", false,
1182                 "<dt><span class=\"searchTagLink\"><a href=\"moduleA/module-summary.html#searchphrase\">"
1183                 + "search phrase</a></span> - Search tag in moduleA</dt>\n"
1184                 + "<dd>with description</dd>\n"
1185                 + "<dt><span class=\"searchTagLink\"><a href=\"moduleA/module-summary.html#searchphrase\">"
1186                 + "search phrase</a></span> - Search tag in moduleA</dt>\n"
1187                 + "<dd>with description</dd>");
1188     }
1189 
1190     void checkModuleModeCommon() {
1191         checkOutput("overview-summary.html", true,
1192                 "<th class=\"colFirst\" scope=\"row\"><a href=\"moduleA/module-summary.html\">moduleA</a></th>\n"
1193                 + "<td class=\"colLast\">\n"
1194                 + "<div class=\"block\">This is a test description for the moduleA module with a Search "
1195                 + "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>\n"
1196                 + "</td>",
1197                 "<th class=\"colFirst\" scope=\"row\"><a href=\"moduleB/module-summary.html\">moduleB</a></th>\n"
1198                 + "<td class=\"colLast\">\n"
1199                 + "<div class=\"block\">This is a test description for the moduleB module.</div>\n"
1200                 + "</td>",
1201                 "<th class=\"colFirst\" scope=\"row\"><a href=\"moduletags/module-summary.html\">moduletags</a></th>\n"
1202                 + "<td class=\"colLast\">\n"
1203                 + "<div class=\"block\">This is a test description for the moduletags module.<br>\n"
1204                 + " Type Link: <a href=\"moduletags/testpkgmdltags/TestClassInModuleTags.html\" title=\"class in testpkgmdltags\"><code>TestClassInModuleTags</code></a>.<br>\n"
1205                 + " Member Link: <a href=\"moduletags/testpkgmdltags/TestClassInModuleTags.html#testMethod(java.lang.String)\"><code>testMethod(String)</code></a>.<br>\n"
1206                 + " Package Link: <a href=\"moduletags/testpkgmdltags/package-summary.html\"><code>testpkgmdltags</code></a>.<br></div>\n"
1207                 + "</td>");
1208         checkOutput("moduleA/module-summary.html", true,
1209                 "<li><a href=\"#module.description\">Description</a>&nbsp;|&nbsp;</li>\n"
1210                 + "<li><a href=\"#modules.summary\">Modules</a>&nbsp;|&nbsp;</li>\n"
1211                 + "<li><a href=\"#packages.summary\">Packages</a>&nbsp;|&nbsp;</li>\n"
1212                 + "<li>Services</li>",
1213                 "<th class=\"colFirst\" scope=\"row\"><a href=\"../moduleB/module-summary.html\">moduleB</a></th>\n"
1214                 + "<td class=\"colLast\"><a href=\"../moduleB/testpkgmdlB/package-summary.html\">testpkgmdlB</a></td>\n");
1215         checkOutput("moduleB/module-summary.html", true,
1216                 "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlB/TestClassInModuleB.html\" title=\"class in testpkgmdlB\">TestClassInModuleB</a></th>\n"
1217                 + "<td class=\"colLast\">\n"
1218                 + "<div class=\"block\">With a test description for uses.</div>\n</td>\n");
1219         checkOutput("moduletags/module-summary.html", true,
1220                 "<li><a href=\"#module.description\">Description</a>&nbsp;|&nbsp;</li>\n"
1221                 + "<li><a href=\"#modules.summary\">Modules</a>&nbsp;|&nbsp;</li>\n"
1222                 + "<li><a href=\"#packages.summary\">Packages</a>&nbsp;|&nbsp;</li>\n"
1223                 + "<li>Services</li>",
1224                 "<table class=\"requiresSummary\">\n"
1225                 + "<caption><span>Indirect Requires</span><span class=\"tabEnd\">&nbsp;</span></caption>",
1226                 "<td class=\"colFirst\">transitive</td>\n"
1227                 + "<th class=\"colSecond\" scope=\"row\"><a href=\"../moduleB/module-summary.html\">moduleB</a></th>\n"
1228                 + "<td class=\"colLast\">\n"
1229                 + "<div class=\"block\">This is a test description for the moduleB module.</div>\n"
1230                 + "</td>",
1231                 "<table class=\"packagesSummary\">\n"
1232                 + "<caption><span>Indirect Exports</span><span class=\"tabEnd\">&nbsp;</span></caption>",
1233                 "<td class=\"colFirst\">transitive static</td>\n"
1234                 + "<th class=\"colSecond\" scope=\"row\"><a href=\"../moduleA/module-summary.html\">moduleA</a></th>\n"
1235                 + "<td class=\"colLast\">\n"
1236                 + "<div class=\"block\">This is a test description for the moduleA module with a Search "
1237                 + "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>\n"
1238                 + "</td>",
1239                 "<table class=\"requiresSummary\">\n"
1240                 + "<caption><span>Requires</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1241                 + "<tr>\n"
1242                 + "<th class=\"colFirst\" scope=\"col\">Modifier</th>\n"
1243                 + "<th class=\"colSecond\" scope=\"col\">Module</th>\n"
1244                 + "<th class=\"colLast\" scope=\"col\">Description</th>",
1245                 "<table class=\"requiresSummary\">\n"
1246                 + "<caption><span>Indirect Requires</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1247                 + "<tr>\n"
1248                 + "<th class=\"colFirst\" scope=\"col\">Modifier</th>\n"
1249                 + "<th class=\"colSecond\" scope=\"col\">Module</th>\n"
1250                 + "<th class=\"colLast\" scope=\"col\">Description</th>",
1251                 "<table class=\"packagesSummary\">\n"
1252                 + "<caption><span>Indirect Opens</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1253                 + "<tr>\n"
1254                 + "<th class=\"colFirst\" scope=\"col\">From</th>\n"
1255                 + "<th class=\"colLast\" scope=\"col\">Packages</th>\n"
1256                 + "</tr>\n",
1257                 "<th class=\"colFirst\" scope=\"row\"><a href=\"../moduleB/module-summary.html\">moduleB</a></th>\n"
1258                 + "<td class=\"colLast\"><a href=\"../moduleB/testpkgmdlB/package-summary.html\">testpkgmdlB</a></td>\n");
1259     }
1260 
1261     void checkModuleModeCommon_html4() {
1262         checkOutput("overview-summary.html", true,
1263                 "<th class=\"colFirst\" scope=\"row\"><a href=\"moduletags/module-summary.html\">moduletags</a></th>\n"
1264                 + "<td class=\"colLast\">\n"
1265                 + "<div class=\"block\">This is a test description for the moduletags module.<br>\n"
1266                 + " Type Link: <a href=\"moduletags/testpkgmdltags/TestClassInModuleTags.html\" title=\"class in testpkgmdltags\"><code>TestClassInModuleTags</code></a>.<br>\n"
1267                 + " Member Link: <a href=\"moduletags/testpkgmdltags/TestClassInModuleTags.html#testMethod-java.lang.String-\"><code>testMethod(String)</code></a>.<br>\n"
1268                 + " Package Link: <a href=\"moduletags/testpkgmdltags/package-summary.html\"><code>testpkgmdltags</code></a>.<br></div>\n"
1269                 + "</td>");
1270         checkOutput("moduletags/module-summary.html", true,
1271                 "<table class=\"requiresSummary\" summary=\"Indirect Requires table, listing modules, and an explanation\">\n"
1272                 + "<caption><span>Indirect Requires</span><span class=\"tabEnd\">&nbsp;</span></caption>",
1273                 "<table class=\"packagesSummary\" summary=\"Indirect Exports table, listing modules, and packages\">\n"
1274                 + "<caption><span>Indirect Exports</span><span class=\"tabEnd\">&nbsp;</span></caption>",
1275                 "<table class=\"requiresSummary\" summary=\"Requires table, listing modules, and an explanation\">\n"
1276                 + "<caption><span>Requires</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1277                 + "<tr>\n"
1278                 + "<th class=\"colFirst\" scope=\"col\">Modifier</th>\n"
1279                 + "<th class=\"colSecond\" scope=\"col\">Module</th>\n"
1280                 + "<th class=\"colLast\" scope=\"col\">Description</th>",
1281                 "<table class=\"requiresSummary\" summary=\"Indirect Requires table, listing modules, and an explanation\">\n"
1282                 + "<caption><span>Indirect Requires</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1283                 + "<tr>\n"
1284                 + "<th class=\"colFirst\" scope=\"col\">Modifier</th>\n"
1285                 + "<th class=\"colSecond\" scope=\"col\">Module</th>\n"
1286                 + "<th class=\"colLast\" scope=\"col\">Description</th>",
1287                 "<table class=\"packagesSummary\" summary=\"Indirect Opens table, listing modules, and packages\">\n"
1288                 + "<caption><span>Indirect Opens</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1289                 + "<tr>\n"
1290                 + "<th class=\"colFirst\" scope=\"col\">From</th>\n"
1291                 + "<th class=\"colLast\" scope=\"col\">Packages</th>\n"
1292                 + "</tr>\n");
1293     }
1294 
1295     void checkModuleModeApi(boolean found) {
1296         checkOutput("moduleA/module-summary.html", found,
1297                 "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlA/package-summary.html\">testpkgmdlA</a></th>\n"
1298                 + "<td class=\"colLast\">&nbsp;</td>");
1299         checkOutput("moduleB/module-summary.html", found,
1300                 "<li><a href=\"#module.description\">Description</a>&nbsp;|&nbsp;</li>\n"
1301                 + "<li>Modules&nbsp;|&nbsp;</li>\n"
1302                 + "<li><a href=\"#packages.summary\">Packages</a>&nbsp;|&nbsp;</li>\n"
1303                 + "<li><a href=\"#services.summary\">Services</a></li>",
1304                 "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlB/package-summary.html\">testpkgmdlB</a></th>\n"
1305                 + "<td class=\"colLast\">&nbsp;</td>",
1306                 "<table class=\"packagesSummary\">\n"
1307                 + "<caption><span>Opens</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1308                 + "<tr>\n"
1309                 + "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
1310                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
1311                 + "</tr>\n"
1312                 + "<tbody>\n"
1313                 + "<tr class=\"altColor\" id=\"i0\">\n"
1314                 + "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlB/package-summary.html\">testpkgmdlB</a></th>\n"
1315                 + "<td class=\"colLast\">&nbsp;</td>\n"
1316                 + "</tr>\n"
1317                 + "</tbody>\n"
1318                 + "</table>");
1319         checkOutput("moduletags/module-summary.html", true,
1320                 "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdltags/package-summary.html\">testpkgmdltags</a></th>\n"
1321                 + "<td class=\"colLast\">&nbsp;</td>");
1322     }
1323 
1324     void checkModuleModeApi_html4(boolean found) {
1325         checkOutput("moduleB/module-summary.html", found,
1326                 "<table class=\"packagesSummary\" summary=\"Packages table, listing packages, and an explanation\">\n"
1327                 + "<caption><span>Opens</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1328                 + "<tr>\n"
1329                 + "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
1330                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
1331                 + "</tr>\n"
1332                 + "<tbody>\n"
1333                 + "<tr class=\"altColor\" id=\"i0\">\n"
1334                 + "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlB/package-summary.html\">testpkgmdlB</a></th>\n"
1335                 + "<td class=\"colLast\">&nbsp;</td>\n"
1336                 + "</tr>\n"
1337                 + "</tbody>\n"
1338                 + "</table>");
1339     }
1340 
1341     void checkModuleModeAll(boolean found) {
1342         checkOutput("moduleA/module-summary.html", found,
1343                 "<td class=\"colFirst\"> </td>\n"
1344                 + "<th class=\"colSecond\" scope=\"row\">java.base</th>\n"
1345                 + "<td class=\"colLast\">&nbsp;</td>",
1346                 "<td class=\"colFirst\"> </td>\n"
1347                 + "<th class=\"colSecond\" scope=\"row\"><a href=\"../moduleC/module-summary.html\">moduleC</a></th>\n"
1348                 + "<td class=\"colLast\">\n"
1349                 + "<div class=\"block\">This is a test description for the moduleC module.</div>\n"
1350                 + "</td>",
1351                 "<th class=\"colFirst\" scope=\"row\"><a href=\"../moduleC/module-summary.html\">moduleC</a></th>\n"
1352                 + "<td class=\"colLast\"><a href=\"../moduleC/testpkgmdlC/package-summary.html\">testpkgmdlC</a></td>",
1353                 "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlA/package-summary.html\">testpkgmdlA</a></th>\n"
1354                 + "<td class=\"colSecond\">All Modules</td>\n"
1355                 + "<td class=\"colLast\">&nbsp;</td>",
1356                 "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Packages</span><span class=\"tabEnd\">&nbsp;</span></span>"
1357                 + "<span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Exports</a></span>"
1358                 + "<span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
1359                 + "Concealed</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>",
1360                 "<th class=\"colFirst\" scope=\"row\"><a href=\"concealedpkgmdlA/package-summary.html\">concealedpkgmdlA</a></th>\n"
1361                 + "<td class=\"colSecond\">None</td>\n"
1362                 + "<td class=\"colLast\">&nbsp;</td>");
1363         checkOutput("moduleB/module-summary.html", found,
1364                 "<li><a href=\"#module.description\">Description</a>&nbsp;|&nbsp;</li>\n"
1365                 + "<li><a href=\"#modules.summary\">Modules</a>&nbsp;|&nbsp;</li>\n"
1366                 + "<li><a href=\"#packages.summary\">Packages</a>&nbsp;|&nbsp;</li>\n"
1367                 + "<li><a href=\"#services.summary\">Services</a></li>",
1368                 "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlB/package-summary.html\">testpkgmdlB</a></th>\n"
1369                 + "<td class=\"colSecond\">None</td>\n"
1370                 + "<td class=\"colSecond\">All Modules</td>\n"
1371                 + "<td class=\"colLast\">&nbsp;</td>",
1372                 "<td class=\"colFirst\"> </td>\n"
1373                 + "<th class=\"colSecond\" scope=\"row\">java.base</th>\n"
1374                 + "<td class=\"colLast\">&nbsp;</td>",
1375                 "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlB/TestClass2InModuleB.html\" title=\"class in testpkgmdlB\">TestClass2InModuleB</a></th>\n"
1376                 + "<td class=\"colLast\">&nbsp;</td>",
1377                 "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkg2mdlB/TestInterface2InModuleB.html\" title=\"interface in testpkg2mdlB\">TestInterface2InModuleB</a></th>\n"
1378                 + "<td class=\"colLast\">&nbsp;<br>(<span class=\"implementationLabel\">Implementation(s):</span>&nbsp;<a href=\"testpkgmdlB/TestClass2InModuleB.html\" "
1379                 + "title=\"class in testpkgmdlB\">TestClass2InModuleB</a>)</td>",
1380                 "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkg2mdlB/TestInterfaceInModuleB.html\" title=\"interface in testpkg2mdlB\">TestInterfaceInModuleB</a></th>\n"
1381                 + "<td class=\"colLast\">&nbsp;<br>(<span class=\"implementationLabel\">Implementation(s):</span>&nbsp;<a href=\"testpkgmdlB/TestClassInModuleB.html\" "
1382                 + "title=\"class in testpkgmdlB\">TestClassInModuleB</a>)</td>",
1383                 "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Packages</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span>"
1384                 + "<a href=\"javascript:show(1);\">Exports</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span>"
1385                 + "<a href=\"javascript:show(2);\">Opens</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>");
1386         checkOutput("moduleC/module-summary.html", found,
1387                 "<caption><span>Exports</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1388                 + "<tr>\n"
1389                 + "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
1390                 + "<th class=\"colSecond\" scope=\"col\">Exported To Modules</th>\n"
1391                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
1392                 + "</tr>");
1393         checkOutput("moduletags/module-summary.html", true,
1394                 "<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdltags/package-summary.html\">testpkgmdltags</a></th>\n"
1395                 + "<td class=\"colLast\">&nbsp;</td>");
1396     }
1397 
1398     void checkModuleDeprecation(boolean found) {
1399         checkOutput("moduleA/module-summary.html", found,
1400                 "<div class=\"deprecationBlock\"><span class=\"deprecatedLabel\">Deprecated, for removal:"
1401                 + " This API element is subject to removal in a future version.</span>\n"
1402                 + "<div class=\"deprecationComment\">This module is deprecated.</div>\n"
1403                 + "</div>");
1404         checkOutput("deprecated-list.html", found,
1405                 "<ul>\n"
1406                 + "<li><a href=\"#forRemoval\">For Removal</a></li>\n"
1407                 + "<li><a href=\"#module\">Modules</a></li>\n"
1408                 + "</ul>",
1409                 "<tr class=\"altColor\">\n"
1410                 + "<th class=\"colDeprecatedItemName\" scope=\"row\"><a href=\"moduleA/module-summary.html\">moduleA</a></th>\n"
1411                 + "<td class=\"colLast\">\n"
1412                 + "<div class=\"deprecationComment\">This module is deprecated.</div>\n"
1413                 + "</td>\n"
1414                 + "</tr>");
1415         checkOutput("moduleB/module-summary.html", !found,
1416                 "<div class=\"deprecationBlock\"><span class=\"deprecatedLabel\">Deprecated.</span>\n"
1417                 + "<div class=\"deprecationComment\">This module is deprecated using just the javadoc tag.</div>\n");
1418         checkOutput("moduletags/module-summary.html", found,
1419                 "<p>@Deprecated\n"
1420                 + "</p>",
1421                 "<div class=\"deprecationBlock\"><span class=\"deprecatedLabel\">Deprecated.</span></div>");
1422     }
1423 
1424     void checkModuleAnnotation() {
1425         checkOutput("moduleB/module-summary.html", true,
1426                 "<p><a href=\"testpkgmdlB/AnnotationType.html\" title=\"annotation in testpkgmdlB\">@AnnotationType</a>(<a href=\"testpkgmdlB/AnnotationType.html#optional()\">optional</a>=\"Module Annotation\",\n"
1427                 + "                <a href=\"testpkgmdlB/AnnotationType.html#required()\">required</a>=2016)\n"
1428                 + "</p>");
1429         checkOutput("moduleB/module-summary.html", false,
1430                 "@AnnotationTypeUndocumented");
1431     }
1432 
1433     void checkModuleAnnotation_html4() {
1434         checkOutput("moduleB/module-summary.html", true,
1435                 "<p><a href=\"testpkgmdlB/AnnotationType.html\" title=\"annotation in testpkgmdlB\">@AnnotationType</a>(<a href=\"testpkgmdlB/AnnotationType.html#optional--\">optional</a>=\"Module Annotation\",\n"
1436                 + "                <a href=\"testpkgmdlB/AnnotationType.html#required--\">required</a>=2016)\n"
1437                 + "</p>");
1438     }
1439 
1440     void checkOverviewFrame(boolean found) {
1441         checkOutput("index.html", !found,
1442                 "<iframe src=\"overview-frame.html\" name=\"packageListFrame\" title=\"All Packages\"></iframe>");
1443         checkOutput("index.html", found,
1444                 "<iframe src=\"module-overview-frame.html\" name=\"packageListFrame\" title=\"All Modules\"></iframe>");
1445     }
1446 
1447     void checkModuleSummaryNoExported(boolean found) {
1448         checkOutput("moduleNoExport/module-summary.html", found,
1449                 "<!-- ============ PACKAGES SUMMARY =========== -->\n"
1450                 + "<a id=\"packages.summary\">\n"
1451                 + "<!--   -->\n"
1452                 + "</a>",
1453                 "<caption><span>Concealed</span><span class=\"tabEnd\">&nbsp;</span></caption>");
1454     }
1455 
1456     void checkModuleSummaryNoExported_html4(boolean found) {
1457         checkOutput("moduleNoExport/module-summary.html", found,
1458                 "<!-- ============ PACKAGES SUMMARY =========== -->\n"
1459                 + "<a name=\"packages.summary\">\n"
1460                 + "<!--   -->\n"
1461                 + "</a>");
1462     }
1463 
1464     void checkGroupOption() {
1465         checkOutput("overview-summary.html", true,
1466                 "<div class=\"contentContainer\">\n"
1467                 + "<table class=\"overviewSummary\">\n"
1468                 + "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Modules</span><span class=\"tabEnd\">&nbsp;"
1469                 + "</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">"
1470                 + "Module Group A</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\">"
1471                 + "<span><a href=\"javascript:show(2);\">Module Group B &amp; C</a></span><span class=\"tabEnd\">"
1472                 + "&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
1473                 + "Other Modules</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>",
1474                 "var data = {\"i0\":1,\"i1\":2,\"i2\":2,\"i3\":4};\n"
1475                 + "var tabs = {65535:[\"t0\",\"All Modules\"],1:[\"t1\",\"Module Group A\"],2:[\"t2\",\"Module Group B & C\"],4:[\"t4\",\"Other Modules\"]};\n"
1476                 + "var altColor = \"altColor\";\n"
1477                 + "var rowColor = \"rowColor\";\n"
1478                 + "var tableTab = \"tableTab\";\n"
1479                 + "var activeTableTab = \"activeTableTab\";");
1480         checkOutput("overview-summary.html", false,
1481                 "<table class=\"overviewSummary\">\n"
1482                 + "<caption><span>Modules</span><span class=\"tabEnd\">&nbsp;</span></caption>",
1483                 "Java SE Modules");
1484     }
1485 
1486     void checkGroupOption_html4() {
1487         checkOutput("overview-summary.html", true,
1488                 "<div class=\"contentContainer\">\n"
1489                 + "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
1490                 + "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Modules</span><span class=\"tabEnd\">&nbsp;"
1491                 + "</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">"
1492                 + "Module Group A</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\">"
1493                 + "<span><a href=\"javascript:show(2);\">Module Group B &amp; C</a></span><span class=\"tabEnd\">"
1494                 + "&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
1495                 + "Other Modules</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>",
1496                 "var data = {\"i0\":1,\"i1\":2,\"i2\":2,\"i3\":4};\n"
1497                 + "var tabs = {65535:[\"t0\",\"All Modules\"],1:[\"t1\",\"Module Group A\"],2:[\"t2\",\"Module Group B & C\"],4:[\"t4\",\"Other Modules\"]};\n"
1498                 + "var altColor = \"altColor\";\n"
1499                 + "var rowColor = \"rowColor\";\n"
1500                 + "var tableTab = \"tableTab\";\n"
1501                 + "var activeTableTab = \"activeTableTab\";");
1502         checkOutput("overview-summary.html", false,
1503                 "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
1504                 + "<caption><span>Modules</span><span class=\"tabEnd\">&nbsp;</span></caption>",
1505                 "Java SE Modules");
1506     }
1507 
1508     void checkGroupOptionOrdering() {
1509         checkOutput("overview-summary.html", true,
1510                 "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Modules</span><span "
1511                 + "class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span>"
1512                 + "<a href=\"javascript:show(1);\">B Group</a></span><span class=\"tabEnd\">"
1513                 + "&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
1514                 + "C Group</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\">"
1515                 + "<span><a href=\"javascript:show(4);\">A Group</a></span><span class=\"tabEnd\">&nbsp;</span>"
1516                 + "</span><span id=\"t8\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Other Modules"
1517                 + "</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>",
1518                 "var tabs = {65535:[\"t0\",\"All Modules\"],1:[\"t1\",\"B Group\"],2:[\"t2\",\"C Group\"],"
1519                 + "4:[\"t4\",\"A Group\"],8:[\"t8\",\"Other Modules\"]};");
1520         checkOutput("overview-summary.html", false,
1521                 "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Modules</span><span "
1522                 + "class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span>"
1523                 + "<a href=\"javascript:show(1);\">A Group</a></span><span class=\"tabEnd\">"
1524                 + "&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
1525                 + "B Group</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\">"
1526                 + "<span><a href=\"javascript:show(4);\">C Group</a></span><span class=\"tabEnd\">&nbsp;</span>"
1527                 + "</span><span id=\"t8\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Other Modules"
1528                 + "</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>",
1529                 "Java SE Modules");
1530     }
1531 
1532     void checkUnnamedModuleGroupOption() {
1533         checkOutput("overview-summary.html", true,
1534                 "<div class=\"contentContainer\">\n"
1535                 + "<div class=\"block\">The overview summary page header.</div>\n"
1536                 + "</div>\n"
1537                 + "<div class=\"contentContainer\">\n"
1538                 + "<table class=\"overviewSummary\">\n"
1539                 + "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Packages</span><span class=\"tabEnd\">&nbsp;"
1540                 + "</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">"
1541                 + "Package Group 0</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" "
1542                 + "class=\"tableTab\"><span><a href=\"javascript:show(2);\">Package Group 1</a></span>"
1543                 + "<span class=\"tabEnd\">&nbsp;</span></span></caption>",
1544                 "var data = {\"i0\":1,\"i1\":2};\n"
1545                 + "var tabs = {65535:[\"t0\",\"All Packages\"],1:[\"t1\",\"Package Group 0\"],2:[\"t2\",\"Package Group 1\"]};\n"
1546                 + "var altColor = \"altColor\";\n"
1547                 + "var rowColor = \"rowColor\";\n"
1548                 + "var tableTab = \"tableTab\";\n"
1549                 + "var activeTableTab = \"activeTableTab\";");
1550     }
1551 
1552     void checkUnnamedModuleGroupOption_html4() {
1553         checkOutput("overview-summary.html", true,
1554                 "<div class=\"contentContainer\">\n"
1555                 + "<div class=\"block\">The overview summary page header.</div>\n"
1556                 + "</div>\n"
1557                 + "<div class=\"contentContainer\">\n"
1558                 + "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
1559                 + "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Packages</span><span class=\"tabEnd\">&nbsp;"
1560                 + "</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">"
1561                 + "Package Group 0</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" "
1562                 + "class=\"tableTab\"><span><a href=\"javascript:show(2);\">Package Group 1</a></span>"
1563                 + "<span class=\"tabEnd\">&nbsp;</span></span></caption>");
1564     }
1565 
1566     void checkGroupOptionPackageOrdering() {
1567         checkOutput("overview-summary.html", true,
1568                 "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Packages</span><span "
1569                 + "class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span>"
1570                 + "<a href=\"javascript:show(1);\">Z Group</a></span><span class=\"tabEnd\">"
1571                 + "&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
1572                 + "A Group</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>",
1573                 "var tabs = {65535:[\"t0\",\"All Packages\"],1:[\"t1\",\"Z Group\"],2:[\"t2\",\"A Group\"]};");
1574     }
1575 
1576     void checkGroupOptionSingleModule() {
1577         checkOutput("index.html", true,
1578                 "window.location.replace('moduleB/module-summary.html')");
1579     }
1580 
1581     void checkGroupOptionSingleModule_html4() {
1582         checkOutput("index.html", true,
1583                 "window.location.replace('moduleB/module-summary.html')");
1584     }
1585 
1586     void checkModuleName(boolean found) {
1587         checkOutput("test.moduleFullName/module-summary.html", found,
1588                 "<div class=\"header\">\n"
1589                 + "<h1 title=\"Module\" class=\"title\">Module&nbsp;test.moduleFullName</h1>\n"
1590                 + "</div>");
1591         checkOutput("index-all.html", found,
1592                 "<h2 class=\"title\">T</h2>\n"
1593                 + "<dl>\n"
1594                 + "<dt><a href=\"test.moduleFullName/module-summary.html\">test.moduleFullName</a> - module test.moduleFullName</dt>\n"
1595                 + "<dd>\n"
1596                 + "<div class=\"block\">This is a test description for the test.moduleFullName.</div>\n"
1597                 + "</dd>");
1598         checkOutput("module-overview-frame.html", found,
1599                 "<h2 title=\"Modules\">Modules</h2>\n"
1600                 + "<ul title=\"Modules\">\n"
1601                 + "<li><a href=\"moduleB/module-frame.html\" target=\"packageListFrame\" onclick=\"updateModuleFrame('moduleB/module-type-frame.html','moduleB/module-summary.html');\">moduleB</a></li>\n"
1602                 + "<li><a href=\"test.moduleFullName/module-frame.html\" target=\"packageListFrame\" onclick=\"updateModuleFrame('test.moduleFullName/module-type-frame.html','test.moduleFullName/module-summary.html');\">test.moduleFullName</a></li>\n"
1603                 + "</ul>");
1604         checkOutput("test.moduleFullName/module-summary.html", !found,
1605                 "<div class=\"header\">\n"
1606                 + "<h1 title=\"Module\" class=\"title\">Module&nbsp;moduleFullName</h1>\n"
1607                 + "</div>");
1608         checkOutput("index-all.html", !found,
1609                 "<dl>\n"
1610                 + "<dt><a href=\"test.moduleFullName/module-summary.html\">moduleFullName</a> - module moduleFullName</dt>\n"
1611                 + "<dd>\n"
1612                 + "<div class=\"block\">This is a test description for the test.moduleFullName.</div>\n"
1613                 + "</dd>\n"
1614                 + "</dl>");
1615     }
1616 
1617     void checkLinkOffline() {
1618         checkOutput("moduleB/testpkg3mdlB/package-summary.html", true,
1619                 "<a href=\"https://docs.oracle.com/javase/9/docs/api/java.base/java/lang/String.html?is-external=true\" "
1620                 + "title=\"class or interface in java.lang\" class=\"externalLink\"><code>Link to String Class</code></a>");
1621         checkOutput("moduleB/testpkg3mdlB/package-summary.html", true,
1622                 "<a href=\"https://docs.oracle.com/javase/9/docs/api/java.base/java/lang/package-summary.html?is-external=true\" "
1623                 + "class=\"externalLink\"><code>Link to java.lang package</code></a>");
1624         checkOutput("moduleB/testpkg3mdlB/package-summary.html", true,
1625                 "<a href=\"https://docs.oracle.com/javase/9/docs/api/java.base/module-summary.html?is-external=true\" "
1626                 + "class=\"externalLink\"><code>Link to java.base module</code></a>");
1627 }
1628 
1629     void checkAllPkgsAllClasses(boolean found) {
1630         checkOutput("allclasses-index.html", true,
1631                 "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Classes</span>"
1632                 + "<span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\">"
1633                 + "<span><a href=\"javascript:show(2);\">Class Summary</a></span><span class=\"tabEnd\">"
1634                 + "&nbsp;</span></span><span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">"
1635                 + "Annotation Types Summary</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n"
1636                 + "<tr>\n"
1637                 + "<th class=\"colFirst\" scope=\"col\">Class</th>\n"
1638                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
1639                 + "</tr>");
1640         checkOutput("allpackages-index.html", true,
1641                 "<caption><span>Package Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n"
1642                 + "<tr>\n"
1643                 + "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
1644                 + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
1645                 + "</tr>\n");
1646         checkOutput("allclasses-index.html", found,
1647                 "<table class=\"typeSummary\">\n");
1648         checkOutput("allpackages-index.html", found,
1649                 "<table class=\"packagesSummary\">\n");
1650         checkOutput("allclasses-index.html", !found,
1651                 "<table class=\"typeSummary\" summary=\"Class Summary table, listing classes, and an explanation\">");
1652         checkOutput("allpackages-index.html", !found,
1653                 "<table class=\"packagesSummary\" summary=\"Package Summary table, listing packages, and an explanation\">");
1654         checkOutput("type-search-index.js", true,
1655                 "{\"l\":\"All Classes\",\"url\":\"allclasses-index.html\"}");
1656         checkOutput("package-search-index.js", true,
1657                 "{\"l\":\"All Packages\",\"url\":\"allpackages-index.html\"}");
1658         checkOutput("index-all.html", true,
1659                 "<br><a href=\"allclasses-index.html\">All&nbsp;Classes</a>&nbsp;"
1660                 + "<a href=\"allpackages-index.html\">All&nbsp;Packages</a>");
1661 }
1662 }