format_providers_test.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. // Exceptions. See /LICENSE for license information.
  3. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. #include "toolchain/diagnostics/format_providers.h"
  5. #include <gmock/gmock.h>
  6. #include <gtest/gtest.h>
  7. #include "llvm/Support/FormatVariadic.h"
  8. namespace Carbon {
  9. namespace {
  10. using ::testing::Eq;
  11. TEST(BoolAsSelect, Cases) {
  12. constexpr char Format[] = "{0:a|b}";
  13. EXPECT_THAT(llvm::formatv(Format, BoolAsSelect(true)).str(), Eq("a"));
  14. EXPECT_THAT(llvm::formatv(Format, BoolAsSelect(false)).str(), Eq("b"));
  15. }
  16. TEST(BoolAsSelect, CasesWithNormalFormat) {
  17. constexpr char Format[] = "{0} {0:a|b}";
  18. EXPECT_THAT(llvm::formatv(Format, BoolAsSelect(true)).str(), Eq("true a"));
  19. EXPECT_THAT(llvm::formatv(Format, BoolAsSelect(false)).str(), Eq("false b"));
  20. }
  21. TEST(BoolAsSelect, Spaces) {
  22. constexpr char Format[] = "{0: a | b }";
  23. EXPECT_THAT(llvm::formatv(Format, BoolAsSelect(true)).str(), Eq("a "));
  24. EXPECT_THAT(llvm::formatv(Format, BoolAsSelect(false)).str(), Eq(" b"));
  25. }
  26. TEST(BoolAsSelect, QuotedSpaces) {
  27. constexpr char Format[] = "{0:' a | b '}";
  28. EXPECT_THAT(llvm::formatv(Format, BoolAsSelect(true)).str(), Eq(" a "));
  29. EXPECT_THAT(llvm::formatv(Format, BoolAsSelect(false)).str(), Eq(" b "));
  30. }
  31. TEST(IntAsSelect, OnlyDefault) {
  32. constexpr char Format[] = "{0::default}";
  33. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("default"));
  34. }
  35. TEST(IntAsSelect, OneEquals) {
  36. constexpr char Format[] = "{0:=0:zero}";
  37. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("zero"));
  38. }
  39. TEST(IntAsSelect, TwoEquals) {
  40. constexpr char Format[] = "{0:=0:zero|=1:one}";
  41. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("zero"));
  42. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(1)).str(), Eq("one"));
  43. }
  44. TEST(IntAsSelect, TwoEqualsAndDefault) {
  45. constexpr char Format[] = "{0:=0:zero|=1:one|:default}";
  46. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("zero"));
  47. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(1)).str(), Eq("one"));
  48. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(2)).str(), Eq("default"));
  49. }
  50. TEST(IntAsSelect, Spaces) {
  51. constexpr char Format[] = "{0:=0: zero |=1: one |: default }";
  52. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq(" zero "));
  53. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(1)).str(), Eq(" one "));
  54. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(2)).str(), Eq(" default"));
  55. }
  56. TEST(IntAsSelect, QuotedSpaces) {
  57. constexpr char Format[] = "{0:'=0: zero |=1: one |: default '}";
  58. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq(" zero "));
  59. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(1)).str(), Eq(" one "));
  60. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(2)).str(), Eq(" default "));
  61. }
  62. TEST(IntAsSelect, CasesWithNormalFormat) {
  63. constexpr char Format[] = "{0} argument{0:=1:|:s}";
  64. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("0 arguments"));
  65. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(1)).str(), Eq("1 argument"));
  66. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(2)).str(), Eq("2 arguments"));
  67. }
  68. TEST(IntAsSelect, PluralS) {
  69. constexpr char Format[] = "{0} argument{0:s}";
  70. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("0 arguments"));
  71. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(1)).str(), Eq("1 argument"));
  72. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(2)).str(), Eq("2 arguments"));
  73. }
  74. } // namespace
  75. } // namespace Carbon