diagnostic_emitter_test.cpp 2.7 KB

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