TestDisplayNames.cpp (22868B)
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 "TestBuffer.h" 7 #include "mozilla/intl/DisplayNames.h" 8 9 namespace mozilla::intl { 10 11 TEST(IntlDisplayNames, Script) 12 { 13 TestBuffer<char16_t> buffer; 14 15 DisplayNames::Options options{}; 16 options.style = DisplayNames::Style::Long; 17 18 { 19 auto result = DisplayNames::TryCreate("en-US", options); 20 ASSERT_TRUE(result.isOk()); 21 auto displayNames = result.unwrap(); 22 23 ASSERT_TRUE(displayNames->GetScript(buffer, MakeStringSpan("Hans")).isOk()); 24 ASSERT_TRUE(buffer.verboseMatches(u"Simplified Han")); 25 26 buffer.clear(); 27 { 28 // The code is too long here. 29 auto err = 30 displayNames->GetScript(buffer, MakeStringSpan("ThisIsTooLong")); 31 ASSERT_TRUE(err.isErr()); 32 ASSERT_EQ(err.unwrapErr(), DisplayNamesError::InvalidOption); 33 ASSERT_TRUE(buffer.verboseMatches(u"")); 34 } 35 36 // Test fallbacking for unknown scripts. 37 38 buffer.clear(); 39 ASSERT_TRUE(displayNames 40 ->GetScript(buffer, MakeStringSpan("Fake"), 41 DisplayNames::Fallback::None) 42 .isOk()); 43 ASSERT_TRUE(buffer.verboseMatches(u"")); 44 45 buffer.clear(); 46 ASSERT_TRUE(displayNames 47 ->GetScript(buffer, MakeStringSpan("Fake"), 48 DisplayNames::Fallback::Code) 49 .isOk()); 50 ASSERT_TRUE(buffer.verboseMatches(u"Fake")); 51 } 52 53 { 54 auto result = DisplayNames::TryCreate("es-ES", options); 55 ASSERT_TRUE(result.isOk()); 56 auto displayNames = result.unwrap(); 57 58 buffer.clear(); 59 ASSERT_TRUE(displayNames->GetScript(buffer, MakeStringSpan("Hans")).isOk()); 60 ASSERT_TRUE(buffer.verboseMatches(u"han simplificado")); 61 } 62 63 options.style = DisplayNames::Style::Short; 64 { 65 auto result = DisplayNames::TryCreate("en-US", options); 66 ASSERT_TRUE(result.isOk()); 67 auto displayNames = result.unwrap(); 68 69 buffer.clear(); 70 ASSERT_TRUE(displayNames->GetScript(buffer, MakeStringSpan("Hans")).isOk()); 71 ASSERT_TRUE(buffer.verboseMatches(u"Simplified")); 72 73 // Test fallbacking for unknown scripts. 74 buffer.clear(); 75 ASSERT_TRUE(displayNames 76 ->GetScript(buffer, MakeStringSpan("Fake"), 77 DisplayNames::Fallback::None) 78 .isOk()); 79 ASSERT_TRUE(buffer.verboseMatches(u"")); 80 81 buffer.clear(); 82 ASSERT_TRUE(displayNames 83 ->GetScript(buffer, MakeStringSpan("Fake"), 84 DisplayNames::Fallback::Code) 85 .isOk()); 86 ASSERT_TRUE(buffer.verboseMatches(u"Fake")); 87 } 88 89 { 90 auto result = DisplayNames::TryCreate("es-ES", options); 91 ASSERT_TRUE(result.isOk()); 92 auto displayNames = result.unwrap(); 93 94 buffer.clear(); 95 ASSERT_TRUE(displayNames->GetScript(buffer, MakeStringSpan("Hans")).isOk()); 96 ASSERT_TRUE(buffer.verboseMatches(u"simplificado")); 97 } 98 } 99 100 TEST(IntlDisplayNames, Language) 101 { 102 TestBuffer<char16_t> buffer; 103 DisplayNames::Options options{}; 104 105 { 106 auto result = DisplayNames::TryCreate("en-US", options); 107 ASSERT_TRUE(result.isOk()); 108 auto displayNames = result.unwrap(); 109 110 ASSERT_TRUE( 111 displayNames->GetLanguage(buffer, MakeStringSpan("es-ES")).isOk()); 112 ASSERT_TRUE(buffer.verboseMatches(u"Spanish (Spain)")); 113 114 buffer.clear(); 115 ASSERT_TRUE( 116 displayNames->GetLanguage(buffer, MakeStringSpan("zh-Hant")).isOk()); 117 ASSERT_TRUE(buffer.verboseMatches(u"Chinese (Traditional)")); 118 119 // The undefined locale returns an empty string. 120 buffer.clear(); 121 ASSERT_TRUE( 122 displayNames->GetLanguage(buffer, MakeStringSpan("und")).isOk()); 123 ASSERT_TRUE(buffer.get_string_view().empty()); 124 125 // Invalid locales are an error. 126 buffer.clear(); 127 ASSERT_EQ( 128 displayNames->GetLanguage(buffer, MakeStringSpan("asdf")).unwrapErr(), 129 DisplayNamesError::InvalidOption); 130 ASSERT_TRUE(buffer.get_string_view().empty()); 131 132 // Unknown locales return an empty string. 133 buffer.clear(); 134 ASSERT_TRUE(displayNames 135 ->GetLanguage(buffer, MakeStringSpan("zz"), 136 DisplayNames::Fallback::None) 137 .isOk()); 138 ASSERT_TRUE(buffer.verboseMatches(u"")); 139 140 // Unknown locales can fallback to the language code. 141 buffer.clear(); 142 ASSERT_TRUE(displayNames 143 ->GetLanguage(buffer, MakeStringSpan("zz-US"), 144 DisplayNames::Fallback::Code) 145 .isOk()); 146 ASSERT_TRUE(buffer.verboseMatches(u"zz-US")); 147 148 // Unknown locales with a unicode extension error. Is this correct? 149 buffer.clear(); 150 ASSERT_TRUE(displayNames 151 ->GetLanguage(buffer, MakeStringSpan("zz-US-u-ca-chinese"), 152 DisplayNames::Fallback::Code) 153 .isErr()); 154 ASSERT_TRUE(buffer.verboseMatches(u"")); 155 } 156 { 157 auto result = DisplayNames::TryCreate("es-ES", options); 158 ASSERT_TRUE(result.isOk()); 159 auto displayNames = result.unwrap(); 160 161 buffer.clear(); 162 ASSERT_TRUE( 163 displayNames->GetLanguage(buffer, MakeStringSpan("es-ES")).isOk()); 164 ASSERT_TRUE(buffer.verboseMatches(u"español (España)")); 165 166 buffer.clear(); 167 ASSERT_TRUE( 168 displayNames->GetLanguage(buffer, MakeStringSpan("zh-Hant")).isOk()); 169 ASSERT_TRUE(buffer.verboseMatches(u"chino (tradicional)")); 170 } 171 } 172 173 TEST(IntlDisplayNames, Region) 174 { 175 TestBuffer<char16_t> buffer; 176 177 DisplayNames::Options options{}; 178 options.style = DisplayNames::Style::Long; 179 180 { 181 auto result = DisplayNames::TryCreate("en-US", options); 182 ASSERT_TRUE(result.isOk()); 183 auto displayNames = result.unwrap(); 184 185 ASSERT_TRUE(displayNames->GetRegion(buffer, MakeStringSpan("US")).isOk()); 186 ASSERT_TRUE(buffer.verboseMatches(u"United States")); 187 188 ASSERT_TRUE(displayNames->GetRegion(buffer, MakeStringSpan("ES")).isOk()); 189 ASSERT_TRUE(buffer.verboseMatches(u"Spain")); 190 191 ASSERT_TRUE(displayNames 192 ->GetRegion(buffer, MakeStringSpan("ZX"), 193 DisplayNames::Fallback::None) 194 .isOk()); 195 ASSERT_TRUE(buffer.verboseMatches(u"")); 196 197 ASSERT_TRUE(displayNames 198 ->GetRegion(buffer, MakeStringSpan("ZX"), 199 DisplayNames::Fallback::Code) 200 .isOk()); 201 ASSERT_TRUE(buffer.verboseMatches(u"ZX")); 202 } 203 { 204 auto result = DisplayNames::TryCreate("es-ES", options); 205 ASSERT_TRUE(result.isOk()); 206 auto displayNames = result.unwrap(); 207 208 ASSERT_TRUE(displayNames->GetRegion(buffer, MakeStringSpan("US")).isOk()); 209 ASSERT_TRUE(buffer.verboseMatches(u"Estados Unidos")); 210 211 ASSERT_TRUE(displayNames->GetRegion(buffer, MakeStringSpan("ES")).isOk()); 212 ASSERT_TRUE(buffer.verboseMatches(u"España")); 213 } 214 } 215 216 TEST(IntlDisplayNames, Currency) 217 { 218 TestBuffer<char16_t> buffer; 219 220 DisplayNames::Options options{}; 221 options.style = DisplayNames::Style::Long; 222 223 auto result = DisplayNames::TryCreate("en-US", options); 224 ASSERT_TRUE(result.isOk()); 225 auto displayNames = result.unwrap(); 226 ASSERT_TRUE(displayNames->GetCurrency(buffer, MakeStringSpan("EUR")).isOk()); 227 ASSERT_TRUE(buffer.verboseMatches(u"Euro")); 228 229 ASSERT_TRUE(displayNames->GetCurrency(buffer, MakeStringSpan("USD")).isOk()); 230 ASSERT_TRUE(buffer.verboseMatches(u"US Dollar")); 231 232 ASSERT_TRUE(displayNames 233 ->GetCurrency(buffer, MakeStringSpan("moz"), 234 DisplayNames::Fallback::None) 235 .isOk()); 236 ASSERT_TRUE(buffer.verboseMatches(u"")); 237 238 ASSERT_TRUE(displayNames 239 ->GetCurrency(buffer, MakeStringSpan("moz"), 240 DisplayNames::Fallback::Code) 241 .isOk()); 242 ASSERT_TRUE(buffer.verboseMatches(u"MOZ")); 243 244 // Invalid options. 245 { 246 // Code with fewer than 3 characters. 247 auto err = displayNames->GetCurrency(buffer, MakeStringSpan("US")); 248 ASSERT_TRUE(err.isErr()); 249 ASSERT_EQ(err.unwrapErr(), DisplayNamesError::InvalidOption); 250 } 251 { 252 // Code with more than 3 characters. 253 auto err = displayNames->GetCurrency(buffer, MakeStringSpan("USDDDDDDD")); 254 ASSERT_TRUE(err.isErr()); 255 ASSERT_EQ(err.unwrapErr(), DisplayNamesError::InvalidOption); 256 } 257 { 258 // Code with non-ascii alpha letters/ 259 auto err = displayNames->GetCurrency(buffer, MakeStringSpan("US1")); 260 ASSERT_TRUE(err.isErr()); 261 ASSERT_EQ(err.unwrapErr(), DisplayNamesError::InvalidOption); 262 } 263 } 264 265 TEST(IntlDisplayNames, Calendar) 266 { 267 TestBuffer<char16_t> buffer; 268 269 DisplayNames::Options options{}; 270 auto result = DisplayNames::TryCreate("en-US", options); 271 ASSERT_TRUE(result.isOk()); 272 auto displayNames = result.unwrap(); 273 274 ASSERT_TRUE( 275 displayNames->GetCalendar(buffer, MakeStringSpan("buddhist")).isOk()); 276 ASSERT_TRUE(buffer.verboseMatches(u"Buddhist Calendar")); 277 278 ASSERT_TRUE( 279 displayNames->GetCalendar(buffer, MakeStringSpan("gregory")).isOk()); 280 ASSERT_TRUE(buffer.verboseMatches(u"Gregorian Calendar")); 281 282 ASSERT_TRUE( 283 displayNames->GetCalendar(buffer, MakeStringSpan("GREGORY")).isOk()); 284 ASSERT_TRUE(buffer.verboseMatches(u"Gregorian Calendar")); 285 286 { 287 // Code with non-ascii alpha letters. 288 auto err = 289 displayNames->GetCalendar(buffer, MakeStringSpan("🥸 not ascii")); 290 ASSERT_TRUE(err.isErr()); 291 ASSERT_EQ(err.unwrapErr(), DisplayNamesError::InvalidOption); 292 } 293 { 294 // Empty string. 295 auto err = displayNames->GetCalendar(buffer, MakeStringSpan("")); 296 ASSERT_TRUE(err.isErr()); 297 ASSERT_EQ(err.unwrapErr(), DisplayNamesError::InvalidOption); 298 } 299 { 300 // Non-valid ascii. 301 auto err = displayNames->GetCalendar( 302 buffer, MakeStringSpan("ascii-but_not(valid)1234")); 303 ASSERT_TRUE(err.isErr()); 304 ASSERT_EQ(err.unwrapErr(), DisplayNamesError::InvalidOption); 305 } 306 307 // Test fallbacking. 308 309 ASSERT_TRUE(displayNames 310 ->GetCalendar(buffer, MakeStringSpan("moz"), 311 DisplayNames::Fallback::None) 312 .isOk()); 313 ASSERT_TRUE(buffer.verboseMatches(u"")); 314 315 ASSERT_TRUE(displayNames 316 ->GetCalendar(buffer, MakeStringSpan("moz"), 317 DisplayNames::Fallback::Code) 318 .isOk()); 319 ASSERT_TRUE(buffer.verboseMatches(u"moz")); 320 321 ASSERT_TRUE(displayNames 322 ->GetCalendar(buffer, MakeStringSpan("MOZ"), 323 DisplayNames::Fallback::Code) 324 .isOk()); 325 ASSERT_TRUE(buffer.verboseMatches(u"moz")); 326 } 327 328 TEST(IntlDisplayNames, Weekday) 329 { 330 TestBuffer<char16_t> buffer; 331 332 DisplayNames::Options options{}; 333 Span<const char> calendar{}; 334 auto result = DisplayNames::TryCreate("en-US", options); 335 ASSERT_TRUE(result.isOk()); 336 auto displayNames = result.unwrap(); 337 338 ASSERT_TRUE( 339 displayNames->GetWeekday(buffer, Weekday::Monday, calendar).isOk()); 340 ASSERT_TRUE(buffer.verboseMatches(u"Monday")); 341 ASSERT_TRUE( 342 displayNames->GetWeekday(buffer, Weekday::Tuesday, calendar).isOk()); 343 ASSERT_TRUE(buffer.verboseMatches(u"Tuesday")); 344 ASSERT_TRUE( 345 displayNames->GetWeekday(buffer, Weekday::Wednesday, calendar).isOk()); 346 ASSERT_TRUE(buffer.verboseMatches(u"Wednesday")); 347 ASSERT_TRUE( 348 displayNames->GetWeekday(buffer, Weekday::Thursday, calendar).isOk()); 349 ASSERT_TRUE(buffer.verboseMatches(u"Thursday")); 350 ASSERT_TRUE( 351 displayNames->GetWeekday(buffer, Weekday::Friday, calendar).isOk()); 352 ASSERT_TRUE(buffer.verboseMatches(u"Friday")); 353 ASSERT_TRUE( 354 displayNames->GetWeekday(buffer, Weekday::Saturday, calendar).isOk()); 355 ASSERT_TRUE(buffer.verboseMatches(u"Saturday")); 356 ASSERT_TRUE( 357 displayNames->GetWeekday(buffer, Weekday::Sunday, calendar).isOk()); 358 ASSERT_TRUE(buffer.verboseMatches(u"Sunday")); 359 } 360 361 TEST(IntlDisplayNames, WeekdaySpanish) 362 { 363 TestBuffer<char16_t> buffer; 364 365 DisplayNames::Options options{}; 366 Span<const char> calendar{}; 367 auto result = DisplayNames::TryCreate("es-ES", options); 368 ASSERT_TRUE(result.isOk()); 369 auto displayNames = result.unwrap(); 370 371 ASSERT_TRUE( 372 displayNames->GetWeekday(buffer, Weekday::Monday, calendar).isOk()); 373 ASSERT_TRUE(buffer.verboseMatches(u"lunes")); 374 ASSERT_TRUE( 375 displayNames->GetWeekday(buffer, Weekday::Tuesday, calendar).isOk()); 376 ASSERT_TRUE(buffer.verboseMatches(u"martes")); 377 ASSERT_TRUE( 378 displayNames->GetWeekday(buffer, Weekday::Wednesday, calendar).isOk()); 379 ASSERT_TRUE(buffer.verboseMatches(u"miércoles")); 380 ASSERT_TRUE( 381 displayNames->GetWeekday(buffer, Weekday::Thursday, calendar).isOk()); 382 ASSERT_TRUE(buffer.verboseMatches(u"jueves")); 383 ASSERT_TRUE( 384 displayNames->GetWeekday(buffer, Weekday::Friday, calendar).isOk()); 385 ASSERT_TRUE(buffer.verboseMatches(u"viernes")); 386 ASSERT_TRUE( 387 displayNames->GetWeekday(buffer, Weekday::Saturday, calendar).isOk()); 388 ASSERT_TRUE(buffer.verboseMatches(u"sábado")); 389 ASSERT_TRUE( 390 displayNames->GetWeekday(buffer, Weekday::Sunday, calendar).isOk()); 391 ASSERT_TRUE(buffer.verboseMatches(u"domingo")); 392 } 393 394 TEST(IntlDisplayNames, Month) 395 { 396 TestBuffer<char16_t> buffer; 397 398 DisplayNames::Options options{}; 399 Span<const char> calendar{}; 400 auto result = DisplayNames::TryCreate("en-US", options); 401 ASSERT_TRUE(result.isOk()); 402 auto displayNames = result.unwrap(); 403 404 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::January, calendar).isOk()); 405 ASSERT_TRUE(buffer.verboseMatches(u"January")); 406 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::February, calendar).isOk()); 407 ASSERT_TRUE(buffer.verboseMatches(u"February")); 408 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::March, calendar).isOk()); 409 ASSERT_TRUE(buffer.verboseMatches(u"March")); 410 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::April, calendar).isOk()); 411 ASSERT_TRUE(buffer.verboseMatches(u"April")); 412 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::May, calendar).isOk()); 413 ASSERT_TRUE(buffer.verboseMatches(u"May")); 414 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::June, calendar).isOk()); 415 ASSERT_TRUE(buffer.verboseMatches(u"June")); 416 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::July, calendar).isOk()); 417 ASSERT_TRUE(buffer.verboseMatches(u"July")); 418 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::August, calendar).isOk()); 419 ASSERT_TRUE(buffer.verboseMatches(u"August")); 420 ASSERT_TRUE( 421 displayNames->GetMonth(buffer, Month::September, calendar).isOk()); 422 ASSERT_TRUE(buffer.verboseMatches(u"September")); 423 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::October, calendar).isOk()); 424 ASSERT_TRUE(buffer.verboseMatches(u"October")); 425 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::November, calendar).isOk()); 426 ASSERT_TRUE(buffer.verboseMatches(u"November")); 427 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::December, calendar).isOk()); 428 ASSERT_TRUE(buffer.verboseMatches(u"December")); 429 ASSERT_TRUE( 430 displayNames->GetMonth(buffer, Month::Undecimber, calendar).isOk()); 431 ASSERT_TRUE(buffer.verboseMatches(u"")); 432 } 433 434 TEST(IntlDisplayNames, MonthHebrew) 435 { 436 TestBuffer<char16_t> buffer; 437 438 DisplayNames::Options options{}; 439 Span<const char> calendar{}; 440 auto result = DisplayNames::TryCreate("en-u-ca-hebrew", options); 441 ASSERT_TRUE(result.isOk()); 442 auto displayNames = result.unwrap(); 443 444 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::January, calendar).isOk()); 445 ASSERT_TRUE(buffer.verboseMatches(u"Tishri")); 446 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::February, calendar).isOk()); 447 ASSERT_TRUE(buffer.verboseMatches(u"Heshvan")); 448 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::March, calendar).isOk()); 449 ASSERT_TRUE(buffer.verboseMatches(u"Kislev")); 450 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::April, calendar).isOk()); 451 ASSERT_TRUE(buffer.verboseMatches(u"Tevet")); 452 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::May, calendar).isOk()); 453 ASSERT_TRUE(buffer.verboseMatches(u"Shevat")); 454 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::June, calendar).isOk()); 455 ASSERT_TRUE(buffer.verboseMatches(u"Adar I")); 456 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::July, calendar).isOk()); 457 ASSERT_TRUE(buffer.verboseMatches(u"Adar")); 458 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::August, calendar).isOk()); 459 ASSERT_TRUE(buffer.verboseMatches(u"Nisan")); 460 ASSERT_TRUE( 461 displayNames->GetMonth(buffer, Month::September, calendar).isOk()); 462 ASSERT_TRUE(buffer.verboseMatches(u"Iyar")); 463 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::October, calendar).isOk()); 464 ASSERT_TRUE(buffer.verboseMatches(u"Sivan")); 465 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::November, calendar).isOk()); 466 ASSERT_TRUE(buffer.verboseMatches(u"Tamuz")); 467 ASSERT_TRUE(displayNames->GetMonth(buffer, Month::December, calendar).isOk()); 468 ASSERT_TRUE(buffer.verboseMatches(u"Av")); 469 ASSERT_TRUE( 470 displayNames->GetMonth(buffer, Month::Undecimber, calendar).isOk()); 471 ASSERT_TRUE(buffer.verboseMatches(u"Elul")); 472 } 473 474 TEST(IntlDisplayNames, MonthCalendarOption) 475 { 476 TestBuffer<char16_t> buffer; 477 478 { 479 // No calendar. 480 DisplayNames::Options options{}; 481 Span<const char> calendar{}; 482 auto result = DisplayNames::TryCreate("en", options); 483 ASSERT_TRUE(result.isOk()); 484 auto displayNames = result.unwrap(); 485 486 ASSERT_TRUE( 487 displayNames->GetMonth(buffer, Month::January, calendar).isOk()); 488 ASSERT_TRUE(buffer.verboseMatches(u"January")); 489 } 490 { 491 // Switch to hebrew. 492 DisplayNames::Options options{}; 493 Span<const char> calendar = MakeStringSpan("hebrew"); 494 auto result = DisplayNames::TryCreate("en", options); 495 ASSERT_TRUE(result.isOk()); 496 auto displayNames = result.unwrap(); 497 498 ASSERT_TRUE( 499 displayNames->GetMonth(buffer, Month::January, calendar).isOk()); 500 ASSERT_TRUE(buffer.verboseMatches(u"Tishri")); 501 } 502 { 503 // Conflicting tags. 504 DisplayNames::Options options{}; 505 Span<const char> calendar = MakeStringSpan("hebrew"); 506 auto result = DisplayNames::TryCreate("en-u-ca-gregory", options); 507 ASSERT_TRUE(result.isOk()); 508 auto displayNames = result.unwrap(); 509 510 ASSERT_TRUE( 511 displayNames->GetMonth(buffer, Month::January, calendar).isOk()); 512 ASSERT_TRUE(buffer.verboseMatches(u"Tishri")); 513 } 514 { 515 // Conflicting tags. 516 DisplayNames::Options options{}; 517 Span<const char> calendar = MakeStringSpan("gregory"); 518 auto result = DisplayNames::TryCreate("en-u-ca-hebrew", options); 519 ASSERT_TRUE(result.isOk()); 520 auto displayNames = result.unwrap(); 521 522 ASSERT_TRUE( 523 displayNames->GetMonth(buffer, Month::January, calendar).isOk()); 524 ASSERT_TRUE(buffer.verboseMatches(u"January")); 525 } 526 } 527 528 TEST(IntlDisplayNames, Quarter) 529 { 530 TestBuffer<char16_t> buffer; 531 532 DisplayNames::Options options{}; 533 Span<const char> calendar{}; 534 auto result = DisplayNames::TryCreate("en-US", options); 535 ASSERT_TRUE(result.isOk()); 536 auto displayNames = result.unwrap(); 537 538 ASSERT_TRUE(displayNames->GetQuarter(buffer, Quarter::Q1, calendar).isOk()); 539 ASSERT_TRUE(buffer.verboseMatches(u"1st quarter")); 540 ASSERT_TRUE(displayNames->GetQuarter(buffer, Quarter::Q2, calendar).isOk()); 541 ASSERT_TRUE(buffer.verboseMatches(u"2nd quarter")); 542 ASSERT_TRUE(displayNames->GetQuarter(buffer, Quarter::Q3, calendar).isOk()); 543 ASSERT_TRUE(buffer.verboseMatches(u"3rd quarter")); 544 ASSERT_TRUE(displayNames->GetQuarter(buffer, Quarter::Q4, calendar).isOk()); 545 ASSERT_TRUE(buffer.verboseMatches(u"4th quarter")); 546 } 547 548 TEST(IntlDisplayNames, DayPeriod_en_US) 549 { 550 TestBuffer<char16_t> buffer; 551 552 DisplayNames::Options options{}; 553 Span<const char> calendar{}; 554 auto result = DisplayNames::TryCreate("en-US", options); 555 ASSERT_TRUE(result.isOk()); 556 auto displayNames = result.unwrap(); 557 558 ASSERT_TRUE( 559 displayNames->GetDayPeriod(buffer, DayPeriod::AM, calendar).isOk()); 560 ASSERT_TRUE(buffer.verboseMatches(u"AM")); 561 ASSERT_TRUE( 562 displayNames->GetDayPeriod(buffer, DayPeriod::PM, calendar).isOk()); 563 ASSERT_TRUE(buffer.verboseMatches(u"PM")); 564 } 565 566 TEST(IntlDisplayNames, DayPeriod_ar) 567 { 568 TestBuffer<char16_t> buffer; 569 DisplayNames::Options options{}; 570 Span<const char> calendar{}; 571 auto result = DisplayNames::TryCreate("ar", options); 572 ASSERT_TRUE(result.isOk()); 573 auto displayNames = result.unwrap(); 574 575 ASSERT_TRUE( 576 displayNames->GetDayPeriod(buffer, DayPeriod::AM, calendar).isOk()); 577 ASSERT_TRUE(buffer.verboseMatches(u"ص")); 578 ASSERT_TRUE( 579 displayNames->GetDayPeriod(buffer, DayPeriod::PM, calendar).isOk()); 580 ASSERT_TRUE(buffer.verboseMatches(u"م")); 581 } 582 583 TEST(IntlDisplayNames, DateTimeField) 584 { 585 TestBuffer<char16_t> buffer; 586 587 DisplayNames::Options options{}; 588 Span<const char> locale = MakeStringSpan("en-US"); 589 auto result = DisplayNames::TryCreate(locale.data(), options); 590 ASSERT_TRUE(result.isOk()); 591 auto displayNames = result.unwrap(); 592 auto gen = DateTimePatternGenerator::TryCreate(locale.data()).unwrap(); 593 594 ASSERT_TRUE( 595 displayNames->GetDateTimeField(buffer, DateTimeField::Year, *gen).isOk()); 596 ASSERT_TRUE(buffer.verboseMatches(u"year")); 597 ASSERT_TRUE( 598 displayNames->GetDateTimeField(buffer, DateTimeField::Quarter, *gen) 599 .isOk()); 600 ASSERT_TRUE(buffer.verboseMatches(u"quarter")); 601 ASSERT_TRUE(displayNames->GetDateTimeField(buffer, DateTimeField::Month, *gen) 602 .isOk()); 603 ASSERT_TRUE(buffer.verboseMatches(u"month")); 604 ASSERT_TRUE( 605 displayNames->GetDateTimeField(buffer, DateTimeField::WeekOfYear, *gen) 606 .isOk()); 607 ASSERT_TRUE(buffer.verboseMatches(u"week")); 608 ASSERT_TRUE( 609 displayNames->GetDateTimeField(buffer, DateTimeField::Weekday, *gen) 610 .isOk()); 611 ASSERT_TRUE(buffer.verboseMatches(u"day of the week")); 612 ASSERT_TRUE( 613 displayNames->GetDateTimeField(buffer, DateTimeField::Day, *gen).isOk()); 614 ASSERT_TRUE(buffer.verboseMatches(u"day")); 615 ASSERT_TRUE( 616 displayNames->GetDateTimeField(buffer, DateTimeField::DayPeriod, *gen) 617 .isOk()); 618 ASSERT_TRUE(buffer.verboseMatches(u"AM/PM")); 619 ASSERT_TRUE( 620 displayNames->GetDateTimeField(buffer, DateTimeField::Hour, *gen).isOk()); 621 ASSERT_TRUE(buffer.verboseMatches(u"hour")); 622 ASSERT_TRUE( 623 displayNames->GetDateTimeField(buffer, DateTimeField::Minute, *gen) 624 .isOk()); 625 ASSERT_TRUE(buffer.verboseMatches(u"minute")); 626 ASSERT_TRUE( 627 displayNames->GetDateTimeField(buffer, DateTimeField::Second, *gen) 628 .isOk()); 629 ASSERT_TRUE(buffer.verboseMatches(u"second")); 630 ASSERT_TRUE( 631 displayNames->GetDateTimeField(buffer, DateTimeField::TimeZoneName, *gen) 632 .isOk()); 633 ASSERT_TRUE(buffer.verboseMatches(u"time zone")); 634 } 635 636 } // namespace mozilla::intl