You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Marco Massenzio (JIRA)" <ji...@apache.org> on 2015/04/17 17:41:00 UTC

[jira] [Commented] (MESOS-2510) Add a function which test if a JSON object is contained in another JSON object

    [ 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)