3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
6 * Copyright (C) 2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
9 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
10 * によって公表されている GNU General Public License の Version 2 に記
11 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
12 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
33 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
34 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
36 * @(#) $Id: jsp_common.cpp,v 1.1 2009/01/31 05:27:37 suikan Exp $
39 #include "jsp/jsp_common.h"
41 #include "base/option.h"
45 #if defined(_MSC_VER) || defined(__BORLANDC__)
46 # define GETLOGINNAME_WINDOWS
49 # define GETLOGINNAME_UNIX
57 string get_loginname(void) throw()
59 string result("TOPPERS/JSP KernelConfigurator");
61 #ifdef GETLOGINNAME_WINDOWS
64 ::GetUserName(buffer, &sz);
65 result.assign(buffer);
66 #elif defined(GETLOGINNAME_UNIX)
67 result.assign(getlogin());
77 string ToppersJsp::conv_includefile(string file) throw()
79 OptionParameter & option = getOptionParameter();
82 //ilオプションが付いたときには "<...>" 形式で出力
83 if(option["il"].isValid())
84 result = string("<") + file + ">";
86 result = string("\"") + file + "\"";
92 string ToppersJsp::conv_kernelobject(string obj) throw()
94 OptionParameter & option = getOptionParameter();
99 // TOPPERS/JSP rel 1.3より後はカーネル変数の頭に _kernel_ をつける
100 if(!option["1.3"].isValid())
101 result = string("_kernel_") + obj;
106 ToppersJsp::SpecialtyFile::SpecialtyFile(void) throw() : MultipartStream(), RuntimeObject(true)
110 string ToppersJsp::get_agreement(string filename) throw()
112 const char * base_agreement =
114 " * TOPPERS/JSP Kernel\n"
115 " * Toyohashi Open Platform for Embedded Real-Time Systems/\n"
116 " * Just Standard Profile Kernel\n"
118 " * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory\n"
119 " * Toyohashi Univ. of Technology, JAPAN\n"
121 " * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation \n"
122 " * によって公表されている GNU General Public License の Version 2 に記\n"
123 " * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア\n"
124 " * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,\n"
125 " * 利用と呼ぶ)することを無償で許諾する.\n"
126 " * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作\n"
127 " * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー\n"
128 " * スコード中に含まれていること.\n"
129 " * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使\n"
130 " * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用\n"
131 " * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記\n"
132 " * の無保証規定を掲載すること.\n"
133 " * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使\n"
134 " * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ\n"
136 " * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著\n"
137 " * 作権表示,この利用条件および下記の無保証規定を掲載すること.\n"
138 " * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに\n"
140 " * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損\n"
141 " * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.\n"
143 " * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お\n"
144 " * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も\n"
145 " * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直\n"
146 " * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.\n"
149 string work(base_agreement);
155 work += string(" * @(#)$Id: ");
158 work += static_cast<const char *>(asctime(localtime(&t)));
160 work.erase(work.size() - 1); //asctimeで改行が入るのでchomp
163 work += get_loginname();
164 work += " Exp $\n */\n\n";
171 /***************************************** テストスィート *****************************************/
175 class SpecialtyFile_test : public ToppersJsp::SpecialtyFile
178 ~SpecialtyFile_test(void) throw() { TestSuite::check("SpecialtyFile::~SpecialtyFile"); }
179 TESTSUITE_PROTOTYPE(main)
182 TESTSUITE(main, SpecialtyFile_test)
184 BEGIN_CASE("constructor","constructor") {
185 BEGIN_CASE("1","生成するとROTに乗る") {
186 SpecialtyFile_test file;
188 if(RuntimeObjectTable::getInstance<SpecialtyFile_test>() == 0)
192 BEGIN_CASE("2","破棄の対象になっている") {
193 Singleton<RuntimeObjectTable>::Context context;
194 Singleton<RuntimeObjectTable>::saveContext(context);
196 Singleton<RuntimeObjectTable>::renewInstance();
198 new SpecialtyFile_test;
200 TEST_CASE("0","[前提] 登録されている", RuntimeObjectTable::getInstance<SpecialtyFile_test>() != 0);
202 TestSuite::clearCheckpoints();
203 Singleton<RuntimeObjectTable>::renewInstance(); //インスタンスの再生成でROTが削除される
205 TEST_CASE("1","ROTから解除されている", RuntimeObjectTable::getInstance<SpecialtyFile_test>() == 0);
206 TEST_CASE("2","デストラクタが起動されている", TestSuite::isReached("SpecialtyFile::~SpecialtyFile"));
208 Singleton<RuntimeObjectTable>::restoreContext(context);
212 BEGIN_CASE("createInstance","createInstance") {
213 BEGIN_CASE("1","インスタンスが生成できる") {
214 SpecialtyFile_test * file = SpecialtyFile::createInstance<SpecialtyFile_test>("test.txt");
216 file->disableOutput(); //出力されても困るので
218 TEST_CASE("1","非NULLが返る", file != 0);
219 TEST_CASE("2","ファイル名が正常", file->getFilename().compare("test.txt") == 0);
222 BEGIN_CASE("2","空文字を渡すと例外") {
226 SpecialtyFile::createInstance<SpecialtyFile_test>("");
232 TEST_CASE("1","例外が起こる", result);
233 TEST_CASE("2","オブジェクトはない", RuntimeObjectTable::getInstance<SpecialtyFile_test>() == 0);
239 extern void testsuite(TestSuiteControl & _suite_control);
240 TestSuite testsuite_onTop("TOPPERS/JSP Common Function(main)", testsuite);
243 void testsuite(TestSuiteControl & _suite_control)
245 Singleton<OptionParameter>::Context context;
246 Singleton<OptionParameter>::saveContext(context);
248 BEGIN_CASE("conv_includefile","conv_includefile") {
249 BEGIN_CASE("1","-ilが付いていないとダブルクォートでくくる") {
250 Singleton<OptionParameter>::renewInstance();
252 if(ToppersJsp::conv_includefile("test.h").compare("\"test.h\"") != 0)
256 BEGIN_CASE("1","-ilが付いていると<>でくくる") {
257 Singleton<OptionParameter>::renewInstance();
258 char * argv[] = {"test.exe","-il"};
259 getOptionParameter().parseOption(2, argv);
261 if(ToppersJsp::conv_includefile("test.h").compare("<test.h>") != 0)
266 BEGIN_CASE("conv_kernelobject","conv_kernelobject") {
267 BEGIN_CASE("1","-1.3が付いていないと_kernel_が付く") {
268 Singleton<OptionParameter>::renewInstance();
270 if(ToppersJsp::conv_kernelobject("test").compare("_kernel_test") != 0)
274 BEGIN_CASE("1","-1.3が付いているとそのまま出てくる") {
275 Singleton<OptionParameter>::renewInstance();
276 char * argv[] = {"test.exe","-1.3"};
277 getOptionParameter().parseOption(2, argv);
279 if(ToppersJsp::conv_kernelobject("test").compare("test") != 0)
284 Singleton<OptionParameter>::restoreContext(context);