[ https://issues.apache.org/jira/browse/MESOS-2510?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14500063#comment-14500063 ]
Marco Massenzio commented on MESOS-2510: ---------------------------------------- [~marco-mesos] to help out and review > Add a function which test if a JSON object is contained in another JSON object > ------------------------------------------------------------------------------ > > Key: MESOS-2510 > URL: https://issues.apache.org/jira/browse/MESOS-2510 > Project: Mesos > Issue Type: Wish > Components: stout > Reporter: Alexander Rojas > Assignee: Alexander Rojas > > It would be nice to check wether one json blob is contained by other blob. > i.e. given the json blob {{a}} and the blob {{b}}, {{a}} contains {{b}} if > every key {{x}} in {{b}} is also in {{a}}, and {{b\[x\] == a\[x\]}} if > {{b\[x\]}} is not a json object itself or, if it is a json object, {{a\[x\]}} > contains {{b\[x\]}}. > h3. Rationale > One of the most useful patterns while testing functions which return json, is > to write the expected result and then compare if the expected blob is equal > to the returned one: > {code} > JSON::Value expected = JSON::parse( > "{" > " \"key\" : true" > "}").get(); > JSON::Value actual = foo(); > CHECK_EQ(expected, actual); > {code} > As can be seen in the example above, it is easy to read what the expected > value is, and checking for failures if fairly easy. > It is no easy, however, to compare returned blobs which contain at least one > random values (for example time stamps), or a value which is uninteresting > for the test. In such cases it is necessary to extract each value separately > and compare them: > {code} > // Returned json: > // { > // "uptime" : 45234.123, > // "key" : true > // } > JSON::Value actual = bar(); > // I'm only interested on the "key" entry. > EXPECT_SOME_EQ(true, actual.find<JSON::String>("key")); > {code} > As seen above, is one is only interested in a subset of the keys/values pairs > returned by {{bar}} the readability of the code decreases severely. It is > worse if it weren't for the comments. > The aim is to achieve the same level of readability on the first example > while covering the case of the second: > {code} > JSON::Value expected = JSON::parse( > "{" > " \"key\" : true" > "}").get(); > // Returned json: > // { > // "uptime" : 45234.123, > // "key" : true > // } > JSON::Value actual = bar(); > // I'm only interested on the "key" entry and ignore the rest. > EXPECT_TRUE(contains(actual, expected)); > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)