diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | test/src/CharacterSetTests.cpp | 108 | ||||
| -rw-r--r-- | test/src/NormalizeCaseInsensitiveStringTests.cpp | 41 | ||||
| -rw-r--r-- | test/src/PercentEncodedCharacterDecoderTests.cpp | 48 | 
4 files changed, 202 insertions, 0 deletions
| diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 7c3eb76..7f2fc59 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -7,6 +7,9 @@ set(This UriTests)  set(Sources      src/UriTests.cpp +    src/CharacterSetTests.cpp +    src/NormalizeCaseInsensitiveStringTests.cpp +    src/PercentEncodedCharacterDecoderTests.cpp  )  add_executable(${This} ${Sources}) @@ -14,6 +17,8 @@ set_target_properties(${This} PROPERTIES      FOLDER Tests  ) +target_include_directories(${This} PRIVATE ..) +  target_link_libraries(${This} PUBLIC      gtest_main      Uri diff --git a/test/src/CharacterSetTests.cpp b/test/src/CharacterSetTests.cpp new file mode 100644 index 0000000..7013127 --- /dev/null +++ b/test/src/CharacterSetTests.cpp @@ -0,0 +1,108 @@ +/** + * @file CharacterSetTests.cpp + * + * This module contains the unit tests of the Uri::CharacterSet class. + * + * © 2018 by Richard Walters + */ + +#include <gtest/gtest.h> +#include <src/CharacterSet.hpp> +#include <utility> +#include <vector> + +TEST(CharacterSetTests, DefaultConstructor) { +    Uri::CharacterSet cs; +    for (char c = 0; c < 0x7F; ++c) { +        ASSERT_FALSE(cs.Contains(c)); +    } +} + +TEST(CharacterSetTests, SingleCharacterConstructor) { +    Uri::CharacterSet cs('X'); +    for (char c = 0; c < 0x7F; ++c) { +        if (c == 'X') { +            ASSERT_TRUE(cs.Contains(c)); +        } else { +            ASSERT_FALSE(cs.Contains(c)); +        } +    } +} + +TEST(CharacterSetTests, RangeConstructor) { +    Uri::CharacterSet cs('A', 'G'); +    for (char c = 0; c < 0x7F; ++c) { +        if ( +            (c >= 'A') +            && (c <= 'G') +        ) { +            ASSERT_TRUE(cs.Contains(c)); +        } else { +            ASSERT_FALSE(cs.Contains(c)); +        } +    } +} + +TEST(CharacterSetTests, InitializerListConstructor) { +    Uri::CharacterSet cs1{'X'}; +    for (char c = 0; c < 0x7F; ++c) { +        if (c == 'X') { +            ASSERT_TRUE(cs1.Contains(c)); +        } else { +            ASSERT_FALSE(cs1.Contains(c)); +        } +    } +    Uri::CharacterSet cs2{'A', 'G'}; +    for (char c = 0; c < 0x7F; ++c) { +        if ( +            (c == 'A') +            || (c == 'G') +        ) { +            ASSERT_TRUE(cs2.Contains(c)); +        } else { +            ASSERT_FALSE(cs2.Contains(c)); +        } +    } +    Uri::CharacterSet cs3{Uri::CharacterSet('f', 'i')}; +    for (char c = 0; c < 0x7F; ++c) { +        if ( +            (c >= 'f') +            && (c <= 'i') +        ) { +            ASSERT_TRUE(cs3.Contains(c)); +        } else { +            ASSERT_FALSE(cs3.Contains(c)); +        } +    } +    Uri::CharacterSet cs4{Uri::CharacterSet('a', 'c'), Uri::CharacterSet('f', 'i')}; +    for (char c = 0; c < 0x7F; ++c) { +        if ( +            ( +                (c >= 'a') +                && (c <= 'c') +            ) +            || ( +                (c >= 'f') +                && (c <= 'i') +            ) +        ) { +            ASSERT_TRUE(cs4.Contains(c)); +        } else { +            ASSERT_FALSE(cs4.Contains(c)); +        } +    } +    Uri::CharacterSet cs5{Uri::CharacterSet('a', 'c'), Uri::CharacterSet('x')}; +    for (char c = 0; c < 0x7F; ++c) { +        if ( +            ( +                (c >= 'a') +                && (c <= 'c') +            ) +            || (c == 'x') +        ) { +            ASSERT_TRUE(cs5.Contains(c)); +        } else { +            ASSERT_FALSE(cs5.Contains(c)); +        } +    } +} diff --git a/test/src/NormalizeCaseInsensitiveStringTests.cpp b/test/src/NormalizeCaseInsensitiveStringTests.cpp new file mode 100644 index 0000000..f68d344 --- /dev/null +++ b/test/src/NormalizeCaseInsensitiveStringTests.cpp @@ -0,0 +1,41 @@ +/** + * @file NormalizeCaseInsensitiveStringTests.cpp + * + * This module contains the unit tests of the Uri::NormalizeCaseInsensitiveString class. + * + * © 2018 by Richard Walters + */ + +#include <gtest/gtest.h> +#include <src/NormalizeCaseInsensitiveString.hpp> + +TEST(NormalizeCaseInsensitiveStringTests, NormalizeCaseInsensitiveString) { +    ASSERT_EQ( +        "example", +        Uri::NormalizeCaseInsensitiveString("eXAmplE") +    ); +    ASSERT_EQ( +        "example", +        Uri::NormalizeCaseInsensitiveString("example") +    ); +    ASSERT_EQ( +        "example", +        Uri::NormalizeCaseInsensitiveString("EXAMPLE") +    ); +    ASSERT_EQ( +        "foo1bar", +        Uri::NormalizeCaseInsensitiveString("foo1BAR") +    ); +    ASSERT_EQ( +        "foo1bar", +        Uri::NormalizeCaseInsensitiveString("fOo1bAr") +    ); +    ASSERT_EQ( +        "foo1bar", +        Uri::NormalizeCaseInsensitiveString("foo1bar") +    ); +    ASSERT_EQ( +        "foo1bar", +        Uri::NormalizeCaseInsensitiveString("FOO1BAR") +    ); +} diff --git a/test/src/PercentEncodedCharacterDecoderTests.cpp b/test/src/PercentEncodedCharacterDecoderTests.cpp new file mode 100644 index 0000000..fbc3d5e --- /dev/null +++ b/test/src/PercentEncodedCharacterDecoderTests.cpp @@ -0,0 +1,48 @@ +/** + * @file PercentEncodedCharacterDecoderTests.cpp + * + * This module contains the unit tests of the Uri::PercentEncodedCharacterDecoder class. + * + * © 2018 by Richard Walters + */ + +#include <gtest/gtest.h> +#include <src/PercentEncodedCharacterDecoder.hpp> +#include <stddef.h> +#include <vector> + +TEST(PercentEncodedCharacterDecoderTests, GoodSequences) { +    Uri::PercentEncodedCharacterDecoder pec; +    struct TestVector { +        char sequence[2]; +        char expectedOutput; +    }; +    const std::vector< TestVector > testVectors{ +        {{'4', '1'}, 'A'}, +        {{'5', 'A'}, 'Z'}, +        {{'6', 'e'}, 'n'}, +    }; +    size_t index = 0; +    for (auto testVector: testVectors) { +        pec = Uri::PercentEncodedCharacterDecoder(); +        ASSERT_FALSE(pec.Done()); +        ASSERT_TRUE(pec.NextEncodedCharacter(testVector.sequence[0])); +        ASSERT_FALSE(pec.Done()); +        ASSERT_TRUE(pec.NextEncodedCharacter(testVector.sequence[1])); +        ASSERT_TRUE(pec.Done()); +        ASSERT_EQ(testVector.expectedOutput, pec.GetDecodedCharacter()) << index; +        ++index; +    } +} + +TEST(PercentEncodedCharacterDecoderTests, BadSequences) { +    Uri::PercentEncodedCharacterDecoder pec; +    std::vector< char > testVectors{ +        'G', 'g', '.', 'z', '-', ' ', 'V', +    }; +    for (auto testVector: testVectors) { +        pec = Uri::PercentEncodedCharacterDecoder(); +        ASSERT_FALSE(pec.Done()); +        ASSERT_FALSE(pec.NextEncodedCharacter(testVector)); +    } +} | 
