diagnostic_emitter_test.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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/diagnostic_emitter.h"
  5. #include <gmock/gmock.h>
  6. #include <gtest/gtest.h>
  7. #include "llvm/ADT/StringRef.h"
  8. #include "toolchain/diagnostics/mocks.h"
  9. namespace Carbon {
  10. namespace {
  11. using ::Carbon::Testing::IsDiagnostic;
  12. struct FakeDiagnosticLocationTranslator : DiagnosticLocationTranslator<int> {
  13. auto GetLocation(int n) -> DiagnosticLocation override {
  14. return {.line_number = 1, .column_number = n};
  15. }
  16. };
  17. class DiagnosticEmitterTest : public ::testing::Test {
  18. protected:
  19. DiagnosticEmitterTest() : emitter_(translator_, consumer_) {}
  20. FakeDiagnosticLocationTranslator translator_;
  21. Testing::MockDiagnosticConsumer consumer_;
  22. DiagnosticEmitter<int> emitter_;
  23. };
  24. TEST_F(DiagnosticEmitterTest, EmitSimpleError) {
  25. CARBON_DIAGNOSTIC(TestDiagnostic, Error, "simple error");
  26. EXPECT_CALL(consumer_, HandleDiagnostic(IsDiagnostic(
  27. DiagnosticKind::TestDiagnostic,
  28. DiagnosticLevel::Error, 1, 1, "simple error")));
  29. EXPECT_CALL(consumer_, HandleDiagnostic(IsDiagnostic(
  30. DiagnosticKind::TestDiagnostic,
  31. DiagnosticLevel::Error, 1, 2, "simple error")));
  32. emitter_.Emit(1, TestDiagnostic);
  33. emitter_.Emit(2, TestDiagnostic);
  34. }
  35. TEST_F(DiagnosticEmitterTest, EmitSimpleWarning) {
  36. CARBON_DIAGNOSTIC(TestDiagnostic, Warning, "simple warning");
  37. EXPECT_CALL(consumer_,
  38. HandleDiagnostic(IsDiagnostic(DiagnosticKind::TestDiagnostic,
  39. DiagnosticLevel::Warning, 1, 1,
  40. "simple warning")));
  41. emitter_.Emit(1, TestDiagnostic);
  42. }
  43. TEST_F(DiagnosticEmitterTest, EmitOneArgDiagnostic) {
  44. CARBON_DIAGNOSTIC(TestDiagnostic, Error, "arg: `{0}`", llvm::StringLiteral);
  45. EXPECT_CALL(consumer_, HandleDiagnostic(IsDiagnostic(
  46. DiagnosticKind::TestDiagnostic,
  47. DiagnosticLevel::Error, 1, 1, "arg: `str`")));
  48. emitter_.Emit(1, TestDiagnostic, "str");
  49. }
  50. TEST_F(DiagnosticEmitterTest, EmitNote) {
  51. CARBON_DIAGNOSTIC(TestDiagnostic, Warning, "simple warning");
  52. CARBON_DIAGNOSTIC(TestDiagnosticNote, Note, "note");
  53. EXPECT_CALL(consumer_,
  54. HandleDiagnostic(IsDiagnostic(DiagnosticKind::TestDiagnostic,
  55. DiagnosticLevel::Warning, 1, 1,
  56. "simple warning")));
  57. emitter_.Build(1, TestDiagnostic).Note(2, TestDiagnosticNote).Emit();
  58. }
  59. } // namespace
  60. } // namespace Carbon