format_providers_test.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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::Diagnostics {
  9. namespace {
  10. using ::testing::Eq;
  11. TEST(BoolAsSelect, Cases) {
  12. constexpr char Format[] = "{0:a|b}";
  13. EXPECT_THAT(llvm::formatv(Format, Diagnostics::BoolAsSelect(true)).str(),
  14. Eq("a"));
  15. EXPECT_THAT(llvm::formatv(Format, Diagnostics::BoolAsSelect(false)).str(),
  16. Eq("b"));
  17. }
  18. TEST(BoolAsSelect, CasesWithNormalFormat) {
  19. constexpr char Format[] = "{0} {0:a|b}";
  20. EXPECT_THAT(llvm::formatv(Format, Diagnostics::BoolAsSelect(true)).str(),
  21. Eq("true a"));
  22. EXPECT_THAT(llvm::formatv(Format, Diagnostics::BoolAsSelect(false)).str(),
  23. Eq("false b"));
  24. }
  25. TEST(BoolAsSelect, Spaces) {
  26. constexpr char Format[] = "{0: a | b }";
  27. EXPECT_THAT(llvm::formatv(Format, Diagnostics::BoolAsSelect(true)).str(),
  28. Eq(" a "));
  29. EXPECT_THAT(llvm::formatv(Format, Diagnostics::BoolAsSelect(false)).str(),
  30. Eq(" b "));
  31. }
  32. TEST(IntAsSelect, OnlyDefault) {
  33. constexpr char Format[] = "{0::default}";
  34. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(0)).str(),
  35. Eq("default"));
  36. }
  37. TEST(IntAsSelect, OneEquals) {
  38. constexpr char Format[] = "{0:=0:zero}";
  39. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(0)).str(),
  40. Eq("zero"));
  41. }
  42. TEST(IntAsSelect, TwoEquals) {
  43. constexpr char Format[] = "{0:=0:zero|=1:one}";
  44. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(0)).str(),
  45. Eq("zero"));
  46. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(1)).str(),
  47. Eq("one"));
  48. }
  49. TEST(IntAsSelect, TwoEqualsAndDefault) {
  50. constexpr char Format[] = "{0:=0:zero|=1:one|:default}";
  51. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(0)).str(),
  52. Eq("zero"));
  53. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(1)).str(),
  54. Eq("one"));
  55. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(2)).str(),
  56. Eq("default"));
  57. }
  58. TEST(IntAsSelect, LessAndGreater) {
  59. constexpr char Format[] =
  60. "{0:<0:negative|>10:huge|=0:zero|<=4:small|>=7:large|:moderate}";
  61. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(-1)).str(),
  62. Eq("negative"));
  63. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(0)).str(),
  64. Eq("zero"));
  65. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(1)).str(),
  66. Eq("small"));
  67. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(2)).str(),
  68. Eq("small"));
  69. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(3)).str(),
  70. Eq("small"));
  71. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(4)).str(),
  72. Eq("small"));
  73. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(5)).str(),
  74. Eq("moderate"));
  75. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(6)).str(),
  76. Eq("moderate"));
  77. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(7)).str(),
  78. Eq("large"));
  79. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(8)).str(),
  80. Eq("large"));
  81. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(9)).str(),
  82. Eq("large"));
  83. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(10)).str(),
  84. Eq("large"));
  85. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(11)).str(),
  86. Eq("huge"));
  87. }
  88. TEST(IntAsSelect, Spaces) {
  89. constexpr char Format[] = "{0:=0: zero |=1: one |: default }";
  90. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(0)).str(),
  91. Eq(" zero "));
  92. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(1)).str(),
  93. Eq(" one "));
  94. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(2)).str(),
  95. Eq(" default "));
  96. }
  97. TEST(IntAsSelect, CasesWithNormalFormat) {
  98. constexpr char Format[] = "{0} argument{0:=1:|:s}";
  99. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(0)).str(),
  100. Eq("0 arguments"));
  101. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(1)).str(),
  102. Eq("1 argument"));
  103. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(2)).str(),
  104. Eq("2 arguments"));
  105. }
  106. TEST(IntAsSelect, PluralS) {
  107. constexpr char Format[] = "{0} argument{0:s}";
  108. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(0)).str(),
  109. Eq("0 arguments"));
  110. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(1)).str(),
  111. Eq("1 argument"));
  112. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(2)).str(),
  113. Eq("2 arguments"));
  114. }
  115. } // namespace
  116. } // namespace Carbon::Diagnostics