format_providers_test.cpp 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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(IntAsSelect, OnlyDefault) {
  27. constexpr char Format[] = "{0::default}";
  28. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("default"));
  29. }
  30. TEST(IntAsSelect, OneEquals) {
  31. constexpr char Format[] = "{0:=0:zero}";
  32. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("zero"));
  33. }
  34. TEST(IntAsSelect, TwoEquals) {
  35. constexpr char Format[] = "{0:=0:zero|=1:one}";
  36. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("zero"));
  37. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(1)).str(), Eq("one"));
  38. }
  39. TEST(IntAsSelect, TwoEqualsAndDefault) {
  40. constexpr char Format[] = "{0:=0:zero|=1:one|:default}";
  41. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("zero"));
  42. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(1)).str(), Eq("one"));
  43. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(2)).str(), Eq("default"));
  44. }
  45. TEST(IntAsSelect, Spaces) {
  46. constexpr char Format[] = "{0:=0: zero |=1: one |: default }";
  47. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq(" zero "));
  48. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(1)).str(), Eq(" one "));
  49. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(2)).str(), Eq(" default "));
  50. }
  51. TEST(IntAsSelect, CasesWithNormalFormat) {
  52. constexpr char Format[] = "{0} argument{0:=1:|:s}";
  53. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("0 arguments"));
  54. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(1)).str(), Eq("1 argument"));
  55. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(2)).str(), Eq("2 arguments"));
  56. }
  57. TEST(IntAsSelect, PluralS) {
  58. constexpr char Format[] = "{0} argument{0:s}";
  59. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(0)).str(), Eq("0 arguments"));
  60. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(1)).str(), Eq("1 argument"));
  61. EXPECT_THAT(llvm::formatv(Format, IntAsSelect(2)).str(), Eq("2 arguments"));
  62. }
  63. } // namespace
  64. } // namespace Carbon