aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/compiler/cpp_generator.cc15
-rw-r--r--src/compiler/cpp_generator.h4
-rw-r--r--src/compiler/cpp_plugin.cc2
-rw-r--r--test/cpp/end2end/mock_test.cc2
4 files changed, 20 insertions, 3 deletions
diff --git a/src/compiler/cpp_generator.cc b/src/compiler/cpp_generator.cc
index 965d91b68b..f35bfd9ab9 100644
--- a/src/compiler/cpp_generator.cc
+++ b/src/compiler/cpp_generator.cc
@@ -1568,11 +1568,24 @@ grpc::string GetMockIncludes(grpc_generator::File* file,
static const char* headers_strs[] = {
"grpc++/impl/codegen/async_stream.h",
"grpc++/impl/codegen/sync_stream.h",
- "gmock/gmock.h",
};
std::vector<grpc::string> headers(headers_strs, array_end(headers_strs));
PrintIncludes(printer.get(), headers, params);
+ std::vector<grpc::string> gmock_header;
+ if (params.gmock_search_path.empty()) {
+ gmock_header.push_back("gmock/gmock.h");
+ PrintIncludes(printer.get(), gmock_header, params);
+ } else {
+ gmock_header.push_back("gmock.h");
+ // Copy a params to generate gmock header.
+ Parameters gmock_params(params);
+ // We use local includes when a gmock_search_path is given
+ gmock_params.use_system_headers = false;
+ gmock_params.grpc_search_path = params.gmock_search_path;
+ PrintIncludes(printer.get(), gmock_header, gmock_params);
+ }
+
if (!file->package().empty()) {
std::vector<grpc::string> parts = file->package_parts();
diff --git a/src/compiler/cpp_generator.h b/src/compiler/cpp_generator.h
index a93376acef..300a27c589 100644
--- a/src/compiler/cpp_generator.h
+++ b/src/compiler/cpp_generator.h
@@ -50,8 +50,10 @@ struct Parameters {
bool use_system_headers;
// Prefix to any grpc include
grpc::string grpc_search_path;
- // Generate GMOCK code to facilitate unit testing.
+ // Generate Google Mock code to facilitate unit testing.
bool generate_mock_code;
+ // Google Mock search path, when non-empty, local includes will be used.
+ grpc::string gmock_search_path;
};
// Return the prologue of the generated header file.
diff --git a/src/compiler/cpp_plugin.cc b/src/compiler/cpp_plugin.cc
index adac0e23d3..661282f880 100644
--- a/src/compiler/cpp_plugin.cc
+++ b/src/compiler/cpp_plugin.cc
@@ -78,6 +78,8 @@ class CppGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
*error = grpc::string("Invalid parameter: ") + *parameter_string;
return false;
}
+ } else if (param[0] == "gmock_search_path") {
+ generator_parameters.gmock_search_path = param[1];
} else {
*error = grpc::string("Unknown parameter: ") + *parameter_string;
return false;
diff --git a/test/cpp/end2end/mock_test.cc b/test/cpp/end2end/mock_test.cc
index 61f4111e3b..175ecea2b3 100644
--- a/test/cpp/end2end/mock_test.cc
+++ b/test/cpp/end2end/mock_test.cc
@@ -43,7 +43,6 @@
#include <iostream>
-using namespace std;
using ::testing::AtLeast;
using ::testing::DoAll;
using ::testing::Invoke;
@@ -57,6 +56,7 @@ using grpc::testing::EchoResponse;
using grpc::testing::EchoTestService;
using grpc::testing::MockClientReaderWriter;
using std::chrono::system_clock;
+using std::vector;
namespace grpc {
namespace testing {