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(Date d)34         public String format(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 
toString()137         public String toString() {
138             StringBuilder sb = new StringBuilder();
139             if (hours > 0) {
140                 sb.append(hours);
141                 sb.append(hours > 1 ? " hours " : " hour ");
142             }
143             if (minutes > 0) {
144                 sb.append(minutes);
145                 sb.append(minutes > 1 ? " minutes " : " minute ");
146             }
147             if (seconds > 0) {
148                 sb.append(seconds);
149                 sb.append(seconds > 1 ? " seconds " : " second ");
150             }
151             if (millis > 0) {
152                 sb.append(millis);
153                 sb.append(millis > 1 ? " milliseconds" : " millisecond");
154             }
155             return sb.toString();
156         }
157     }
158 
main(String[] args)159     public static void main(String[] args) {
160         final boolean doTimeStamps = false;
161         TimeStampingPrintWriter tspw = new TimeStampingPrintWriter(System.out);
162         if (!doTimeStamps) {
163             tspw.setFormatableDate(new NullFormatableDate());
164         }
165         long startTime = System.currentTimeMillis();
166         int errCount = CLDRConfig.getInstance().setTestLog(new TestAll())
167             .run(args, tspw);
168         long endTime = System.currentTimeMillis();
169         DateDisplayBean dispBean = new DateDisplayBean(endTime - startTime);
170         StringBuffer sb = new StringBuffer();
171         sb.append("Tests took ");
172         sb.append(dispBean.toString());
173         System.out.println(sb.toString());
174         if (errCount != 0) {
175             System.exit(1);
176         }
177     }
178 
TestAll()179     public TestAll() {
180         super(new String[] {
181             "org.unicode.cldr.unittest.LocaleMatcherTest",
182             "org.unicode.cldr.unittest.GenerateTransformTest",
183             "org.unicode.cldr.unittest.LanguageInfoTest",
184             "org.unicode.cldr.unittest.LanguageTest",
185             "org.unicode.cldr.unittest.LikelySubtagsTest",
186             "org.unicode.cldr.unittest.NumberingSystemsTest",
187             "org.unicode.cldr.unittest.StandardCodesTest",
188             "org.unicode.cldr.unittest.TestAnnotations",
189             "org.unicode.cldr.unittest.TestBasic",
190             "org.unicode.cldr.unittest.TestCLDRFile",
191             "org.unicode.cldr.unittest.TestCLDRUtils",
192             "org.unicode.cldr.unittest.TestCanonicalIds",
193             "org.unicode.cldr.unittest.TestCasingInfo",
194             "org.unicode.cldr.unittest.TestCheckCLDR",
195             "org.unicode.cldr.unittest.TestComparisonBuilder",
196             "org.unicode.cldr.unittest.TestCoverageLevel",
197             "org.unicode.cldr.unittest.TestDTDAttributes",
198             "org.unicode.cldr.unittest.TestDisplayAndInputProcessor",
199             "org.unicode.cldr.unittest.TestExampleGenerator",
200             "org.unicode.cldr.unittest.TestExternalCodeAPIs",
201             "org.unicode.cldr.unittest.TestFallbackIterator",
202             "org.unicode.cldr.unittest.TestIdentifierInfo",
203             "org.unicode.cldr.unittest.TestIdentity",
204             "org.unicode.cldr.unittest.TestInheritance",
205             "org.unicode.cldr.unittest.TestKeyboardModifierSet",
206             "org.unicode.cldr.unittest.TestLdml2ICU",
207             "org.unicode.cldr.unittest.TestLocalCurrency",
208             "org.unicode.cldr.unittest.TestLocale",
209             "org.unicode.cldr.unittest.TestLruMap",
210             "org.unicode.cldr.unittest.TestMetadata",
211             "org.unicode.cldr.unittest.TestOutdatedPaths",
212             "org.unicode.cldr.unittest.TestPathHeader",
213             "org.unicode.cldr.unittest.TestPaths",
214             "org.unicode.cldr.unittest.TestPseudolocalization",
215             "org.unicode.cldr.unittest.TestScriptMetadata",
216             "org.unicode.cldr.unittest.TestSupplementalInfo",
217             "org.unicode.cldr.unittest.TestTransforms",
218             "org.unicode.cldr.unittest.TestUtilities",
219             "org.unicode.cldr.unittest.TestCLDRLocaleCoverage",
220             "org.unicode.cldr.unittest.TestDayPeriods",
221             "org.unicode.cldr.unittest.TestSubdivisions",
222             "org.unicode.cldr.unittest.TestAliases",
223             "org.unicode.cldr.unittest.TestValidity",
224             "org.unicode.cldr.unittest.TestDtdData",
225             "org.unicode.cldr.unittest.TestCldrFactory",
226             "org.unicode.cldr.unittest.TestUnContainment",
227             //            "org.unicode.cldr.unittest.TestCollators" See Ticket #8288
228         },
229             "All tests in CLDR");
230     }
231 
232     public static final String CLASS_TARGET_NAME = "CLDR";
233 }
234