Skip to content

Commit

Permalink
LibTimeZone: Perform time-zone-from-string lookups case insensitively
Browse files Browse the repository at this point in the history
Time zone names in the TZDB are defined to be case insensitive.
  • Loading branch information
trflynn89 authored and linusg committed Jan 10, 2022
1 parent b493c2c commit 14535fb
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -235,12 +235,19 @@ namespace TimeZone {
HashValueMap<String> hashes;
hashes.ensure_capacity(values.size());

auto hash = [](auto const& value) {
return CaseInsensitiveStringViewTraits::hash(value);
};

for (auto const& value : values)
hashes.set(value.hash(), format_identifier(enum_title, value));
hashes.set(hash(value), format_identifier(enum_title, value));
for (auto const& alias : aliases)
hashes.set(alias.alias.hash(), format_identifier(enum_title, alias.alias));
hashes.set(hash(alias.alias), format_identifier(enum_title, alias.alias));

ValueFromStringOptions options {};
options.sensitivity = CaseSensitivity::CaseInsensitive;

generate_value_from_string(generator, "{}_from_string"sv, enum_title, enum_snake, move(hashes));
generate_value_from_string(generator, "{}_from_string"sv, enum_title, enum_snake, move(hashes), options);
};

append_from_string("TimeZone"sv, "time_zone"sv, time_zone_data.time_zone_names, time_zone_data.time_zone_aliases);
Expand Down
7 changes: 7 additions & 0 deletions Tests/LibTimeZone/TestTimeZone.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,11 @@ TEST_CASE(time_zone_from_string_link)
test_link("Universal"sv, "UTC"sv);
}

TEST_CASE(case_insensitive_time_zone_from_string)
{
EXPECT_EQ(TimeZone::time_zone_from_string("UTC"sv), TimeZone::TimeZone::UTC);
EXPECT_EQ(TimeZone::time_zone_from_string("utc"sv), TimeZone::TimeZone::UTC);
EXPECT_EQ(TimeZone::time_zone_from_string("uTc"sv), TimeZone::TimeZone::UTC);
}

#endif

0 comments on commit 14535fb

Please sign in to comment.