Index: base/sta_unittest.cc |
diff --git a/base/sta_unittest.cc b/base/sta_unittest.cc |
deleted file mode 100644 |
index e7a000fb31ff87807b9f6297478adbf976a5abf4..0000000000000000000000000000000000000000 |
--- a/base/sta_unittest.cc |
+++ /dev/null |
@@ -1,288 +0,0 @@ |
-// Copyright 2004-2009 Google Inc. |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
-// ======================================================================== |
- |
- |
-#include <atlstr.h> |
-#include "omaha/base/sta.h" |
-#include "omaha/base/sta_call.h" |
-#include "omaha/base/thread.h" |
-#include "omaha/base/utils.h" |
-#include "omaha/testing/unit_test.h" |
- |
-namespace omaha { |
- |
-namespace { |
- |
-class X { |
- public: |
- void f() {} |
- void f(int) {} |
- void f(unsigned int, X*) {} |
- void f(bool, char, long*) {} |
- |
- static void g() {} |
- static void g(int) {} |
- static void g(unsigned int, X*) {} |
- static void g(bool, char, long*) {} |
-}; |
- |
-class Y { |
- public: |
- HRESULT f() { return S_OK; } |
- HRESULT f(int) { return S_OK; } |
- HRESULT f(unsigned int, X*) { return S_OK; } |
- HRESULT f(bool, char, long*) { return S_OK; } |
- |
- static HRESULT g() { return S_OK; } |
- static HRESULT g(int) { return S_OK; } |
- static HRESULT g(unsigned int, X*) { return S_OK; } |
- static HRESULT g(bool, char, long*) { return S_OK; } |
-}; |
- |
-class Z { |
- public: |
- void f(char, signed char, unsigned char) {} |
- |
- void f(Y*) {} |
- // void f(const Y*) {} // not supported !!! |
- |
- void m() {} |
- void m() const {} |
-}; |
- |
-class Test { |
- public: |
- int Add(int i, int j) { return i + j; } |
- void Add(int i, int j, int* sum) { *sum = i + j; } |
-}; |
- |
-int Add(long i, long j) { return i + j; } |
-void Add(long i, long j, long* sum) { *sum = i + j; } |
- |
-void Print(const char*) {} |
-void Print1(CString*) {} |
- |
-} // namespace |
- |
-class CompileTest : public Runnable { |
- protected: |
- virtual void Run(); |
-}; |
- |
-void CompileTest::Run() { |
- X x; |
- Y y; |
- |
- CallFunction(X::g); |
- CallFunction(X::g, 10); |
- CallFunction(X::g, static_cast<unsigned int>(10), &x); |
- CallFunction(X::g, true, 'a', static_cast<long*>(0)); |
- |
- CallFunction(Y::g); |
- CallFunction(Y::g, 10); |
- CallFunction(Y::g, static_cast<unsigned int>(10), &x); |
- CallFunction(Y::g, true, 'a', static_cast<long*>(0)); |
- |
- CallMethod(&x, &X::f); |
- CallMethod(&x, &X::f, 10); |
- CallMethod(&x, &X::f, static_cast<unsigned int>(10), &x); |
- CallMethod(&x, &X::f, true, 'a', static_cast<long*>(0)); |
- |
- CallMethod(&y, &Y::f); |
- CallMethod(&y, &Y::f, 20); |
- CallMethod(&y, &Y::f, static_cast<unsigned int>(10), &x); |
- CallMethod(&y, &Y::f, true, 'a', static_cast<long*>(0)); |
- |
- Z z; |
- CallMethod(&z, |
- &Z::f, |
- 'a', |
- static_cast<signed char>('a'), |
- static_cast<unsigned char>('a')); |
- |
- |
- CallMethod(&z, &Z::f, &y); |
- |
- // Does not compile: template parameter 'P' is ambiguous |
- // const Y cy; |
- // CallMethod(&z, &Z::f, &cy); |
- |
- CallMethod(&z, &Z::m); |
- |
- // Does not compile: template parameter 'T' is ambiguous |
- // const Z cz; |
- // CallMethod(&cz, &Z::m); |
- |
- // Does not compile: cannot convert from 'const Z *' to 'Z *const ' |
- // const Z cz; |
- // CallMethod<const Z, void>(&cz, &Z::m); |
- |
- CString msg(_T("test")); |
- CallFunction(Print, "test"); |
- CallFunction(Print1, &msg); |
-} |
- |
-class RuntimeTest : public Runnable { |
- protected: |
- virtual void Run(); |
-}; |
- |
-void RuntimeTest::Run() { |
- Test test; |
- ASSERT_EQ(CallMethod(&test, &Test::Add, 10, 20), 30); |
- |
- int sum(0); |
- CallMethod(&test, &Test::Add, -10, 20, &sum); |
- ASSERT_EQ(sum, 10); |
- |
- { |
- ASSERT_EQ(CallFunction(Add, long(10), long(20)), 30); |
- |
- long sum = 0; |
- CallFunction(Add, long(10), long(-20), &sum); |
- ASSERT_EQ(sum, -10); |
- } |
-} |
- |
- |
-class AsyncTest : public Runnable { |
- protected: |
- virtual void Run(); |
-}; |
- |
-void AsyncTest::Run() { |
- static X x; |
- static Y y; |
- |
- CallFunctionAsync(X::g); |
- CallFunctionAsync(X::g, 10); |
- CallFunctionAsync(X::g, static_cast<unsigned int>(10), &x); |
- CallFunctionAsync(X::g, true, 'a', static_cast<long*>(0)); |
- |
- CallFunctionAsync(Y::g); |
- CallFunctionAsync(Y::g, 10); |
- CallFunctionAsync(Y::g, static_cast<unsigned int>(10), &x); |
- CallFunctionAsync(Y::g, true, 'a', static_cast<long*>(0)); |
- |
- CallMethodAsync(&x, &X::f); |
- CallMethodAsync(&x, &X::f, 10); |
- CallMethodAsync(&x, &X::f, static_cast<unsigned int>(10), &x); |
- CallMethodAsync(&x, &X::f, true, 'a', static_cast<long*>(0)); |
- |
- CallMethodAsync(&y, &Y::f); |
- CallMethodAsync(&y, &Y::f, 20); |
- CallMethodAsync(&y, &Y::f, static_cast<unsigned int>(10), &x); |
- CallMethodAsync(&y, &Y::f, true, 'a', static_cast<long*>(0)); |
- |
- static Z z; |
- CallMethodAsync(&z, |
- &Z::f, |
- 'a', |
- static_cast<signed char>('a'), |
- static_cast<unsigned char>('a')); |
- |
- |
- CallMethodAsync(&z, &Z::f, &y); |
- |
- // Does not compile: template parameter 'P' is ambiguous |
- // const Y cy; |
- // CallMethod(&z, &Z::f, &cy); |
- |
- CallMethodAsync(&z, &Z::m); |
- |
- // Does not compile: template parameter 'T' is ambiguous |
- // const Z cz; |
- // CallMethod(&cz, &Z::m); |
- |
- // Does not compile: cannot convert from 'const Z *' to 'Z *const ' |
- // const Z cz; |
- // CallMethod<const Z, void>(&cz, &Z::m); |
- |
- CString msg(_T("test")); |
- CallFunctionAsync(Print, "test"); |
- CallFunctionAsync(Print1, &msg); |
- |
- WaitWithMessageLoopTimed(1000); |
-} |
- |
- |
-TEST(STATest, CompileTest) { |
- ASSERT_SUCCEEDED(InitializeApartment(0)); |
- |
- Thread t; |
- CompileTest compile_test; |
- t.Start(&compile_test); |
- EXPECT_TRUE(WaitWithMessageLoop(t.GetThreadHandle())); |
- |
- ASSERT_SUCCEEDED(UninitializeApartment()); |
-} |
- |
-TEST(STATest, RuntimeTest) { |
- ASSERT_SUCCEEDED(InitializeApartment(0)); |
- |
- Thread t; |
- RuntimeTest runtime_test; |
- t.Start(&runtime_test); |
- EXPECT_TRUE(WaitWithMessageLoop(t.GetThreadHandle())); |
- |
- ASSERT_SUCCEEDED(UninitializeApartment()); |
-} |
- |
- |
-TEST(STATest, AsyncTest) { |
- ASSERT_SUCCEEDED(InitializeApartment(0)); |
- |
- Thread t; |
- AsyncTest async_test; |
- t.Start(&async_test); |
- EXPECT_TRUE(WaitWithMessageLoop(t.GetThreadHandle())); |
- |
- ASSERT_SUCCEEDED(UninitializeApartment()); |
-} |
- |
-TEST(STATest, ApartmentRefCounting) { |
- // Check the reference counting is working. |
- ASSERT_SUCCEEDED(InitializeApartment(0)); |
- ASSERT_SUCCEEDED(InitializeApartment(0)); |
- ASSERT_SUCCEEDED(UninitializeApartment()); |
- ASSERT_SUCCEEDED(UninitializeApartment()); |
- |
- // The call below will raise an assert in the the STA code. |
- ExpectAsserts expect_asserts; |
- ASSERT_EQ(E_UNEXPECTED, UninitializeApartment()); |
-} |
- |
-TEST(STATest, ScopedSTA) { |
- { |
- scoped_sta sta(0); |
- ASSERT_SUCCEEDED(sta.result()); |
- } |
- { |
- scoped_sta sta(0); |
- ASSERT_SUCCEEDED(sta.result()); |
- } |
- { |
- scoped_sta sta1(0); |
- scoped_sta sta2(0); |
- ASSERT_SUCCEEDED(sta1.result()); |
- ASSERT_SUCCEEDED(sta2.result()); |
- } |
- |
- ExpectAsserts expect_asserts; |
- ASSERT_EQ(E_UNEXPECTED, UninitializeApartment()); |
-} |
- |
-} // namespace omaha |
- |