diff options
Diffstat (limited to 'src/system_wrappers/source/thread_unittest.cc')
-rw-r--r-- | src/system_wrappers/source/thread_unittest.cc | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/system_wrappers/source/thread_unittest.cc b/src/system_wrappers/source/thread_unittest.cc new file mode 100644 index 0000000000..361424a7fb --- /dev/null +++ b/src/system_wrappers/source/thread_unittest.cc @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "system_wrappers/interface/thread_wrapper.h" + +#include "gtest/gtest.h" +#include "system_wrappers/interface/trace.h" + +namespace webrtc { + +const int kLogTrace = 0; + +class TestTraceCallback : public TraceCallback { + public: + virtual void Print(const TraceLevel level, + const char* traceString, + const int length) { + if (traceString) { + char* cmd_print = new char[length+1]; + memcpy(cmd_print, traceString, length); + cmd_print[length] = '\0'; + printf("%s\n", cmd_print); + fflush(stdout); + delete[] cmd_print; + } + } +}; + +class ThreadTest : public ::testing::Test { + public: + ThreadTest() { + StartTrace(); + } + ~ThreadTest() { + StopTrace(); + } + + private: + void StartTrace() { + if (kLogTrace) { + Trace::CreateTrace(); + Trace::SetLevelFilter(webrtc::kTraceAll); + Trace::SetTraceCallback(&trace_); + } + } + + void StopTrace() { + if (kLogTrace) { + Trace::ReturnTrace(); + } + } + + TestTraceCallback trace_; +}; + +// Function that does nothing, and reports success. +bool NullRunFunction(void* /* obj */) { + return true; +} + +TEST_F(ThreadTest, StartStop) { + ThreadWrapper* thread = ThreadWrapper::CreateThread(&NullRunFunction); + unsigned int id = 42; + ASSERT_TRUE(thread->Start(id)); + EXPECT_TRUE(thread->Stop()); + delete thread; +} + +// Function that sets a boolean. +bool SetFlagRunFunction(void* obj) { + bool* obj_as_bool = static_cast<bool*> (obj); + *obj_as_bool = true; + return true; +} + +TEST_F(ThreadTest, RunFunctionIsCalled) { + bool flag = false; + ThreadWrapper* thread = ThreadWrapper::CreateThread(&SetFlagRunFunction, + &flag); + unsigned int id = 42; + ASSERT_TRUE(thread->Start(id)); + // At this point, the flag may be either true or false. + EXPECT_TRUE(thread->Stop()); + // We expect the thread to have run at least once. + EXPECT_TRUE(flag); + delete thread; +} + +} // namespace webrtc |