Files
carbon-lang/explorer/common/error_builders_test.cpp
T
Richard Smith 7a67715ac5 Error: track message and prefix/location separately. (#1529)
This allows us to combine multiple Errors together without repeating the prefix
information. Also fixes several cases where two "COMPILATION ERROR" prefixes
would be prepended to the same message when errors with prefixes and locations
were produced by the lexer and parser.
2022-07-26 15:08:19 -07:00

47 lines
1.4 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 "explorer/common/error_builders.h"
#include <gtest/gtest.h>
#include "explorer/common/source_location.h"
namespace Carbon::Testing {
namespace {
auto ToString(const Error& err) -> std::string {
std::string result;
llvm::raw_string_ostream out(result);
err.Print(out);
return result;
}
TEST(ErrorBuildersTest, CompilationError) {
Error err = CompilationError(SourceLocation("x", 1)) << "test";
EXPECT_EQ(err.prefix(), "COMPILATION ERROR");
EXPECT_EQ(err.location(), "x:1");
EXPECT_EQ(err.message(), "test");
EXPECT_EQ(ToString(err), "COMPILATION ERROR: x:1: test");
}
TEST(ErrorBuildersTest, ProgramError) {
Error err = ProgramError(SourceLocation("x", 1)) << "test";
EXPECT_EQ(err.prefix(), "PROGRAM ERROR");
EXPECT_EQ(err.location(), "x:1");
EXPECT_EQ(err.message(), "test");
EXPECT_EQ(ToString(err), "PROGRAM ERROR: x:1: test");
}
TEST(ErrorBuildersTest, RuntimeError) {
Error err = RuntimeError(SourceLocation("x", 1)) << "test";
EXPECT_EQ(err.prefix(), "RUNTIME ERROR");
EXPECT_EQ(err.location(), "x:1");
EXPECT_EQ(err.message(), "test");
EXPECT_EQ(ToString(err), "RUNTIME ERROR: x:1: test");
}
} // namespace
} // namespace Carbon::Testing