diagnostic_emitter_test.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 "llvm/Support/FormatVariadic.h"
  9. #include "toolchain/diagnostics/mocks.h"
  10. namespace Carbon::Testing {
  11. namespace {
  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::StringRef);
  45. EXPECT_CALL(consumer_, HandleDiagnostic(IsDiagnostic(
  46. DiagnosticKind::TestDiagnostic,
  47. DiagnosticLevel::Error, 1, 1, "arg: `str`")));
  48. emitter_.Emit(1, TestDiagnostic, "str");
  49. }
  50. } // namespace
  51. } // namespace Carbon::Testing