2022-11-26 18:21:45 -08:00
|
|
|
// 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.
|
|
|
|
|
|
2023-08-28 15:13:34 -07:00
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
2022-11-26 18:21:45 -08:00
|
|
|
#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());
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-11 10:36:38 -05:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-26 18:21:45 -08:00
|
|
|
} // namespace
|