Web Wispers 1.2.2 C++ Unit Test Coverage
Current view: top level - tests/wispers/utility - PropertiesTest.cc (source / functions) Hit Total Coverage
Test: Web Wispers 1.2.2 C++ Unit Tests Lines: 185 185 100.0 %
Date: 2012-04-09 Functions: 30 31 96.8 %
Branches: 706 1442 49.0 %

           Branch data     Line data    Source code
       1                 :            : /* Copyright 2006-2009 Savarese Software Research Corporation
       2                 :            :  *
       3                 :            :  * Licensed under the Apache License, Version 2.0 (the "License");
       4                 :            :  * you may not use this file except in compliance with the License.
       5                 :            :  * You may obtain a copy of the License at
       6                 :            :  *
       7                 :            :  *     https://www.savarese.com/software/ApacheLicense-2.0
       8                 :            :  *
       9                 :            :  * Unless required by applicable law or agreed to in writing, software
      10                 :            :  * distributed under the License is distributed on an "AS IS" BASIS,
      11                 :            :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      12                 :            :  * See the License for the specific language governing permissions and
      13                 :            :  * limitations under the License.
      14                 :            :  */
      15                 :            : 
      16                 :            : #include <ssrc/wispers/utility/PropertiesToString.h>
      17                 :            : #include <ssrc/wisp/serialization.h>
      18                 :            : 
      19                 :            : #define BOOST_TEST_MODULE PropertiesTest
      20                 :            : #include <boost/test/unit_test.hpp>
      21                 :            : 
      22                 :            : using namespace NS_SSRC_WSPR_UTILITY;
      23                 :            : 
      24   [ +  -  +  - ]:          3 : BOOST_AUTO_TEST_CASE(test_set) {
      25                 :          2 :   Properties props;
      26                 :            : 
      27         [ +  - ]:          1 :   props.set(1, "a");
      28         [ +  - ]:          1 :   props.set(2, "a", "b");
      29                 :            : 
      30   [ +  -  +  -  :          1 :   Properties *node = props.find("a");
                   +  - ]
      31   [ +  -  +  -  :          1 :   BOOST_CHECK(node != 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      32   [ +  -  +  -  :          1 :   BOOST_CHECK(node->get<int>() == 1);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
      33                 :            : 
      34         [ +  - ]:          1 :   int *v = node->get_ptr<int>();
      35                 :            : 
      36   [ +  -  +  -  :          1 :   BOOST_CHECK(v != 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      37   [ +  -  +  -  :          1 :   BOOST_CHECK_EQUAL(*v, 1);
          +  -  +  -  +  
                -  -  + ]
      38                 :            : 
      39         [ +  - ]:          1 :   unsigned int *uv = node->get_ptr<unsigned int>();
      40                 :            : 
      41   [ +  -  +  -  :          1 :   BOOST_CHECK(uv == 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      42                 :            : 
      43   [ +  -  +  -  :          1 :   node = props.find("a", "b");
                   +  - ]
      44   [ +  -  +  -  :          1 :   BOOST_CHECK(node != 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      45   [ +  -  +  -  :          1 :   BOOST_CHECK(node->get<int>() == 2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
      46                 :            : 
      47   [ +  -  +  -  :          1 :   node = props.find("c", "d");
                   +  - ]
      48   [ +  -  +  -  :          1 :   BOOST_CHECK(node == 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      49                 :            : 
      50         [ +  - ]:          1 :   props.set(3, "c", "d", "e");
      51                 :            : 
      52   [ +  -  +  -  :          1 :   node = props.find("c", "d", "e");
                   +  - ]
      53   [ +  -  +  -  :          1 :   BOOST_CHECK(node != 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      54   [ +  -  +  -  :          1 :   BOOST_CHECK(node->get<int>() == 3);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
      55                 :            : 
      56   [ +  -  +  -  :          1 :   node = props.find("c", "d");
                   +  - ]
      57   [ +  -  +  -  :          1 :   BOOST_CHECK(node != 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      58   [ +  -  +  -  :          1 :   BOOST_CHECK(node->value() == 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      59                 :            : 
      60         [ +  - ]:          1 :   props.set(4, "c", "d");
      61                 :            : 
      62   [ +  -  +  -  :          1 :   BOOST_CHECK(node->value() != 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      63   [ +  -  +  -  :          1 :   BOOST_CHECK(node->get<int>() == 4);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
      64                 :            : 
      65   [ +  -  +  -  :          1 :   node->set_value(5);
                   +  - ]
      66   [ +  -  +  -  :          1 :   BOOST_CHECK(node->get<int>() == 5);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
      67                 :          1 : }
      68                 :            : 
      69   [ +  -  +  - ]:          3 : BOOST_AUTO_TEST_CASE(test_erase) {
      70                 :          2 :   Properties props;
      71                 :            : 
      72         [ +  - ]:          1 :   props.set(1, "a");
      73         [ +  - ]:          1 :   props.set(2, "a", "b");
      74         [ +  - ]:          1 :   props.set(5, "c", "d", "e");
      75                 :            : 
      76   [ +  -  +  -  :          1 :   Properties *node = props.find("c", "d", "e");
                   +  - ]
      77                 :            : 
      78   [ +  -  +  -  :          1 :   BOOST_CHECK(node != 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      79   [ +  -  +  -  :          1 :   BOOST_CHECK(node->get<int>() == 5);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
      80                 :            : 
      81   [ +  -  +  -  :          1 :   BOOST_CHECK(props.erase("c", "d", "e") == 1);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  -  + ]
      82   [ +  -  +  -  :          1 :   BOOST_CHECK(props.find("c", "d", "e") == 0);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  -  + ]
      83                 :            : 
      84   [ +  -  +  -  :          1 :   node = props.find("a");
                   +  - ]
      85   [ +  -  +  -  :          1 :   BOOST_CHECK(node != 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      86   [ +  -  +  -  :          1 :   BOOST_CHECK(node->get<int>() == 1);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
      87                 :            : 
      88   [ +  -  +  -  :          1 :   node = props.find("a", "b");
                   +  - ]
      89   [ +  -  +  -  :          1 :   BOOST_CHECK(node != 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
      90   [ +  -  +  -  :          1 :   BOOST_CHECK(node->get<int>() == 2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
      91                 :            : 
      92   [ +  -  +  -  :          1 :   BOOST_CHECK(props.erase("a") == 1);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  -  + ]
      93   [ +  -  +  -  :          1 :   BOOST_CHECK(props.find("a") == 0);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  -  + ]
      94   [ +  -  +  -  :          1 :   BOOST_CHECK(props.find("a", "b") == 0);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  -  + ]
      95                 :            : 
      96   [ +  -  +  -  :          1 :   BOOST_CHECK(props.erase("a", "b") == 0);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  -  + ]
      97                 :          1 : }
      98                 :            : 
      99   [ +  -  +  - ]:          3 : BOOST_AUTO_TEST_CASE(test_prop_get) {
     100                 :          2 :   Properties props;
     101                 :            : 
     102         [ +  - ]:          1 :   props.set(10u, "a");
     103   [ +  -  +  -  :          1 :   BOOST_CHECK(props.get<unsigned int>(0, "a") == 10);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     104   [ +  -  +  -  :          1 :   BOOST_CHECK(props.get<int>(0, "a") == 0);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     105   [ +  -  +  -  :          1 :   BOOST_CHECK(props.get<unsigned int>(9, "b") == 9);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     106                 :            : 
     107         [ +  - ]:          1 :   unsigned int *uv = props.get_ptr<unsigned int>("a");
     108                 :            : 
     109   [ +  -  +  -  :          1 :   BOOST_CHECK(uv != 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
     110   [ +  -  +  -  :          1 :   BOOST_CHECK(*uv == 10);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
     111                 :            : 
     112         [ +  - ]:          1 :   int *iv = props.get_ptr<int>("b");
     113                 :            : 
     114   [ +  -  +  -  :          1 :   BOOST_CHECK(iv == 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
     115                 :            : 
     116                 :            :   // Test const char * to string.
     117         [ +  - ]:          1 :   props.set("foo", "c", "d");
     118   [ +  -  +  -  :          1 :   BOOST_CHECK(props.get<string>("", "c", "d") == "foo");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  -  
                      + ]
     119                 :            :   // Test set double.
     120         [ +  - ]:          1 :   props.set(3.3f, "d", "e");
     121   [ +  -  +  -  :          1 :   BOOST_CHECK(props.get<double>(1.0, "d", "e") == 3.3f);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     122                 :          1 : }
     123                 :            : 
     124   [ +  -  +  - ]:          3 : BOOST_AUTO_TEST_CASE(test_prop_va_set) {
     125                 :          2 :   Properties props;
     126   [ +  -  +  -  :          2 :   string a("a"), b("b"), c("c");
          +  -  +  -  +  
                -  +  - ]
     127                 :            : 
     128         [ +  - ]:          1 :   props.va_set(10u, &a, &b, &c, static_cast<string *>(0));
     129   [ +  -  +  -  :          1 :   BOOST_CHECK(props.get<unsigned int>(0, "a", "b", "c") == 10u);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     130                 :          1 : }
     131                 :            : 
     132   [ +  -  +  - ]:          3 : BOOST_AUTO_TEST_CASE(test_prop_va_find) {
     133                 :          2 :   Properties props;
     134   [ +  -  +  -  :          2 :   string a("a"), b("b");
             +  -  +  - ]
     135                 :          1 :   const string * null = static_cast<string *>(0);
     136                 :            : 
     137         [ +  - ]:          1 :   props.set(10u, "a");
     138                 :            : 
     139         [ +  - ]:          1 :   Properties *tree = props.va_find(&a, null);
     140                 :            : 
     141   [ +  -  +  -  :          1 :   BOOST_CHECK(tree != 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
     142   [ +  -  +  -  :          1 :   BOOST_CHECK(tree->get<unsigned int>() == 10u);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     143                 :            : 
     144         [ +  - ]:          1 :   tree = props.va_find(&b, null);
     145                 :            : 
     146   [ +  -  +  -  :          1 :   BOOST_CHECK(tree == 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
     147                 :          1 : }
     148                 :            : 
     149   [ +  -  +  - ]:          3 : BOOST_AUTO_TEST_CASE(test_prop_serialize) {
     150                 :            :   using ssrc::wisp::Packer;
     151                 :            :   using ssrc::wisp::Unpacker;
     152                 :            :   using ssrc::spread::detail::ByteBuffer;
     153                 :            : 
     154                 :          2 :   ByteBuffer buffer(4096);;
     155   [ +  -  +  - ]:          2 :   Packer<boost::archive::binary_oarchive> packer;
     156   [ +  -  +  - ]:          2 :   Unpacker<boost::archive::binary_iarchive> unpacker;
     157   [ +  -  +  -  :          2 :   Properties oprops, iprops;
             +  -  +  - ]
     158                 :            : 
     159         [ +  - ]:          1 :   oprops.set(11u, "a", "b", "c");
     160                 :            : 
     161                 :            :   primitive_property_vector & ppv =
     162         [ +  - ]:          1 :     oprops.create_primitive_property_vector("c", "d");
     163         [ +  - ]:          1 :   property_vector & pv = oprops.create_property_vector("e", "f");
     164                 :            : 
     165         [ +  + ]:         11 :   for(int i = 0; i < 10; ++i) {
     166   [ +  -  +  - ]:         10 :     Properties *node = new Properties;
     167         [ +  - ]:         10 :     node->set(i, "foo");
     168         [ +  - ]:         10 :     pv.push_back(node);
     169   [ +  -  +  -  :         10 :     ppv.push_back(1);
                   +  - ]
     170                 :            :   }
     171                 :            : 
     172   [ +  -  +  -  :          1 :   BOOST_CHECK_NO_THROW(packer.pack(oprops, buffer));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  -  +  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
     173                 :            : 
     174   [ +  -  +  -  :          1 :   BOOST_CHECK(iprops.get<unsigned int>(4u, "a", "b", "c") == 4u);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     175                 :            : 
     176         [ +  - ]:          1 :   buffer.rewind();
     177                 :            : 
     178   [ +  -  +  -  :          1 :   BOOST_CHECK_NO_THROW(unpacker.unpack(iprops, buffer));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  -  +  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
     179                 :            : 
     180         [ +  - ]:          1 :   oprops.set(12u, "a", "b", "c");
     181                 :            : 
     182   [ +  -  +  -  :          1 :   BOOST_CHECK(iprops.get<unsigned int>(2u, "a", "b", "c") == 11u);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     183                 :          1 : }
     184                 :            : 
     185                 :            : class AddProps {
     186                 :            :   mutable unsigned int _total;
     187                 :            : 
     188                 :            : public:
     189                 :          1 :   AddProps() : _total(0) { }
     190                 :            : 
     191                 :          2 :   unsigned int total() const { return _total; }
     192                 :            : 
     193                 :            :   void reset() const { _total = 0; }
     194                 :            : 
     195                 :          5 :   void enter(const std::string & key, const Properties *props,
     196                 :            :              const bool) const
     197                 :            :   {
     198         [ +  + ]:          5 :     if(props->is_leaf()) {
     199                 :          2 :       _total+=props->get<unsigned int>();
     200                 :            :     }
     201                 :          5 :   }
     202                 :            : 
     203                 :          5 :   void leave(const std::string & key, const Properties *props,
     204                 :            :              const bool) const
     205                 :          5 :   { }
     206                 :            : };
     207                 :            : 
     208   [ +  -  +  - ]:          3 : BOOST_AUTO_TEST_CASE(test_prop_visit) {
     209                 :          2 :   Properties props;
     210                 :          1 :   AddProps sum;
     211                 :            : 
     212         [ +  - ]:          1 :   props.set(11u, "a", "b", "c");
     213         [ +  - ]:          1 :   props.set(15u, "c", "d");
     214                 :            : 
     215   [ +  -  +  -  :          1 :   BOOST_CHECK_EQUAL(sum.total(), 0u);
          +  -  +  -  +  
                -  -  + ]
     216                 :            : 
     217         [ +  - ]:          1 :   props.visit(sum);
     218                 :            : 
     219   [ +  -  +  -  :          1 :   BOOST_CHECK_EQUAL(sum.total(), 26u);
          +  -  +  -  +  
                -  -  + ]
     220                 :          1 : }
     221                 :            : 
     222   [ +  -  +  - ]:          3 : BOOST_AUTO_TEST_CASE(test_prop_equal) {
     223   [ +  -  +  - ]:          2 :   Properties props1, props2;
     224                 :            : 
     225         [ +  - ]:          1 :   props1.set(11u, "a", "b", "c");
     226         [ +  - ]:          1 :   props1.set(15u, "c", "d");
     227                 :            : 
     228   [ +  -  +  -  :          1 :   BOOST_CHECK(!(props1 == props2));
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     229                 :            : 
     230         [ +  - ]:          1 :   props2.set(11u, "a", "b", "c");
     231         [ +  - ]:          1 :   props2.set(15u, "c", "d");
     232                 :            : 
     233   [ +  -  +  -  :          1 :   BOOST_CHECK(props1 == props2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     234                 :          1 : }
     235                 :            : 
     236   [ +  -  +  - ]:          3 : BOOST_AUTO_TEST_CASE(test_prop_merge) {
     237   [ +  -  +  -  :          2 :   Properties props1, props2, props3, props4, props5;
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     238                 :            : 
     239         [ +  - ]:          1 :   props1.set(11u, "a", "b", "c");
     240         [ +  - ]:          1 :   props1.set(15u, "c", "d");
     241         [ +  - ]:          1 :   props1.set(3u, "f", "g");
     242         [ +  - ]:          1 :   props1.set(18u, "j", "l");
     243         [ +  - ]:          1 :   props1.set(19u, "k", "o", "m");
     244                 :            : 
     245         [ +  - ]:          1 :   props2.set(13u, "a", "b", "e");
     246         [ +  - ]:          1 :   props2.set(2u, "b", "e");
     247         [ +  - ]:          1 :   props2.set(16u, "c", "d");
     248                 :            : 
     249         [ +  - ]:          1 :   props3.set(11u, "a", "b", "c");
     250         [ +  - ]:          1 :   props3.set(2u, "b", "e");
     251         [ +  - ]:          1 :   props3.set(13u, "a", "b", "e");
     252         [ +  - ]:          1 :   props3.set(16u, "c", "d");
     253         [ +  - ]:          1 :   props3.set(3u, "f", "g");
     254         [ +  - ]:          1 :   props3.set(18u, "j", "l");
     255         [ +  - ]:          1 :   props3.set(19u, "k", "o", "m");
     256                 :            : 
     257   [ +  -  +  -  :          1 :   BOOST_CHECK(!(props4 == props2));
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     258   [ +  -  +  -  :          1 :   BOOST_CHECK(!(props5 == props1));
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     259                 :            : 
     260         [ +  - ]:          1 :   props5.merge(props1);
     261         [ +  - ]:          1 :   props4.merge(props2);
     262                 :            : 
     263   [ +  -  +  -  :          1 :   BOOST_CHECK(props4 == props2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     264   [ +  -  +  -  :          1 :   BOOST_CHECK(props5 == props1);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     265                 :            : 
     266   [ +  -  +  -  :          1 :   BOOST_CHECK(!(props1 == props3));
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     267   [ +  -  +  -  :          1 :   BOOST_CHECK(!(props5 == props3));
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     268                 :            : 
     269         [ +  - ]:          1 :   props5.merge(props2);
     270   [ +  -  +  - ]:          1 :   props1.merge(std::move(props2));
     271                 :            : 
     272   [ +  -  +  -  :          1 :   BOOST_CHECK(props1 == props3);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     273   [ +  -  +  -  :          1 :   BOOST_CHECK(props5 == props3);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     274   [ +  -  +  -  :          1 :   BOOST_CHECK(props5 == props1);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     275   [ +  -  +  -  :          1 :   BOOST_CHECK(!(props4 == props2));
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     276   [ +  -  +  -  :          1 :   BOOST_CHECK(props1.get<unsigned int>(0, "b", "e") == 2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     277   [ +  -  +  -  :          1 :   BOOST_CHECK(props5.get<unsigned int>(0, "b", "e") == 2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  -  + ]
     278                 :          1 : }
     279                 :            : 
     280   [ +  -  +  - ]:          3 : BOOST_AUTO_TEST_CASE(test_prop_to_string) {
     281                 :          2 :   Properties props;
     282                 :            : 
     283         [ +  - ]:          1 :   props.set(11u, "a", "b", "c");
     284                 :            : 
     285                 :            :   primitive_property_vector & ppv =
     286         [ +  - ]:          1 :     props.create_primitive_property_vector("c", "d");
     287         [ +  - ]:          1 :   property_vector & pv = props.create_property_vector("e", "f");
     288                 :            : 
     289         [ +  + ]:         11 :   for(int i = 0; i < 10; ++i) {
     290   [ +  -  +  - ]:         10 :     Properties *node = new Properties;
     291         [ +  - ]:         10 :     node->set(i, "foo");
     292         [ +  - ]:         10 :     pv.push_back(node);
     293   [ +  -  +  -  :         10 :     ppv.push_back(i);
                   +  - ]
     294                 :            :   }
     295                 :            : 
     296         [ +  - ]:          1 :   props.set("\"BA\nR\"F\aOO", "foo");
     297         [ +  - ]:          1 :   props.set(true, "bool");
     298         [ +  - ]:          1 :   props.set("bar", "01101");
     299                 :            : 
     300   [ +  -  +  - ]:          2 :   const string expected("{[\"01101\"]=\"bar\",[\"a\"]={[\"b\"]={[\"c\"]=11}},[\"bool\"]=true,[\"c\"]={[\"d\"]={0,1,2,3,4,5,6,7,8,9}},[\"e\"]={[\"f\"]={{[\"foo\"]=0},{[\"foo\"]=1},{[\"foo\"]=2},{[\"foo\"]=3},{[\"foo\"]=4},{[\"foo\"]=5},{[\"foo\"]=6},{[\"foo\"]=7},{[\"foo\"]=8},{[\"foo\"]=9}}},[\"foo\"]=\"\\\"BA\\nR\\\"F\\aOO\"}");
     301                 :            : 
     302   [ +  -  +  -  :          1 :   BOOST_CHECK_EQUAL(to_string(props), expected);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
     303                 :            : 
     304   [ +  -  +  - ]:          2 :   const string expected_json("{\"01101\":\"bar\",\"a\":{\"b\":{\"c\":11}},\"bool\":true,\"c\":{\"d\":[0,1,2,3,4,5,6,7,8,9]},\"e\":{\"f\":[{\"foo\":0},{\"foo\":1},{\"foo\":2},{\"foo\":3},{\"foo\":4},{\"foo\":5},{\"foo\":6},{\"foo\":7},{\"foo\":8},{\"foo\":9}]},\"foo\":\"\\\"BA\\nR\\\"F\\aOO\"}");
     305                 :            : 
     306   [ +  -  +  - ]:          2 :   std::ostringstream out;
     307   [ +  -  +  - ]:          2 :   PropertiesToString to_json(out, PropertiesToString::ToJSON);
     308         [ +  - ]:          1 :   to_json(props);
     309   [ +  -  +  -  :          1 :   BOOST_CHECK_EQUAL(out.str(), expected_json);
          +  -  +  -  +  
          -  +  -  +  -  
                   -  + ]
     310   [ +  -  +  -  :         12 : }
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                      - ]