format_providers_test.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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, Spaces) {
  59. constexpr char Format[] = "{0:=0: zero |=1: one |: default }";
  60. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(0)).str(),
  61. Eq(" zero "));
  62. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(1)).str(),
  63. Eq(" one "));
  64. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(2)).str(),
  65. Eq(" default "));
  66. }
  67. TEST(IntAsSelect, CasesWithNormalFormat) {
  68. constexpr char Format[] = "{0} argument{0:=1:|:s}";
  69. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(0)).str(),
  70. Eq("0 arguments"));
  71. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(1)).str(),
  72. Eq("1 argument"));
  73. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(2)).str(),
  74. Eq("2 arguments"));
  75. }
  76. TEST(IntAsSelect, PluralS) {
  77. constexpr char Format[] = "{0} argument{0:s}";
  78. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(0)).str(),
  79. Eq("0 arguments"));
  80. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(1)).str(),
  81. Eq("1 argument"));
  82. EXPECT_THAT(llvm::formatv(Format, Diagnostics::IntAsSelect(2)).str(),
  83. Eq("2 arguments"));
  84. }
  85. } // namespace
  86. } // namespace Carbon::Diagnostics