tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestRelativeTimeFormat.cpp (6216B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 #include "gtest/gtest.h"
      5 
      6 #include "mozilla/intl/RelativeTimeFormat.h"
      7 #include "TestBuffer.h"
      8 
      9 namespace mozilla::intl {
     10 
     11 TEST(IntlRelativeTimeFormat, Basic)
     12 {
     13  RelativeTimeFormatOptions options = {};
     14  Result<UniquePtr<RelativeTimeFormat>, ICUError> res =
     15      RelativeTimeFormat::TryCreate("en-US", options);
     16  ASSERT_TRUE(res.isOk());
     17  UniquePtr<RelativeTimeFormat> rtf = res.unwrap();
     18  TestBuffer<char> buf8;
     19  ASSERT_TRUE(
     20      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf8).isOk());
     21  ASSERT_EQ(buf8.get_string_view(), "in 1.2 days");
     22 
     23  TestBuffer<char16_t> buf16;
     24  ASSERT_TRUE(
     25      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf16).isOk());
     26  ASSERT_EQ(buf16.get_string_view(), u"in 1.2 days");
     27 
     28  res = RelativeTimeFormat::TryCreate("es-AR", options);
     29  ASSERT_TRUE(res.isOk());
     30  rtf = res.unwrap();
     31  buf8.clear();
     32  ASSERT_TRUE(
     33      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf8).isOk());
     34  ASSERT_EQ(buf8.get_string_view(), "dentro de 1,2 días");
     35 
     36  buf16.clear();
     37  ASSERT_TRUE(
     38      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf16).isOk());
     39  ASSERT_EQ(buf16.get_string_view(), u"dentro de 1,2 días");
     40 
     41  res = RelativeTimeFormat::TryCreate("ar-EG", options);
     42  ASSERT_TRUE(res.isOk());
     43  rtf = res.unwrap();
     44  buf8.clear();
     45  ASSERT_TRUE(
     46      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf8).isOk());
     47  ASSERT_EQ(buf8.get_string_view(), "خلال ١٫٢ يوم");
     48 
     49  buf16.clear();
     50  ASSERT_TRUE(
     51      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf16).isOk());
     52  ASSERT_EQ(buf16.get_string_view(), u"خلال ١٫٢ يوم");
     53 }
     54 
     55 TEST(IntlRelativeTimeFormat, Options)
     56 {
     57  RelativeTimeFormatOptions options = {
     58      RelativeTimeFormatOptions::Style::Short,
     59      RelativeTimeFormatOptions::Numeric::Auto};
     60  Result<UniquePtr<RelativeTimeFormat>, ICUError> res =
     61      RelativeTimeFormat::TryCreate("fr", options);
     62  ASSERT_TRUE(res.isOk());
     63  UniquePtr<RelativeTimeFormat> rtf = res.unwrap();
     64  TestBuffer<char> buf8;
     65  ASSERT_TRUE(
     66      rtf->format(-3.14, RelativeTimeFormat::FormatUnit::Year, buf8).isOk());
     67  ASSERT_EQ(buf8.get_string_view(), "il y a 3,14 a");
     68 
     69  options = {RelativeTimeFormatOptions::Style::Narrow,
     70             RelativeTimeFormatOptions::Numeric::Auto};
     71  res = RelativeTimeFormat::TryCreate("fr", options);
     72  ASSERT_TRUE(res.isOk());
     73  rtf = res.unwrap();
     74  buf8.clear();
     75  ASSERT_TRUE(
     76      rtf->format(-3.14, RelativeTimeFormat::FormatUnit::Year, buf8).isOk());
     77  ASSERT_EQ(buf8.get_string_view(), "-3,14 a");
     78 
     79  options = {RelativeTimeFormatOptions::Style::Long,
     80             RelativeTimeFormatOptions::Numeric::Auto};
     81  res = RelativeTimeFormat::TryCreate("fr", options);
     82  ASSERT_TRUE(res.isOk());
     83  rtf = res.unwrap();
     84  buf8.clear();
     85  ASSERT_TRUE(
     86      rtf->format(-3.14, RelativeTimeFormat::FormatUnit::Year, buf8).isOk());
     87  ASSERT_EQ(buf8.get_string_view(), "il y a 3,14 ans");
     88 
     89  options = {RelativeTimeFormatOptions::Style::Long,
     90             RelativeTimeFormatOptions::Numeric::Auto};
     91  res = RelativeTimeFormat::TryCreate("fr", options);
     92  ASSERT_TRUE(res.isOk());
     93  rtf = res.unwrap();
     94  buf8.clear();
     95  ASSERT_TRUE(
     96      rtf->format(-1, RelativeTimeFormat::FormatUnit::Year, buf8).isOk());
     97  ASSERT_EQ(buf8.get_string_view(), "l’année dernière");
     98 }
     99 
    100 TEST(IntlRelativeTimeFormat, Units)
    101 {
    102  RelativeTimeFormatOptions options = {};
    103  Result<UniquePtr<RelativeTimeFormat>, ICUError> res =
    104      RelativeTimeFormat::TryCreate("en-US", options);
    105  ASSERT_TRUE(res.isOk());
    106  UniquePtr<RelativeTimeFormat> rtf = res.unwrap();
    107  TestBuffer<char> buf8;
    108  ASSERT_TRUE(
    109      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Second, buf8).isOk());
    110  ASSERT_EQ(buf8.get_string_view(), "in 1.2 seconds");
    111  ASSERT_TRUE(
    112      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Minute, buf8).isOk());
    113  ASSERT_EQ(buf8.get_string_view(), "in 1.2 minutes");
    114  ASSERT_TRUE(
    115      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Hour, buf8).isOk());
    116  ASSERT_EQ(buf8.get_string_view(), "in 1.2 hours");
    117  ASSERT_TRUE(
    118      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Day, buf8).isOk());
    119  ASSERT_EQ(buf8.get_string_view(), "in 1.2 days");
    120  ASSERT_TRUE(
    121      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Week, buf8).isOk());
    122  ASSERT_EQ(buf8.get_string_view(), "in 1.2 weeks");
    123  ASSERT_TRUE(
    124      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Month, buf8).isOk());
    125  ASSERT_EQ(buf8.get_string_view(), "in 1.2 months");
    126  ASSERT_TRUE(
    127      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Quarter, buf8).isOk());
    128  ASSERT_EQ(buf8.get_string_view(), "in 1.2 quarters");
    129  ASSERT_TRUE(
    130      rtf->format(1.2, RelativeTimeFormat::FormatUnit::Year, buf8).isOk());
    131  ASSERT_EQ(buf8.get_string_view(), "in 1.2 years");
    132 }
    133 
    134 TEST(IntlRelativeTimeFormat, FormatToParts)
    135 {
    136  RelativeTimeFormatOptions options = {
    137      RelativeTimeFormatOptions::Style::Long,
    138      RelativeTimeFormatOptions::Numeric::Auto};
    139  Result<UniquePtr<RelativeTimeFormat>, ICUError> res =
    140      RelativeTimeFormat::TryCreate("es-AR", options);
    141  ASSERT_TRUE(res.isOk());
    142  UniquePtr<RelativeTimeFormat> rtf = res.unwrap();
    143  NumberPartVector parts;
    144  Result<Span<const char16_t>, ICUError> strRes =
    145      rtf->formatToParts(-1.2, RelativeTimeFormat::FormatUnit::Year, parts);
    146  ASSERT_TRUE(strRes.isOk());
    147  ASSERT_EQ(strRes.unwrap(), MakeStringSpan(u"hace 1,2 años"));
    148  ASSERT_EQ(parts.length(), 5U);
    149  ASSERT_EQ(parts[0],
    150            (NumberPart{NumberPartType::Literal, NumberPartSource::Shared, 5}));
    151  ASSERT_EQ(parts[1],
    152            (NumberPart{NumberPartType::Integer, NumberPartSource::Shared, 6}));
    153  ASSERT_EQ(parts[2],
    154            (NumberPart{NumberPartType::Decimal, NumberPartSource::Shared, 7}));
    155  ASSERT_EQ(parts[3], (NumberPart{NumberPartType::Fraction,
    156                                  NumberPartSource::Shared, 8}));
    157  ASSERT_EQ(parts[4], (NumberPart{NumberPartType::Literal,
    158                                  NumberPartSource::Shared, 13}));
    159 }
    160 
    161 }  // namespace mozilla::intl