TestPrivateClasses.java revision 2375:adf34d48dc1f
1/* 2 * Copyright (c) 2003, 2014, 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 4780441 4874845 4978816 8014017 8016328 8025633 8026567 27 * @summary Make sure that when the -private flag is not used, members 28 * inherited from package private class are documented in the child. 29 * 30 * Make sure that when a method inherits documentation from a method 31 * in a non-public class/interface, the non-public class/interface 32 * is not mentioned anywhere (not even in the signature or tree). 33 * 34 * Make sure that when a private interface method with generic parameters 35 * is implemented, the comments can be inherited properly. 36 * 37 * Make sure when no modifier appear in the class signature, the 38 * signature is displayed correctly without extra space at the beginning. 39 * @author jamieh 40 * @library ../lib/ 41 * @build JavadocTester TestPrivateClasses 42 * @run main TestPrivateClasses 43 */ 44 45public class TestPrivateClasses extends JavadocTester { 46 47 //Test information. 48 private static final String BUG_ID = "4780441-4874845-4978816-8014017"; 49 50 //Javadoc arguments. 51 private static final String[] ARGS1 = new String[] { 52 "-d", BUG_ID + "-1", "-sourcepath", SRC_DIR, "pkg", "pkg2" 53 }; 54 private static final String[] ARGS2 = new String[] { 55 "-d", BUG_ID + "-2", "-sourcepath", SRC_DIR, "-private", 56 "pkg", "pkg2" 57 }; 58 59 // Test output when -private flag is not used. 60 private static final String[][] TEST1 = { 61 // Field inheritence from non-public superclass. 62 {BUG_ID + "-1/pkg/PublicChild.html", 63 "<a href=\"../pkg/PublicChild.html#fieldInheritedFromParent\">" + 64 "fieldInheritedFromParent</a>" 65 }, 66 67 // Method inheritence from non-public superclass. 68 {BUG_ID + "-1/pkg/PublicChild.html", 69 "<a href=\"../pkg/PublicChild.html#methodInheritedFromParent-int-\">" + 70 "methodInheritedFromParent</a>" 71 }, 72 73 // Field inheritence from non-public superinterface. 74 {BUG_ID + "-1/pkg/PublicInterface.html", 75 "<a href=\"../pkg/PublicInterface.html#fieldInheritedFromInterface\">" + 76 "fieldInheritedFromInterface</a>" 77 }, 78 79 // Method inheritence from non-public superinterface. 80 {BUG_ID + "-1/pkg/PublicInterface.html", 81 "<a href=\"../pkg/PublicInterface.html#methodInterface-int-\">" + 82 "methodInterface</a>" 83 }, 84 85 // private class does not show up in tree 86 {BUG_ID + "-1/pkg/PublicChild.html", 87 "<ul class=\"inheritance\">\n" + 88 "<li>java.lang.Object</li>\n" + 89 "<li>\n" + 90 "<ul class=\"inheritance\">\n" + 91 "<li>pkg.PublicChild</li>\n" + 92 "</ul>\n" + 93 "</li>\n" + 94 "</ul>" 95 }, 96 97 // Method is documented as though it is declared in the inheriting method. 98 {BUG_ID + "-1/pkg/PublicChild.html", 99 "<pre>public void methodInheritedFromParent(int p1)" 100 }, 101 102 //Make sure implemented interfaces from private superclass are inherited 103 {BUG_ID + "-1/pkg/PublicInterface.html", 104 "<dl>\n" + 105 "<dt>All Known Implementing Classes:</dt>\n" + 106 "<dd><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">" + 107 "PublicChild</a></dd>\n" + 108 "</dl>"}, 109 110 {BUG_ID + "-1/pkg/PublicChild.html", 111 "<dl>\n" + 112 "<dt>All Implemented Interfaces:</dt>\n" + 113 "<dd><a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" + 114 "PublicInterface</a></dd>\n" + 115 "</dl>"}, 116 117 //Generic interface method test. 118 {BUG_ID + "-1/pkg2/C.html", 119 "This comment should get copied to the implementing class"}, 120 }; 121 private static final String[][] NEGATED_TEST1 = { 122 // Should not document that a method overrides method from private class. 123 {BUG_ID + "-1/pkg/PublicChild.html", 124 "<span class=\"overrideSpecifyLabel\">Overrides:</span>"}, 125 // Should not document that a method specified by private interface. 126 {BUG_ID + "-1/pkg/PublicChild.html", 127 "<span class=\"overrideSpecifyLabel\">Specified by:</span>"}, 128 {BUG_ID + "-1/pkg/PublicInterface.html", 129 "<span class=\"overrideSpecifyLabel\">Specified by:</span>"}, 130 // Should not mention that any documentation was copied. 131 {BUG_ID + "-1/pkg/PublicChild.html", 132 "Description copied from"}, 133 {BUG_ID + "-1/pkg/PublicInterface.html", 134 "Description copied from"}, 135 // Don't extend private classes or interfaces 136 {BUG_ID + "-1/pkg/PublicChild.html", 137 "PrivateParent"}, 138 {BUG_ID + "-1/pkg/PublicInterface.html", 139 "PrivateInterface"}, 140 {BUG_ID + "-1/pkg/PublicChild.html", 141 "PrivateInterface"}, 142 {BUG_ID + "-1/pkg/PublicInterface.html", 143 "All Superinterfaces"}, 144 // Make inherited constant are documented correctly. 145 {BUG_ID + "-1/constant-values.html", 146 "PrivateInterface"}, 147 148 //Do not inherit private interface method with generic parameters. 149 //This method has been implemented. 150 {BUG_ID + "-1/pkg2/C.html", 151 "<span class=\"memberNameLink\"><a href=\"../pkg2/I.html#hello-T-\">hello</a></span>"}, 152 }; 153 154 // Test output when -private flag is used. 155 private static final String[][] TEST2 = { 156 // Field inheritence from non-public superclass. 157 {BUG_ID + "-2/pkg/PublicChild.html", 158 "Fields inherited from class pkg." + 159 "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" + 160 "PrivateParent</a>" 161 }, 162 {BUG_ID + "-2/pkg/PublicChild.html", 163 "<a href=\"../pkg/PrivateParent.html#fieldInheritedFromParent\">" + 164 "fieldInheritedFromParent</a>" 165 }, 166 // Field inheritence from non-public superinterface. 167 {BUG_ID + "-2/pkg/PublicInterface.html", 168 "Fields inherited from interface pkg." + 169 "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" + 170 "PrivateInterface</a>" 171 }, 172 {BUG_ID + "-2/pkg/PublicInterface.html", 173 "<a href=\"../pkg/PrivateInterface.html#fieldInheritedFromInterface\">" + 174 "fieldInheritedFromInterface</a>" 175 }, 176 // Method inheritence from non-public superclass. 177 {BUG_ID + "-2/pkg/PublicChild.html", 178 "Methods inherited from class pkg." + 179 "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" + 180 "PrivateParent</a>" 181 }, 182 {BUG_ID + "-2/pkg/PublicChild.html", 183 "<a href=\"../pkg/PrivateParent.html#methodInheritedFromParent-int-\">" + 184 "methodInheritedFromParent</a>" 185 }, 186 // Should document that a method overrides method from private class. 187 {BUG_ID + "-2/pkg/PublicChild.html", 188 "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" + 189 "<dd><code><a href=\"../pkg/PrivateParent.html#methodOverridenFromParent-char:A-int-T-V-java.util.List-\">" + 190 "methodOverridenFromParent</a></code> in class <code>" + 191 "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" + 192 "PrivateParent</a></code></dd>"}, 193 // Should document that a method is specified by private interface. 194 {BUG_ID + "-2/pkg/PublicChild.html", 195 "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" + 196 "<dd><code><a href=\"../pkg/PrivateInterface.html#methodInterface-int-\">" + 197 "methodInterface</a></code> in interface <code>" + 198 "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" + 199 "PrivateInterface</a></code></dd>"}, 200 // Method inheritence from non-public superinterface. 201 {BUG_ID + "-2/pkg/PublicInterface.html", 202 "Methods inherited from interface pkg." + 203 "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" + 204 "PrivateInterface</a>" 205 }, 206 {BUG_ID + "-2/pkg/PrivateInterface.html", 207 "<a href=\"../pkg/PrivateInterface.html#methodInterface-int-\">" + 208 "methodInterface</a>" 209 }, 210 // Should mention that any documentation was copied. 211 {BUG_ID + "-2/pkg/PublicChild.html", 212 "Description copied from"}, 213 // Extend documented private classes or interfaces 214 {BUG_ID + "-2/pkg/PublicChild.html", 215 "extends"}, 216 {BUG_ID + "-2/pkg/PublicInterface.html", 217 "extends"}, 218 {BUG_ID + "-2/pkg/PublicInterface.html", 219 "All Superinterfaces"}, 220 221 //Make sure implemented interfaces from private superclass are inherited 222 {BUG_ID + "-2/pkg/PublicInterface.html", 223 "<dl>\n" + 224 "<dt>All Known Implementing Classes:</dt>\n" + 225 "<dd><a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" + 226 "PrivateParent</a>, " + 227 "<a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild" + 228 "</a></dd>\n" + 229 "</dl>"}, 230 231 {BUG_ID + "-2/pkg/PublicChild.html", 232 "<dl>\n" + 233 "<dt>All Implemented Interfaces:</dt>\n" + 234 "<dd><a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" + 235 "PrivateInterface</a>, " + 236 "<a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" + 237 "PublicInterface</a></dd>\n" + 238 "</dl>"}, 239 240 //Since private flag is used, we can document that private interface method 241 //with generic parameters has been implemented. 242 {BUG_ID + "-2/pkg2/C.html", 243 "<span class=\"descfrmTypeLabel\">Description copied from interface: <code>" + 244 "<a href=\"../pkg2/I.html#hello-T-\">I</a></code></span>"}, 245 246 {BUG_ID + "-2/pkg2/C.html", 247 "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" + 248 "<dd><code><a href=\"../pkg2/I.html#hello-T-\">hello</a></code>" + 249 " in interface <code>" + 250 "<a href=\"../pkg2/I.html\" title=\"interface in pkg2\">I</a>" + 251 "<java.lang.String></code></dd>"}, 252 253 //Make sure when no modifier appear in the class signature, the 254 //signature is displayed correctly without extra space at the beginning. 255 {BUG_ID + "-2/pkg/PrivateParent.html", 256 "<pre>class <span class=\"typeNameLabel\">PrivateParent</span>"}, 257 258 {BUG_ID + "-2/pkg/PublicChild.html", 259 "<pre>public class <span class=\"typeNameLabel\">PublicChild</span>"}, 260 }; 261 private static final String[][] NEGATED_TEST2 = { 262 {BUG_ID + "-2/pkg/PrivateParent.html", 263 "<pre> class <span class=\"typeNameLabel\">PrivateParent</span>"}, 264 }; 265 266 /** 267 * The entry point of the test. 268 * @param args the array of command line arguments. 269 */ 270 public static void main(String[] args) { 271 TestPrivateClasses tester = new TestPrivateClasses(); 272 tester.run(ARGS1, TEST1, NEGATED_TEST1); 273 tester.run(ARGS2, TEST2, NEGATED_TEST2); 274 tester.printSummary(); 275 } 276 277 /** 278 * {@inheritDoc} 279 */ 280 public String getBugId() { 281 return BUG_ID; 282 } 283 284 /** 285 * {@inheritDoc} 286 */ 287 public String getBugName() { 288 return getClass().getName(); 289 } 290} 291