AuthorDD.java revision 232:5240b1120530
1/* 2 * Copyright 2002-2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 20 * CA 95054 USA or visit www.sun.com if you need additional information or 21 * have any questions. 22 */ 23 24/* 25 * @test 26 * @bug 4651598 27 * @summary Javadoc wrongly inserts </DD> tags when using multiple @author tags 28 * @author dkramer 29 * @run main AuthorDD 30 */ 31 32 33import com.sun.javadoc.*; 34import java.util.*; 35import java.io.*; 36 37 38/** 39 * Runs javadoc and runs regression tests on the resulting HTML. 40 * It reads each file, complete with newlines, into a string to easily 41 * find strings that contain newlines. 42 */ 43public class AuthorDD 44{ 45 private static final String BUGID = "4651598"; 46 private static final String BUGNAME = "AuthorDD"; 47 private static final String FS = System.getProperty("file.separator"); 48 private static final String PS = System.getProperty("path.separator"); 49 private static final String NL = System.getProperty("line.separator"); 50 51 // Subtest number. Needed because runResultsOnHTML is run twice, and subtestNum 52 // should increment across subtest runs. 53 public static int subtestNum = 0; 54 public static int numSubtestsPassed = 0; 55 56 // Entry point 57 public static void main(String[] args) { 58 59 // Directory that contains source files that javadoc runs on 60 String srcdir = System.getProperty("test.src", "."); 61 62 // Test for all cases except the split index page 63 runJavadoc(new String[] {"-d", BUGID, 64 "-author", 65 "-version", 66 "-sourcepath", srcdir, 67 "p1"}); 68 runTestsOnHTML(testArray); 69 70 printSummary(); 71 } 72 73 /** Run javadoc */ 74 public static void runJavadoc(String[] javadocArgs) { 75 if (com.sun.tools.javadoc.Main.execute(AuthorDD.class.getClassLoader(), 76 javadocArgs) != 0) { 77 throw new Error("Javadoc failed to execute"); 78 } 79 } 80 81 /** 82 * Assign value for [ stringToFind, filename ] 83 * NOTE: The standard doclet uses the same separator "\n" for all OS's 84 */ 85 private static final String[][] testArray = { 86 87 // Test single @since tag: 88 89 { "<DT><STRONG>Since:</STRONG></DT>"+NL+" <DD>JDK 1.0</DD>", 90 BUGID + FS + "p1" + FS + "C1.html" }, 91 92 // Test multiple @author tags: 93 94 { "<DT><STRONG>Author:</STRONG></DT>"+NL+" <DD>Doug Kramer, Jamie, Neal</DD>", 95 BUGID + FS + "p1" + FS + "C1.html" }, 96 97 }; 98 99 public static void runTestsOnHTML(String[][] testArray) { 100 101 for (int i = 0; i < testArray.length; i++) { 102 103 subtestNum += 1; 104 105 // Read contents of file into a string 106 String fileString = readFileToString(testArray[i][1]); 107 108 // Get string to find 109 String stringToFind = testArray[i][0]; 110 111 // Find string in file's contents 112 if (findString(fileString, stringToFind) == -1) { 113 System.out.println("\nSub-test " + (subtestNum) 114 + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n" 115 + "when searching for:\n" 116 + stringToFind); 117 } else { 118 numSubtestsPassed += 1; 119 System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind); 120 } 121 } 122 } 123 124 public static void printSummary() { 125 if ( numSubtestsPassed == subtestNum ) { 126 System.out.println("\nAll " + numSubtestsPassed + " subtests passed"); 127 } else { 128 throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum) 129 + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n"); 130 } 131 } 132 133 // Read the file into a String 134 public static String readFileToString(String filename) { 135 try { 136 File file = new File(filename); 137 if ( !file.exists() ) { 138 System.out.println("\nFILE DOES NOT EXIST: " + filename); 139 } 140 BufferedReader in = new BufferedReader(new FileReader(file)); 141 142 // Create an array of characters the size of the file 143 char[] allChars = new char[(int)file.length()]; 144 145 // Read the characters into the allChars array 146 in.read(allChars, 0, (int)file.length()); 147 in.close(); 148 149 // Convert to a string 150 String allCharsString = new String(allChars); 151 152 return allCharsString; 153 154 } catch (FileNotFoundException e) { 155 System.err.println(e); 156 return ""; 157 } catch (IOException e) { 158 System.err.println(e); 159 return ""; 160 } 161 } 162 163 public static int findString(String fileString, String stringToFind) { 164 return fileString.indexOf(stringToFind); 165 } 166} 167