2 * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file test_waitable_handle_watch.cpp
18 * @author Slawomir Pajak (s.pajak@partner.samsung.com)
20 * @brief This file is the implementation file of WaitableHandleWatchSupport tests
22 #include <dpl/test/test_runner.h>
24 RUNNER_TEST_GROUP_INIT(DPL)
28 class TestListener: public WaitableHandleWatchSupport::WaitableHandleListener {
35 virtual ~TestListener()
38 virtual void OnWaitableHandleEvent(WaitableHandle /*waitableHandle*/, WaitMode::Type /*mode*/)
44 class TestWaitableHandleWatch: public WaitableHandleWatchSupport {
46 virtual ~TestWaitableHandleWatch()
50 virtual Thread *GetInvokerThread()
52 return Thread::GetCurrentThread();
55 // Invoke direct invoker
56 virtual void HandleDirectInvoker()
61 using WaitableHandleWatchSupport::HandleWatcher;
65 Name: WaitableHandleWatchSupport_SingleListener
66 Description: tests WaitableHandleWatchSupport simple case
67 Expected: listener is notified
69 RUNNER_TEST(WaitableHandleWatchSupport_SingleListener)
71 TestWaitableHandleWatch handleWatch;
72 WaitableHandle handle = 1;
73 TestListener listener;
74 handleWatch.AddWaitableHandleWatch(&listener, handle, WaitMode::Read);
76 handleWatch.HandleWatcher(handle, WaitMode::Read);
77 RUNNER_ASSERT(1 == listener.listenerHitCount);
81 Name: WaitableHandleWatchSupport_MultipleListener
82 Description: tests WaitableHandleWatchSupport multiple listeners
83 Expected: listeners are notified correctly
85 RUNNER_TEST(WaitableHandleWatchSupport_MultipleListener)
87 TestWaitableHandleWatch handleWatch;
88 WaitableHandle handle = 1;
89 TestListener listenerR1;
90 TestListener listenerR2;
91 TestListener listenerW1;
92 TestListener listenerW2;
93 handleWatch.AddWaitableHandleWatch(&listenerR1, handle, WaitMode::Read);
94 handleWatch.AddWaitableHandleWatch(&listenerR2, handle, WaitMode::Read);
95 handleWatch.AddWaitableHandleWatch(&listenerW1, handle, WaitMode::Write);
96 handleWatch.AddWaitableHandleWatch(&listenerW2, handle, WaitMode::Write);
98 handleWatch.HandleWatcher(handle, WaitMode::Read);
99 RUNNER_ASSERT(1 == listenerR1.listenerHitCount);
100 RUNNER_ASSERT(1 == listenerR2.listenerHitCount);
101 RUNNER_ASSERT(0 == listenerW1.listenerHitCount);
102 RUNNER_ASSERT(0 == listenerW2.listenerHitCount);
104 handleWatch.HandleWatcher(handle, WaitMode::Write);
105 RUNNER_ASSERT(1 == listenerR1.listenerHitCount);
106 RUNNER_ASSERT(1 == listenerR2.listenerHitCount);
107 RUNNER_ASSERT(1 == listenerW1.listenerHitCount);
108 RUNNER_ASSERT(1 == listenerW2.listenerHitCount);
112 Name: WaitableHandleWatchSupport_MultipleHandle
113 Description: tests WaitableHandleWatchSupport multiple handles
114 Expected: listeners are notified correctly
116 RUNNER_TEST(WaitableHandleWatchSupport_MultipleHandle)
118 TestWaitableHandleWatch handleWatch;
119 TestListener listener;
120 WaitableHandle handle1 = 1;
121 WaitableHandle handle2 = 2;
122 handleWatch.AddWaitableHandleWatch(&listener, handle1, WaitMode::Read);
123 handleWatch.AddWaitableHandleWatch(&listener, handle2, WaitMode::Read);
124 handleWatch.AddWaitableHandleWatch(&listener, handle1, WaitMode::Write);
125 handleWatch.AddWaitableHandleWatch(&listener, handle2, WaitMode::Write);
127 handleWatch.HandleWatcher(handle1, WaitMode::Read);
128 RUNNER_ASSERT(1 == listener.listenerHitCount);
130 handleWatch.HandleWatcher(handle1, WaitMode::Write);
131 RUNNER_ASSERT(2 == listener.listenerHitCount);
133 handleWatch.HandleWatcher(handle2, WaitMode::Read);
134 RUNNER_ASSERT(3 == listener.listenerHitCount);
136 handleWatch.HandleWatcher(handle2, WaitMode::Write);
137 RUNNER_ASSERT(4 == listener.listenerHitCount);
141 Name: WaitableHandleWatchSupport_AddRemoveListener
142 Description: tests WaitableHandleWatchSupport removing listeners function
143 Expected: remaining listeners are notified correctly, removed are not notified
145 RUNNER_TEST(WaitableHandleWatchSupport_AddRemoveListener)
147 TestWaitableHandleWatch handleWatch;
148 TestListener listener;
149 WaitableHandle handle1 = 1;
150 WaitableHandle handle2 = 2;
151 handleWatch.AddWaitableHandleWatch(&listener, handle1, WaitMode::Read);
152 handleWatch.AddWaitableHandleWatch(&listener, handle2, WaitMode::Read);
153 handleWatch.AddWaitableHandleWatch(&listener, handle1, WaitMode::Write);
154 handleWatch.AddWaitableHandleWatch(&listener, handle2, WaitMode::Write);
156 handleWatch.HandleWatcher(handle1, WaitMode::Read);
157 RUNNER_ASSERT(1 == listener.listenerHitCount);
159 handleWatch.RemoveWaitableHandleWatch(&listener, handle1, WaitMode::Write);
160 handleWatch.HandleWatcher(handle1, WaitMode::Write);
161 RUNNER_ASSERT(1 == listener.listenerHitCount);
163 handleWatch.RemoveWaitableHandleWatch(&listener, handle2, WaitMode::Read);
164 handleWatch.HandleWatcher(handle2, WaitMode::Read);
165 RUNNER_ASSERT(1 == listener.listenerHitCount);
167 handleWatch.HandleWatcher(handle2, WaitMode::Write);
168 RUNNER_ASSERT(2 == listener.listenerHitCount);