| 155 | } |
| 156 | |
| 157 | bool testObject() |
| 158 | { |
| 159 | auto const subhelper = JSONHelperBuilder::Object<ObjectStruct>().Bind( |
| 160 | "subfield"_s, &ObjectStruct::Field2, IntHelper); |
| 161 | auto const helper = JSONHelperBuilder::Object<ObjectStruct>() |
| 162 | .Bind("field1"_s, &ObjectStruct::Field1, StringHelper) |
| 163 | .Bind("field2"_s, subhelper) |
| 164 | .Bind<std::string>("field3"_s, nullptr, StringHelper); |
| 165 | |
| 166 | Json::Value v(Json::objectValue); |
| 167 | cmJSONState state; |
| 168 | v["field1"] = "Hello"; |
| 169 | v["field2"] = Json::objectValue; |
| 170 | v["field2"]["subfield"] = 2; |
| 171 | v["field3"] = "world!"; |
| 172 | v["extra"] = "extra"; |
| 173 | |
| 174 | ObjectStruct s1; |
| 175 | ASSERT_TRUE(helper(s1, &v, &state)); |
| 176 | ASSERT_TRUE(s1.Field1 == "Hello"); |
| 177 | ASSERT_TRUE(s1.Field2 == 2); |
| 178 | |
| 179 | v["field2"]["subfield"] = "wrong"; |
| 180 | ObjectStruct s2; |
| 181 | ASSERT_TRUE(!helper(s2, &v, &state)); |
| 182 | |
| 183 | v["field2"].removeMember("subfield"); |
| 184 | ObjectStruct s3; |
| 185 | ASSERT_TRUE(!helper(s3, &v, &state)); |
| 186 | |
| 187 | v.removeMember("field2"); |
| 188 | ObjectStruct s4; |
| 189 | ASSERT_TRUE(!helper(s4, &v, &state)); |
| 190 | |
| 191 | v["field2"] = Json::objectValue; |
| 192 | v["field2"]["subfield"] = 2; |
| 193 | v["field3"] = 3; |
| 194 | ObjectStruct s5; |
| 195 | ASSERT_TRUE(!helper(s5, &v, &state)); |
| 196 | |
| 197 | v.removeMember("field3"); |
| 198 | ObjectStruct s6; |
| 199 | ASSERT_TRUE(!helper(s6, &v, &state)); |
| 200 | |
| 201 | v = "Hello"; |
| 202 | ObjectStruct s7; |
| 203 | ASSERT_TRUE(!helper(s7, &v, &state)); |
| 204 | |
| 205 | ObjectStruct s8; |
| 206 | ASSERT_TRUE(!helper(s8, nullptr, &state)); |
| 207 | |
| 208 | return true; |
| 209 | } |
| 210 | |
| 211 | bool testObjectInherited() |
| 212 | { |
nothing calls this directly
no test coverage detected
searching dependent graphs…