format_providers_test.cpp 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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, PluralExample) {
  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. } // namespace
  69. } // namespace Carbon