LCOV - code coverage report
Current view: top level - tests - catch_tokenize_string.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 65 65 100.0 %
Date: 2022-02-17 19:51:20 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Copyright (c) 2018-2022  Made to Order Software Corp.  All Rights Reserved
       2             : //
       3             : // https://snapwebsites.org/project/snapdev
       4             : // contact@m2osw.com
       5             : //
       6             : // This program is free software; you can redistribute it and/or modify
       7             : // it under the terms of the GNU General Public License as published by
       8             : // the Free Software Foundation; either version 2 of the License, or
       9             : // (at your option) any later version.
      10             : //
      11             : // This program is distributed in the hope that it will be useful,
      12             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14             : // GNU General Public License for more details.
      15             : //
      16             : // You should have received a copy of the GNU General Public License along
      17             : // with this program; if not, write to the Free Software Foundation, Inc.,
      18             : // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      19             : 
      20             : /** \file
      21             :  * \brief Verify that the tokenize_string() function works.
      22             :  *
      23             :  * This file implements tests for the tokenize_string() function.
      24             :  */
      25             : 
      26             : // self
      27             : //
      28             : #include    <snapdev/tokenize_string.h>
      29             : 
      30             : #include    "catch_main.h"
      31             : 
      32             : 
      33             : // last include
      34             : //
      35             : #include    <snapdev/poison.h>
      36             : 
      37             : 
      38             : namespace
      39             : {
      40             : 
      41             : 
      42             : 
      43             : 
      44             : 
      45             : }
      46             : // no name namespace
      47             : 
      48             : 
      49             : 
      50           8 : CATCH_TEST_CASE("tokenize_string", "[string]")
      51             : {
      52          12 :     CATCH_START_SECTION("generate tokens: keep empty entries")
      53             :     {
      54           2 :         std::vector<std::string> tokens;
      55           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
      56             :                   tokens
      57             :                 , "   foo    catch  bar   "
      58             :                 , " ") == 13);
      59           1 :         CATCH_REQUIRE(tokens.size() == 13);
      60           1 :         CATCH_REQUIRE(tokens[ 0] == "");
      61           1 :         CATCH_REQUIRE(tokens[ 1] == "");
      62           1 :         CATCH_REQUIRE(tokens[ 2] == "");
      63           1 :         CATCH_REQUIRE(tokens[ 3] == "foo");
      64           1 :         CATCH_REQUIRE(tokens[ 4] == "");
      65           1 :         CATCH_REQUIRE(tokens[ 5] == "");
      66           1 :         CATCH_REQUIRE(tokens[ 6] == "");
      67           1 :         CATCH_REQUIRE(tokens[ 7] == "catch");
      68           1 :         CATCH_REQUIRE(tokens[ 8] == "");
      69           1 :         CATCH_REQUIRE(tokens[ 9] == "bar");
      70           1 :         CATCH_REQUIRE(tokens[10] == "");
      71           1 :         CATCH_REQUIRE(tokens[11] == "");
      72           1 :         CATCH_REQUIRE(tokens[12] == "");
      73             :     }
      74             :     CATCH_END_SECTION()
      75             : 
      76          12 :     CATCH_START_SECTION("generate tokens: remove empty entries")
      77             :     {
      78           2 :         std::vector<std::string> tokens;
      79           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
      80             :                   tokens
      81             :                 , "   foo    catch  bar   "
      82             :                 , " "
      83             :                 , true) == 3);
      84           1 :         CATCH_REQUIRE(tokens.size() == 3);
      85           1 :         CATCH_REQUIRE(tokens[0] == "foo");
      86           1 :         CATCH_REQUIRE(tokens[1] == "catch");
      87           1 :         CATCH_REQUIRE(tokens[2] == "bar");
      88             :     }
      89             :     CATCH_END_SECTION()
      90             : 
      91          12 :     CATCH_START_SECTION("generate tokens: comma separated")
      92             :     {
      93           2 :         std::vector<std::string> tokens;
      94           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
      95             :                   tokens
      96             :                 , ",,,foo,,,,catch,,bar,,,"
      97             :                 , ",") == 13);
      98           1 :         CATCH_REQUIRE(tokens.size() == 13);
      99           1 :         CATCH_REQUIRE(tokens[ 0] == "");
     100           1 :         CATCH_REQUIRE(tokens[ 1] == "");
     101           1 :         CATCH_REQUIRE(tokens[ 2] == "");
     102           1 :         CATCH_REQUIRE(tokens[ 3] == "foo");
     103           1 :         CATCH_REQUIRE(tokens[ 4] == "");
     104           1 :         CATCH_REQUIRE(tokens[ 5] == "");
     105           1 :         CATCH_REQUIRE(tokens[ 6] == "");
     106           1 :         CATCH_REQUIRE(tokens[ 7] == "catch");
     107           1 :         CATCH_REQUIRE(tokens[ 8] == "");
     108           1 :         CATCH_REQUIRE(tokens[ 9] == "bar");
     109           1 :         CATCH_REQUIRE(tokens[10] == "");
     110           1 :         CATCH_REQUIRE(tokens[11] == "");
     111           1 :         CATCH_REQUIRE(tokens[12] == "");
     112             :     }
     113             :     CATCH_END_SECTION()
     114             : 
     115          12 :     CATCH_START_SECTION("generate tokens: comma separated, remove empty")
     116             :     {
     117           2 :         std::vector<std::string> tokens;
     118           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
     119             :                   tokens
     120             :                 , ",,, foo ,,,,catch  ,,bar ,,,"
     121             :                 , ","
     122             :                 , true) == 3);
     123           1 :         CATCH_REQUIRE(tokens.size() == 3);
     124           1 :         CATCH_REQUIRE(tokens[0] == " foo ");
     125           1 :         CATCH_REQUIRE(tokens[1] == "catch  ");
     126           1 :         CATCH_REQUIRE(tokens[2] == "bar ");
     127             :     }
     128             :     CATCH_END_SECTION()
     129             : 
     130          12 :     CATCH_START_SECTION("generate tokens: comma separated, remove empty and trim")
     131             :     {
     132           2 :         std::vector<std::string> tokens;
     133           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
     134             :                   tokens
     135             :                 , ", ,, foo ,,    ,,catch  ,,bar ,,,  "
     136             :                 , ","
     137             :                 , true
     138             :                 , " ") == 3);
     139           1 :         CATCH_REQUIRE(tokens.size() == 3);
     140           1 :         CATCH_REQUIRE(tokens[0] == "foo");
     141           1 :         CATCH_REQUIRE(tokens[1] == "catch");
     142           1 :         CATCH_REQUIRE(tokens[2] == "bar");
     143             :     }
     144             :     CATCH_END_SECTION()
     145             : 
     146          12 :     CATCH_START_SECTION("generate tokens: arrow (string) separated, remove empty and trim")
     147             :     {
     148           2 :         std::vector<std::string> tokens;
     149           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
     150             :                   tokens
     151             :                 , "a => b => c => d"
     152             :                 , "=>"
     153             :                 , true
     154             :                 , " "
     155             :                 , snapdev::string_predicate<decltype(tokens)>) == 4);
     156           1 :         CATCH_REQUIRE(tokens.size() == 4);
     157           1 :         CATCH_REQUIRE(tokens[0] == "a");
     158           1 :         CATCH_REQUIRE(tokens[1] == "b");
     159           1 :         CATCH_REQUIRE(tokens[2] == "c");
     160           1 :         CATCH_REQUIRE(tokens[3] == "d");
     161             :     }
     162             :     CATCH_END_SECTION()
     163          12 : }
     164             : 
     165             : //template<class ContainerT, typename PredicateT = decltype(character_predicate<ContainerT>)>
     166             : //size_t tokenize_string(ContainerT & tokens
     167             : //                     , typename ContainerT::value_type const & str
     168             : //                     , typename ContainerT::value_type const & delimiters
     169             : //                     , bool const trim_empty = false
     170             : //                     , typename ContainerT::value_type const & trim_string = typename ContainerT::value_type()
     171             : //                     , PredicateT compare_function = &character_predicate<ContainerT>)
     172             : 
     173             : 
     174             : 
     175             : // vim: ts=4 sw=4 et

Generated by: LCOV version 1.13