source: anotherchoice/tags/jsp-1.4.4-full-UTF8/cfg/jsp/jsp_common.cpp@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 11.8 KB
Line 
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 * 上記著作権者
10は,以下の (1)〜(4) の条件か,Free Software Foundation
11 * によってå…
12¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
16 * 利用と呼ぶ)することを無償で許諾する.
17 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * スコード中に含まれていること.
20 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21 * 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24 * 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30 * と.
31 * (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
35 * (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43 *
44 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
47 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
48 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
49 *
50 * @(#) $Id: jsp_common.cpp,v 1.4 2003/12/20 06:51:58 takayuki Exp $
51 */
52
53#include "jsp/jsp_common.h"
54
55#include "base/option.h"
56
57#include <ctime>
58
59#if defined(_MSC_VER) || defined(__BORLANDC__)
60# define GETLOGINNAME_WINDOWS
61# include <windows.h>
62#elif __GNUC__
63# define GETLOGINNAME_UNIX
64# include <unistd.h>
65#endif
66
67using namespace std;
68
69#if 0
70namespace {
71 string get_loginname(void) throw()
72 {
73 string result("TOPPERS/JSP KernelConfigurator");
74
75#ifdef GETLOGINNAME_WINDOWS
76 char buffer[1024];
77 DWORD sz = 1024;
78 ::GetUserName(buffer, &sz);
79 result.assign(buffer);
80#elif defined(GETLOGINNAME_UNIX)
81 result.assign(getlogin());
82#endif
83
84 return result;
85 }
86}
87#endif
88
89
90 //インクルードファイルの形を変更する
91string ToppersJsp::conv_includefile(string file) throw()
92{
93 OptionParameter & option = getOptionParameter();
94 string result;
95
96 //ilオプションが付いたときには "<...>" 形式で出力
97 if(option["il"].isValid())
98 result = string("<") + file + ">";
99 else
100 result = string("\"") + file + "\"";
101
102 return result;
103}
104
105 //カーネルの変数名の形を変更する
106string ToppersJsp::conv_kernelobject(string obj) throw()
107{
108 OptionParameter & option = getOptionParameter();
109 string result;
110
111 result = obj;
112
113 // TOPPERS/JSP rel 1.3より後はカーネル変数の頭に _kernel_ をつける
114 if(!option["1.3"].isValid())
115 result = string("_kernel_") + obj;
116
117 return result;
118}
119
120ToppersJsp::SpecialtyFile::SpecialtyFile(void) throw() : MultipartStream(), RuntimeObject(true)
121{}
122
123#if 0
124string ToppersJsp::get_agreement(string filename) throw()
125{
126 const char * base_agreement =
127 "/*\n"
128 " * TOPPERS/JSP Kernel\n"
129 " * Toyohashi Open Platform for Embedded Real-Time Systems/\n"
130 " * Just Standard Profile Kernel\n"
131 " * \n"
132 " * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory\n"
133 " * Toyohashi Univ. of Technology, JAPAN\n"
134 " * \n"
135 " * 上記著作権者
136は,以下の (1)〜(4) の条件か,Free Software Foundation \n"
137 " * によってå…
138¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記\n"
139 " * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア\n"
140 " * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
141å¸ƒï¼ˆä»¥ä¸‹ï¼Œ\n"
142 " * 利用と呼ぶ)することを無償で許諾する.\n"
143 " * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作\n"
144 " * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー\n"
145 " * スコード中に含まれていること.\n"
146 " * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使\n"
147 " * 用できる形で再é…
148å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
149å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨\n"
150 " * 者
151マニュアルなど)に,上記の著作権表示,この利用条件および下記\n"
152 " * の無保証規定を掲載すること.\n"
153 " * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使\n"
154 " * 用できない形で再é…
155å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ\n"
156 " * と.\n"
157 " * (a) 再é…
158å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
159マニュアルなど)に,上記の著\n"
160 " * 作権表示,この利用条件および下記の無保証規定を掲載すること.\n"
161 " * (b) 再é…
162å¸ƒã®å½¢æ…
163‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに\n"
164 " * 報告すること.\n"
165 " * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損\n"
166 " * 害からも,上記著作権者
167およびTOPPERSプロジェクトをå…
168è²¬ã™ã‚‹ã“と.\n"
169 " * \n"
170 " * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
171お\n"
172 " * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も\n"
173 " * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直\n"
174 " * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.\n"
175 " * \n";
176
177 string work(base_agreement);
178
179 //CVSのID風のものをくっつける
180 time_t t;
181 time(&t);
182
183 work += string(" * @(#)$Id: ");
184 work += filename;
185 work += " ";
186 work += static_cast<const char *>(asctime(localtime(&t)));
187
188 work.erase(work.size() - 1); //asctimeで改行がå…
189¥ã‚‹ã®ã§chomp
190
191 work += " ";
192 work += get_loginname();
193 work += " Exp $\n */\n\n";
194
195 return work;
196}
197#endif
198
199
200/***************************************** テストスィート *****************************************/
201
202#ifdef TESTSUITE
203
204class SpecialtyFile_test : public ToppersJsp::SpecialtyFile
205{
206public:
207 ~SpecialtyFile_test(void) throw() { TestSuite::check("SpecialtyFile::~SpecialtyFile"); }
208 TESTSUITE_PROTOTYPE(main)
209};
210
211TESTSUITE(main, SpecialtyFile_test)
212{
213 BEGIN_CASE("constructor","constructor") {
214 BEGIN_CASE("1","生成するとROTに乗る") {
215 SpecialtyFile_test file;
216
217 if(RuntimeObjectTable::getInstance<SpecialtyFile_test>() == 0)
218 TEST_FAIL;
219 } END_CASE;
220
221 BEGIN_CASE("2","破棄の対象になっている") {
222 Singleton<RuntimeObjectTable>::Context context;
223 Singleton<RuntimeObjectTable>::saveContext(context);
224
225 Singleton<RuntimeObjectTable>::renewInstance();
226
227 new SpecialtyFile_test;
228
229 TEST_CASE("0","[前提] 登録されている", RuntimeObjectTable::getInstance<SpecialtyFile_test>() != 0);
230
231 TestSuite::clearCheckpoints();
232 Singleton<RuntimeObjectTable>::renewInstance(); //インスタンスの再生成でROTが削除される
233
234 TEST_CASE("1","ROTから解除されている", RuntimeObjectTable::getInstance<SpecialtyFile_test>() == 0);
235 TEST_CASE("2","デストラクタが起動されている", TestSuite::isReached("SpecialtyFile::~SpecialtyFile"));
236
237 Singleton<RuntimeObjectTable>::restoreContext(context);
238 } END_CASE;
239 } END_CASE;
240
241 BEGIN_CASE("createInstance","createInstance") {
242 BEGIN_CASE("1","インスタンスが生成できる") {
243 SpecialtyFile_test * file = SpecialtyFile::createInstance<SpecialtyFile_test>("test.txt");
244
245 file->disableOutput(); //出力されても困るので
246
247 TEST_CASE("1","非NULLが返る", file != 0);
248 TEST_CASE("2","ファイル名が正常", file->getFilename().compare("test.txt") == 0);
249 } END_CASE;
250
251 BEGIN_CASE("2","空文字を渡すと例外") {
252
253 bool result = false;
254 try {
255 SpecialtyFile::createInstance<SpecialtyFile_test>("");
256 }
257 catch(Exception &) {
258 result = true;
259 }
260
261 TEST_CASE("1","例外が起こる", result);
262 TEST_CASE("2","オブジェクトはない", RuntimeObjectTable::getInstance<SpecialtyFile_test>() == 0);
263 } END_CASE;
264 } END_CASE;
265}
266
267namespace {
268 extern void testsuite(TestSuiteControl & _suite_control);
269 TestSuite testsuite_onTop("TOPPERS/JSP Common Function(main)", testsuite);
270
271 //テストスィートの本体
272 void testsuite(TestSuiteControl & _suite_control)
273 {
274 Singleton<OptionParameter>::Context context;
275 Singleton<OptionParameter>::saveContext(context);
276
277 BEGIN_CASE("conv_includefile","conv_includefile") {
278 BEGIN_CASE("1","-ilが付いていないとダブルクォートでくくる") {
279 Singleton<OptionParameter>::renewInstance();
280
281 if(ToppersJsp::conv_includefile("test.h").compare("\"test.h\"") != 0)
282 TEST_FAIL;
283 } END_CASE;
284
285 BEGIN_CASE("1","-ilが付いていると<>でくくる") {
286 Singleton<OptionParameter>::renewInstance();
287 char * argv[] = {"test.exe","-il"};
288 getOptionParameter().parseOption(2, argv);
289
290 if(ToppersJsp::conv_includefile("test.h").compare("<test.h>") != 0)
291 TEST_FAIL;
292 } END_CASE;
293 } END_CASE;
294
295 BEGIN_CASE("conv_kernelobject","conv_kernelobject") {
296 BEGIN_CASE("1","-1.3が付いていないと_kernel_が付く") {
297 Singleton<OptionParameter>::renewInstance();
298
299 if(ToppersJsp::conv_kernelobject("test").compare("_kernel_test") != 0)
300 TEST_FAIL;
301 } END_CASE;
302
303 BEGIN_CASE("1","-1.3が付いているとそのまま出てくる") {
304 Singleton<OptionParameter>::renewInstance();
305 char * argv[] = {"test.exe","-1.3"};
306 getOptionParameter().parseOption(2, argv);
307
308 if(ToppersJsp::conv_kernelobject("test").compare("test") != 0)
309 TEST_FAIL;
310 } END_CASE;
311 } END_CASE;
312
313 Singleton<OptionParameter>::restoreContext(context);
314
315 }
316}
317#endif
318
319
Note: See TracBrowser for help on using the repository browser.