58 lines
2.1 KiB
C++
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);
|
|
}
|
|
}
|