mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 19:31:08 +01:00
Do cleanup on explorer fuzzing infrastructure. (#2790)
I'm partly doing this because the current setup would be difficult to share with the toolchain. e.g., ProtoToCarbon isn't explorer-specific, but the only way to run it via CLI is the explorer's fuzzverter. I want a separate tool.
This change:
- Adds a //common/fuzzing:proto_to_carbon tool.
- The rest of fuzzverter is now just //explorer/fuzzing:ast_to_proto.
- The change simplifies overall handling and removes a LLVM CLI dependency.
- Stops allowing unknown fields in the proto.
- This has mostly led to forgetting to remove fuzzer inputs that were for removed features.
- Moves more non-explorer-specific bits to //common/fuzzing.
- Cleans up remaining pieces in //explorer/fuzzing
- Merges the //explorer/fuzzing proto tests, which deduplicates AstToString copies.
- These tests also had duplicate dependencies, etc -- and all complete in ~6s.
- Updates and fixes regen_corpus which was previously broken by other changes.
- Updates the README to reflect changes.
- Removes obsolete proto-fuzzer build configuration (AFAICT this is no longer needed).
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
|
||||
#include <fstream>
|
||||
|
||||
#include "common/fuzzing/proto_to_carbon.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
@@ -41,38 +42,17 @@ TEST(FuzzerUtilTest, ParseAndExecute) {
|
||||
}
|
||||
})");
|
||||
ASSERT_TRUE(carbon_proto.ok());
|
||||
const ErrorOr<int> result = ParseAndExecute(carbon_proto->compilation_unit());
|
||||
const ErrorOr<int> result = ParseAndExecute(*carbon_proto);
|
||||
ASSERT_TRUE(result.ok()) << "Execution failed: " << result.error();
|
||||
EXPECT_EQ(*result, 0);
|
||||
}
|
||||
|
||||
TEST(FuzzerUtilTest, GetRunfilesFile) {
|
||||
EXPECT_THAT(*Internal::GetRunfilesFile("carbon/explorer/data/prelude.carbon"),
|
||||
EXPECT_THAT(*GetRunfilesFile("carbon/explorer/data/prelude.carbon"),
|
||||
testing::EndsWith("/prelude.carbon"));
|
||||
EXPECT_THAT(Internal::GetRunfilesFile("nonexistent-file").error().message(),
|
||||
EXPECT_THAT(GetRunfilesFile("nonexistent-file").error().message(),
|
||||
testing::EndsWith("doesn't exist"));
|
||||
}
|
||||
|
||||
TEST(FuzzerUtilTest, ParseCarbonTextProtoWithUnknownField) {
|
||||
const ErrorOr<Fuzzing::Carbon> carbon_proto =
|
||||
ParseCarbonTextProto(R"(
|
||||
compilation_unit {
|
||||
garbage: "value"
|
||||
declarations {
|
||||
choice {
|
||||
name {
|
||||
name: "Ch"
|
||||
}
|
||||
}
|
||||
}
|
||||
})",
|
||||
/*allow_unknown=*/true);
|
||||
ASSERT_TRUE(carbon_proto.ok());
|
||||
// No EqualsProto in gmock - https://github.com/google/googletest/issues/1761.
|
||||
EXPECT_EQ(
|
||||
carbon_proto->compilation_unit().declarations(0).choice().name().name(),
|
||||
"Ch");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace Carbon::Testing
|
||||
|
||||
Reference in New Issue
Block a user