Home | History | Annotate | Download | only in tokenizer
      1 /*
      2  * Copyright (c) 2015, Intel Corporation
      3  * All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without modification,
      6  * are permitted provided that the following conditions are met:
      7  *
      8  * 1. Redistributions of source code must retain the above copyright notice, this
      9  * list of conditions and the following disclaimer.
     10  *
     11  * 2. Redistributions in binary form must reproduce the above copyright notice,
     12  * this list of conditions and the following disclaimer in the documentation and/or
     13  * other materials provided with the distribution.
     14  *
     15  * 3. Neither the name of the copyright holder nor the names of its contributors
     16  * may be used to endorse or promote products derived from this software without
     17  * specific prior written permission.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     22  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
     23  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     26  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 #include "Tokenizer.h"
     32 
     33 #define CATCH_CONFIG_MAIN // This tells Catch to provide a main()
     34 #include <catch.hpp>
     35 
     36 #include <string>
     37 #include <vector>
     38 
     39 using std::string;
     40 using std::vector;
     41 
     42 using Expected = vector<string>;
     43 
     44 SCENARIO("Tokenizer tests")
     45 {
     46     GIVEN ("A default tokenizer") {
     47 
     48         GIVEN ("A trivial string") {
     49             Tokenizer tokenizer("a bcd ef");
     50             Expected expected{"a", "bcd", "ef"};
     51 
     52             THEN ("split() api should work") {
     53                 CHECK(tokenizer.split() == expected);
     54             }
     55         }
     56 
     57         GIVEN ("An empty string") {
     58             Tokenizer tokenizer("");
     59             Expected expected{};
     60 
     61             THEN ("split() should be empty") {
     62                 CHECK(tokenizer.split() == expected);
     63             }
     64         }
     65 
     66         GIVEN ("Multiple separators in a row") {
     67             Tokenizer tokenizer("  a \n\t bc  ");
     68             Expected expected{"a", "bc"};
     69 
     70             THEN ("split() api should work") {
     71                 CHECK(tokenizer.split() == expected);
     72             }
     73         }
     74     }
     75 
     76     GIVEN ("A slash-separated string and tokenizer") {
     77         Tokenizer tokenizer("/a/bcd/ef g/h/", "/");
     78         Expected expected{"a", "bcd", "ef g", "h"};
     79 
     80         THEN ("split() api should work") {
     81             CHECK(tokenizer.split() == expected);
     82         }
     83     }
     84 
     85     GIVEN ("A tokenizer that doesn't merge consecutive separators") {
     86 
     87         GIVEN ("An empty string") {
     88             Tokenizer tokenizer("", Tokenizer::defaultDelimiters, false);
     89             Expected expected{};
     90 
     91             THEN ("split() should be empty") {
     92                 CHECK(tokenizer.split() == expected);
     93             }
     94         }
     95 
     96         GIVEN ("A string consisting only of a delimiter") {
     97             Tokenizer tokenizer(",", ",", false);
     98             Expected expected{"", ""};
     99 
    100             THEN ("split() should return two empty tokens") {
    101                 CHECK(tokenizer.split() == expected);
    102             }
    103         }
    104 
    105         GIVEN ("Multiple separators in a row") {
    106             Tokenizer tokenizer(" a  b \nc d ", Tokenizer::defaultDelimiters, false);
    107             Expected expected{"", "a", "", "b", "", "c", "d", ""};
    108 
    109             THEN ("split() api should work") {
    110                 CHECK(tokenizer.split() == expected);
    111             }
    112         }
    113     }
    114 }
    115