diff options
Diffstat (limited to 'gfx/angle/src/common/string_utils_unittest.cpp')
-rwxr-xr-x | gfx/angle/src/common/string_utils_unittest.cpp | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/gfx/angle/src/common/string_utils_unittest.cpp b/gfx/angle/src/common/string_utils_unittest.cpp new file mode 100755 index 000000000..e7ce8a62d --- /dev/null +++ b/gfx/angle/src/common/string_utils_unittest.cpp @@ -0,0 +1,163 @@ +// +// Copyright 2015 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// string_utils_unittests: +// Unit tests for the string utils. +// + +#include "string_utils.h" + +#include <gtest/gtest.h> + +using namespace angle; + +namespace +{ + +// Basic SplitString tests +TEST(StringUtilsTest, SplitString_Basics) +{ + std::vector<std::string> r; + + r = SplitString(std::string(), ",:;", KEEP_WHITESPACE, SPLIT_WANT_ALL); + EXPECT_TRUE(r.empty()); + + // Empty separator list + r = SplitString("hello, world", "", KEEP_WHITESPACE, SPLIT_WANT_ALL); + ASSERT_EQ(1u, r.size()); + EXPECT_EQ("hello, world", r[0]); + + // Should split on any of the separators. + r = SplitString("::,,;;", ",:;", KEEP_WHITESPACE, SPLIT_WANT_ALL); + ASSERT_EQ(7u, r.size()); + for (auto str : r) + ASSERT_TRUE(str.empty()); + + r = SplitString("red, green; blue:", ",:;", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY); + ASSERT_EQ(3u, r.size()); + EXPECT_EQ("red", r[0]); + EXPECT_EQ("green", r[1]); + EXPECT_EQ("blue", r[2]); + + // Want to split a string along whitespace sequences. + r = SplitString(" red green \tblue\n", " \t\n", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY); + ASSERT_EQ(3u, r.size()); + EXPECT_EQ("red", r[0]); + EXPECT_EQ("green", r[1]); + EXPECT_EQ("blue", r[2]); + + // Weird case of splitting on spaces but not trimming. + r = SplitString(" red ", " ", TRIM_WHITESPACE, SPLIT_WANT_ALL); + ASSERT_EQ(3u, r.size()); + EXPECT_EQ("", r[0]); // Before the first space. + EXPECT_EQ("red", r[1]); + EXPECT_EQ("", r[2]); // After the last space. +} + +// Check different whitespace and result types for SplitString +TEST(StringUtilsTest, SplitString_WhitespaceAndResultType) +{ + std::vector<std::string> r; + + // Empty input handling. + r = SplitString(std::string(), ",", KEEP_WHITESPACE, SPLIT_WANT_ALL); + EXPECT_TRUE(r.empty()); + r = SplitString(std::string(), ",", KEEP_WHITESPACE, SPLIT_WANT_NONEMPTY); + EXPECT_TRUE(r.empty()); + + // Input string is space and we're trimming. + r = SplitString(" ", ",", TRIM_WHITESPACE, SPLIT_WANT_ALL); + ASSERT_EQ(1u, r.size()); + EXPECT_EQ("", r[0]); + r = SplitString(" ", ",", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY); + EXPECT_TRUE(r.empty()); + + // Test all 4 combinations of flags on ", ,". + r = SplitString(", ,", ",", KEEP_WHITESPACE, SPLIT_WANT_ALL); + ASSERT_EQ(3u, r.size()); + EXPECT_EQ("", r[0]); + EXPECT_EQ(" ", r[1]); + EXPECT_EQ("", r[2]); + r = SplitString(", ,", ",", KEEP_WHITESPACE, SPLIT_WANT_NONEMPTY); + ASSERT_EQ(1u, r.size()); + ASSERT_EQ(" ", r[0]); + r = SplitString(", ,", ",", TRIM_WHITESPACE, SPLIT_WANT_ALL); + ASSERT_EQ(3u, r.size()); + EXPECT_EQ("", r[0]); + EXPECT_EQ("", r[1]); + EXPECT_EQ("", r[2]); + r = SplitString(", ,", ",", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY); + ASSERT_TRUE(r.empty()); +} + +// Tests for TrimString +TEST(StringUtilsTest, TrimString) +{ + // Basic tests + EXPECT_EQ("a", TrimString("a", kWhitespaceASCII)); + EXPECT_EQ("a", TrimString(" a", kWhitespaceASCII)); + EXPECT_EQ("a", TrimString("a ", kWhitespaceASCII)); + EXPECT_EQ("a", TrimString(" a ", kWhitespaceASCII)); + + // Tests with empty strings + EXPECT_EQ("", TrimString("", kWhitespaceASCII)); + EXPECT_EQ("", TrimString(" \n\r\t", kWhitespaceASCII)); + EXPECT_EQ(" foo ", TrimString(" foo ", "")); + + // Tests it doesn't removes characters in the middle + EXPECT_EQ("foo bar", TrimString(" foo bar ", kWhitespaceASCII)); + + // Test with non-whitespace trimChars + EXPECT_EQ(" ", TrimString("foo bar", "abcdefghijklmnopqrstuvwxyz")); +} + +// Basic functionality tests for HexStringToUInt +TEST(StringUtilsTest, HexStringToUIntBasic) +{ + unsigned int uintValue; + + std::string emptyString; + ASSERT_FALSE(HexStringToUInt(emptyString, &uintValue)); + + std::string testStringA("0xBADF00D"); + ASSERT_TRUE(HexStringToUInt(testStringA, &uintValue)); + EXPECT_EQ(0xBADF00Du, uintValue); + + std::string testStringB("0xBADFOOD"); + EXPECT_FALSE(HexStringToUInt(testStringB, &uintValue)); + + std::string testStringC("BADF00D"); + EXPECT_TRUE(HexStringToUInt(testStringC, &uintValue)); + EXPECT_EQ(0xBADF00Du, uintValue); + + std::string testStringD("0x BADF00D"); + EXPECT_FALSE(HexStringToUInt(testStringD, &uintValue)); +} + +// Note: ReadFileToString is harder to test + + +TEST(StringUtilsTest, BeginsEndsWith) +{ + ASSERT_FALSE(BeginsWith("foo", "bar")); + ASSERT_FALSE(BeginsWith("", "foo")); + ASSERT_FALSE(BeginsWith("foo", "foobar")); + + ASSERT_TRUE(BeginsWith("foobar", "foo")); + ASSERT_TRUE(BeginsWith("foobar", "")); + ASSERT_TRUE(BeginsWith("foo", "foo")); + ASSERT_TRUE(BeginsWith("", "")); + + ASSERT_FALSE(EndsWith("foo", "bar")); + ASSERT_FALSE(EndsWith("", "bar")); + ASSERT_FALSE(EndsWith("foo", "foobar")); + + ASSERT_TRUE(EndsWith("foobar", "bar")); + ASSERT_TRUE(EndsWith("foobar", "")); + ASSERT_TRUE(EndsWith("bar", "bar")); + ASSERT_TRUE(EndsWith("", "")); +} + +}
\ No newline at end of file |