Skip to content
Snippets Groups Projects
Commit 5b5d62f1 authored by zhanyong.wan's avatar zhanyong.wan
Browse files

Makes the code compile on Windows CE.

parent 93ad3551
No related branches found
No related tags found
No related merge requests found
......@@ -38,7 +38,11 @@
#include <algorithm>
#include <string>
#ifndef _WIN32_WCE
#include <errno.h>
#endif
#include <gmock/internal/gmock-internal-utils.h>
#include <gmock/internal/gmock-port.h>
......@@ -601,6 +605,8 @@ class AssignAction {
const T2 value_;
};
#ifndef _WIN32_WCE
// Implements the SetErrnoAndReturn action to simulate return from
// various system calls and libc functions.
template <typename T>
......@@ -619,6 +625,8 @@ class SetErrnoAndReturnAction {
const T result_;
};
#endif // _WIN32_WCE
// Implements the SetArgumentPointee<N>(x) action for any function
// whose N-th argument (0-based) is a pointer to x's type. The
// template parameter kIsProto is true iff type A is ProtocolMessage,
......@@ -878,6 +886,8 @@ PolymorphicAction<internal::AssignAction<T1, T2> > Assign(T1* ptr, T2 val) {
return MakePolymorphicAction(internal::AssignAction<T1, T2>(ptr, val));
}
#ifndef _WIN32_WCE
// Creates an action that sets errno and returns the appropriate error.
template <typename T>
PolymorphicAction<internal::SetErrnoAndReturnAction<T> >
......@@ -886,6 +896,8 @@ SetErrnoAndReturn(int errval, T result) {
internal::SetErrnoAndReturnAction<T>(errval, result));
}
#endif // _WIN32_WCE
// Various overloads for InvokeWithoutArgs().
// Creates an action that invokes 'function_impl' with no argument.
......
......@@ -55,7 +55,9 @@ namespace {
using ::std::ostream;
#if GTEST_OS_WINDOWS
#ifdef _WIN32_WCE
#define snprintf _snprintf
#elif GTEST_OS_WINDOWS
#define snprintf _snprintf_s
#endif
......@@ -157,9 +159,11 @@ static void PrintAsWideCharLiteralTo(wchar_t c, ostream* os) {
*os << "\\v";
break;
default:
// isprint() takes an int and requires it to be either EOF or in
// the range [0, 255]. We check that c is in this range before calling it.
if ((c & 0xFF) == c && isprint(c)) {
// Checks whether c is printable or not. Printable characters are in
// the range [0x20,0x7E].
// We test the value of c directly instead of calling isprint(), as
// isprint() is buggy on Windows mobile.
if (0x20 <= c && c <= 0x7E) {
*os << static_cast<char>(c);
} else {
// Buffer size enough for the maximum number of digits and \0.
......
......@@ -33,7 +33,18 @@
#include <gmock/gmock.h>
#include <gtest/gtest.h>
int main(int argc, char **argv) {
// MS C++ compiler/linker has a bug on Windows (not on Windows CE), which
// causes a link error when _tmain is defined in a static library and UNICODE
// is enabled. For this reason instead of _tmain, main function is used on
// Windows. See the following link to track the current status of this bug:
// http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=394464 // NOLINT
#ifdef _WIN32_WCE
#include <tchar.h> // NOLINT
int _tmain(int argc, TCHAR** argv) {
#else
int main(int argc, char** argv) {
#endif // _WIN32_WCE
std::cout << "Running main() from gmock_main.cc\n";
// Since Google Mock depends on Google Test, InitGoogleMock() is
// also responsible for initializing Google Test. Therefore there's
......
......@@ -69,7 +69,10 @@ using testing::ReturnNull;
using testing::ReturnRef;
using testing::SetArgumentPointee;
using testing::SetArrayArgument;
#ifndef _WIN32_WCE
using testing::SetErrnoAndReturn;
#endif // _WIN32_WCE
#if GMOCK_HAS_PROTOBUF_
using testing::internal::TestMessage;
......@@ -951,6 +954,8 @@ TEST(AssignTest, CompatibleTypes) {
EXPECT_DOUBLE_EQ(5, x);
}
#ifndef _WIN32_WCE
class SetErrnoAndReturnTest : public testing::Test {
protected:
virtual void SetUp() { errno = 0; }
......@@ -976,4 +981,6 @@ TEST_F(SetErrnoAndReturnTest, CompatibleTypes) {
EXPECT_EQ(EINVAL, errno);
}
#endif // _WIN32_WCE
} // Unnamed namespace
......@@ -116,7 +116,10 @@
#include <gmock/gmock.h>
#ifndef _WIN32_WCE
#include <errno.h>
#endif
#include <gtest/gtest.h>
#include <iostream>
#include <vector>
......@@ -161,7 +164,6 @@ using testing::ReturnNull;
using testing::ReturnRef;
using testing::SetArgumentPointee;
using testing::SetArrayArgument;
using testing::SetErrnoAndReturn;
using testing::StartsWith;
using testing::StrCaseEq;
using testing::StrCaseNe;
......@@ -173,6 +175,10 @@ using testing::WithArg;
using testing::WithArgs;
using testing::WithoutArgs;
#ifndef _WIN32_WCE
using testing::SetErrnoAndReturn;
#endif // _WIN32_WCE
#if GTEST_HAS_EXCEPTIONS
using testing::Throw;
#endif // GTEST_HAS_EXCEPTIONS
......@@ -290,6 +296,8 @@ TEST(LinkTest, TestSetArrayArgument) {
mock.VoidFromString(&ch);
}
#ifndef _WIN32_WCE
// Tests the linkage of the SetErrnoAndReturn action.
TEST(LinkTest, TestSetErrnoAndReturn) {
Mock mock;
......@@ -300,6 +308,8 @@ TEST(LinkTest, TestSetErrnoAndReturn) {
errno = saved_errno;
}
#endif // _WIN32_WCE
// Tests the linkage of the Invoke(function) and Invoke(object, method) actions.
TEST(LinkTest, TestInvoke) {
Mock mock;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment