mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-01 08:42:13 +00:00
a7c1a01337
Differential Revision: https://phabricator.services.mozilla.com/D121413
162 lines
6.1 KiB
C++
162 lines
6.1 KiB
C++
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||
#include "gtest/gtest.h"
|
||
|
||
#include "mozilla/intl/RelativeTimeFormat.h"
|
||
#include "TestBuffer.h"
|
||
|
||
namespace mozilla::intl {
|
||
|
||
TEST(IntlRelativeTimeFormat, Basic)
|
||
{
|
||
RelativeTimeFormatOptions options = {};
|
||
Result<UniquePtr<RelativeTimeFormat>, ICUError> res =
|
||
RelativeTimeFormat::TryCreate("en-US", options);
|
||
ASSERT_TRUE(res.isOk());
|
||
UniquePtr<RelativeTimeFormat> rtf = res.unwrap();
|
||
TestBuffer<char> buf8;
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "in 1.2 days");
|
||
|
||
TestBuffer<char16_t> buf16;
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf16).isOk());
|
||
ASSERT_EQ(buf16.get_string_view(), u"in 1.2 days");
|
||
|
||
res = RelativeTimeFormat::TryCreate("es-AR", options);
|
||
ASSERT_TRUE(res.isOk());
|
||
rtf = res.unwrap();
|
||
buf8.clear();
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "dentro de 1,2 días");
|
||
|
||
buf16.clear();
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf16).isOk());
|
||
ASSERT_EQ(buf16.get_string_view(), u"dentro de 1,2 días");
|
||
|
||
res = RelativeTimeFormat::TryCreate("ar", options);
|
||
ASSERT_TRUE(res.isOk());
|
||
rtf = res.unwrap();
|
||
buf8.clear();
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "خلال ١٫٢ يوم");
|
||
|
||
buf16.clear();
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf16).isOk());
|
||
ASSERT_EQ(buf16.get_string_view(), u"خلال ١٫٢ يوم");
|
||
}
|
||
|
||
TEST(IntlRelativeTimeFormat, Options)
|
||
{
|
||
RelativeTimeFormatOptions options = {
|
||
RelativeTimeFormatOptions::Style::Short,
|
||
RelativeTimeFormatOptions::Numeric::Auto};
|
||
Result<UniquePtr<RelativeTimeFormat>, ICUError> res =
|
||
RelativeTimeFormat::TryCreate("fr", options);
|
||
ASSERT_TRUE(res.isOk());
|
||
UniquePtr<RelativeTimeFormat> rtf = res.unwrap();
|
||
TestBuffer<char> buf8;
|
||
ASSERT_TRUE(
|
||
rtf->format(-3.14, RelativeTimeFormat::FormatUnit::Year, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "il y a 3,14 a");
|
||
|
||
options = {RelativeTimeFormatOptions::Style::Narrow,
|
||
RelativeTimeFormatOptions::Numeric::Auto};
|
||
res = RelativeTimeFormat::TryCreate("fr", options);
|
||
ASSERT_TRUE(res.isOk());
|
||
rtf = res.unwrap();
|
||
buf8.clear();
|
||
ASSERT_TRUE(
|
||
rtf->format(-3.14, RelativeTimeFormat::FormatUnit::Year, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "-3,14 a");
|
||
|
||
options = {RelativeTimeFormatOptions::Style::Long,
|
||
RelativeTimeFormatOptions::Numeric::Auto};
|
||
res = RelativeTimeFormat::TryCreate("fr", options);
|
||
ASSERT_TRUE(res.isOk());
|
||
rtf = res.unwrap();
|
||
buf8.clear();
|
||
ASSERT_TRUE(
|
||
rtf->format(-3.14, RelativeTimeFormat::FormatUnit::Year, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "il y a 3,14 ans");
|
||
|
||
options = {RelativeTimeFormatOptions::Style::Long,
|
||
RelativeTimeFormatOptions::Numeric::Auto};
|
||
res = RelativeTimeFormat::TryCreate("fr", options);
|
||
ASSERT_TRUE(res.isOk());
|
||
rtf = res.unwrap();
|
||
buf8.clear();
|
||
ASSERT_TRUE(
|
||
rtf->format(-1, RelativeTimeFormat::FormatUnit::Year, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "l’année dernière");
|
||
}
|
||
|
||
TEST(IntlRelativeTimeFormat, Units)
|
||
{
|
||
RelativeTimeFormatOptions options = {};
|
||
Result<UniquePtr<RelativeTimeFormat>, ICUError> res =
|
||
RelativeTimeFormat::TryCreate("en-US", options);
|
||
ASSERT_TRUE(res.isOk());
|
||
UniquePtr<RelativeTimeFormat> rtf = res.unwrap();
|
||
TestBuffer<char> buf8;
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Second, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "in 1.2 seconds");
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Minute, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "in 1.2 minutes");
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Hour, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "in 1.2 hours");
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "in 1.2 days");
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Week, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "in 1.2 weeks");
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Month, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "in 1.2 months");
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Quarter, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "in 1.2 quarters");
|
||
ASSERT_TRUE(
|
||
rtf->format(1.2, RelativeTimeFormat::FormatUnit::Year, buf8).isOk());
|
||
ASSERT_EQ(buf8.get_string_view(), "in 1.2 years");
|
||
}
|
||
|
||
TEST(IntlRelativeTimeFormat, FormatToParts)
|
||
{
|
||
RelativeTimeFormatOptions options = {
|
||
RelativeTimeFormatOptions::Style::Long,
|
||
RelativeTimeFormatOptions::Numeric::Auto};
|
||
Result<UniquePtr<RelativeTimeFormat>, ICUError> res =
|
||
RelativeTimeFormat::TryCreate("es-AR", options);
|
||
ASSERT_TRUE(res.isOk());
|
||
UniquePtr<RelativeTimeFormat> rtf = res.unwrap();
|
||
NumberPartVector parts;
|
||
Result<Span<const char16_t>, ICUError> strRes =
|
||
rtf->formatToParts(-1.2, RelativeTimeFormat::FormatUnit::Year, parts);
|
||
ASSERT_TRUE(strRes.isOk());
|
||
ASSERT_EQ(strRes.unwrap(), MakeStringSpan(u"hace 1,2 años"));
|
||
ASSERT_EQ(parts.length(), 5U);
|
||
ASSERT_EQ(parts[0],
|
||
(NumberPart{NumberPartType::Literal, NumberPartSource::Shared, 5}));
|
||
ASSERT_EQ(parts[1],
|
||
(NumberPart{NumberPartType::Integer, NumberPartSource::Shared, 6}));
|
||
ASSERT_EQ(parts[2],
|
||
(NumberPart{NumberPartType::Decimal, NumberPartSource::Shared, 7}));
|
||
ASSERT_EQ(parts[3], (NumberPart{NumberPartType::Fraction,
|
||
NumberPartSource::Shared, 8}));
|
||
ASSERT_EQ(parts[4], (NumberPart{NumberPartType::Literal,
|
||
NumberPartSource::Shared, 13}));
|
||
}
|
||
|
||
} // namespace mozilla::intl
|