LCOV - code coverage report
Current view: top level - tests - catch_tokenize_string.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 77 77 100.0 %
Date: 2023-05-29 16:11:08 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Copyright (c) 2018-2023  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 3 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
      17             : // along with this program.  If not, see <https://www.gnu.org/licenses/>.
      18             : 
      19             : /** \file
      20             :  * \brief Verify that the tokenize_string() function works.
      21             :  *
      22             :  * This file implements tests for the tokenize_string() function.
      23             :  */
      24             : 
      25             : // self
      26             : //
      27             : #include    <snapdev/tokenize_string.h>
      28             : 
      29             : #include    "catch_main.h"
      30             : 
      31             : 
      32             : // last include
      33             : //
      34             : #include    <snapdev/poison.h>
      35             : 
      36             : 
      37             : namespace
      38             : {
      39             : 
      40             : 
      41             : 
      42             : 
      43             : 
      44             : }
      45             : // no name namespace
      46             : 
      47             : 
      48             : 
      49           6 : CATCH_TEST_CASE("tokenize_string", "[string]")
      50             : {
      51           6 :     CATCH_START_SECTION("generate tokens: keep empty entries")
      52             :     {
      53           1 :         std::vector<std::string> tokens;
      54           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
      55             :                   tokens
      56             :                 , "   foo    catch  bar   "
      57             :                 , " ") == 13);
      58           1 :         CATCH_REQUIRE(tokens.size() == 13);
      59           1 :         CATCH_REQUIRE(tokens[ 0] == "");
      60           1 :         CATCH_REQUIRE(tokens[ 1] == "");
      61           1 :         CATCH_REQUIRE(tokens[ 2] == "");
      62           1 :         CATCH_REQUIRE(tokens[ 3] == "foo");
      63           1 :         CATCH_REQUIRE(tokens[ 4] == "");
      64           1 :         CATCH_REQUIRE(tokens[ 5] == "");
      65           1 :         CATCH_REQUIRE(tokens[ 6] == "");
      66           1 :         CATCH_REQUIRE(tokens[ 7] == "catch");
      67           1 :         CATCH_REQUIRE(tokens[ 8] == "");
      68           1 :         CATCH_REQUIRE(tokens[ 9] == "bar");
      69           1 :         CATCH_REQUIRE(tokens[10] == "");
      70           1 :         CATCH_REQUIRE(tokens[11] == "");
      71           1 :         CATCH_REQUIRE(tokens[12] == "");
      72           1 :     }
      73           6 :     CATCH_END_SECTION()
      74             : 
      75           6 :     CATCH_START_SECTION("generate tokens: remove empty entries")
      76             :     {
      77           1 :         std::vector<std::string> tokens;
      78           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
      79             :                   tokens
      80             :                 , "   foo    catch  bar   "
      81             :                 , " "
      82             :                 , true) == 3);
      83           1 :         CATCH_REQUIRE(tokens.size() == 3);
      84           1 :         CATCH_REQUIRE(tokens[0] == "foo");
      85           1 :         CATCH_REQUIRE(tokens[1] == "catch");
      86           1 :         CATCH_REQUIRE(tokens[2] == "bar");
      87           1 :     }
      88           6 :     CATCH_END_SECTION()
      89             : 
      90           6 :     CATCH_START_SECTION("generate tokens: comma separated")
      91             :     {
      92           1 :         std::vector<std::string> tokens;
      93           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
      94             :                   tokens
      95             :                 , ",,,foo,,,,catch,,bar,,,"
      96             :                 , ",") == 13);
      97           1 :         CATCH_REQUIRE(tokens.size() == 13);
      98           1 :         CATCH_REQUIRE(tokens[ 0] == "");
      99           1 :         CATCH_REQUIRE(tokens[ 1] == "");
     100           1 :         CATCH_REQUIRE(tokens[ 2] == "");
     101           1 :         CATCH_REQUIRE(tokens[ 3] == "foo");
     102           1 :         CATCH_REQUIRE(tokens[ 4] == "");
     103           1 :         CATCH_REQUIRE(tokens[ 5] == "");
     104           1 :         CATCH_REQUIRE(tokens[ 6] == "");
     105           1 :         CATCH_REQUIRE(tokens[ 7] == "catch");
     106           1 :         CATCH_REQUIRE(tokens[ 8] == "");
     107           1 :         CATCH_REQUIRE(tokens[ 9] == "bar");
     108           1 :         CATCH_REQUIRE(tokens[10] == "");
     109           1 :         CATCH_REQUIRE(tokens[11] == "");
     110           1 :         CATCH_REQUIRE(tokens[12] == "");
     111           1 :     }
     112           6 :     CATCH_END_SECTION()
     113             : 
     114           6 :     CATCH_START_SECTION("generate tokens: comma separated, remove empty")
     115             :     {
     116           1 :         std::vector<std::string> tokens;
     117           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
     118             :                   tokens
     119             :                 , ",,, foo ,,,,catch  ,,bar ,,,"
     120             :                 , ","
     121             :                 , true) == 3);
     122           1 :         CATCH_REQUIRE(tokens.size() == 3);
     123           1 :         CATCH_REQUIRE(tokens[0] == " foo ");
     124           1 :         CATCH_REQUIRE(tokens[1] == "catch  ");
     125           1 :         CATCH_REQUIRE(tokens[2] == "bar ");
     126           1 :     }
     127           6 :     CATCH_END_SECTION()
     128             : 
     129           6 :     CATCH_START_SECTION("generate tokens: comma separated, remove empty and trim")
     130             :     {
     131           1 :         std::vector<std::string> tokens;
     132           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
     133             :                   tokens
     134             :                 , ", ,, foo ,,    ,,catch  ,,bar ,,,  "
     135             :                 , ","
     136             :                 , true
     137             :                 , " ") == 3);
     138           1 :         CATCH_REQUIRE(tokens.size() == 3);
     139           1 :         CATCH_REQUIRE(tokens[0] == "foo");
     140           1 :         CATCH_REQUIRE(tokens[1] == "catch");
     141           1 :         CATCH_REQUIRE(tokens[2] == "bar");
     142           1 :     }
     143           6 :     CATCH_END_SECTION()
     144             : 
     145           6 :     CATCH_START_SECTION("generate tokens: arrow (string) separated, remove empty and trim")
     146             :     {
     147           1 :         std::vector<std::string> tokens;
     148           1 :         CATCH_REQUIRE(snapdev::tokenize_string(
     149             :                   tokens
     150             :                 , "a => b => c => d"
     151             :                 , "=>"
     152             :                 , true
     153             :                 , " "
     154             :                 , snapdev::string_predicate<decltype(tokens)>) == 4);
     155           1 :         CATCH_REQUIRE(tokens.size() == 4);
     156           1 :         CATCH_REQUIRE(tokens[0] == "a");
     157           1 :         CATCH_REQUIRE(tokens[1] == "b");
     158           1 :         CATCH_REQUIRE(tokens[2] == "c");
     159           1 :         CATCH_REQUIRE(tokens[3] == "d");
     160           1 :     }
     161           6 :     CATCH_END_SECTION()
     162           6 : }
     163             : 
     164             : //template<class ContainerT, typename PredicateT = decltype(character_predicate<ContainerT>)>
     165             : //size_t tokenize_string(ContainerT & tokens
     166             : //                     , typename ContainerT::value_type const & str
     167             : //                     , typename ContainerT::value_type const & delimiters
     168             : //                     , bool const trim_empty = false
     169             : //                     , typename ContainerT::value_type const & trim_string = typename ContainerT::value_type()
     170             : //                     , PredicateT compare_function = &character_predicate<ContainerT>)
     171             : 
     172             : 
     173             : 
     174             : // vim: ts=4 sw=4 et

Generated by: LCOV version 1.14