VirtualBox

Changeset 74176 in vbox for trunk/src/VBox/Runtime/testcase


Ignore:
Timestamp:
Sep 10, 2018 9:44:58 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
124949
Message:

IPRT/rest: Added unittest for RTCRestString. Addressing a few issues. bugref:9167

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/testcase/tstRTCRest-1.cpp

    r74170 r74176  
    855855
    856856
     857void testString(const char *pszDummy, ...)
     858{
     859    RTTestSub(g_hTest, "RTCRestString");
     860
     861    {
     862        RTCRestString obj1;
     863        RTTESTI_CHECK(obj1.isEmpty());
     864        RTTESTI_CHECK(obj1.isNull() == false);
     865        RTTESTI_CHECK(strcmp(obj1.typeName(), "RTCString") == 0);
     866        RTTESTI_CHECK(obj1.typeClass() == RTCRestObjectBase::kTypeClass_String);
     867    }
     868
     869    {
     870        RTCRestString obj2(RTCString("2398.1"));
     871        RTTESTI_CHECK(obj2 == "2398.1");
     872        RTTESTI_CHECK(obj2.isNull() == false);
     873    }
     874
     875    {
     876        RTCRestString obj2("-7345.2");
     877        RTTESTI_CHECK(obj2 == "-7345.2");
     878        RTTESTI_CHECK(obj2.isNull() == false);
     879    }
     880
     881    {
     882        /* Value assignments: */
     883        RTCRestString obj3;
     884        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     885        RTTESTI_CHECK(obj3.isNull() == true);
     886        RTTESTI_CHECK(obj3.isEmpty());
     887        obj3 = "-1.0";
     888        RTTESTI_CHECK(obj3 == "-1.0");
     889        RTTESTI_CHECK(obj3.isNull() == false);
     890
     891        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     892        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     893        obj3 = RTCString("-2.0");
     894        RTTESTI_CHECK(obj3 == "-2.0");
     895        RTTESTI_CHECK(obj3.isNull() == false);
     896
     897        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     898        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     899        obj3 = RTCRestString("-3.0");
     900        RTTESTI_CHECK(obj3 == "-3.0");
     901        RTTESTI_CHECK(obj3.isNull() == false);
     902
     903        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     904        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     905        RTTESTI_CHECK_RC(obj3.assignNoThrow(RTCRestString("4.0")), VINF_SUCCESS);
     906        RTTESTI_CHECK(obj3 == "4.0");
     907        RTTESTI_CHECK(obj3.isNull() == false);
     908
     909        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     910        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     911        RTTESTI_CHECK_RC(obj3.assignNoThrow("-4.0"), VINF_SUCCESS);
     912        RTTESTI_CHECK(obj3 == "-4.0");
     913        RTTESTI_CHECK(obj3.isNull() == false);
     914
     915        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     916        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     917        RTTESTI_CHECK_RC(obj3.assignNoThrow(RTCRestString("0123456789"), 3, 5), VINF_SUCCESS);
     918        RTTESTI_CHECK(obj3 == "34567");
     919        RTTESTI_CHECK(obj3.isNull() == false);
     920
     921        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     922        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     923        RTTESTI_CHECK_RC(obj3.assignNoThrow("0123456789", 4), VINF_SUCCESS);
     924        RTTESTI_CHECK(obj3 == "0123");
     925        RTTESTI_CHECK(obj3.isNull() == false);
     926
     927        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     928        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     929        RTTESTI_CHECK_RC(obj3.assignNoThrow(8, 'x'), VINF_SUCCESS);
     930        RTTESTI_CHECK(obj3 == "xxxxxxxx");
     931        RTTESTI_CHECK(obj3.isNull() == false);
     932
     933        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     934        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     935        RTTESTI_CHECK_RC(obj3.printfNoThrow("%d%s%d", 42, "asdf", 22), VINF_SUCCESS);
     936        RTTESTI_CHECK(obj3 == "42asdf22");
     937        RTTESTI_CHECK(obj3.isNull() == false);
     938
     939        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     940        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     941        va_list va;
     942        va_start(va, pszDummy);
     943        RTTESTI_CHECK_RC(obj3.printfVNoThrow("asdf", va), VINF_SUCCESS);
     944        va_end(va);
     945        RTTESTI_CHECK(obj3 == "asdf");
     946        RTTESTI_CHECK(obj3.isNull() == false);
     947
     948        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     949        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     950        obj3.assign(RTCRestString("4.0"));
     951        RTTESTI_CHECK(obj3 == "4.0");
     952        RTTESTI_CHECK(obj3.isNull() == false);
     953
     954        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     955        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     956        obj3.assign("-4.0");
     957        RTTESTI_CHECK(obj3 == "-4.0");
     958        RTTESTI_CHECK(obj3.isNull() == false);
     959
     960        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     961        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     962        obj3.assign(RTCRestString("0123456789"), 3, 5);
     963        RTTESTI_CHECK(obj3 == "34567");
     964        RTTESTI_CHECK(obj3.isNull() == false);
     965
     966        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     967        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     968        obj3.assign("0123456789", 4);
     969        RTTESTI_CHECK(obj3 == "0123");
     970        RTTESTI_CHECK(obj3.isNull() == false);
     971
     972        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     973        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     974        obj3.assign(8, 'x');
     975        RTTESTI_CHECK(obj3 == "xxxxxxxx");
     976        RTTESTI_CHECK(obj3.isNull() == false);
     977
     978        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     979        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     980        obj3.printf("%d%s%d", 42, "asdf", 22);
     981        RTTESTI_CHECK(obj3 == "42asdf22");
     982        RTTESTI_CHECK(obj3.isNull() == false);
     983
     984        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     985        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     986        va_start(va, pszDummy);
     987        obj3.printfV("asdf", va);
     988        va_end(va);
     989        RTTESTI_CHECK(obj3 == "asdf");
     990        RTTESTI_CHECK(obj3.isNull() == false);
     991
     992        /* Copy assignments: */
     993        RTCRestString const obj3Max("max");
     994        RTTESTI_CHECK(obj3Max == "max");
     995        RTTESTI_CHECK(obj3Max.isNull() == false);
     996        RTCRestString obj3Null;
     997        obj3Null.setNull();
     998        RTTESTI_CHECK(obj3Null.isEmpty());
     999        RTTESTI_CHECK(obj3Null.isNull() == true);
     1000        RTCRestString obj3Empty;
     1001        RTTESTI_CHECK(obj3Empty.isEmpty());
     1002        RTTESTI_CHECK(obj3Empty.isNull() == false);
     1003
     1004        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     1005        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     1006        RTTESTI_CHECK_RC(obj3.assignCopy(obj3Max), VINF_SUCCESS);
     1007        RTTESTI_CHECK(obj3 == "max");
     1008        RTTESTI_CHECK(obj3.isNull() == false);
     1009
     1010        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     1011        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     1012        RTTESTI_CHECK_RC(obj3.assignCopy(obj3Null), VINF_SUCCESS);
     1013        RTTESTI_CHECK(obj3.isEmpty());
     1014        RTTESTI_CHECK(obj3.isNull() == true);
     1015
     1016        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     1017        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     1018        RTTESTI_CHECK_RC(obj3.assignCopy(obj3Empty), VINF_SUCCESS);
     1019        RTTESTI_CHECK(obj3 == "");
     1020        RTTESTI_CHECK(obj3.isEmpty());
     1021        RTTESTI_CHECK(obj3.isNull() == false);
     1022
     1023        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     1024        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     1025        RTTESTI_CHECK_RC(obj3.assignCopy(RTCString("11.0")), VINF_SUCCESS);
     1026        RTTESTI_CHECK(obj3 == "11.0");
     1027        RTTESTI_CHECK(obj3.isNull() == false);
     1028
     1029        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     1030        RTTESTI_CHECK(obj3.isNull() == true && obj3.isEmpty());
     1031        RTTESTI_CHECK_RC(obj3.assignCopy("12.0"), VINF_SUCCESS);
     1032        RTTESTI_CHECK(obj3 == "12.0");
     1033        RTTESTI_CHECK(obj3.isNull() == false);
     1034
     1035        /* setNull implies resetToDefault: */
     1036        obj3 = obj3Max;
     1037        RTTESTI_CHECK(obj3 == "max");
     1038        RTTESTI_CHECK(obj3.isNull() == false);
     1039        RTTESTI_CHECK_RC(obj3.setNull(), VINF_SUCCESS);
     1040        RTTESTI_CHECK(obj3.isNull() == true);
     1041        RTTESTI_CHECK(obj3.isEmpty());
     1042
     1043        /* Copy constructors: */
     1044        {
     1045            RTCRestString obj3a(obj3Max);
     1046            RTTESTI_CHECK(obj3a == "max");
     1047            RTTESTI_CHECK(obj3a.isNull() == false);
     1048        }
     1049        {
     1050            RTCRestString const obj3c(obj3Null);
     1051            RTTESTI_CHECK(obj3c.isEmpty());
     1052            RTTESTI_CHECK(obj3c.isNull() == true);
     1053        }
     1054
     1055        /* Serialization to json: */
     1056        const char *pszJson = toJson(&obj3Max);
     1057        RTTESTI_CHECK_MSG(strcmp(pszJson, "\"max\"") == 0, ("pszJson=%s\n", pszJson));
     1058        pszJson = toJson(&obj3Null);
     1059        RTTESTI_CHECK_MSG(strcmp(pszJson, "null") == 0, ("pszJson=%s\n", pszJson));
     1060        pszJson = toJson(&obj3Empty);
     1061        RTTESTI_CHECK_MSG(strcmp(pszJson, "\"\"") == 0, ("pszJson=%s\n", pszJson));
     1062
     1063        /* Serialization to string. */
     1064        RTCString str;
     1065        RTCString strExpect;
     1066        str = "lead-in:";
     1067        RTTESTI_CHECK_RC(obj3Max.toString(&str, RTCRestObjectBase::kToString_Append), VINF_SUCCESS);
     1068        RTTESTI_CHECK_MSG(str.equals("lead-in:max"), ("str=%s\n", str.c_str()));
     1069        RTTESTI_CHECK_RC(obj3Max.toString(&str), VINF_SUCCESS);
     1070        RTTESTI_CHECK_MSG(str.equals("max"), ("str=%s\n", str.c_str()));
     1071
     1072        str = "lead-in:";
     1073        RTTESTI_CHECK_RC(obj3Empty.toString(&str, RTCRestObjectBase::kToString_Append), VINF_SUCCESS);
     1074        RTTESTI_CHECK_MSG(str.equals("lead-in:"), ("str=%s\n", str.c_str()));
     1075        RTTESTI_CHECK_RC(obj3Empty.toString(&str), VINF_SUCCESS);
     1076        RTTESTI_CHECK_MSG(str.equals(""), ("str=%s\n", str.c_str()));
     1077
     1078        str = "lead-in:";
     1079        RTTESTI_CHECK_RC(obj3Null.toString(&str, RTCRestObjectBase::kToString_Append), VINF_SUCCESS);
     1080        RTTESTI_CHECK_MSG(str.equals("lead-in:"), ("str=%s\n", str.c_str()));
     1081        RTTESTI_CHECK_RC(obj3Null.toString(&str), VINF_SUCCESS);
     1082        RTTESTI_CHECK_MSG(str.equals(""), ("str=%s\n", str.c_str()));
     1083    }
     1084
     1085    /* deserialize: */
     1086    RTERRINFOSTATIC ErrInfo;
     1087    {
     1088        /* from json: */
     1089        RTCRestString obj4;
     1090        obj4.setNull();
     1091        RTTESTI_CHECK_RC(deserializeFromJson(&obj4, "\"42.42\"", &ErrInfo, RT_XSTR(__LINE__)), VINF_SUCCESS);
     1092        RTTESTI_CHECK(obj4 == "42.42");
     1093        RTTESTI_CHECK(obj4.isNull() == false);
     1094
     1095        obj4.setNull();
     1096        RTTESTI_CHECK_RC(deserializeFromJson(&obj4, "\"-22.22\"", &ErrInfo, RT_XSTR(__LINE__)), VINF_SUCCESS);
     1097        RTTESTI_CHECK(obj4 == "-22.22");
     1098        RTTESTI_CHECK(obj4.isNull() == false);
     1099
     1100        obj4.setNull();
     1101        RTTESTI_CHECK_RC(deserializeFromJson(&obj4, "\"maximum\"", &ErrInfo, RT_XSTR(__LINE__)), VINF_SUCCESS);
     1102        RTTESTI_CHECK(obj4 == "maximum");
     1103        RTTESTI_CHECK(obj4.isNull() == false);
     1104
     1105        RTTESTI_CHECK_RC(deserializeFromJson(&obj4, "null", &ErrInfo, RT_XSTR(__LINE__)), VINF_SUCCESS);
     1106        RTTESTI_CHECK(obj4.isEmpty());
     1107        RTTESTI_CHECK(obj4.isNull() == true);
     1108
     1109        obj4.setNull();
     1110        RTTESTI_CHECK_RC(deserializeFromJson(&obj4, "\"\\u0020\"", &ErrInfo, RT_XSTR(__LINE__)), VINF_SUCCESS);
     1111        RTTESTI_CHECK(obj4 == " ");
     1112        RTTESTI_CHECK(obj4.isNull() == false);
     1113
     1114        obj4.setNull();
     1115        RTTESTI_CHECK_RC(deserializeFromJson(&obj4, "\"\\u004f\\u004D\\u0047\\u0021 :-)\"",
     1116                                             &ErrInfo, RT_XSTR(__LINE__)), VINF_SUCCESS);
     1117        RTTESTI_CHECK(obj4 == "OMG! :-)");
     1118        RTTESTI_CHECK(obj4.isNull() == false);
     1119
     1120        /* object goes to default state on failure: */
     1121        obj4 = "asdf";
     1122        RTTESTI_CHECK_RC(deserializeFromJson(&obj4, "false", &ErrInfo, RT_XSTR(__LINE__)), VERR_REST_WRONG_JSON_TYPE_FOR_STRING);
     1123        RTTESTI_CHECK(obj4.isEmpty());
     1124        RTTESTI_CHECK(obj4.isNull() == false);
     1125        RTTESTI_CHECK(RTErrInfoIsSet(&ErrInfo.Core));
     1126
     1127        obj4 = "asdf";
     1128        RTTESTI_CHECK_RC(deserializeFromJson(&obj4, "1", &ErrInfo, RT_XSTR(__LINE__)), VERR_REST_WRONG_JSON_TYPE_FOR_STRING);
     1129        RTTESTI_CHECK(obj4.isEmpty());
     1130        RTTESTI_CHECK(obj4.isNull() == false);
     1131        RTTESTI_CHECK(RTErrInfoIsSet(&ErrInfo.Core));
     1132
     1133        obj4.setNull();
     1134        RTTESTI_CHECK_RC(deserializeFromJson(&obj4, "[ null ]", NULL, RT_XSTR(__LINE__)), VERR_REST_WRONG_JSON_TYPE_FOR_STRING);
     1135        RTTESTI_CHECK(obj4.isEmpty());
     1136        RTTESTI_CHECK(obj4.isNull() == false);
     1137
     1138        /* from string: */
     1139        obj4.setNull();
     1140        RTTESTI_CHECK_RC(fromString(&obj4, "22.42", &ErrInfo, RT_XSTR(__LINE__)), VINF_SUCCESS);
     1141        RTTESTI_CHECK(obj4 == "22.42");
     1142        RTTESTI_CHECK(obj4.isNull() == false);
     1143
     1144        RTTESTI_CHECK_RC(fromString(&obj4, "-42.22", &ErrInfo, RT_XSTR(__LINE__)), VINF_SUCCESS);
     1145        RTTESTI_CHECK(obj4 == "-42.22");
     1146        RTTESTI_CHECK(obj4.isNull() == false);
     1147
     1148        obj4.setNull();
     1149        RTTESTI_CHECK_RC(fromString(&obj4, "null", &ErrInfo, RT_XSTR(__LINE__)), VINF_SUCCESS);
     1150        RTTESTI_CHECK(obj4 == "null");
     1151        RTTESTI_CHECK(obj4.isNull() == false);
     1152    }
     1153}
     1154
     1155
    8571156int main()
    8581157{
     
    8651164        testInteger<RTCRestInt16, int16_t, Int16Constants>();
    8661165        testDouble();
    867 
     1166        testString("dummy", 1, 2);
    8681167
    8691168        rcExit = RTTestSummaryAndDestroy(g_hTest);
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette