tor-browser

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

TestNumberRangeFormat.cpp (4417B)


      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 <string_view>
      7 
      8 #include "mozilla/intl/NumberRangeFormat.h"
      9 #include "./TestBuffer.h"
     10 
     11 namespace mozilla {
     12 namespace intl {
     13 
     14 using namespace std::literals;
     15 
     16 TEST(IntlNumberRangeFormat, Basic)
     17 {
     18  NumberRangeFormatOptions options;
     19  UniquePtr<NumberRangeFormat> nf =
     20      NumberRangeFormat::TryCreate("en-US", options).unwrap();
     21 
     22  const char16_t* res16 = nf->format(1234.56, 1234.56).unwrap().data();
     23  ASSERT_TRUE(res16 != nullptr);
     24  ASSERT_EQ(res16, u"1,234.56"sv);
     25 
     26  options.mRangeIdentityFallback = NumberRangeFormatOptions::Approximately;
     27  nf = std::move(NumberRangeFormat::TryCreate("en-US", options).unwrap());
     28 
     29  res16 = nf->format("1234.56", "1234.56").unwrap().data();
     30  ASSERT_TRUE(res16 != nullptr);
     31  ASSERT_EQ(res16, u"~1,234.56"sv);
     32 
     33  res16 = nf->format("1234.56", "2999.89").unwrap().data();
     34  ASSERT_TRUE(res16 != nullptr);
     35  ASSERT_EQ(res16, u"1,234.56–2,999.89"sv);
     36 
     37  nf = std::move(NumberRangeFormat::TryCreate("ar", options).unwrap());
     38 
     39  res16 = nfAr->format(1234.56, 1234.56).unwrap().data();
     40  ASSERT_TRUE(res16 != nullptr);
     41  ASSERT_EQ(res16, u"~١٬٢٣٤٫٥٦"sv);
     42 
     43  res16 = nfAr->format(1234.56, 2999.89).unwrap().data();
     44  ASSERT_TRUE(res16 != nullptr);
     45  ASSERT_EQ(res16, u"١٬٢٣٤٫٥٦–٢٬٩٩٩٫٨٩"sv);
     46 }
     47 
     48 TEST(IntlNumberRangeFormat, Currency)
     49 {
     50  NumberRangeFormatOptions options;
     51  options.mCurrency = Some(
     52      std::make_pair("MXN", NumberRangeFormatOptions::CurrencyDisplay::Symbol));
     53  UniquePtr<NumberRangeFormat> nf =
     54      NumberRangeFormat::TryCreate("es-MX", options).unwrap();
     55 
     56  const char16_t* res = nf->format(123456.789, 299999.89).unwrap().data();
     57  ASSERT_TRUE(res != nullptr);
     58  ASSERT_EQ(std::u16string_view(res), u"$123,456.79 - $299,999.89"sv);
     59 
     60  options.mCurrency = Some(
     61      std::make_pair("EUR", NumberRangeFormatOptions::CurrencyDisplay::Symbol));
     62  nf = std::move(NumberRangeFormat::TryCreate("fr", options).unwrap());
     63 
     64  res = nf->format(123456.789, 299999.89).unwrap().data();
     65  ASSERT_TRUE(res != nullptr);
     66  ASSERT_EQ(std::u16string_view(res), u"123 456,79–299 999,89 €"sv);
     67 }
     68 
     69 TEST(IntlNumberRangeFormat, Unit)
     70 {
     71  NumberRangeFormatOptions options;
     72  options.mUnit = Some(std::make_pair(
     73      "meter-per-second", NumberRangeFormatOptions::UnitDisplay::Long));
     74  UniquePtr<NumberRangeFormat> nf =
     75      NumberRangeFormat::TryCreate("es-MX", options).unwrap();
     76 
     77  const char16_t* res = nf->format(12.34, 56.78).unwrap().data();
     78  ASSERT_TRUE(res != nullptr);
     79  ASSERT_EQ(std::u16string_view(res), u"12.34-56.78 metros por segundo");
     80 }
     81 
     82 TEST(IntlNumberRangeFormat, FormatToParts)
     83 {
     84  NumberRangeFormatOptions options;
     85  UniquePtr<NumberRangeFormat> nf =
     86      NumberRangeFormat::TryCreate("es-ES", options).unwrap();
     87  NumberPartVector parts;
     88  const char16_t* res =
     89      nf->formatToParts(123456.789, 299999.89, parts).unwrap().data();
     90  ASSERT_TRUE(res != nullptr);
     91  ASSERT_EQ(std::u16string_view(res), u"123.456,789-299.999,89"sv);
     92  ASSERT_EQ(parts.length(), 11U);
     93  ASSERT_EQ(parts[0],
     94            (NumberPart{NumberPartType::Integer, NumberPartSource::Start, 3}));
     95  ASSERT_EQ(parts[1],
     96            (NumberPart{NumberPartType::Group, NumberPartSource::Start, 4}));
     97  ASSERT_EQ(parts[2],
     98            (NumberPart{NumberPartType::Integer, NumberPartSource::Start, 7}));
     99  ASSERT_EQ(parts[3],
    100            (NumberPart{NumberPartType::Decimal, NumberPartSource::Start, 8}));
    101  ASSERT_EQ(parts[4], (NumberPart{NumberPartType::Fraction,
    102                                  NumberPartSource::Start, 11}));
    103  ASSERT_EQ(parts[5], (NumberPart{NumberPartType::Fraction,
    104                                  NumberPartSource::Shared, 12}));
    105  ASSERT_EQ(parts[6],
    106            (NumberPart{NumberPartType::Integer, NumberPartSource::End, 15}));
    107  ASSERT_EQ(parts[7],
    108            (NumberPart{NumberPartType::Group, NumberPartSource::End, 16}));
    109  ASSERT_EQ(parts[8],
    110            (NumberPart{NumberPartType::Integer, NumberPartSource::End, 19}));
    111  ASSERT_EQ(parts[9],
    112            (NumberPart{NumberPartType::Decimal, NumberPartSource::End, 20}));
    113  ASSERT_EQ(parts[10],
    114            (NumberPart{NumberPartType::Fraction, NumberPartSource::End, 23}));
    115 }
    116 
    117 }  // namespace intl
    118 }  // namespace mozilla