-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add coverage testing for parse node kinds. (#4436)
This refactors the diagnostic kind coverage check into something that also works for node kinds. Then, since this points out a few node kinds that aren't having their parse verified, I'm adding minor tests for those.
- Loading branch information
Showing
8 changed files
with
259 additions
and
145 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
// 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 <gtest/gtest.h> | ||
|
||
#include "absl/flags/flag.h" | ||
#include "toolchain/diagnostics/diagnostic_kind.h" | ||
#include "toolchain/testing/coverage_helper.h" | ||
|
||
ABSL_FLAG(std::string, testdata_manifest, "", | ||
"A path to a file containing repo-relative names of test files."); | ||
|
||
namespace Carbon { | ||
namespace { | ||
|
||
constexpr DiagnosticKind DiagnosticKinds[] = { | ||
#define CARBON_DIAGNOSTIC_KIND(Name) DiagnosticKind::Name, | ||
#include "toolchain/diagnostics/diagnostic_kind.def" | ||
}; | ||
|
||
constexpr DiagnosticKind UntestedDiagnosticKinds[] = { | ||
// These exist only for unit tests. | ||
DiagnosticKind::TestDiagnostic, | ||
DiagnosticKind::TestDiagnosticNote, | ||
|
||
// These diagnose filesystem issues that are hard to unit test. | ||
DiagnosticKind::ErrorReadingFile, | ||
DiagnosticKind::ErrorStattingFile, | ||
DiagnosticKind::FileTooLarge, | ||
|
||
// Int literals are currently limited to i32. Once that's fixed, this | ||
// should be tested. | ||
DiagnosticKind::ArrayBoundTooLarge, | ||
|
||
// This isn't feasible to test with a normal testcase, but is tested in | ||
// lex/tokenized_buffer_test.cpp. | ||
DiagnosticKind::TooManyTokens, | ||
|
||
// TODO: Should look closer at these, but adding tests is a high risk of | ||
// loss in merge conflicts due to the amount of tests being changed right | ||
// now. | ||
DiagnosticKind::ExternLibraryInImporter, | ||
DiagnosticKind::ExternLibraryOnDefinition, | ||
DiagnosticKind::HexadecimalEscapeMissingDigits, | ||
DiagnosticKind::ImplOfUndefinedInterface, | ||
DiagnosticKind::IncompleteTypeInFunctionParam, | ||
DiagnosticKind::InvalidDigit, | ||
DiagnosticKind::InvalidDigitSeparator, | ||
DiagnosticKind::InvalidHorizontalWhitespaceInString, | ||
DiagnosticKind::MismatchedIndentInString, | ||
DiagnosticKind::ModifierPrivateNotAllowed, | ||
DiagnosticKind::MultiLineStringWithDoubleQuotes, | ||
DiagnosticKind::NameAmbiguousDueToExtend, | ||
DiagnosticKind::TooManyDigits, | ||
DiagnosticKind::UnaryOperatorRequiresWhitespace, | ||
DiagnosticKind::UnicodeEscapeSurrogate, | ||
DiagnosticKind::UnicodeEscapeTooLarge, | ||
DiagnosticKind::UnknownBaseSpecifier, | ||
DiagnosticKind::UnsupportedCRLineEnding, | ||
DiagnosticKind::UnsupportedLFCRLineEnding, | ||
}; | ||
|
||
// Looks for diagnostic kinds that aren't covered by a file_test. | ||
TEST(Coverage, DiagnosticKind) { | ||
Testing::TestKindCoverage(absl::GetFlag(FLAGS_testdata_manifest), | ||
R"(^ *// CHECK:STDERR: .*\.carbon:.* \[(\w+)\]$)", | ||
llvm::ArrayRef(DiagnosticKinds), | ||
llvm::ArrayRef(UntestedDiagnosticKinds)); | ||
} | ||
|
||
} // namespace | ||
} // namespace Carbon |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// 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 <gtest/gtest.h> | ||
|
||
#include "absl/flags/flag.h" | ||
#include "toolchain/parse/node_kind.h" | ||
#include "toolchain/testing/coverage_helper.h" | ||
|
||
ABSL_FLAG(std::string, testdata_manifest, "", | ||
"A path to a file containing repo-relative names of test files."); | ||
|
||
namespace Carbon::Parse { | ||
namespace { | ||
|
||
constexpr NodeKind NodeKinds[] = { | ||
#define CARBON_PARSE_NODE_KIND(Name) NodeKind::Name, | ||
#include "toolchain/parse/node_kind.def" | ||
}; | ||
|
||
constexpr NodeKind UntestedNodeKinds[] = {NodeKind::Placeholder}; | ||
|
||
// Looks for node kinds that aren't covered by a file_test. | ||
TEST(Coverage, NodeKind) { | ||
Testing::TestKindCoverage(absl::GetFlag(FLAGS_testdata_manifest), | ||
R"(kind: '(\w+)')", llvm::ArrayRef(NodeKinds), | ||
llvm::ArrayRef(UntestedNodeKinds)); | ||
} | ||
|
||
} // namespace | ||
} // namespace Carbon::Parse |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.