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