TestOrdering.java revision 3294:9adfb22ff08f
1/* 2 * Copyright (c) 2014, 2016, 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 8039410 8042601 8042829 8049393 8050031 27 * @summary test to determine if members are ordered correctly 28 * @author ksrini 29 * @library ../lib/ 30 * @modules jdk.javadoc/jdk.javadoc.internal.tool 31 * @build JavadocTester 32 * @run main TestOrdering 33 */ 34 35import java.io.File; 36import java.io.IOException; 37import java.nio.file.Files; 38import java.util.ArrayList; 39import java.util.Arrays; 40import java.util.Collections; 41import java.util.List; 42 43import static java.nio.file.StandardOpenOption.*; 44 45public class TestOrdering extends JavadocTester { 46 47 public static void main(String[] args) throws Exception { 48 TestOrdering tester = new TestOrdering(); 49 tester.runTests(); 50 } 51 52 @Test 53 void testUnnamedPackagesForClassUse() { 54 javadoc("-d", "out", 55 "-sourcepath", testSrc, 56 "-use", 57 testSrc("C.java"), testSrc("UsedInC.java")); 58 checkExit(Exit.OK); 59 checkExecutableMemberOrdering("class-use/UsedInC.html"); 60 } 61 62 @Test 63 void testNamedPackagesForClassUse() { 64 javadoc("-d", "out-1", 65 "-sourcepath", testSrc, 66 "-use", 67 "pkg1"); 68 checkExit(Exit.OK); 69 checkClassUseOrdering("pkg1/class-use/UsedClass.html"); 70 checkOrder("pkg1/class-use/UsedClass.html", expectedClassUseMethodOrdering); 71 checkOrder("pkg1/class-use/UsedClass.html", expectedClassUseWithTypeParams); 72 checkOrder("pkg1/class-use/UsedClass.html", expectedInnerClassContructors); 73 checkOrder("pkg1/ImplementsOrdering.html", expectedImplementsOrdering); 74 checkOrder("pkg1/OverrideOrdering.html", expectedOverrideOrdering); 75 } 76 77 enum ListOrder { NONE, REVERSE, SHUFFLE }; 78 /* 79 * By default we do not shuffle the input list, in order to keep the list deterministic, 80 * and the test predictable. However, we can turn on the stress mode, by setting the following 81 * property if required. 82 */ 83 static final ListOrder STRESS_MODE = Boolean.getBoolean("TestOrder.STRESS") 84 ? ListOrder.SHUFFLE 85 : ListOrder.REVERSE; 86 87 /* 88 * Controls the number of sibling packages, pkg0, pkg1, pkg2, ..... 89 */ 90 static final int MAX_PACKAGES = 4; 91 92 /* 93 * Controls the number of children packages, pkg0, pkg0.pkg, pkg0.pkg.pkg, ..... 94 * Note: having too long a depth (> 256 chars on Windows), will likely lead to 95 * cause problems with automated build and test systems. 96 */ 97 static final int MAX_SUBPACKAGES_DEPTH = 4; 98 @Test 99 void testIndexOrdering() throws IOException { 100 final String clsname = "Add"; 101 List<String> cmdArgs = new ArrayList(); 102 cmdArgs.add("-d"); 103 cmdArgs.add("out-2"); 104 cmdArgs.add("-sourcepath"); 105 cmdArgs.add("src"); 106 cmdArgs.add("-package"); 107 System.out.println("STRESS_MODE: " + STRESS_MODE); 108 emitFile(null, clsname, STRESS_MODE); 109 for (int width = 0 ; width < MAX_PACKAGES ; width++) { 110 String wpkgname = "add" + width; 111 String dpkgname = wpkgname; 112 emitFile(wpkgname, clsname, ListOrder.NONE); // list as-is 113 cmdArgs.add(wpkgname); 114 for (int depth = 1 ; depth < MAX_SUBPACKAGES_DEPTH ; depth++) { 115 dpkgname = dpkgname + ".add"; 116 emitFile(dpkgname, clsname, STRESS_MODE); 117 cmdArgs.add(dpkgname); 118 } 119 } 120 File srcDir = new File(new File("."), "src"); 121 cmdArgs.add(new File(srcDir, clsname + ".java").getPath()); 122 javadoc(cmdArgs.toArray(new String[cmdArgs.size()])); 123 checkExit(Exit.OK); 124 checkOrder("index-all.html", composeTestVectors()); 125 checkOrder("add0/add/package-tree.html", expectedPackageTreeOrdering); 126 checkOrder("overview-tree.html", expectedOverviewOrdering); 127 checkOrder("overview-frame.html", expectedOverviewFrameOrdering); 128 } 129 130 @Test 131 void testIndexTypeClustering() { 132 javadoc("-d", "out-3", 133 "-sourcepath", testSrc("src-2"), 134 "-use", 135 "a", 136 "b", 137 "e", 138 "something"); 139 checkOrder("index-all.html", typeTestVectors); 140 checkExit(Exit.OK); 141 } 142 143 @Test 144 void testMethodDetailOrdering() { 145 javadoc("-d", "out-4", 146 "-sourcepath", testSrc(new File(".").getPath()), 147 "order" 148 ); 149 checkOrder("order/MethodOrder.html", methodSourceOrderVectors); 150 checkExit(Exit.OK); 151 } 152 153 String[] methodSourceOrderVectors = { 154 "<pre>public void d()</pre>\n" + 155 "<div class=\"block\">Method d.\n" + 156 " Second line.</div>", 157 "<pre>public void b()</pre>\n" + 158 "<div class=\"block\">Method b.\n" + 159 " Second line.</div>", 160 "<pre>public void c()</pre>\n" + 161 "<div class=\"block\">Method c.\n" + 162 " Second line.</div>", 163 "<pre>public void a()</pre>\n" + 164 "<div class=\"block\">Method a.\n" + 165 " Second line.</div>" 166 }; 167 168 String[] typeTestVectors = { 169 "something</a> - package something</dt>", 170 "something</span></a> - Class in", 171 "something</span></a> - Enum in", 172 "something</span></a> - Interface in", 173 "something</span></a> - Annotation Type in", 174 "something</a></span> - Variable in class", 175 "something()</a></span> - Constructor", 176 "something()</a></span> - Method in class a.<a href=\"a/A.html\"", 177 "something()</a></span> - Method in class a.<a href=\"a/something.html\"", 178 "something()</a></span> - Method in class something.<a href=\"something/J.html\"" 179 }; 180 String[] composeTestVectors() { 181 List<String> testList = new ArrayList<>(); 182 for (String x : expectedEnumOrdering) { 183 testList.add(x.replace("REPLACE_ME", "<Unnamed>")); 184 for (int i = 0; i < MAX_PACKAGES; i++) { 185 String wpkg = "add" + i; 186 testList.add(wpkg + "/" + x.replace("REPLACE_ME", wpkg)); 187 String dpkg = wpkg; 188 for (int j = 1; j < MAX_SUBPACKAGES_DEPTH; j++) { 189 dpkg = dpkg + "/" + "add"; 190 testList.add(dpkg + "/" + x.replace("REPLACE_ME", pathToPackage(dpkg))); 191 } 192 } 193 } 194 195 testList.addAll(Arrays.asList(expectedFieldOrdering)); 196 197 for (String x : expectedMethodOrdering) { 198 testList.add(x); 199 for (int i = 0; i < MAX_PACKAGES; i++) { 200 String wpkg = "add" + i; 201 testList.add(wpkg + "/" + x); 202 String dpkg = wpkg; 203 for (int j = 1; j < MAX_SUBPACKAGES_DEPTH; j++) { 204 dpkg = dpkg + "/" + "add"; 205 testList.add(dpkg + "/" + x); 206 } 207 } 208 } 209 return testList.toArray(new String[testList.size()]); 210 } 211 void checkExecutableMemberOrdering(String usePage) { 212 String contents = readFile(usePage); 213 // check constructors 214 checking("constructors"); 215 int idx1 = contents.indexOf("C.html#C-UsedInC"); 216 int idx2 = contents.indexOf("C.html#C-UsedInC-int"); 217 int idx3 = contents.indexOf("C.html#C-UsedInC-java.lang.String"); 218 if (idx1 == -1 || idx2 == -1 || idx3 == -1) { 219 failed("ctor strings not found"); 220 } else if (idx1 > idx2 || idx2 > idx3 || idx1 > idx3) { 221 failed("ctor strings are out of order"); 222 } else 223 passed("ctor strings are in order"); 224 225 // check methods 226 checking("methods"); 227 idx1 = contents.indexOf("C.html#ymethod-int"); 228 idx2 = contents.indexOf("C.html#ymethod-java.lang.String"); 229 if (idx1 == -1 || idx2 == -1) { 230 failed("#ymethod strings not found"); 231 } else if (idx1 > idx2) { 232 failed("#ymethod strings are out of order"); 233 } else 234 passed("Executable Member Ordering: OK"); 235 } 236 237 void checkClassUseOrdering(String usePage) { 238 checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#zfield"); 239 checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#fieldInC#ITERATION#"); 240 checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#zmethod-pkg1.UsedClass"); 241 checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#methodInC#ITERATION#"); 242 } 243 244 void checkClassUseOrdering(String usePage, String searchString) { 245 String contents = readFile(usePage); 246 int lastidx = 0; 247 System.out.println("testing for " + searchString); 248 for (int i = 1; i < 5; i++) { 249 String s = searchString.replaceAll("#ITERATION#", Integer.toString(i)); 250 checking(s); 251 int idx = contents.indexOf(s); 252 if (idx < lastidx) { 253 failed(s + ", member ordering error, last:" + lastidx + ", got:" + idx); 254 } else { 255 passed("\tlast: " + lastidx + " got:" + idx); 256 } 257 lastidx = idx; 258 } 259 } 260 261 static String[] contents = { 262 "public add ADDADD;", 263 "public add AddAdd;", 264 "public add addadd;", 265 "public enum add {add, ADD, addd, ADDD};", 266 "public enum ADD {ADD, add, addd, ADDD};", 267 "public void add(){}", 268 "public void add(double d){}", 269 "public void add(int i, float f){}", 270 "public void add(float f, int i){}", 271 "public void add(double d, byte b){}", 272 "public Double add(Double d) {return (double) 22/7;}", 273 "public double add(double d1, double d2) {return d1 + d2;}", 274 "public double add(double d1, Double d2) {return d1 + d2;}", 275 "public Float add(float f) {return (float) 22/7;}", 276 "public void add(int i){}", 277 "public int add(Integer i) {return 0;}" 278 }; 279 280 void emitFile(String pkgname, String clsname, ListOrder order) throws IOException { 281 File srcDir = new File("src"); 282 File outDir = pkgname == null 283 ? srcDir 284 : new File(srcDir, pkgname.replace(".", File.separator)); 285 File outFile = new File(outDir, clsname + ".java"); 286 outDir.mkdirs(); 287 List<String> scratch = new ArrayList<>(Arrays.asList(contents)); 288 switch (order) { 289 case SHUFFLE: 290 Collections.shuffle(scratch); 291 break; 292 case REVERSE: 293 Collections.reverse(scratch); 294 break; 295 default: 296 // leave list as-is 297 } 298 // insert the header 299 scratch.add(0, "public class " + clsname + " {"); 300 if (pkgname != null) { 301 scratch.add(0, "package " + pkgname + ";"); 302 } 303 // append the footer 304 scratch.add("}"); 305 Files.write(outFile.toPath(), scratch, CREATE, TRUNCATE_EXISTING); 306 } 307 308 String pathToPackage(String in) { 309 return in.replace("/", "."); 310 } 311 312 final String expectedInnerClassContructors[] = { 313 "../../pkg1/A.html#A-pkg1.UsedClass-", 314 "../../pkg1/B.A.html#A-pkg1.UsedClass-", 315 "../../pkg1/B.html#B-pkg1.UsedClass-", 316 "../../pkg1/A.C.html#C-pkg1.UsedClass-java.lang.Object:A-", 317 "../../pkg1/A.C.html#C-pkg1.UsedClass-java.util.Collection-", 318 "../../pkg1/A.C.html#C-pkg1.UsedClass-java.util.List-" 319 }; 320 321 final String expectedClassUseMethodOrdering[] = { 322 "../../pkg1/MethodOrder.html#m--", 323 "../../pkg1/MethodOrder.html#m-byte:A-", 324 "../../pkg1/MethodOrder.html#m-double-", 325 "../../pkg1/MethodOrder.html#m-double-double-", 326 "../../pkg1/MethodOrder.html#m-double-java.lang.Double-", 327 "../../pkg1/MethodOrder.html#m-int-", 328 "../../pkg1/MethodOrder.html#m-int-int-", 329 "../../pkg1/MethodOrder.html#m-int-java.lang.Integer-", 330 "../../pkg1/MethodOrder.html#m-long-", 331 "../../pkg1/MethodOrder.html#m-long-long-", 332 "../../pkg1/MethodOrder.html#m-long-java.lang.Long-", 333 "../../pkg1/MethodOrder.html#m-long-java.lang.Long...-", 334 "../../pkg1/MethodOrder.html#m-java.lang.Double-", 335 "../../pkg1/MethodOrder.html#m-java.lang.Double-double-", 336 "../../pkg1/MethodOrder.html#m-java.lang.Double-java.lang.Double-", 337 "../../pkg1/MethodOrder.html#m-java.lang.Integer-", 338 "../../pkg1/MethodOrder.html#m-java.lang.Integer-int-", 339 "../../pkg1/MethodOrder.html#m-java.lang.Integer-java.lang.Integer-", 340 "../../pkg1/MethodOrder.html#m-java.lang.Object:A-", 341 "../../pkg1/MethodOrder.html#m-java.util.ArrayList-", 342 "../../pkg1/MethodOrder.html#m-java.util.Collection-", 343 "../../pkg1/MethodOrder.html#m-java.util.List-" 344 }; 345 final String expectedClassUseWithTypeParams[] = { 346 "../../pkg1/MethodOrder.html#tpm-pkg1.UsedClass-", 347 "../../pkg1/MethodOrder.html#tpm-pkg1.UsedClass-pkg1.UsedClass-", 348 "../../pkg1/MethodOrder.html#tpm-pkg1.UsedClass-pkg1.UsedClass:A-", 349 "../../pkg1/MethodOrder.html#tpm-pkg1.UsedClass-java.lang.String-" 350 }; 351 final String expectedMethodOrdering[] = { 352 "Add.html#add--", 353 "Add.html#add-double-", 354 "Add.html#add-double-byte-", 355 "Add.html#add-double-double-", 356 "Add.html#add-double-java.lang.Double-", 357 "Add.html#add-float-", 358 "Add.html#add-float-int-", 359 "Add.html#add-int-", 360 "Add.html#add-int-float-", 361 "Add.html#add-java.lang.Double-", 362 "Add.html#add-java.lang.Integer-" 363 }; 364 final String expectedEnumOrdering[] = { 365 "Add.add.html\" title=\"enum in REPLACE_ME\"", 366 "Add.ADD.html\" title=\"enum in REPLACE_ME\"" 367 }; 368 final String expectedFieldOrdering[] = { 369 "Add.html#addadd\"", 370 "add0/add/add/add/Add.html#addadd\"", 371 "add0/add/add/Add.html#addadd\"", 372 "add0/add/Add.html#addadd\"", 373 "add0/Add.html#addadd\"", 374 "add1/add/add/add/Add.html#addadd\"", 375 "add1/add/add/Add.html#addadd\"", 376 "add1/add/Add.html#addadd\"", 377 "add1/Add.html#addadd\"", 378 "add2/add/add/add/Add.html#addadd\"", 379 "add2/add/add/Add.html#addadd\"", 380 "add2/add/Add.html#addadd\"", 381 "add2/Add.html#addadd\"", 382 "add3/add/add/add/Add.html#addadd\"", 383 "add3/add/add/Add.html#addadd\"", 384 "add3/add/Add.html#addadd\"", 385 "add3/Add.html#addadd\"", 386 "Add.html#AddAdd\"", 387 "add0/add/add/add/Add.html#AddAdd\"", 388 "add0/add/add/Add.html#AddAdd\"", 389 "add0/add/Add.html#AddAdd\"", 390 "add0/Add.html#AddAdd\"", 391 "add1/add/add/add/Add.html#AddAdd\"", 392 "add1/add/add/Add.html#AddAdd\"", 393 "add1/add/Add.html#AddAdd\"", 394 "add1/Add.html#AddAdd\"", 395 "add2/add/add/add/Add.html#AddAdd\"", 396 "add2/add/add/Add.html#AddAdd\"", 397 "add2/add/Add.html#AddAdd\"", 398 "add2/Add.html#AddAdd\"", 399 "add3/add/add/add/Add.html#AddAdd\"", 400 "add3/add/add/Add.html#AddAdd\"", 401 "add3/add/Add.html#AddAdd\"", 402 "add3/Add.html#AddAdd\"", 403 "Add.html#ADDADD\"", 404 "add0/add/add/add/Add.html#ADDADD\"", 405 "add0/add/add/Add.html#ADDADD\"", 406 "add0/add/Add.html#ADDADD\"", 407 "add0/Add.html#ADDADD\"", 408 "add1/add/add/add/Add.html#ADDADD\"", 409 "add1/add/add/Add.html#ADDADD\"", 410 "add1/add/Add.html#ADDADD\"", 411 "add1/Add.html#ADDADD\"", 412 "add2/add/add/add/Add.html#ADDADD\"", 413 "add2/add/add/Add.html#ADDADD\"", 414 "add2/add/Add.html#ADDADD\"", 415 "add2/Add.html#ADDADD\"", 416 "add3/add/add/add/Add.html#ADDADD\"", 417 "add3/add/add/Add.html#ADDADD\"", 418 "add3/add/Add.html#ADDADD\"", 419 "add3/Add.html#ADDADD\"" 420 }; 421 final String expectedPackageTreeOrdering[] = { 422 "<a href=\"../../add0/add/Add.add.html\" title=\"enum in add0.add\">", 423 "<a href=\"../../add0/add/Add.ADD.html\" title=\"enum in add0.add\">" 424 }; 425 final String expectedOverviewOrdering[] = { 426 "<a href=\"Add.add.html\" title=\"enum in <Unnamed>\">", 427 "<a href=\"add0/Add.add.html\" title=\"enum in add0\">", 428 "<a href=\"add0/add/Add.add.html\" title=\"enum in add0.add\">", 429 "<a href=\"add0/add/add/Add.add.html\" title=\"enum in add0.add.add\">", 430 "<a href=\"add0/add/add/add/Add.add.html\" title=\"enum in add0.add.add.add\">", 431 "<a href=\"add1/Add.add.html\" title=\"enum in add1\">", 432 "<a href=\"add1/add/Add.add.html\" title=\"enum in add1.add\">", 433 "<a href=\"add1/add/add/Add.add.html\" title=\"enum in add1.add.add\">", 434 "<a href=\"add1/add/add/add/Add.add.html\" title=\"enum in add1.add.add.add\">", 435 "<a href=\"add2/Add.add.html\" title=\"enum in add2\">", 436 "<a href=\"add2/add/Add.add.html\" title=\"enum in add2.add\">", 437 "<a href=\"add2/add/add/Add.add.html\" title=\"enum in add2.add.add\">", 438 "<a href=\"add2/add/add/add/Add.add.html\" title=\"enum in add2.add.add.add\">", 439 "<a href=\"add3/Add.add.html\" title=\"enum in add3\">", 440 "<a href=\"add3/add/Add.add.html\" title=\"enum in add3.add\">", 441 "<a href=\"add3/add/add/Add.add.html\" title=\"enum in add3.add.add\">", 442 "<a href=\"add3/add/add/add/Add.add.html\" title=\"enum in add3.add.add.add\">", 443 "<a href=\"Add.ADD.html\" title=\"enum in <Unnamed>\">", 444 "<a href=\"add0/Add.ADD.html\" title=\"enum in add0\">", 445 "<a href=\"add0/add/Add.ADD.html\" title=\"enum in add0.add\">", 446 "<a href=\"add0/add/add/Add.ADD.html\" title=\"enum in add0.add.add\">", 447 "<a href=\"add0/add/add/add/Add.ADD.html\" title=\"enum in add0.add.add.add\">", 448 "<a href=\"add1/Add.ADD.html\" title=\"enum in add1\">", 449 "<a href=\"add1/add/Add.ADD.html\" title=\"enum in add1.add\">", 450 "<a href=\"add1/add/add/Add.ADD.html\" title=\"enum in add1.add.add\">", 451 "<a href=\"add1/add/add/add/Add.ADD.html\" title=\"enum in add1.add.add.add\">", 452 "<a href=\"add2/Add.ADD.html\" title=\"enum in add2\">", 453 "<a href=\"add2/add/Add.ADD.html\" title=\"enum in add2.add\">", 454 "<a href=\"add2/add/add/Add.ADD.html\" title=\"enum in add2.add.add\">", 455 "<a href=\"add2/add/add/add/Add.ADD.html\" title=\"enum in add2.add.add.add\">", 456 "<a href=\"add3/Add.ADD.html\" title=\"enum in add3\">", 457 "<a href=\"add3/add/Add.ADD.html\" title=\"enum in add3.add\">", 458 "<a href=\"add3/add/add/Add.ADD.html\" title=\"enum in add3.add.add\">", 459 "<a href=\"add3/add/add/add/Add.ADD.html\" title=\"enum in add3.add.add.add\">", 460 }; 461 final static String expectedOverviewFrameOrdering[] = { 462 "<a href=\"package-frame.html\" target=\"packageFrame\"><unnamed package></a>", 463 "<a href=\"add0/package-frame.html\" target=\"packageFrame\">add0</a>", 464 "<a href=\"add0/add/package-frame.html\" target=\"packageFrame\">add0.add</a>", 465 "<a href=\"add0/add/add/package-frame.html\" target=\"packageFrame\">add0.add.add</a>", 466 "<a href=\"add0/add/add/add/package-frame.html\" target=\"packageFrame\">add0.add.add.add</a>", 467 "<a href=\"add1/package-frame.html\" target=\"packageFrame\">add1</a>", 468 "<a href=\"add1/add/package-frame.html\" target=\"packageFrame\">add1.add</a>", 469 "<a href=\"add1/add/add/package-frame.html\" target=\"packageFrame\">add1.add.add</a>", 470 "<a href=\"add1/add/add/add/package-frame.html\" target=\"packageFrame\">add1.add.add.add</a>", 471 "<a href=\"add2/package-frame.html\" target=\"packageFrame\">add2</a>", 472 "<a href=\"add2/add/package-frame.html\" target=\"packageFrame\">add2.add</a>", 473 "<a href=\"add2/add/add/package-frame.html\" target=\"packageFrame\">add2.add.add</a>", 474 "<a href=\"add2/add/add/add/package-frame.html\" target=\"packageFrame\">add2.add.add.add</a>", 475 "<a href=\"add3/package-frame.html\" target=\"packageFrame\">add3</a>", 476 "<a href=\"add3/add/package-frame.html\" target=\"packageFrame\">add3.add</a>", 477 "<a href=\"add3/add/add/package-frame.html\" target=\"packageFrame\">add3.add.add</a>", 478 "<a href=\"add3/add/add/add/package-frame.html\" target=\"packageFrame\">add3.add.add.add</a></li>" 479 }; 480 final static String expectedImplementsOrdering[] = { 481 "<dd><code>close</code> in interface <code>java.lang.AutoCloseable</code></dd>", 482 "<dd><code>close</code> in interface <code>java.nio.channels.Channel</code></dd>", 483 "<dd><code>close</code> in interface <code>java.io.Closeable</code></dd>" 484 }; 485 final static String expectedOverrideOrdering[] = { 486 "<dd><code>iterator</code> in interface <code>java.util.Collection<", 487 "<dd><code>iterator</code> in interface <code>java.lang.Iterable<" 488 }; 489} 490