| // Copyright (c) FIRST and other WPILib contributors. |
| // Open Source Software; you can modify and/or share it under the terms of |
| // the WPILib BSD license file in the root directory of this project. |
| |
| #include <gtest/gtest.h> |
| |
| #include "wpi/SmallString.h" |
| #include "wpi/StringExtras.h" |
| |
| using namespace wpi; |
| |
| namespace { |
| |
| TEST(UnescapeCStringTest, Basic) { |
| SmallString<64> buf; |
| auto [out, rem] = UnescapeCString("abc\\\\\\a\\b\\f\\n\\r\\t\\v\\", buf); |
| EXPECT_EQ(out, "abc\\\a\b\f\n\r\t\v\\"); |
| EXPECT_TRUE(rem.empty()); |
| } |
| |
| TEST(UnescapeCStringTest, QuoteEnd) { |
| SmallString<64> buf; |
| auto [out, rem] = UnescapeCString("abc\\\"\"123", buf); |
| EXPECT_EQ(out, "abc\""); |
| EXPECT_EQ(rem, "\"123"); |
| } |
| |
| TEST(UnescapeCStringTest, Hex) { |
| SmallString<64> buf; |
| auto [out, rem] = UnescapeCString("\\xfe\\xFE\\x01", buf); |
| EXPECT_EQ(out, "\xfe\xFE\x01"); |
| EXPECT_TRUE(rem.empty()); |
| } |
| |
| TEST(UnescapeCStringTest, HexPartial) { |
| SmallString<64> buf; |
| auto [out, rem] = UnescapeCString("\\xz\\x5z\\x2", buf); |
| EXPECT_EQ(out, "xz\x05z\x02"); |
| EXPECT_TRUE(rem.empty()); |
| } |
| |
| TEST(UnescapeCStringTest, HexPartial2) { |
| SmallString<64> buf; |
| auto [out, rem] = UnescapeCString("\\x", buf); |
| EXPECT_EQ(out, "x"); |
| EXPECT_TRUE(rem.empty()); |
| } |
| |
| TEST(UnescapeCStringTest, Octal) { |
| SmallString<64> buf; |
| auto [out, rem] = UnescapeCString("\\3\\11\\222\\4", buf); |
| EXPECT_EQ(out, "\3\11\222\4"); |
| EXPECT_TRUE(rem.empty()); |
| } |
| |
| TEST(UnescapeCStringTest, EmptyString) { |
| SmallString<64> buf; |
| auto [out, rem] = UnescapeCString("", buf); |
| EXPECT_EQ(out, ""); |
| } |
| |
| TEST(UnescapeCStringTest, ShortString) { |
| SmallString<64> buf; |
| auto [out, rem] = UnescapeCString("a", buf); |
| EXPECT_EQ(out, "a"); |
| } |
| |
| TEST(UnescapeCStringTest, NoEscapesString) { |
| SmallString<64> buf; |
| std::string_view input = "abcdefghijklmnopqrstuvwxyz1234567890"; |
| auto [out, rem] = UnescapeCString(input, buf); |
| EXPECT_EQ(out, input); |
| } |
| |
| } // namespace |