[
https://issues.apache.org/jira/browse/MESOS-2510?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14365552#comment-14365552
]
Alexander Rojas edited comment on MESOS-2510 at 3/18/15 10:50 AM:
------------------------------------------------------------------
https://reviews.apache.org/r/32198/
https://reviews.apache.org/r/32163/
was (Author: arojas):
https://reviews.apache.org/r/32163/
> 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)