feat(cpp-object-oriented-modular-refactoring): step 11 - source-target-resolver
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
#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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user