Files
carbon-lang/toolchain/diagnostics/sorting_diagnostic_consumer_test.cpp
T
Jon Ross-PerkinsandGeoff Romer 302aa1bb30 Remove uses of StringLiteral in format strings. (#4416)
Building on #4411, avoid using StringLiteral in format strings. This
includes a diagnostic check to prevent regressions (which is also how I
gathered issues).

Note, I haven't looked at `std::string` uses yet, but we might need
things like that to be able to pass strings in code back to the user.
StringLiteral though means that it's literally written down in the
toolchain, at which point it should probably be written in the format
string instead of separately.

---------

Co-authored-by: Geoff Romer <gromer@google.com>
2024-10-21 19:39:53 +00:00

66 lines
2.5 KiB
C++

// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#include "toolchain/diagnostics/sorting_diagnostic_consumer.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "llvm/ADT/StringRef.h"
#include "toolchain/diagnostics/diagnostic_emitter.h"
#include "toolchain/diagnostics/mocks.h"
namespace Carbon {
namespace {
using ::Carbon::Testing::IsSingleDiagnostic;
using ::testing::InSequence;
CARBON_DIAGNOSTIC(TestDiagnostic, Error, "M{0}", int);
struct FakeDiagnosticConverter : DiagnosticConverter<DiagnosticLoc> {
auto ConvertLoc(DiagnosticLoc loc, ContextFnT /*context_fn*/) const
-> DiagnosticLoc override {
return loc;
}
};
TEST(SortedDiagnosticEmitterTest, SortErrors) {
FakeDiagnosticConverter converter;
Testing::MockDiagnosticConsumer consumer;
SortingDiagnosticConsumer sorting_consumer(consumer);
DiagnosticEmitter<DiagnosticLoc> emitter(converter, sorting_consumer);
emitter.Emit({"f", "line", 2, 1}, TestDiagnostic, 1);
emitter.Emit({"f", "line", 1, 1}, TestDiagnostic, 2);
emitter.Emit({"f", "line", 1, 3}, TestDiagnostic, 3);
emitter.Emit({"f", "line", 3, 4}, TestDiagnostic, 4);
emitter.Emit({"f", "line", 3, 2}, TestDiagnostic, 5);
emitter.Emit({"f", "line", 3, 2}, TestDiagnostic, 6);
InSequence s;
EXPECT_CALL(consumer, HandleDiagnostic(IsSingleDiagnostic(
DiagnosticKind::TestDiagnostic,
DiagnosticLevel::Error, 1, 1, "M2")));
EXPECT_CALL(consumer, HandleDiagnostic(IsSingleDiagnostic(
DiagnosticKind::TestDiagnostic,
DiagnosticLevel::Error, 1, 3, "M3")));
EXPECT_CALL(consumer, HandleDiagnostic(IsSingleDiagnostic(
DiagnosticKind::TestDiagnostic,
DiagnosticLevel::Error, 2, 1, "M1")));
EXPECT_CALL(consumer, HandleDiagnostic(IsSingleDiagnostic(
DiagnosticKind::TestDiagnostic,
DiagnosticLevel::Error, 3, 2, "M5")));
EXPECT_CALL(consumer, HandleDiagnostic(IsSingleDiagnostic(
DiagnosticKind::TestDiagnostic,
DiagnosticLevel::Error, 3, 2, "M6")));
EXPECT_CALL(consumer, HandleDiagnostic(IsSingleDiagnostic(
DiagnosticKind::TestDiagnostic,
DiagnosticLevel::Error, 3, 4, "M4")));
sorting_consumer.Flush();
}
} // namespace
} // namespace Carbon