]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/intltest/restsnew.cpp
ICU-511.34.tar.gz
[apple/icu.git] / icuSources / test / intltest / restsnew.cpp
index 9a30b0c9ff406d4d4fce067d0f4fd5fb9269133e..dbba470391ece1b0303cb847266da3ab1510ce34 100644 (file)
@@ -1,7 +1,6 @@
 /********************************************************************
- * COPYRIGHT: 
- * Copyright (c) 1997-2003, International Business Machines Corporation and
- * others. All Rights Reserved.
+ * Copyright (c) 1997-2009, International Business Machines
+ * Corporation and others. All Rights Reserved.
  ********************************************************************/
 
 #include "unicode/utypes.h"
@@ -34,11 +33,11 @@ enum E_Where
 
 //***************************************************************************************
 
-#define CONFIRM_EQ(actual,expected) if ((expected)==(actual)) { record_pass(); } else { record_fail(); errln(action + (UnicodeString)" returned " + (actual) + (UnicodeString)" instead of " + (expected) + (UnicodeString)"\n"); }
-#define CONFIRM_GE(actual,expected) if ((actual)>=(expected)) { record_pass(); } else { record_fail(); errln(action + (UnicodeString)" returned " + (actual) + (UnicodeString)" instead of x >= " + (expected) + (UnicodeString)"\n"); }
-#define CONFIRM_NE(actual,expected) if ((expected)!=(actual)) { record_pass(); } else { record_fail(); errln(action + (UnicodeString)" returned " + (actual) + (UnicodeString)" instead of x != " + (expected) + (UnicodeString)"\n"); }
+#define CONFIRM_EQ(actual,expected) if ((expected)==(actual)) { record_pass(); } else { record_fail(); errln(action + (UnicodeString)" returned " + (actual) + (UnicodeString)" instead of " + (expected)); }
+#define CONFIRM_GE(actual,expected) if ((actual)>=(expected)) { record_pass(); } else { record_fail(); errln(action + (UnicodeString)" returned " + (actual) + (UnicodeString)" instead of x >= " + (expected)); }
+#define CONFIRM_NE(actual,expected) if ((expected)!=(actual)) { record_pass(); } else { record_fail(); errln(action + (UnicodeString)" returned " + (actual) + (UnicodeString)" instead of x != " + (expected)); }
 
-#define CONFIRM_UErrorCode(actual,expected) if ((expected)==(actual)) { record_pass(); } else { record_fail(); errln(action + (UnicodeString)" returned " + (UnicodeString)u_errorName(actual) + (UnicodeString)" instead of " + (UnicodeString)u_errorName(expected) + (UnicodeString)"\n"); }
+#define CONFIRM_UErrorCode(actual,expected) if ((expected)==(actual)) { record_pass(); } else { record_fail(); errln(action + (UnicodeString)" returned " + (UnicodeString)u_errorName(actual) + (UnicodeString)" instead of " + (UnicodeString)u_errorName(expected)); }
 
 //***************************************************************************************
 
@@ -155,8 +154,7 @@ static int32_t randi(int32_t n)
 */
 NewResourceBundleTest::NewResourceBundleTest()
 : pass(0),
-  fail(0),
-  OUT(it_out)
+  fail(0)
 {
     if (param[5].locale == NULL) {
         param[0].locale = new Locale("root");
@@ -183,11 +181,17 @@ void NewResourceBundleTest::runIndexedTest( int32_t index, UBool exec, const cha
 {
     if (exec) logln("TestSuite ResourceBundleTest: ");
     switch (index) {
+#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION
     case 0: name = "TestResourceBundles"; if (exec) TestResourceBundles(); break;
     case 1: name = "TestConstruction"; if (exec) TestConstruction(); break;
     case 2: name = "TestIteration"; if (exec) TestIteration(); break;
     case 3: name = "TestOtherAPI";  if(exec) TestOtherAPI(); break;
     case 4: name = "TestNewTypes";  if(exec) TestNewTypes(); break;
+#else
+    case 0: case 1: case 2: case 3: case 4: name = "skip"; break;
+#endif
+
+    case 5: name = "TestGetByFallback";  if(exec) TestGetByFallback(); break;
         default: name = ""; break; //needed to end loop
     }
 }
@@ -197,6 +201,20 @@ void NewResourceBundleTest::runIndexedTest( int32_t index, UBool exec, const cha
 void
 NewResourceBundleTest::TestResourceBundles()
 {
+    UErrorCode status = U_ZERO_ERROR;
+    loadTestData(status);
+    if(U_FAILURE(status))
+    {
+        dataerrln("Could not load testdata.dat %s " + UnicodeString(u_errorName(status)));
+        return;
+    }
+
+    /* Make sure that users using te_IN for the default locale don't get test failures. */
+    Locale originalDefault;
+    if (Locale::getDefault() == Locale("te_IN")) {
+        Locale::setDefault(Locale("en_US"), status);
+    }
+
     testTag("only_in_Root", TRUE, FALSE, FALSE);
     testTag("only_in_te", FALSE, TRUE, FALSE);
     testTag("only_in_te_IN", FALSE, FALSE, TRUE);
@@ -206,62 +224,78 @@ NewResourceBundleTest::TestResourceBundles()
     testTag("in_te_te_IN", FALSE, TRUE, TRUE);
     testTag("nonexistent", FALSE, FALSE, FALSE);
     logln("Passed: %d\nFailed: %d", pass, fail);
+
+    /* Restore the default locale for the other tests. */
+    Locale::setDefault(originalDefault, status);
 }
 
 void
 NewResourceBundleTest::TestConstruction()
 {
+    UErrorCode   err = U_ZERO_ERROR;
+    Locale       locale("te", "IN");
+
+    const char* testdatapath;
+    testdatapath=loadTestData(err);
+    if(U_FAILURE(err))
     {
-        UErrorCode   err = U_ZERO_ERROR;
-        const char* testdatapath;
-        Locale       locale("te", "IN");
-        testdatapath=loadTestData(err);
-        if(U_FAILURE(err))
-        {
-            errln("Could not load testdata.dat %s " + UnicodeString(u_errorName(err)));
-            return;
-        }
+        dataerrln("Could not load testdata.dat %s " + UnicodeString(u_errorName(err)));
+        return;
+    }
 
-        ResourceBundle  test1((UnicodeString)testdatapath, err);
-        ResourceBundle  test2(testdatapath, locale, err);
-     
-        UnicodeString   result1;
-        UnicodeString   result2;
-
-        result1 = test1.getStringEx("string_in_Root_te_te_IN", err);
-        result2 = test2.getStringEx("string_in_Root_te_te_IN", err);
-        if (U_FAILURE(err)) {
-            errln("Something threw an error in TestConstruction()");
-            return;
-        }
+    /* Make sure that users using te_IN for the default locale don't get test failures. */
+    Locale originalDefault;
+    if (Locale::getDefault() == Locale("te_IN")) {
+        Locale::setDefault(Locale("en_US"), err);
+    }
+
+    ResourceBundle  test1((UnicodeString)testdatapath, err);
+    ResourceBundle  test2(testdatapath, locale, err);
+    
+    UnicodeString   result1;
+    UnicodeString   result2;
+
+    result1 = test1.getStringEx("string_in_Root_te_te_IN", err);
+    result2 = test2.getStringEx("string_in_Root_te_te_IN", err);
+    if (U_FAILURE(err)) {
+        errln("Something threw an error in TestConstruction()");
+        return;
+    }
 
-        logln("for string_in_Root_te_te_IN, root.txt had " + result1);
-        logln("for string_in_Root_te_te_IN, te_IN.txt had " + result2);
+    logln("for string_in_Root_te_te_IN, root.txt had " + result1);
+    logln("for string_in_Root_te_te_IN, te_IN.txt had " + result2);
 
-        if (result1 != "ROOT" || result2 != "TE_IN")
-            errln("Construction test failed; run verbose for more information");
+    if (result1 != "ROOT" || result2 != "TE_IN") {
+        errln("Construction test failed; run verbose for more information");
+    }
 
-        const char* version1;
-        const char* version2;
+    const char* version1;
+    const char* version2;
 
-        version1 = test1.getVersionNumber();
-        version2 = test2.getVersionNumber();
+    version1 = test1.getVersionNumber();
+    version2 = test2.getVersionNumber();
 
-        char *versionID1 = new char[1 + strlen(U_ICU_VERSION) + strlen(version1)]; // + 1 for zero byte
-        char *versionID2 = new char[1 + strlen(U_ICU_VERSION) + strlen(version2)]; // + 1 for zero byte
+    char *versionID1 = new char[1 + strlen(U_ICU_VERSION) + strlen(version1)]; // + 1 for zero byte
+    char *versionID2 = new char[1 + strlen(U_ICU_VERSION) + strlen(version2)]; // + 1 for zero byte
 
-        strcpy(versionID1, "44.0");  // hardcoded, please change if the default.txt file or ResourceBundle::kVersionSeparater is changed.
+    strcpy(versionID1, "44.0");  // hardcoded, please change if the default.txt file or ResourceBundle::kVersionSeparater is changed.
 
-        strcpy(versionID2, "55.0");  // hardcoded, please change if the te_IN.txt file or ResourceBundle::kVersionSeparater is changed.
+    strcpy(versionID2, "55.0");  // hardcoded, please change if the te_IN.txt file or ResourceBundle::kVersionSeparater is changed.
 
-        logln(UnicodeString("getVersionNumber on default.txt returned ") + version1 + UnicodeString(" Expect: " ) + versionID1);
-        logln(UnicodeString("getVersionNumber on te_IN.txt returned ") + version2 + UnicodeString(" Expect: " ) + versionID2);
+    logln(UnicodeString("getVersionNumber on default.txt returned ") + version1 + UnicodeString(" Expect: " ) + versionID1);
+    logln(UnicodeString("getVersionNumber on te_IN.txt returned ") + version2 + UnicodeString(" Expect: " ) + versionID2);
 
-        if (strcmp(version1, versionID1) != 0 || strcmp(version2, versionID2) != 0)
-            errln("getVersionNumber() failed");
-        delete[] versionID1;
-        delete[] versionID2;
+    if (strcmp(version1, versionID1) != 0) {
+        errln("getVersionNumber(version1) failed. %s != %s", version1, versionID1);
+    }
+    if (strcmp(version2, versionID2) != 0) {
+        errln("getVersionNumber(version2) failed. %s != %s", version2, versionID2);
     }
+    delete[] versionID1;
+    delete[] versionID2;
+
+    /* Restore the default locale for the other tests. */
+    Locale::setDefault(originalDefault, err);
 }
 
 void
@@ -280,7 +314,7 @@ NewResourceBundleTest::TestIteration()
     testdatapath=loadTestData(err);
     if(U_FAILURE(err))
     {
-        errln("Could not load testdata.dat %s " + UnicodeString(u_errorName(err)));
+        dataerrln("Could not load testdata.dat %s " + UnicodeString(u_errorName(err)));
         return;
     }
 
@@ -366,29 +400,49 @@ NewResourceBundleTest::TestIteration()
             bundle.getNext(err);
             if(U_FAILURE(err)){
                 errln("ERROR: getNext()  throw an error");
-            }/**/
-
-
+            }
         }
-
-
-
     }
     delete locale;
 }
 
+// TODO: add operator== and != to ResourceBundle
+static UBool
+equalRB(ResourceBundle &a, ResourceBundle &b) {
+    UResType type;
+    UErrorCode status;
+
+    type=a.getType();
+    status=U_ZERO_ERROR;
+    return
+        type==b.getType() &&
+        a.getLocale()==b.getLocale() &&
+        0==strcmp(a.getName(), b.getName()) &&
+        type==URES_STRING ?
+            a.getString(status)==b.getString(status) :
+            type==URES_INT ?
+                a.getInt(status)==b.getInt(status) :
+                TRUE;
+}
+
 void
 NewResourceBundleTest::TestOtherAPI(){
     UErrorCode   err = U_ZERO_ERROR;
-    const char* testdatapath;
-    testdatapath=loadTestData(err);
+    const char* testdatapath=loadTestData(err);
     UnicodeString tDataPathUS = UnicodeString(testdatapath, "");
 
     if(U_FAILURE(err))
     {
-        errln("Could not load testdata.dat %s " + UnicodeString(u_errorName(err)));
+        dataerrln("Could not load testdata.dat %s " + UnicodeString(u_errorName(err)));
         return;
     }
+
+    /* Make sure that users using te_IN for the default locale don't get test failures. */
+    Locale originalDefault;
+    if (Locale::getDefault() == Locale("te_IN")) {
+        Locale::setDefault(Locale("en_US"), err);
+    }
+
     Locale       *locale=new Locale("te_IN");
 
     ResourceBundle test0(tDataPathUS, *locale, err);
@@ -412,12 +466,18 @@ NewResourceBundleTest::TestOtherAPI(){
 
     logln("Testing ResourceBundle(UErrorCode)\n");
     ResourceBundle defaultresource(err);
+    ResourceBundle explicitdefaultresource(NULL, Locale::getDefault(), err);
     if(U_FAILURE(err)){
-        errln("Construction of default resourcebundle failed");
+        errcheckln(err, "Construction of default resourcebundle failed - %s", u_errorName(err));
         return;
     }
-    if(strcmp(defaultresource.getLocale().getName(), Locale::getDefault().getName()) != 0){
-        errln("Construction of default resourcebundle didn't take the defaultlocale\n");
+    // You can't compare the default locale to the resolved locale in the
+    // resource bundle due to aliasing, keywords in the default locale
+    // or the chance that the machine running these tests is using a locale
+    // that isn't available in ICU.
+    if(strcmp(defaultresource.getLocale().getName(), explicitdefaultresource.getLocale().getName()) != 0){
+        errln("Construction of default resourcebundle didn't take the defaultlocale. Expected %s Got %s err=%s\n",
+            explicitdefaultresource.getLocale().getName(), defaultresource.getLocale().getName(), u_errorName(err));
     }
     
 
@@ -425,18 +485,31 @@ NewResourceBundleTest::TestOtherAPI(){
     if(strcmp(copyRes.getName(), defaultresource.getName() ) !=0  ||
         strcmp(test1.getName(), defaultresource.getName() ) ==0 ||
         strcmp(copyRes.getLocale().getName(), defaultresource.getLocale().getName() ) !=0  ||
-        strcmp(test1.getLocale().getName(), defaultresource.getLocale().getName() ) ==0 ){
+        strcmp(test1.getLocale().getName(), defaultresource.getLocale().getName() ) ==0 )
+    {
         errln("copy construction failed\n");
     }
 
-    ResourceBundle defaultSub = defaultresource.get(1, err);
+    ResourceBundle defaultSub = defaultresource.get((int32_t)0, err);
     ResourceBundle defSubCopy(defaultSub);
     if(strcmp(defSubCopy.getName(), defaultSub.getName() ) !=0  ||
         strcmp(defSubCopy.getLocale().getName(), defaultSub.getLocale().getName() ) !=0  ){
         errln("copy construction for subresource failed\n");
     }
 
+    ResourceBundle *p;
+
+    p = defaultresource.clone();
+    if(p == &defaultresource || !equalRB(*p, defaultresource)) {
+        errln("ResourceBundle.clone() failed");
+    }
+    delete p;
 
+    p = defaultSub.clone();
+    if(p == &defaultSub || !equalRB(*p, defaultSub)) {
+        errln("2nd ResourceBundle.clone() failed");
+    }
+    delete p;
 
     UVersionInfo ver;
     copyRes.getVersion(ver);
@@ -454,99 +527,91 @@ NewResourceBundleTest::TestOtherAPI(){
     };
 
 
-
     testCAPI = ures_open(testdatapath, "te_IN", &err);
 
     if(U_SUCCESS(err)) {
-      // Do the testing
-      // first iteration
-
-      uint32_t i;
-      int32_t count, row=0, col=0;
-      char buf[5];
-      UnicodeString expected;
-      UnicodeString element("TE_IN");
-      UnicodeString action;
-
-
-      for(i=0; i<sizeof(data)/sizeof(data[0]); i=i+2){
-          action = "te_IN";
-          action +=".get(";
-          action += data[i];
-          action +=", err)";
-          err=U_ZERO_ERROR;
-          bundle = ures_getByKey(testCAPI, data[i], bundle, &err); 
-          if(!U_FAILURE(err)){
-            const char* key = NULL;
-              action = "te_IN";
-              action +=".getKey()";
-
-              CONFIRM_EQ((UnicodeString)ures_getKey(bundle), (UnicodeString)data[i]);
-
-              count=0;
-              row=0;
-              while(ures_hasNext(bundle)){
-                  action = data[i];
-                  action +=".getNextString(err)";
-                  row=count;   
-                  UnicodeString got=ures_getNextUnicodeString(bundle, &key, &err);
-                  if(U_SUCCESS(err)){
-                      expected=element;
-                      if(ures_getSize(bundle) > 1){
-                          CONFIRM_EQ(ures_getType(bundle), URES_ARRAY);
-                          expected+=itoa(row, buf);
-                          rowbundle=ures_getByIndex(bundle, row, rowbundle, &err);
-                          if(!U_FAILURE(err) && ures_getSize(rowbundle)>1){
-                              col=0;
-                              while(ures_hasNext(rowbundle)){
-                                  expected=element;
-                                  got=ures_getNextUnicodeString(rowbundle, &key, &err);
-                                  temp = ures_getByIndex(rowbundle, col, temp, &err);
-                                  UnicodeString bla = ures_getUnicodeString(temp, &err);
-                                  UnicodeString bla2 = ures_getUnicodeStringByIndex(rowbundle, col, &err);
-                                  if(!U_FAILURE(err)){
-                                      expected+=itoa(row, buf);
-                                      expected+=itoa(col, buf);
-                                      col++;
-                                      CONFIRM_EQ(got, expected);
-                                      CONFIRM_EQ(bla, expected);
-                                      CONFIRM_EQ(bla2, expected);
-                                  }
-                              }
-                              CONFIRM_EQ(col, ures_getSize(rowbundle));
-                          }
-                      }
-                      else{
-                          CONFIRM_EQ(ures_getType(bundle), (int32_t)URES_STRING);
-                      }
-                  }
-                  CONFIRM_EQ(got, expected);
-                  count++;
-              }
-          }
-      }
-      ures_close(temp);
-      ures_close(rowbundle);
-      ures_close(bundle);
-      ures_close(testCAPI);
-    } else {
-      errln("failed to open a resource bundle\n");
-    }
-
+        // Do the testing
+        // first iteration
 
+        uint32_t i;
+        int32_t count, row=0, col=0;
+        char buf[5];
+        UnicodeString expected;
+        UnicodeString element("TE_IN");
+        UnicodeString action;
 
 
+        for(i=0; i<sizeof(data)/sizeof(data[0]); i=i+2){
+            action = "te_IN";
+            action +=".get(";
+            action += data[i];
+            action +=", err)";
+            err=U_ZERO_ERROR;
+            bundle = ures_getByKey(testCAPI, data[i], bundle, &err); 
+            if(!U_FAILURE(err)){
+                const char* key = NULL;
+                action = "te_IN";
+                action +=".getKey()";
+
+                CONFIRM_EQ((UnicodeString)ures_getKey(bundle), (UnicodeString)data[i]);
+
+                count=0;
+                row=0;
+                while(ures_hasNext(bundle)){
+                    action = data[i];
+                    action +=".getNextString(err)";
+                    row=count;   
+                    UnicodeString got=ures_getNextUnicodeString(bundle, &key, &err);
+                    if(U_SUCCESS(err)){
+                        expected=element;
+                        if(ures_getSize(bundle) > 1){
+                            CONFIRM_EQ(ures_getType(bundle), URES_ARRAY);
+                            expected+=itoa(row, buf);
+                            rowbundle=ures_getByIndex(bundle, row, rowbundle, &err);
+                            if(!U_FAILURE(err) && ures_getSize(rowbundle)>1){
+                                col=0;
+                                while(ures_hasNext(rowbundle)){
+                                    expected=element;
+                                    got=ures_getNextUnicodeString(rowbundle, &key, &err);
+                                    temp = ures_getByIndex(rowbundle, col, temp, &err);
+                                    UnicodeString bla = ures_getUnicodeString(temp, &err);
+                                    UnicodeString bla2 = ures_getUnicodeStringByIndex(rowbundle, col, &err);
+                                    if(!U_FAILURE(err)){
+                                        expected+=itoa(row, buf);
+                                        expected+=itoa(col, buf);
+                                        col++;
+                                        CONFIRM_EQ(got, expected);
+                                        CONFIRM_EQ(bla, expected);
+                                        CONFIRM_EQ(bla2, expected);
+                                    }
+                                }
+                                CONFIRM_EQ(col, ures_getSize(rowbundle));
+                            }
+                        }
+                        else{
+                            CONFIRM_EQ(ures_getType(bundle), (int32_t)URES_STRING);
+                        }
+                    }
+                    CONFIRM_EQ(got, expected);
+                    count++;
+                }
+            }
+        }
+        ures_close(temp);
+        ures_close(rowbundle);
+        ures_close(bundle);
+        ures_close(testCAPI);
+    } else {
+        errln("failed to open a resource bundle\n");
+    }
 
-
-    
-
+    /* Restore the default locale for the other tests. */
+    Locale::setDefault(originalDefault, err);
 }
 
 
 
 
-
-
 //***************************************************************************************
 
 UBool
@@ -576,7 +641,7 @@ NewResourceBundleTest::testTag(const char* frag,
     testdatapath=loadTestData(status);
     if(U_FAILURE(status))
     {
-        errln("Could not load testdata.dat %s " + UnicodeString(u_errorName(status)));
+        dataerrln("Could not load testdata.dat %s " + UnicodeString(u_errorName(status)));
         return FALSE;
     }
 
@@ -957,12 +1022,12 @@ NewResourceBundleTest::TestNewTypes() {
 
     if(U_FAILURE(status))
     {
-        logln("Could not load testdata.dat %s \n",u_errorName(status));
+        dataerrln("Could not load testdata.dat %s \n",u_errorName(status));
         return;
     }
 
     ResourceBundle theBundle(testdatapath, "testtypes", status);
-       ResourceBundle bundle(testdatapath, Locale("te_IN"),status);
+    ResourceBundle bundle(testdatapath, Locale("te_IN"),status);
 
     UnicodeString emptyStr = theBundle.getStringEx("emptystring", status);
     if(!emptyStr.length()==0) {
@@ -980,7 +1045,7 @@ NewResourceBundleTest::TestNewTypes() {
     CONFIRM_UErrorCode(status, U_ZERO_ERROR);
     CONFIRM_EQ(res.getType(), URES_STRING);
     UnicodeString zeroString=res.getString(status);
-       len = zeroString.length();
+    len = zeroString.length();
     if(U_SUCCESS(status)){
         CONFIRM_UErrorCode(status, U_ZERO_ERROR);
         CONFIRM_EQ(len, 7);
@@ -1069,10 +1134,10 @@ NewResourceBundleTest::TestNewTypes() {
         UnicodeString str = theBundle.getStringEx("testescape",status);
         CONFIRM_UErrorCode(status, U_ZERO_ERROR);
         if(U_SUCCESS(status)){
-                       u_charsToUChars(expect,uExpect,uprv_strlen(expect)+1);
+            u_charsToUChars(expect,uExpect,(int32_t)uprv_strlen(expect)+1);
             if(str.compare(uExpect)!=0){
                 errln("Did not get the expected string for testescape expected. Expected : " 
-                                       +UnicodeString(uExpect )+ " Got: " + str);
+                    +UnicodeString(uExpect )+ " Got: " + str);
             }
         }
     }
@@ -1081,13 +1146,40 @@ NewResourceBundleTest::TestNewTypes() {
         UnicodeString str = theBundle.getStringEx("test_underscores",status);
         expect ="test message ....";
         CONFIRM_UErrorCode(status, U_ZERO_ERROR);
-               u_charsToUChars(expect,uExpect,uprv_strlen(expect)+1);
+        u_charsToUChars(expect,uExpect,(int32_t)uprv_strlen(expect)+1);
         if(str.compare(uExpect)!=0){
             errln("Did not get the expected string for test_underscores.\n");
         }
     }
 
 
+}
+
+void
+NewResourceBundleTest::TestGetByFallback() {
+    UErrorCode status = U_ZERO_ERROR;
+
+    ResourceBundle heRes(NULL, "he", status);
+
+    heRes.getWithFallback("calendar", status).getWithFallback("islamic-civil", status).getWithFallback("DateTime", status);
+    if(U_SUCCESS(status)) {
+        errln("he locale's Islamic-civil DateTime resource exists. How did it get here?\n");
+    }
+    status = U_ZERO_ERROR;
+
+    heRes.getWithFallback("calendar", status).getWithFallback("islamic-civil", status).getWithFallback("eras", status);
+    if(U_FAILURE(status)) {
+        dataerrln("Didn't get Islamic Eras. I know they are there! - %s", u_errorName(status));
+    }
+    status = U_ZERO_ERROR;
+
+    ResourceBundle rootRes(NULL, "root", status);
+    rootRes.getWithFallback("calendar", status).getWithFallback("islamic-civil", status).getWithFallback("DateTime", status);
+    if(U_SUCCESS(status)) {
+        errln("Root's Islamic-civil's DateTime resource exists. How did it get here?\n");
+    }
+    status = U_ZERO_ERROR;
+
 }
 //eof