1 //##header J2SE15 2 3 package org.unicode.cldr.unittest; 4 5 import java.io.OutputStream; 6 import java.io.PrintWriter; 7 import java.io.Writer; 8 import java.util.Date; 9 10 import org.unicode.cldr.util.CLDRConfig; 11 12 import com.ibm.icu.dev.test.TestFmwk.TestGroup; 13 import com.ibm.icu.text.DateFormat; 14 import com.ibm.icu.text.SimpleDateFormat; 15 16 /** 17 * Top level test used to run all other tests as a batch. 18 */ 19 public class TestAll extends TestGroup { 20 21 private static interface FormattableDate { format(Date d)22 String format(Date d); 23 } 24 25 /** 26 * NullObject, to suppress Timestamp printing 27 * 28 * @author ribnitz 29 * 30 */ 31 private static class NullFormatableDate implements FormattableDate { 32 33 @Override format(@uppressWarnings"unused") Date d)34 public String format(@SuppressWarnings("unused") Date d) { 35 return null; 36 } 37 } 38 39 /** 40 * Simplistic approach at formatting a Date (using Date and Time) 41 * 42 * @author ribnitz 43 * 44 */ 45 private static class SimpleFormattableDate implements FormattableDate { 46 private final DateFormat df; 47 SimpleFormattableDate()48 public SimpleFormattableDate() { 49 df = new SimpleDateFormat("y-MM-d HH:mm:ss"); 50 } 51 52 @Override format(Date d)53 public String format(Date d) { 54 return " << " + df.format(d) + " >>"; 55 } 56 57 } 58 59 /** 60 * Class putting a timestamp at the end of each line output 61 * 62 * @author ribnitz 63 * 64 */ 65 private static class TimeStampingPrintWriter extends PrintWriter { 66 protected FormattableDate df = new SimpleFormattableDate(); 67 TimeStampingPrintWriter(Writer out, boolean autoFlush)68 public TimeStampingPrintWriter(Writer out, boolean autoFlush) { 69 super(out, autoFlush); 70 } 71 TimeStampingPrintWriter(Writer out)72 public TimeStampingPrintWriter(Writer out) { 73 super(out); 74 // TODO Auto-generated constructor stub 75 } 76 TimeStampingPrintWriter(OutputStream out, boolean autoFlush)77 public TimeStampingPrintWriter(OutputStream out, boolean autoFlush) { 78 super(out, autoFlush); 79 // TODO Auto-generated constructor stub 80 } 81 TimeStampingPrintWriter(OutputStream out)82 public TimeStampingPrintWriter(OutputStream out) { 83 super(out); 84 // TODO Auto-generated constructor stub 85 } 86 setFormatableDate(FormattableDate aDate)87 public void setFormatableDate(FormattableDate aDate) { 88 df = aDate; 89 } 90 getFormattedDateString()91 private String getFormattedDateString() { 92 return df.format(new Date()); 93 } 94 95 @Override write(String s)96 public void write(String s) { 97 if (s.equals("\n") || s.equals("\r\n")) { 98 String ss = getFormattedDateString(); 99 if (ss != null) { 100 super.write(" " + ss + s); 101 } else { 102 super.write(s); 103 } 104 } else { 105 super.write(s); 106 } 107 } 108 109 } 110 111 /** 112 * Helper class to convert milliseconds into hours/minuy 113 * 114 * @author ribnitz 115 * 116 */ 117 private static class DateDisplayBean { 118 public final int hours; 119 public final int minutes; 120 public final int seconds; 121 public final int millis; 122 DateDisplayBean(long ms)123 public DateDisplayBean(long ms) { 124 long m = ms; 125 hours = (int) (m / (60 * 60 * 1000)); 126 if (hours > 0) { 127 m -= (hours * 60 * 60 * 1000); 128 } 129 minutes = (int) (m / (60 * 1000)); 130 if (minutes > 0) { 131 m -= minutes * 60 * 1000; 132 } 133 seconds = (int) (m / 1000); 134 millis = (int) (m - (seconds * 1000)); 135 } 136 137 @Override toString()138 public String toString() { 139 StringBuilder sb = new StringBuilder(); 140 if (hours > 0) { 141 sb.append(hours); 142 sb.append(hours > 1 ? " hours " : " hour "); 143 } 144 if (minutes > 0) { 145 sb.append(minutes); 146 sb.append(minutes > 1 ? " minutes " : " minute "); 147 } 148 if (seconds > 0) { 149 sb.append(seconds); 150 sb.append(seconds > 1 ? " seconds " : " second "); 151 } 152 if (millis > 0) { 153 sb.append(millis); 154 sb.append(millis > 1 ? " milliseconds" : " millisecond"); 155 } 156 return sb.toString(); 157 } 158 } 159 main(String[] args)160 public static void main(String[] args) { 161 int errCount = runTests(args); 162 if (errCount != 0) { 163 System.exit(1); 164 } 165 } 166 167 /** 168 * Run all tests, but do not System.exit at the end. 169 */ runTests(String[] args)170 public static int runTests(String[] args) { 171 final boolean doTimeStamps = false; 172 TimeStampingPrintWriter tspw = new TimeStampingPrintWriter(System.out); 173 if (!doTimeStamps) { 174 tspw.setFormatableDate(new NullFormatableDate()); 175 } 176 long startTime = System.currentTimeMillis(); 177 int errCount = CLDRConfig.getInstance().setTestLog(new TestAll()) 178 .run(args, tspw); 179 long endTime = System.currentTimeMillis(); 180 DateDisplayBean dispBean = new DateDisplayBean(endTime - startTime); 181 StringBuffer sb = new StringBuffer(); 182 sb.append("Tests took "); 183 sb.append(dispBean.toString()); 184 System.out.println(sb.toString()); 185 return errCount; 186 } 187 TestAll()188 public TestAll() { 189 super(new String[] { 190 "org.unicode.cldr.unittest.LocaleMatcherTest", 191 "org.unicode.cldr.unittest.GenerateTransformTest", 192 "org.unicode.cldr.unittest.LanguageInfoTest", 193 "org.unicode.cldr.unittest.LanguageTest", 194 "org.unicode.cldr.unittest.LikelySubtagsTest", 195 "org.unicode.cldr.unittest.NumberingSystemsTest", 196 "org.unicode.cldr.unittest.StandardCodesTest", 197 "org.unicode.cldr.unittest.TestAnnotations", 198 "org.unicode.cldr.unittest.TestAttributeValues", 199 "org.unicode.cldr.unittest.TestBasic", 200 "org.unicode.cldr.unittest.TestCLDRFile", 201 "org.unicode.cldr.unittest.TestCLDRUtils", 202 "org.unicode.cldr.unittest.TestCanonicalIds", 203 "org.unicode.cldr.unittest.TestCasingInfo", 204 "org.unicode.cldr.unittest.TestCheckAltOnly", 205 "org.unicode.cldr.unittest.TestCheckCLDR", 206 "org.unicode.cldr.unittest.TestComparisonBuilder", 207 "org.unicode.cldr.unittest.TestCoverageLevel", 208 "org.unicode.cldr.unittest.TestDTDAttributes", 209 "org.unicode.cldr.unittest.TestDisplayAndInputProcessor", 210 "org.unicode.cldr.unittest.TestExampleGenerator", 211 "org.unicode.cldr.unittest.TestExternalCodeAPIs", 212 "org.unicode.cldr.unittest.TestFallbackIterator", 213 "org.unicode.cldr.unittest.TestIdentifierInfo", 214 "org.unicode.cldr.unittest.TestIdentity", 215 "org.unicode.cldr.unittest.TestInheritance", 216 "org.unicode.cldr.unittest.TestKeyboardModifierSet", 217 "org.unicode.cldr.unittest.TestLdml2ICU", 218 "org.unicode.cldr.unittest.TestLocalCurrency", 219 "org.unicode.cldr.unittest.TestLocale", 220 "org.unicode.cldr.unittest.TestLruMap", 221 "org.unicode.cldr.unittest.TestMetadata", 222 "org.unicode.cldr.unittest.TestOutdatedPaths", 223 "org.unicode.cldr.unittest.TestPathHeader", 224 "org.unicode.cldr.unittest.TestPaths", 225 "org.unicode.cldr.unittest.TestPseudolocalization", 226 "org.unicode.cldr.unittest.TestScriptMetadata", 227 "org.unicode.cldr.unittest.TestSupplementalInfo", 228 "org.unicode.cldr.unittest.TestTransforms", 229 "org.unicode.cldr.unittest.TestUtilities", 230 "org.unicode.cldr.unittest.TestCLDRLocaleCoverage", 231 "org.unicode.cldr.unittest.TestDayPeriods", 232 "org.unicode.cldr.unittest.TestSubdivisions", 233 "org.unicode.cldr.unittest.TestAliases", 234 "org.unicode.cldr.unittest.TestValidity", 235 "org.unicode.cldr.unittest.TestDtdData", 236 "org.unicode.cldr.unittest.TestCldrFactory", 237 "org.unicode.cldr.unittest.TestUnContainment", 238 "org.unicode.cldr.unittest.TestUnits", 239 "org.unicode.cldr.unittest.TestNumbers", 240 "org.unicode.cldr.unittest.TestLocaleCanonicalizer", 241 "org.unicode.cldr.unittest.TestPersonNameFormatter", 242 "org.unicode.cldr.unittest.TestCompactNumbers", 243 // "org.unicode.cldr.unittest.TestCollators" See Ticket #8288 244 "org.unicode.cldr.api.AllTests", 245 }, 246 "All tests in CLDR"); 247 } 248 249 public static final String CLASS_TARGET_NAME = "CLDR"; 250 } 251