OSDN Git Service

Change the directry name to hirado
[trx-305dsp/dsp.git] / hirado / kernel / cfg / base / event.cpp
1 /*
2  *  TOPPERS/JSP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Just Standard Profile Kernel
5  * 
6  *  Copyright (C) 2003 by Embedded and Real-Time Systems Laboratory
7  *                              Toyohashi Univ. of Technology, JAPAN
8  * 
9  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
10  *  によって公表されている GNU General Public License の Version 2 に記
11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
13  *  利用と呼ぶ)することを無償で許諾する.
14  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16  *      スコード中に含まれていること.
17  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20  *      の無保証規定を掲載すること.
21  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23  *      と.
24  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
26  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27  *        報告すること.
28  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30  * 
31  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
33  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
34  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
35  * 
36  *  @(#) $Id: event.cpp,v 1.1 2009/01/31 05:27:37 suikan Exp $
37  */
38
39 // $Header: /cvsroot/toppersjsp4bf/jsp/cfg/base/event.cpp,v 1.1 2009/01/31 05:27:37 suikan Exp $
40
41 #include "base/event.h"
42
43 using namespace std;
44
45 /***************************** テストスィート *****************************/
46
47 #ifdef TESTSUITE
48 #include "base/coverage_undefs.h"
49
50 namespace {
51     class Event_fortest : public Event<int> 
52     {   TESTSUITE_PROTOTYPE(main)   };
53
54     int * ptr_i_dummy_handler;
55     void dummy_handler(int & i)
56     {
57         ptr_i_dummy_handler = &i;
58         ++ i;
59         TestSuite::check("dummy_handler");
60     }
61
62     class EventHandler : public Event_fortest::Handler
63     {
64     public:
65         int * ptr_i;
66
67         EventHandler(void)  throw() { TestSuite::check("EventHandler::EventHandler");  }
68         ~EventHandler(void) throw() { TestSuite::check("EventHandler::~EventHandler"); }
69         void handler(Event_fortest::value_type & i) { ptr_i = &i; ++i; TestSuite::check("EventHandler::handler"); }
70     };
71 }
72
73 TESTSUITE(main,Event_fortest)
74 {
75     BEGIN_CASE("add","add") {
76         BEGIN_CASE("1","addでハンドラが登録できる") {
77             Singleton<Event_fortest::handler_list_type>::renewInstance();
78
79             Event_fortest::add(dummy_handler);
80
81             TEST_CASE("1","ハンドラリストが1増えている", Singleton<Event_fortest::handler_list_type>::getInstance()->size() == 1);
82             TEST_CASE("2","ハンドラリストの中身は正しい", *Singleton<Event_fortest::handler_list_type>::getInstance()->begin() == dummy_handler);
83         } END_CASE;
84
85         BEGIN_CASE("2","同じハンドラを複数回登録できる") {
86             Singleton<Event_fortest::handler_list_type>::renewInstance();
87
88             Event_fortest::add(dummy_handler);
89             Event_fortest::add(dummy_handler);
90             Event_fortest::add(dummy_handler);
91
92             TEST_CASE("1","ハンドラリストの中身は3", Singleton<Event_fortest::handler_list_type>::getInstance()->size() == 3);
93             TEST_CASE("2","ハンドラリストの中身は正しい", *Singleton<Event_fortest::handler_list_type>::getInstance()->begin() == dummy_handler);
94         } END_CASE;
95     } END_CASE;
96
97     BEGIN_CASE("remove","remove") {
98         BEGIN_CASE("1","addで登録したハンドラを削除できる") {
99             Singleton<Event_fortest::handler_list_type>::renewInstance();
100
101             Event_fortest::add(dummy_handler);
102             Event_fortest::remove(dummy_handler);
103
104             TEST_CASE("1","ハンドラリストの要素数は0", Singleton<Event_fortest::handler_list_type>::getInstance()->size() == 0);
105         } END_CASE;
106
107         BEGIN_CASE("2","登録した全てのハンドラが消える") {
108             Singleton<Event_fortest::handler_list_type>::renewInstance();
109
110             Event_fortest::add(dummy_handler);
111             Event_fortest::add(dummy_handler);
112             Event_fortest::add(dummy_handler);
113             Event_fortest::remove(dummy_handler);
114
115             TEST_CASE("1","ハンドラリストの要素数は0", Singleton<Event_fortest::handler_list_type>::getInstance()->size() == 0);
116         } END_CASE;
117     } END_CASE;
118
119     BEGIN_CASE("constructor/destructor","constructor/destructor") {
120         Singleton<Event_fortest::Handler::instance_list_type>::renewInstance();
121
122         TEST_CASE("0","[前提] ハンドラリストの中身は0", Singleton<Event_fortest::Handler::instance_list_type>::getInstance()->size() == 0);
123         {
124             EventHandler evhdr;
125             TEST_CASE("1","ハンドラリストに登録されている", Singleton<Event_fortest::Handler::instance_list_type>::getInstance()->size() == 1);
126             TEST_CASE("2","正しく登録されている", *Singleton<Event_fortest::Handler::instance_list_type>::getInstance()->begin() == &evhdr);
127         }
128         TEST_CASE("3","ハンドラは解除されている", Singleton<Event_fortest::Handler::instance_list_type>::getInstance()->size() == 0);
129     } END_CASE;
130
131     BEGIN_CASE("raise","raise") {
132         BEGIN_CASE("1","登録した静的なハンドラが実行される") {
133             Singleton<Event_fortest::handler_list_type>::renewInstance();
134             TestSuite::clearCheckpoints();
135
136             Event_fortest::add(dummy_handler);
137
138             int i = 0;
139             Event_fortest::raise(i);
140
141             TEST_CASE("1","ハンドラが実行される",TestSuite::isReached("dummy_handler"));
142             TEST_CASE("2","引数間で見ている変数は同一", &i == ptr_i_dummy_handler);
143             TEST_CASE("3","値がインクリメントされている", i == 1);
144         } END_CASE;
145
146         BEGIN_CASE("2","登録したインスタンスのハンドラが実行される") {
147             Singleton<Event_fortest::handler_list_type>::renewInstance();
148             TestSuite::clearCheckpoints();
149             EventHandler evhdr;
150
151             int i = 0;
152             Event_fortest::raise(i);
153
154             TEST_CASE("1","ハンドラが実行される",TestSuite::isReached("EventHandler::handler"));
155             TEST_CASE("2","引数間で見ている変数は同一", &i == evhdr.ptr_i);
156             TEST_CASE("3","値がインクリメントされている", i == 1);
157         } END_CASE;
158
159         BEGIN_CASE("3","両方同時 (順番は特に気にしない)") {
160             Singleton<Event_fortest::handler_list_type>::renewInstance();
161             TestSuite::clearCheckpoints();
162             EventHandler evhdr;
163
164             Event_fortest::add(dummy_handler);
165
166             int i = 0;
167             Event_fortest::raise(i);
168
169             TEST_CASE("1","ハンドラが実行される",TestSuite::isReached("dummy_handler"));
170             TEST_CASE("2","ハンドラが実行される",TestSuite::isReached("EventHandler::handler"));
171             TEST_CASE("3","値がインクリメントされている", i == 2);
172         } END_CASE;
173
174         BEGIN_CASE("4","複数登録") {
175             Singleton<Event_fortest::handler_list_type>::renewInstance();
176             TestSuite::clearCheckpoints();
177             EventHandler evhdr;
178             EventHandler evhdr2;
179
180             Event_fortest::add(dummy_handler);
181             Event_fortest::add(dummy_handler);
182
183             int i = 0;
184             Event_fortest::raise(i);
185
186             TEST_CASE("1","ハンドラが実行される",TestSuite::isReached("dummy_handler"));
187             TEST_CASE("2","ハンドラが実行される",TestSuite::isReached("EventHandler::handler"));
188             TEST_CASE("3","値がインクリメントされている", i == 4);
189         } END_CASE;
190     } END_CASE;
191 }
192
193
194 #endif
195
196
197