LCOV - code coverage report
Current view: top level - tests - catch_tokenize_string.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 90 90
Test Date: 2025-07-03 19:05:49 Functions: 100.0 % 1 1
Legend: Lines: hit not hit

            Line data    Source code
       1              : // Copyright (c) 2018-2025  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            8 : CATCH_TEST_CASE("tokenize_string", "[string]")
      50              : {
      51            8 :     CATCH_START_SECTION("tokenize_string: empty input non-empty output if keeping empty entries")
      52              :     {
      53            1 :         std::vector<std::string> tokens;
      54            5 :         CATCH_REQUIRE(snapdev::tokenize_string(
      55              :                   tokens
      56              :                 , ""
      57              :                 , " ") == 1);
      58            1 :         CATCH_REQUIRE(tokens.size() == 1);
      59            1 :         CATCH_REQUIRE(tokens[0] == "");
      60            1 :     }
      61            8 :     CATCH_END_SECTION()
      62              : 
      63            8 :     CATCH_START_SECTION("tokenize_string: empty input empty output when removing empty entries")
      64              :     {
      65            1 :         std::vector<std::string> tokens;
      66            5 :         CATCH_REQUIRE(snapdev::tokenize_string(
      67              :                   tokens
      68              :                 , ""
      69              :                 , " "
      70              :                 , true) == 0);
      71            1 :         CATCH_REQUIRE(tokens.size() == 0);
      72            1 :     }
      73            8 :     CATCH_END_SECTION()
      74              : 
      75            8 :     CATCH_START_SECTION("tokenize_string: keep empty entries")
      76              :     {
      77            1 :         std::vector<std::string> tokens;
      78            5 :         CATCH_REQUIRE(snapdev::tokenize_string(
      79              :                   tokens
      80              :                 , "   foo    catch  bar   "
      81              :                 , " ") == 13);
      82            1 :         CATCH_REQUIRE(tokens.size() == 13);
      83            1 :         CATCH_REQUIRE(tokens[ 0] == "");
      84            1 :         CATCH_REQUIRE(tokens[ 1] == "");
      85            1 :         CATCH_REQUIRE(tokens[ 2] == "");
      86            1 :         CATCH_REQUIRE(tokens[ 3] == "foo");
      87            1 :         CATCH_REQUIRE(tokens[ 4] == "");
      88            1 :         CATCH_REQUIRE(tokens[ 5] == "");
      89            1 :         CATCH_REQUIRE(tokens[ 6] == "");
      90            1 :         CATCH_REQUIRE(tokens[ 7] == "catch");
      91            1 :         CATCH_REQUIRE(tokens[ 8] == "");
      92            1 :         CATCH_REQUIRE(tokens[ 9] == "bar");
      93            1 :         CATCH_REQUIRE(tokens[10] == "");
      94            1 :         CATCH_REQUIRE(tokens[11] == "");
      95            1 :         CATCH_REQUIRE(tokens[12] == "");
      96            1 :     }
      97            8 :     CATCH_END_SECTION()
      98              : 
      99            8 :     CATCH_START_SECTION("tokenize_string: remove empty entries")
     100              :     {
     101            1 :         std::vector<std::string> tokens;
     102            5 :         CATCH_REQUIRE(snapdev::tokenize_string(
     103              :                   tokens
     104              :                 , "   foo    catch  bar   "
     105              :                 , " "
     106              :                 , true) == 3);
     107            1 :         CATCH_REQUIRE(tokens.size() == 3);
     108            1 :         CATCH_REQUIRE(tokens[0] == "foo");
     109            1 :         CATCH_REQUIRE(tokens[1] == "catch");
     110            1 :         CATCH_REQUIRE(tokens[2] == "bar");
     111            1 :     }
     112            8 :     CATCH_END_SECTION()
     113              : 
     114            8 :     CATCH_START_SECTION("tokenize_string: comma separated")
     115              :     {
     116            1 :         std::vector<std::string> tokens;
     117            5 :         CATCH_REQUIRE(snapdev::tokenize_string(
     118              :                   tokens
     119              :                 , ",,,foo,,,,catch,,bar,,,"
     120              :                 , ",") == 13);
     121            1 :         CATCH_REQUIRE(tokens.size() == 13);
     122            1 :         CATCH_REQUIRE(tokens[ 0] == "");
     123            1 :         CATCH_REQUIRE(tokens[ 1] == "");
     124            1 :         CATCH_REQUIRE(tokens[ 2] == "");
     125            1 :         CATCH_REQUIRE(tokens[ 3] == "foo");
     126            1 :         CATCH_REQUIRE(tokens[ 4] == "");
     127            1 :         CATCH_REQUIRE(tokens[ 5] == "");
     128            1 :         CATCH_REQUIRE(tokens[ 6] == "");
     129            1 :         CATCH_REQUIRE(tokens[ 7] == "catch");
     130            1 :         CATCH_REQUIRE(tokens[ 8] == "");
     131            1 :         CATCH_REQUIRE(tokens[ 9] == "bar");
     132            1 :         CATCH_REQUIRE(tokens[10] == "");
     133            1 :         CATCH_REQUIRE(tokens[11] == "");
     134            1 :         CATCH_REQUIRE(tokens[12] == "");
     135            1 :     }
     136            8 :     CATCH_END_SECTION()
     137              : 
     138            8 :     CATCH_START_SECTION("tokenize_string: comma separated, remove empty")
     139              :     {
     140            1 :         std::vector<std::string> tokens;
     141            5 :         CATCH_REQUIRE(snapdev::tokenize_string(
     142              :                   tokens
     143              :                 , ",,, foo ,,,,catch  ,,bar ,,,"
     144              :                 , ","
     145              :                 , true) == 3);
     146            1 :         CATCH_REQUIRE(tokens.size() == 3);
     147            1 :         CATCH_REQUIRE(tokens[0] == " foo ");
     148            1 :         CATCH_REQUIRE(tokens[1] == "catch  ");
     149            1 :         CATCH_REQUIRE(tokens[2] == "bar ");
     150            1 :     }
     151            8 :     CATCH_END_SECTION()
     152              : 
     153            8 :     CATCH_START_SECTION("tokenize_string: comma separated, remove empty and trim")
     154              :     {
     155            1 :         std::vector<std::string> tokens;
     156            7 :         CATCH_REQUIRE(snapdev::tokenize_string(
     157              :                   tokens
     158              :                 , ", ,, foo ,,    ,,catch  ,,bar ,,,  "
     159              :                 , ","
     160              :                 , true
     161              :                 , " ") == 3);
     162            1 :         CATCH_REQUIRE(tokens.size() == 3);
     163            1 :         CATCH_REQUIRE(tokens[0] == "foo");
     164            1 :         CATCH_REQUIRE(tokens[1] == "catch");
     165            1 :         CATCH_REQUIRE(tokens[2] == "bar");
     166            1 :     }
     167            8 :     CATCH_END_SECTION()
     168              : 
     169            8 :     CATCH_START_SECTION("tokenize_string: arrow (string) separated, remove empty and trim")
     170              :     {
     171            1 :         std::vector<std::string> tokens;
     172            7 :         CATCH_REQUIRE(snapdev::tokenize_string(
     173              :                   tokens
     174              :                 , "a => b => c => d"
     175              :                 , "=>"
     176              :                 , true
     177              :                 , " "
     178              :                 , snapdev::string_predicate<decltype(tokens)>) == 4);
     179            1 :         CATCH_REQUIRE(tokens.size() == 4);
     180            1 :         CATCH_REQUIRE(tokens[0] == "a");
     181            1 :         CATCH_REQUIRE(tokens[1] == "b");
     182            1 :         CATCH_REQUIRE(tokens[2] == "c");
     183            1 :         CATCH_REQUIRE(tokens[3] == "d");
     184            1 :     }
     185            8 :     CATCH_END_SECTION()
     186            8 : }
     187              : 
     188              : //template<class ContainerT, typename PredicateT = decltype(character_predicate<ContainerT>)>
     189              : //size_t tokenize_string(ContainerT & tokens
     190              : //                     , typename ContainerT::value_type const & str
     191              : //                     , typename ContainerT::value_type const & delimiters
     192              : //                     , bool const trim_empty = false
     193              : //                     , typename ContainerT::value_type const & trim_string = typename ContainerT::value_type()
     194              : //                     , PredicateT compare_function = &character_predicate<ContainerT>)
     195              : 
     196              : 
     197              : 
     198              : // vim: ts=4 sw=4 et
        

Generated by: LCOV version 2.0-1

Snap C++ | List of projects | List of versions