]>
git.saurik.com Git - apple/icu.git/blob - icuSources/test/intltest/sdtfmtts.cpp
2 /********************************************************************
4 * Copyright (c) 1997-2008, International Business Machines Corporation and
5 * others. All Rights Reserved.
6 ********************************************************************/
8 #include "unicode/utypes.h"
10 #if !UCONFIG_NO_FORMATTING
14 #include "unicode/smpdtfmt.h"
15 #include "unicode/dtfmtsym.h"
17 // This is an API test, not a unit test. It doesn't test very many cases, and doesn't
18 // try to test the full functionality. It just calls each function in the class and
19 // verifies that it works on a basic level.
21 void IntlTestSimpleDateFormatAPI::runIndexedTest( int32_t index
, UBool exec
, const char* &name
, char* /*par*/ )
23 if (exec
) logln("TestSuite SimpleDateFormatAPI");
25 case 0: name
= "SimpleDateFormat API test";
27 logln("SimpleDateFormat API test---"); logln("");
28 UErrorCode status
= U_ZERO_ERROR
;
30 Locale::setDefault(Locale::getEnglish(), status
);
31 if(U_FAILURE(status
)) {
32 errln("ERROR: Could not set default locale, test may not give correct results");
35 Locale::setDefault(saveLocale
, status
);
39 default: name
= ""; break;
44 * Test various generic API methods of SimpleDateFormat for API coverage.
46 void IntlTestSimpleDateFormatAPI::testAPI(/*char *par*/)
48 UErrorCode status
= U_ZERO_ERROR
;
50 // ======= Test constructors
52 logln("Testing SimpleDateFormat constructors");
54 SimpleDateFormat
def(status
);
55 if(U_FAILURE(status
)) {
56 dataerrln("ERROR: Could not create SimpleDateFormat (default) - exitting");
60 status
= U_ZERO_ERROR
;
61 const UnicodeString
pattern("yyyy.MM.dd G 'at' hh:mm:ss z");
62 SimpleDateFormat
pat(pattern
, status
);
63 if(U_FAILURE(status
)) {
64 errln("ERROR: Could not create SimpleDateFormat (pattern)");
67 status
= U_ZERO_ERROR
;
68 SimpleDateFormat
pat_fr(pattern
, Locale::getFrench(), status
);
69 if(U_FAILURE(status
)) {
70 errln("ERROR: Could not create SimpleDateFormat (pattern French)");
73 status
= U_ZERO_ERROR
;
74 DateFormatSymbols
*symbols
= new DateFormatSymbols(Locale::getFrench(), status
);
75 if(U_FAILURE(status
)) {
76 errln("ERROR: Could not create DateFormatSymbols (French)");
79 status
= U_ZERO_ERROR
;
80 SimpleDateFormat
cust1(pattern
, symbols
, status
);
81 if(U_FAILURE(status
)) {
82 dataerrln("ERROR: Could not create SimpleDateFormat (pattern, symbols*) - exitting");
86 status
= U_ZERO_ERROR
;
87 SimpleDateFormat
cust2(pattern
, *symbols
, status
);
88 if(U_FAILURE(status
)) {
89 errln("ERROR: Could not create SimpleDateFormat (pattern, symbols)");
92 SimpleDateFormat
copy(pat
);
94 // ======= Test clone(), assignment, and equality
96 logln("Testing clone(), assignment and equality operators");
98 if( ! (copy
== pat
) || copy
!= pat
) {
99 errln("ERROR: Copy constructor (or ==) failed");
104 errln("ERROR: Assignment (or !=) failed");
107 Format
*clone
= def
.clone();
108 if( ! (*clone
== def
) ) {
109 errln("ERROR: Clone() (or ==) failed");
113 // ======= Test various format() methods
115 logln("Testing various format() methods");
117 UDate d
= 837039928046.0;
118 Formattable
fD(d
, Formattable::kIsDate
);
120 UnicodeString res1
, res2
;
121 FieldPosition
pos1(0), pos2(0);
123 res1
= def
.format(d
, res1
, pos1
);
124 logln( (UnicodeString
) "" + d
+ " formatted to " + res1
);
126 status
= U_ZERO_ERROR
;
127 res2
= cust1
.format(fD
, res2
, pos2
, status
);
128 if(U_FAILURE(status
)) {
129 errln("ERROR: format(Formattable [Date]) failed");
131 logln((UnicodeString
) "" + fD
.getDate() + " formatted to " + res2
);
133 // ======= Test parse()
135 logln("Testing parse()");
137 UnicodeString
text("02/03/76 2:50 AM, CST");
138 UDate result1
, result2
;
139 ParsePosition
pos(0);
140 result1
= def
.parse(text
, pos
);
141 logln(text
+ " parsed into " + result1
);
143 status
= U_ZERO_ERROR
;
144 result2
= def
.parse(text
, status
);
145 if(U_FAILURE(status
)) {
146 errln("ERROR: parse() failed");
148 logln(text
+ " parsed into " + result2
);
150 // ======= Test getters and setters
152 logln("Testing getters and setters");
154 const DateFormatSymbols
*syms
= pat
.getDateFormatSymbols();
156 errln("Couldn't obtain DateFormatSymbols. Quitting test!");
159 if(syms
->getDynamicClassID() != DateFormatSymbols::getStaticClassID()) {
160 errln("ERROR: format->getDateFormatSymbols()->getDynamicClassID() != DateFormatSymbols::getStaticClassID()");
162 DateFormatSymbols
*newSyms
= new DateFormatSymbols(*syms
);
163 def
.adoptDateFormatSymbols(newSyms
);
164 pat_fr
.setDateFormatSymbols(*newSyms
);
165 if( *(pat
.getDateFormatSymbols()) != *(def
.getDateFormatSymbols())) {
166 errln("ERROR: adopt or set DateFormatSymbols() failed");
169 status
= U_ZERO_ERROR
;
170 UDate startDate
= pat
.get2DigitYearStart(status
);
171 if(U_FAILURE(status
)) {
172 errln("ERROR: getTwoDigitStartDate() failed");
175 status
= U_ZERO_ERROR
;
176 pat_fr
.set2DigitYearStart(startDate
, status
);
177 if(U_FAILURE(status
)) {
178 errln("ERROR: setTwoDigitStartDate() failed");
181 // ======= Test DateFormatSymbols constructor
182 newSyms
=new DateFormatSymbols("gregorian", status
);
183 if(U_FAILURE(status
)) {
184 errln("ERROR: new DateFormatSymbols() failed");
186 def
.adoptDateFormatSymbols(newSyms
);
188 // ======= Test applyPattern()
190 logln("Testing applyPattern()");
192 UnicodeString
p1("yyyy.MM.dd G 'at' hh:mm:ss z");
193 logln("Applying pattern " + p1
);
194 status
= U_ZERO_ERROR
;
195 pat
.applyPattern(p1
);
198 s2
= pat
.toPattern(s2
);
199 logln("Extracted pattern is " + s2
);
201 errln("ERROR: toPattern() result did not match pattern applied");
204 logln("Applying pattern " + p1
);
205 status
= U_ZERO_ERROR
;
206 pat
.applyLocalizedPattern(p1
, status
);
207 if(U_FAILURE(status
)) {
208 errln("ERROR: applyPattern() failed with " + (int32_t) status
);
211 status
= U_ZERO_ERROR
;
212 s3
= pat
.toLocalizedPattern(s3
, status
);
213 if(U_FAILURE(status
)) {
214 errln("ERROR: toLocalizedPattern() failed");
216 logln("Extracted pattern is " + s3
);
218 errln("ERROR: toLocalizedPattern() result did not match pattern applied");
221 // ======= Test getStaticClassID()
223 logln("Testing getStaticClassID()");
225 status
= U_ZERO_ERROR
;
226 DateFormat
*test
= new SimpleDateFormat(status
);
227 if(U_FAILURE(status
)) {
228 errln("ERROR: Couldn't create a SimpleDateFormat");
231 if(test
->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) {
232 errln("ERROR: getDynamicClassID() didn't return the expected value");
237 // ======= Test Ticket 5684 (Parsing with 'e' and 'Y')
238 SimpleDateFormat
object("en", "us", status
);
239 if(U_FAILURE(status
)) {
240 errln("ERROR: Couldn't create a SimpleDateFormat");
242 object
.setLenient(false);
244 object
.applyPattern("YYYY'W'wwe");
245 UDate udDate
= object
.parse("2007W014", pp
);
246 if ((double)udDate
== 0.0) {
247 errln("ERROR: Parsing failed using 'Y' and 'e'");
251 #endif /* #if !UCONFIG_NO_FORMATTING */