diff --git a/include/gmock/gmock-actions.h b/include/gmock/gmock-actions.h index 823054bf..a228eea6 100644 --- a/include/gmock/gmock-actions.h +++ b/include/gmock/gmock-actions.h @@ -38,7 +38,11 @@ #include #include + +#ifndef _WIN32_WCE #include +#endif + #include #include @@ -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 @@ -619,6 +625,8 @@ class SetErrnoAndReturnAction { const T result_; }; +#endif // _WIN32_WCE + // Implements the SetArgumentPointee(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 > Assign(T1* ptr, T2 val) { return MakePolymorphicAction(internal::AssignAction(ptr, val)); } +#ifndef _WIN32_WCE + // Creates an action that sets errno and returns the appropriate error. template PolymorphicAction > @@ -886,6 +896,8 @@ SetErrnoAndReturn(int errval, T result) { internal::SetErrnoAndReturnAction(errval, result)); } +#endif // _WIN32_WCE + // Various overloads for InvokeWithoutArgs(). // Creates an action that invokes 'function_impl' with no argument. diff --git a/src/gmock-printers.cc b/src/gmock-printers.cc index 495717dc..e6d4001a 100644 --- a/src/gmock-printers.cc +++ b/src/gmock-printers.cc @@ -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(c); } else { // Buffer size enough for the maximum number of digits and \0. diff --git a/src/gmock_main.cc b/src/gmock_main.cc index a97e9532..85689d5d 100644 --- a/src/gmock_main.cc +++ b/src/gmock_main.cc @@ -33,7 +33,18 @@ #include #include -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 // 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 diff --git a/test/gmock-actions_test.cc b/test/gmock-actions_test.cc index 077681b0..e4939e1a 100644 --- a/test/gmock-actions_test.cc +++ b/test/gmock-actions_test.cc @@ -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 diff --git a/test/gmock_link_test.h b/test/gmock_link_test.h index 769c85d2..96cd79fb 100644 --- a/test/gmock_link_test.h +++ b/test/gmock_link_test.h @@ -116,7 +116,10 @@ #include +#ifndef _WIN32_WCE #include +#endif + #include #include #include @@ -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;