mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 08:51:04 +01:00
Restructure Diagnostic objects to allow late formatting (#1131)
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
This commit is contained in:
committed by
GitHub
co-authored by
Richard Smith
parent
014c3847b3
commit
aaca540a05
@@ -1120,36 +1120,37 @@ TEST_F(ParseTreeTest, StructErrors) {
|
||||
};
|
||||
Testcase testcases[] = {
|
||||
{"var x: {i32} = {};",
|
||||
DiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
IsDiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
{"var x: {a} = {};",
|
||||
DiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
IsDiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
{"var x: {a:} = {};",
|
||||
DiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
IsDiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
{"var x: {a=} = {};",
|
||||
DiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
{"var x: {.} = {};", DiagnosticMessage("Expected identifier after `.`.")},
|
||||
IsDiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
{"var x: {.} = {};",
|
||||
IsDiagnosticMessage("Expected identifier after `.`.")},
|
||||
{"var x: {.\"hello\" = 0, .y = 4} = {};",
|
||||
DiagnosticMessage("Expected identifier after `.`.")},
|
||||
IsDiagnosticMessage("Expected identifier after `.`.")},
|
||||
{"var x: {.\"hello\": i32, .y: i32} = {};",
|
||||
DiagnosticMessage("Expected identifier after `.`.")},
|
||||
IsDiagnosticMessage("Expected identifier after `.`.")},
|
||||
{"var x: {.a} = {};",
|
||||
DiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
{"var x: {.a:} = {};", DiagnosticMessage("Expected expression.")},
|
||||
{"var x: {.a=} = {};", DiagnosticMessage("Expected expression.")},
|
||||
IsDiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
{"var x: {.a:} = {};", IsDiagnosticMessage("Expected expression.")},
|
||||
{"var x: {.a=} = {};", IsDiagnosticMessage("Expected expression.")},
|
||||
{"var x: {.a: i32, .b = 0} = {};",
|
||||
DiagnosticMessage("Expected `.field: type`.")},
|
||||
IsDiagnosticMessage("Expected `.field: type`.")},
|
||||
{"var x: {.a = 0, b: i32} = {};",
|
||||
DiagnosticMessage("Expected `.field = value`.")},
|
||||
IsDiagnosticMessage("Expected `.field = value`.")},
|
||||
{"var x: {,} = {};",
|
||||
DiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
IsDiagnosticMessage("Expected `.field: type` or `.field = value`.")},
|
||||
{"var x: {.a: i32,,} = {};",
|
||||
DiagnosticMessage("Expected `.field: type`.")},
|
||||
IsDiagnosticMessage("Expected `.field: type`.")},
|
||||
{"var x: {.a = 0,,} = {};",
|
||||
DiagnosticMessage("Expected `.field = value`.")},
|
||||
IsDiagnosticMessage("Expected `.field = value`.")},
|
||||
{"var x: {.a: i32 banana} = {.a = 0};",
|
||||
DiagnosticMessage("Expected `,` or `}`.")},
|
||||
IsDiagnosticMessage("Expected `,` or `}`.")},
|
||||
{"var x: {.a: i32} = {.a = 0 banana};",
|
||||
DiagnosticMessage("Expected `,` or `}`.")},
|
||||
IsDiagnosticMessage("Expected `,` or `}`.")},
|
||||
};
|
||||
|
||||
for (const Testcase& testcase : testcases) {
|
||||
@@ -1268,10 +1269,10 @@ TEST_F(ParseTreeTest, RecursionLimit) {
|
||||
// Recursion might be exceeded multiple times due to quirks in parse tree
|
||||
// handling; we only need to be sure it's hit at least once for test
|
||||
// correctness.
|
||||
EXPECT_CALL(
|
||||
consumer,
|
||||
HandleDiagnostic(DiagnosticMessage(llvm::formatv(
|
||||
"Exceeded recursion limit ({0})", ParseTree::StackDepthLimit))))
|
||||
EXPECT_CALL(consumer, HandleDiagnostic(IsDiagnosticMessage(
|
||||
llvm::formatv("Exceeded recursion limit ({0})",
|
||||
ParseTree::StackDepthLimit)
|
||||
.str())))
|
||||
.Times(AtLeast(1));
|
||||
ParseTree tree = ParseTree::Parse(tokens, consumer);
|
||||
EXPECT_TRUE(tree.has_errors());
|
||||
|
||||
Reference in New Issue
Block a user