Files
carbon-lang/explorer/fuzzing/fuzzer_util_test.cpp
T
Jon Ross-Perkins b1ee45c1e4 Extract ParseAndExecute as its own library. (#2813)
Currently ParseAndExecute-style logic is done in main.cpp and a test. #2799 is adding another test that needs it, as is #2811.

Also more clearly marks fuzzing as testing.

This is being extracted out of #2799 in order to try unblocking progress while review continues.
2023-05-12 08:00:43 -07:00

59 lines
1.6 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/fuzzing/fuzzer_util.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <fstream>
#include "common/fuzzing/proto_to_carbon.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/raw_ostream.h"
namespace Carbon::Testing {
namespace {
TEST(FuzzerUtilTest, ParseAndExecuteProto) {
const ErrorOr<Fuzzing::Carbon> carbon_proto = ParseCarbonTextProto(R"(
compilation_unit {
package_statement { package_name: "P" }
is_api: true
declarations {
function {
name {
name: "Main"
}
param_pattern {}
return_term {
kind: Expression
type { int_type_literal {} }
}
body {
statements {
return_expression_statement {
expression { int_literal { value: 0 } }
}
}
}
}
}
})");
ASSERT_TRUE(carbon_proto.ok());
const ErrorOr<int> result = ParseAndExecuteProto(*carbon_proto);
ASSERT_TRUE(result.ok()) << "Execution failed: " << result.error();
EXPECT_EQ(*result, 0);
}
TEST(FuzzerUtilTest, GetRunfilesFile) {
EXPECT_THAT(*GetRunfilesFile("carbon/explorer/data/prelude.carbon"),
testing::EndsWith("/prelude.carbon"));
EXPECT_THAT(GetRunfilesFile("nonexistent-file").error().message(),
testing::EndsWith("doesn't exist"));
}
} // namespace
} // namespace Carbon::Testing