Files
FESADev/tests/unit/core/ascii_test.cpp
T

58 lines
2.1 KiB
C++

#include "fesa/core/ascii.h"
#include <gtest/gtest.h>
#include <cstdint>
#include <limits>
#include <string>
#include <vector>
TEST(Ascii, LowercasesOnlyAsciiUppercaseBytes) {
EXPECT_EQ(fesa::AsciiLower('A'), 'a');
EXPECT_EQ(fesa::AsciiLower('Z'), 'z');
EXPECT_EQ(fesa::AsciiLower('a'), 'a');
EXPECT_EQ(fesa::AsciiLower('0'), '0');
const char non_ascii = static_cast<char>(0xc0U);
EXPECT_EQ(fesa::AsciiLower(non_ascii), non_ascii);
}
TEST(Ascii, ComparesNamesWithoutLocaleOrUnicodeFolding) {
EXPECT_TRUE(fesa::AsciiCaseInsensitiveEquals("Beam-1", "bEaM-1"));
EXPECT_FALSE(fesa::AsciiCaseInsensitiveEquals("Beam-1", "Beam-10"));
const std::string uppercase_byte{static_cast<char>(0xc0U)};
const std::string lowercase_byte{static_cast<char>(0xe0U)};
EXPECT_FALSE(
fesa::AsciiCaseInsensitiveEquals(uppercase_byte, lowercase_byte));
}
TEST(Ascii, ParsesOnlyCompletePositiveBaseTenSourceLabels) {
auto one = fesa::ParsePositiveSourceLabel("1");
auto leading_zeroes = fesa::ParsePositiveSourceLabel("00042");
auto maximum = fesa::ParsePositiveSourceLabel(
std::to_string((std::numeric_limits<std::int64_t>::max)()));
ASSERT_TRUE(one.HasValue());
EXPECT_EQ(one.Value(), 1);
ASSERT_TRUE(leading_zeroes.HasValue());
EXPECT_EQ(leading_zeroes.Value(), 42);
ASSERT_TRUE(maximum.HasValue());
EXPECT_EQ(maximum.Value(), (std::numeric_limits<std::int64_t>::max)());
const std::string overflow =
std::to_string((std::numeric_limits<std::int64_t>::max)()) + "0";
const std::vector<std::string> invalid_values{"", "0", "-1", "+", "+1",
" 1", "1 ", "1x", overflow};
for (const std::string& invalid : invalid_values) {
SCOPED_TRACE(invalid);
auto result = fesa::ParsePositiveSourceLabel(invalid);
ASSERT_FALSE(result.HasValue());
EXPECT_EQ(result.GetStatus().Category(), fesa::FailureCategory::kInput);
ASSERT_EQ(result.GetStatus().Diagnostics().size(), 1U);
EXPECT_EQ(result.GetStatus().Diagnostics()[0U].code,
"invalid-source-label");
EXPECT_EQ(result.GetStatus().Diagnostics()[0U].entity_identity, invalid);
}
}