30
30
#if !UCONFIG_NO_FORMATTING
31
31
32
32
#include <stdbool.h>
33
+ #include <stdio.h> // for sprintf()
33
34
34
35
#include "unicode/udat.h"
35
36
#include "unicode/udatpg.h"
@@ -51,7 +52,9 @@ static void TestGetDefaultHourCycleOnEmptyInstance(void);
51
52
static void TestEras (void );
52
53
static void TestDateTimePatterns (void );
53
54
static void TestRegionOverride (void );
55
+ static void TestISO8601 (void );
54
56
57
+
55
58
void addDateTimePatternGeneratorTest (TestNode * * root ) {
56
59
TESTCASE (TestOpenClose );
57
60
TESTCASE (TestUsage );
@@ -63,6 +66,7 @@ void addDateTimePatternGeneratorTest(TestNode** root) {
63
66
TESTCASE (TestEras );
64
67
TESTCASE (TestDateTimePatterns );
65
68
TESTCASE (TestRegionOverride );
69
+ TESTCASE (TestISO8601 );
66
70
}
67
71
68
72
/*
@@ -836,4 +840,46 @@ static void TestRegionOverride(void) {
836
840
udatpg_close (dtpg );
837
841
}
838
842
}
843
+
844
+ static void TestISO8601 (void ) {
845
+ typedef struct TestCase {
846
+ const char * locale ;
847
+ const UChar * skeleton ;
848
+ const UChar * expectedPattern ;
849
+ } TestCase ;
850
+
851
+ const TestCase testCases [] = {
852
+ { "en_GB@calendar=iso8601;rg=uszzzz" , u"EEEEyMMMMdjmm" , u"y MMMM d, EEEE 'at' h:mm a" },
853
+ { "en_GB@calendar=iso8601;rg=uszzzz" , u"EEEEyMMMMdHmm" , u"y MMMM d, EEEE 'at' HH:mm" },
854
+ { "en_GB@calendar=iso8601;rg=uszzzz" , u"Edjmm" , u"d, EEE, h:mm a" },
855
+ { "en_GB@calendar=iso8601;rg=uszzzz" , u"EdHmm" , u"d, EEE, HH:mm" },
856
+
857
+ { "en_US@calendar=iso8601" , u"EEEEyMMMMdjmm" , u"y MMMM d, EEEE 'at' h:mm a" },
858
+ { "en_US@calendar=iso8601" , u"EEEEyMMMMdHmm" , u"y MMMM d, EEEE 'at' HH:mm" },
859
+ { "en_US@calendar=iso8601" , u"Edjmm" , u"d, EEE, h:mm a" },
860
+ { "en_US@calendar=iso8601" , u"EdHmm" , u"d, EEE, HH:mm" },
861
+
862
+ { "en_US" , u"EEEEyMMMMdjmm" , u"EEEE, MMMM d, y 'at' h:mm a" },
863
+ { "en_US" , u"EEEEyMMMMdHmm" , u"EEEE, MMMM d, y 'at' HH:mm" },
864
+ { "en_US" , u"Edjmm" , u"d EEE, h:mm a" },
865
+ { "en_US" , u"EdHmm" , u"d EEE, HH:mm" },
866
+ };
867
+
868
+ for (int32_t i = 0 ; i < UPRV_LENGTHOF (testCases ); i ++ ) {
869
+ UErrorCode err = U_ZERO_ERROR ;
870
+ UDateTimePatternGenerator * dtpg = udatpg_open (testCases [i ].locale , & err );
871
+
872
+ if (assertSuccess ("Error creating dtpg" , & err )) {
873
+ UChar actualPattern [200 ];
874
+
875
+ udatpg_getBestPatternWithOptions (dtpg , testCases [i ].skeleton , -1 , 0 , actualPattern , UPRV_LENGTHOF (actualPattern ), & err );
876
+ if (assertSuccess ("Error getting best pattern" , & err )) {
877
+ char errorMessage [200 ];
878
+ snprintf (errorMessage , UPRV_LENGTHOF (errorMessage ), "Wrong pattern for %s and %s" , testCases [i ].locale , austrdup (testCases [i ].skeleton ));
879
+ assertUEquals (errorMessage , testCases [i ].expectedPattern , actualPattern );
880
+ }
881
+ }
882
+ udatpg_close (dtpg );
883
+ }
884
+ }
839
885
#endif
0 commit comments