blob: d188c7af5dd2c9e04173655deeedd13b33d610e0 [file] [log] [blame]
hta@webrtc.orge1919f42012-05-22 15:57:34 +00001/*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
hta@webrtc.org40300132012-05-23 15:49:48 +000010
hta@webrtc.orge1919f42012-05-22 15:57:34 +000011#include "system_wrappers/interface/thread_wrapper.h"
12
13#include "gtest/gtest.h"
henrike@webrtc.org5ba44112012-10-05 14:36:54 +000014#include "system_wrappers/interface/scoped_ptr.h"
hta@webrtc.orge1919f42012-05-22 15:57:34 +000015
16namespace webrtc {
17
andrew@webrtc.org23ec30b2012-11-15 05:33:25 +000018TEST(ThreadTest, NullFunctionPointer) {
henrike@webrtc.org5ba44112012-10-05 14:36:54 +000019 webrtc::scoped_ptr<ThreadWrapper> thread(
20 webrtc::ThreadWrapper::CreateThread());
21 unsigned int id = 42;
22 EXPECT_FALSE(thread->Start(id));
23}
24
hta@webrtc.orge1919f42012-05-22 15:57:34 +000025// Function that does nothing, and reports success.
26bool NullRunFunction(void* /* obj */) {
27 return true;
28}
29
andrew@webrtc.org23ec30b2012-11-15 05:33:25 +000030TEST(ThreadTest, StartStop) {
hta@webrtc.orge1919f42012-05-22 15:57:34 +000031 ThreadWrapper* thread = ThreadWrapper::CreateThread(&NullRunFunction);
32 unsigned int id = 42;
33 ASSERT_TRUE(thread->Start(id));
34 EXPECT_TRUE(thread->Stop());
hta@webrtc.org6ed617b2012-05-22 16:55:16 +000035 delete thread;
hta@webrtc.orge1919f42012-05-22 15:57:34 +000036}
37
38// Function that sets a boolean.
39bool SetFlagRunFunction(void* obj) {
40 bool* obj_as_bool = static_cast<bool*> (obj);
41 *obj_as_bool = true;
42 return true;
43}
44
andrew@webrtc.org23ec30b2012-11-15 05:33:25 +000045TEST(ThreadTest, RunFunctionIsCalled) {
hta@webrtc.orge1919f42012-05-22 15:57:34 +000046 bool flag = false;
47 ThreadWrapper* thread = ThreadWrapper::CreateThread(&SetFlagRunFunction,
48 &flag);
49 unsigned int id = 42;
50 ASSERT_TRUE(thread->Start(id));
51 // At this point, the flag may be either true or false.
52 EXPECT_TRUE(thread->Stop());
53 // We expect the thread to have run at least once.
54 EXPECT_TRUE(flag);
hta@webrtc.org6ed617b2012-05-22 16:55:16 +000055 delete thread;
hta@webrtc.orge1919f42012-05-22 15:57:34 +000056}
57
58} // namespace webrtc