jiji 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. data/ChangeLog +58 -0
  2. data/README +1 -0
  3. data/base/agents/moving_average_agent.rb +78 -0
  4. data/base/shared_lib/moving_average.rb +35 -0
  5. data/base/shared_lib/system/cross.rb +76 -0
  6. data/base/shared_lib/system/position_manager.rb +160 -0
  7. data/base/shared_lib/system/signal.rb +347 -0
  8. data/bin/jiji +5 -0
  9. data/html/css/calendar.css +432 -0
  10. data/html/css/datatable.css +299 -0
  11. data/html/css/default.css +627 -0
  12. data/html/css/dialog.css +77 -0
  13. data/html/css/treeview.css +205 -0
  14. data/html/img/auto_trade_off.gif +0 -0
  15. data/html/img/auto_trade_on.gif +0 -0
  16. data/html/img/back_bottom.gif +0 -0
  17. data/html/img/back_middle.gif +0 -0
  18. data/html/img/back_top.gif +0 -0
  19. data/html/img/bin_closed.png +0 -0
  20. data/html/img/bin_empty.png +0 -0
  21. data/html/img/bt-create-title-1.gif +0 -0
  22. data/html/img/bt-create-title-2.gif +0 -0
  23. data/html/img/bt-create-title-3.gif +0 -0
  24. data/html/img/button_add.gif +0 -0
  25. data/html/img/button_add_gray.gif +0 -0
  26. data/html/img/button_add_over.gif +0 -0
  27. data/html/img/button_add_small.gif +0 -0
  28. data/html/img/button_add_small_gray.gif +0 -0
  29. data/html/img/button_add_small_over.gif +0 -0
  30. data/html/img/button_apply.gif +0 -0
  31. data/html/img/button_apply_gray.gif +0 -0
  32. data/html/img/button_apply_over.gif +0 -0
  33. data/html/img/button_calendar.gif +0 -0
  34. data/html/img/button_calendar_over.gif +0 -0
  35. data/html/img/button_cancel.gif +0 -0
  36. data/html/img/button_cancel.jpg +0 -0
  37. data/html/img/button_cancel_gray.gif +0 -0
  38. data/html/img/button_cancel_over.gif +0 -0
  39. data/html/img/button_cancel_over.jpg +0 -0
  40. data/html/img/button_close.gif +0 -0
  41. data/html/img/button_close_gray.gif +0 -0
  42. data/html/img/button_close_over.gif +0 -0
  43. data/html/img/button_mkcol.gif +0 -0
  44. data/html/img/button_mkcol_gray.gif +0 -0
  45. data/html/img/button_mkcol_over.gif +0 -0
  46. data/html/img/button_no.gif +0 -0
  47. data/html/img/button_no_gray.gif +0 -0
  48. data/html/img/button_no_over.gif +0 -0
  49. data/html/img/button_ok.gif +0 -0
  50. data/html/img/button_ok_gray.gif +0 -0
  51. data/html/img/button_ok_over.gif +0 -0
  52. data/html/img/button_remove.gif +0 -0
  53. data/html/img/button_remove_gray.gif +0 -0
  54. data/html/img/button_remove_over.gif +0 -0
  55. data/html/img/button_remove_small.gif +0 -0
  56. data/html/img/button_remove_small_gray.gif +0 -0
  57. data/html/img/button_remove_small_over.gif +0 -0
  58. data/html/img/button_rename.gif +0 -0
  59. data/html/img/button_rename_gray.gif +0 -0
  60. data/html/img/button_rename_over.gif +0 -0
  61. data/html/img/button_save.gif +0 -0
  62. data/html/img/button_save_gray.gif +0 -0
  63. data/html/img/button_save_over.gif +0 -0
  64. data/html/img/button_start.gif +0 -0
  65. data/html/img/button_start_over.gif +0 -0
  66. data/html/img/button_update.gif +0 -0
  67. data/html/img/button_update_gray.gif +0 -0
  68. data/html/img/button_update_over.gif +0 -0
  69. data/html/img/button_update_s.gif +0 -0
  70. data/html/img/button_update_s_gray.gif +0 -0
  71. data/html/img/button_update_s_over.gif +0 -0
  72. data/html/img/button_yes.gif +0 -0
  73. data/html/img/button_yes_gray.gif +0 -0
  74. data/html/img/button_yes_over.gif +0 -0
  75. data/html/img/circle.gif +0 -0
  76. data/html/img/control_play.png +0 -0
  77. data/html/img/control_play_blue.png +0 -0
  78. data/html/img/delta.gif +0 -0
  79. data/html/img/dialog_info.jpg +0 -0
  80. data/html/img/dialog_input.jpg +0 -0
  81. data/html/img/dialog_warn.jpg +0 -0
  82. data/html/img/dt-arrow-dn.png +0 -0
  83. data/html/img/dt-arrow-up.png +0 -0
  84. data/html/img/folder.png +0 -0
  85. data/html/img/folder_brick.png +0 -0
  86. data/html/img/folder_user.png +0 -0
  87. data/html/img/foot.jpg +0 -0
  88. data/html/img/goto.gif +0 -0
  89. data/html/img/goto_o.gif +0 -0
  90. data/html/img/h3_bt-create_0.gif +0 -0
  91. data/html/img/h3_bt-create_1.gif +0 -0
  92. data/html/img/h3_bt-create_2.gif +0 -0
  93. data/html/img/h3_result_0.gif +0 -0
  94. data/html/img/h3_result_1.gif +0 -0
  95. data/html/img/h3_result_2.gif +0 -0
  96. data/html/img/h3_result_3.gif +0 -0
  97. data/html/img/h3_result_4.gif +0 -0
  98. data/html/img/h3_result_5.gif +0 -0
  99. data/html/img/h3_result_6.gif +0 -0
  100. data/html/img/h3_rt-setting_0.gif +0 -0
  101. data/html/img/h3_rt-setting_1.gif +0 -0
  102. data/html/img/head.jpg +0 -0
  103. data/html/img/line-numbers.png +0 -0
  104. data/html/img/line_white.gif +0 -0
  105. data/html/img/loading.gif +0 -0
  106. data/html/img/page_white_ruby.png +0 -0
  107. data/html/img/panel_100_bottom.gif +0 -0
  108. data/html/img/panel_100_middle.gif +0 -0
  109. data/html/img/panel_100_top.gif +0 -0
  110. data/html/img/panel_140_650_b.gif +0 -0
  111. data/html/img/panel_140_650_m.gif +0 -0
  112. data/html/img/panel_140_650_t.gif +0 -0
  113. data/html/img/panel_140_660_b.gif +0 -0
  114. data/html/img/panel_140_660_m.gif +0 -0
  115. data/html/img/panel_140_660_t.gif +0 -0
  116. data/html/img/panel_140_b.gif +0 -0
  117. data/html/img/panel_140_m.gif +0 -0
  118. data/html/img/panel_140_t.gif +0 -0
  119. data/html/img/panel_260_b.gif +0 -0
  120. data/html/img/panel_260_m.gif +0 -0
  121. data/html/img/panel_260_t.gif +0 -0
  122. data/html/img/panel_300_b.gif +0 -0
  123. data/html/img/panel_300_m.gif +0 -0
  124. data/html/img/panel_300_t.gif +0 -0
  125. data/html/img/panel_320_b.gif +0 -0
  126. data/html/img/panel_320_m.gif +0 -0
  127. data/html/img/panel_320_t.gif +0 -0
  128. data/html/img/panel_360_b.gif +0 -0
  129. data/html/img/panel_360_m.gif +0 -0
  130. data/html/img/panel_360_t.gif +0 -0
  131. data/html/img/panel_380_b.gif +0 -0
  132. data/html/img/panel_380_m.gif +0 -0
  133. data/html/img/panel_380_t.gif +0 -0
  134. data/html/img/panel_500_b.gif +0 -0
  135. data/html/img/panel_500_m.gif +0 -0
  136. data/html/img/panel_500_t.gif +0 -0
  137. data/html/img/panel_620_b.gif +0 -0
  138. data/html/img/panel_620_m.gif +0 -0
  139. data/html/img/panel_620_t.gif +0 -0
  140. data/html/img/panel_780_b.gif +0 -0
  141. data/html/img/panel_780_m.gif +0 -0
  142. data/html/img/panel_780_t.gif +0 -0
  143. data/html/img/problem.gif +0 -0
  144. data/html/img/progressbar.gif +0 -0
  145. data/html/img/result-title-1-1.gif +0 -0
  146. data/html/img/result-title-1-2.gif +0 -0
  147. data/html/img/result-title-2-1.gif +0 -0
  148. data/html/img/result-title-2-2.gif +0 -0
  149. data/html/img/result-title-3-1.gif +0 -0
  150. data/html/img/result-title-4-1.gif +0 -0
  151. data/html/img/rt-setting-title-1.gif +0 -0
  152. data/html/img/rt-setting-title-2.gif +0 -0
  153. data/html/img/s.gif +0 -0
  154. data/html/img/scroll.gif +0 -0
  155. data/html/img/separator.gif +0 -0
  156. data/html/img/sidebar_agent.png +0 -0
  157. data/html/img/sidebar_agent_edit.png +0 -0
  158. data/html/img/sidebar_agent_edit_agent.png +0 -0
  159. data/html/img/sidebar_agent_edit_agent_over.png +0 -0
  160. data/html/img/sidebar_agent_edit_agent_s.png +0 -0
  161. data/html/img/sidebar_agent_edit_over.png +0 -0
  162. data/html/img/sidebar_agent_edit_s.png +0 -0
  163. data/html/img/sidebar_agent_edit_shared_lib.png +0 -0
  164. data/html/img/sidebar_agent_edit_shared_lib_over.png +0 -0
  165. data/html/img/sidebar_agent_edit_shared_lib_s.png +0 -0
  166. data/html/img/sidebar_back.gif +0 -0
  167. data/html/img/sidebar_bt.png +0 -0
  168. data/html/img/sidebar_bt_create.png +0 -0
  169. data/html/img/sidebar_bt_create_over.png +0 -0
  170. data/html/img/sidebar_bt_create_s.png +0 -0
  171. data/html/img/sidebar_bt_result.png +0 -0
  172. data/html/img/sidebar_bt_result_over.png +0 -0
  173. data/html/img/sidebar_bt_result_s.png +0 -0
  174. data/html/img/sidebar_result_rmt.png +0 -0
  175. data/html/img/sidebar_result_rmt_over.png +0 -0
  176. data/html/img/sidebar_result_rmt_s.png +0 -0
  177. data/html/img/sidebar_rt.png +0 -0
  178. data/html/img/sidebar_rt_setting.png +0 -0
  179. data/html/img/sidebar_rt_setting_over.png +0 -0
  180. data/html/img/sidebar_rt_setting_s.png +0 -0
  181. data/html/img/sprite.png +0 -0
  182. data/html/img/submenu_agents.png +0 -0
  183. data/html/img/submenu_agents_over.png +0 -0
  184. data/html/img/submenu_agents_s.png +0 -0
  185. data/html/img/submenu_graph.png +0 -0
  186. data/html/img/submenu_graph_over.png +0 -0
  187. data/html/img/submenu_graph_s.png +0 -0
  188. data/html/img/submenu_info.png +0 -0
  189. data/html/img/submenu_info_over.png +0 -0
  190. data/html/img/submenu_info_s.png +0 -0
  191. data/html/img/submenu_log.png +0 -0
  192. data/html/img/submenu_log_over.png +0 -0
  193. data/html/img/submenu_log_s.png +0 -0
  194. data/html/img/submenu_operation.png +0 -0
  195. data/html/img/submenu_operation_over.png +0 -0
  196. data/html/img/submenu_operation_s.png +0 -0
  197. data/html/img/submenu_trade.png +0 -0
  198. data/html/img/submenu_trade_over.png +0 -0
  199. data/html/img/submenu_trade_s.png +0 -0
  200. data/html/img/td_over.gif +0 -0
  201. data/html/img/td_over_d.gif +0 -0
  202. data/html/img/td_selected.gif +0 -0
  203. data/html/img/thead.gif +0 -0
  204. data/html/img/transparent.gif +0 -0
  205. data/html/img/yui/treeview-sprite.gif +0 -0
  206. data/html/index.html +492 -0
  207. data/html/js/agent-editor/agent-editor-page.js +324 -0
  208. data/html/js/agent-editor/agent-editor.js +363 -0
  209. data/html/js/agent-editor/agent-list-tree.js +251 -0
  210. data/html/js/agent-selector.js +666 -0
  211. data/html/js/app.js +198 -0
  212. data/html/js/bt-create-page.js +205 -0
  213. data/html/js/container-min.js +1 -0
  214. data/html/js/container-utils.js +78 -0
  215. data/html/js/container.js +944 -0
  216. data/html/js/dialog.js +279 -0
  217. data/html/js/edit_area/autocompletion.js +491 -0
  218. data/html/js/edit_area/edit_area.css +546 -0
  219. data/html/js/edit_area/edit_area.js +539 -0
  220. data/html/js/edit_area/edit_area_compressor.php +408 -0
  221. data/html/js/edit_area/edit_area_full.gz +0 -0
  222. data/html/js/edit_area/edit_area_full.js +38 -0
  223. data/html/js/edit_area/edit_area_full_with_plugins.gz +0 -0
  224. data/html/js/edit_area/edit_area_full_with_plugins.js +39 -0
  225. data/html/js/edit_area/edit_area_functions.js +1205 -0
  226. data/html/js/edit_area/edit_area_loader.js +1082 -0
  227. data/html/js/edit_area/elements_functions.js +334 -0
  228. data/html/js/edit_area/highlight.js +391 -0
  229. data/html/js/edit_area/images/autocompletion.gif +0 -0
  230. data/html/js/edit_area/images/close.gif +0 -0
  231. data/html/js/edit_area/images/fullscreen.gif +0 -0
  232. data/html/js/edit_area/images/go_to_line.gif +0 -0
  233. data/html/js/edit_area/images/goto.png +0 -0
  234. data/html/js/edit_area/images/help.gif +0 -0
  235. data/html/js/edit_area/images/help.png +0 -0
  236. data/html/js/edit_area/images/highlight.gif +0 -0
  237. data/html/js/edit_area/images/load.gif +0 -0
  238. data/html/js/edit_area/images/move.gif +0 -0
  239. data/html/js/edit_area/images/newdocument.gif +0 -0
  240. data/html/js/edit_area/images/opacity.png +0 -0
  241. data/html/js/edit_area/images/processing.gif +0 -0
  242. data/html/js/edit_area/images/redo.gif +0 -0
  243. data/html/js/edit_area/images/redo.png +0 -0
  244. data/html/js/edit_area/images/reset_highlight.gif +0 -0
  245. data/html/js/edit_area/images/save.gif +0 -0
  246. data/html/js/edit_area/images/save.png +0 -0
  247. data/html/js/edit_area/images/search.gif +0 -0
  248. data/html/js/edit_area/images/search.png +0 -0
  249. data/html/js/edit_area/images/smooth_selection.gif +0 -0
  250. data/html/js/edit_area/images/spacer.gif +0 -0
  251. data/html/js/edit_area/images/statusbar_resize.gif +0 -0
  252. data/html/js/edit_area/images/undo.gif +0 -0
  253. data/html/js/edit_area/images/undo.png +0 -0
  254. data/html/js/edit_area/images/word_wrap.gif +0 -0
  255. data/html/js/edit_area/keyboard.js +145 -0
  256. data/html/js/edit_area/langs/bg.js +73 -0
  257. data/html/js/edit_area/langs/cs.js +67 -0
  258. data/html/js/edit_area/langs/de.js +67 -0
  259. data/html/js/edit_area/langs/dk.js +67 -0
  260. data/html/js/edit_area/langs/en.js +67 -0
  261. data/html/js/edit_area/langs/eo.js +67 -0
  262. data/html/js/edit_area/langs/es.js +64 -0
  263. data/html/js/edit_area/langs/fi.js +67 -0
  264. data/html/js/edit_area/langs/fr.js +67 -0
  265. data/html/js/edit_area/langs/hr.js +67 -0
  266. data/html/js/edit_area/langs/it.js +67 -0
  267. data/html/js/edit_area/langs/ja.js +67 -0
  268. data/html/js/edit_area/langs/mk.js +67 -0
  269. data/html/js/edit_area/langs/nl.js +67 -0
  270. data/html/js/edit_area/langs/pl.js +67 -0
  271. data/html/js/edit_area/langs/pt.js +67 -0
  272. data/html/js/edit_area/langs/ru.js +67 -0
  273. data/html/js/edit_area/langs/sk.js +67 -0
  274. data/html/js/edit_area/langs/zh.js +67 -0
  275. data/html/js/edit_area/license_apache.txt +7 -0
  276. data/html/js/edit_area/license_bsd.txt +10 -0
  277. data/html/js/edit_area/license_lgpl.txt +458 -0
  278. data/html/js/edit_area/manage_area.js +623 -0
  279. data/html/js/edit_area/plugins/charmap/charmap.js +90 -0
  280. data/html/js/edit_area/plugins/charmap/css/charmap.css +64 -0
  281. data/html/js/edit_area/plugins/charmap/images/charmap.gif +0 -0
  282. data/html/js/edit_area/plugins/charmap/jscripts/map.js +373 -0
  283. data/html/js/edit_area/plugins/charmap/langs/bg.js +12 -0
  284. data/html/js/edit_area/plugins/charmap/langs/cs.js +6 -0
  285. data/html/js/edit_area/plugins/charmap/langs/de.js +6 -0
  286. data/html/js/edit_area/plugins/charmap/langs/dk.js +6 -0
  287. data/html/js/edit_area/plugins/charmap/langs/en.js +6 -0
  288. data/html/js/edit_area/plugins/charmap/langs/eo.js +6 -0
  289. data/html/js/edit_area/plugins/charmap/langs/es.js +6 -0
  290. data/html/js/edit_area/plugins/charmap/langs/fr.js +6 -0
  291. data/html/js/edit_area/plugins/charmap/langs/hr.js +6 -0
  292. data/html/js/edit_area/plugins/charmap/langs/it.js +6 -0
  293. data/html/js/edit_area/plugins/charmap/langs/ja.js +6 -0
  294. data/html/js/edit_area/plugins/charmap/langs/mk.js +6 -0
  295. data/html/js/edit_area/plugins/charmap/langs/nl.js +6 -0
  296. data/html/js/edit_area/plugins/charmap/langs/pl.js +6 -0
  297. data/html/js/edit_area/plugins/charmap/langs/pt.js +6 -0
  298. data/html/js/edit_area/plugins/charmap/langs/ru.js +6 -0
  299. data/html/js/edit_area/plugins/charmap/langs/sk.js +6 -0
  300. data/html/js/edit_area/plugins/charmap/langs/zh.js +6 -0
  301. data/html/js/edit_area/plugins/charmap/popup.html +24 -0
  302. data/html/js/edit_area/plugins/test/css/test.css +3 -0
  303. data/html/js/edit_area/plugins/test/images/Thumbs.db +0 -0
  304. data/html/js/edit_area/plugins/test/images/test.gif +0 -0
  305. data/html/js/edit_area/plugins/test/langs/bg.js +10 -0
  306. data/html/js/edit_area/plugins/test/langs/cs.js +4 -0
  307. data/html/js/edit_area/plugins/test/langs/de.js +4 -0
  308. data/html/js/edit_area/plugins/test/langs/dk.js +4 -0
  309. data/html/js/edit_area/plugins/test/langs/en.js +4 -0
  310. data/html/js/edit_area/plugins/test/langs/eo.js +4 -0
  311. data/html/js/edit_area/plugins/test/langs/es.js +4 -0
  312. data/html/js/edit_area/plugins/test/langs/fr.js +4 -0
  313. data/html/js/edit_area/plugins/test/langs/hr.js +4 -0
  314. data/html/js/edit_area/plugins/test/langs/it.js +4 -0
  315. data/html/js/edit_area/plugins/test/langs/ja.js +4 -0
  316. data/html/js/edit_area/plugins/test/langs/mk.js +4 -0
  317. data/html/js/edit_area/plugins/test/langs/nl.js +4 -0
  318. data/html/js/edit_area/plugins/test/langs/pl.js +4 -0
  319. data/html/js/edit_area/plugins/test/langs/pt.js +4 -0
  320. data/html/js/edit_area/plugins/test/langs/ru.js +4 -0
  321. data/html/js/edit_area/plugins/test/langs/sk.js +4 -0
  322. data/html/js/edit_area/plugins/test/langs/zh.js +4 -0
  323. data/html/js/edit_area/plugins/test/test.js +110 -0
  324. data/html/js/edit_area/plugins/test/test2.js +1 -0
  325. data/html/js/edit_area/reg_syntax/basic.js +69 -0
  326. data/html/js/edit_area/reg_syntax/brainfuck.js +44 -0
  327. data/html/js/edit_area/reg_syntax/c.js +62 -0
  328. data/html/js/edit_area/reg_syntax/coldfusion.js +119 -0
  329. data/html/js/edit_area/reg_syntax/cpp.js +65 -0
  330. data/html/js/edit_area/reg_syntax/css.js +84 -0
  331. data/html/js/edit_area/reg_syntax/html.js +50 -0
  332. data/html/js/edit_area/reg_syntax/java.js +56 -0
  333. data/html/js/edit_area/reg_syntax/js.js +93 -0
  334. data/html/js/edit_area/reg_syntax/pas.js +82 -0
  335. data/html/js/edit_area/reg_syntax/perl.js +88 -0
  336. data/html/js/edit_area/reg_syntax/php.js +156 -0
  337. data/html/js/edit_area/reg_syntax/python.js +144 -0
  338. data/html/js/edit_area/reg_syntax/robotstxt.js +24 -0
  339. data/html/js/edit_area/reg_syntax/ruby.js +67 -0
  340. data/html/js/edit_area/reg_syntax/sql.js +55 -0
  341. data/html/js/edit_area/reg_syntax/tsql.js +87 -0
  342. data/html/js/edit_area/reg_syntax/vb.js +52 -0
  343. data/html/js/edit_area/reg_syntax/xml.js +56 -0
  344. data/html/js/edit_area/reg_syntax.js +166 -0
  345. data/html/js/edit_area/regexp.js +139 -0
  346. data/html/js/edit_area/resize_area.js +78 -0
  347. data/html/js/edit_area/search_replace.js +174 -0
  348. data/html/js/edit_area/template.html +101 -0
  349. data/html/js/json-broker-client.js +67 -0
  350. data/html/js/page-manager.js +93 -0
  351. data/html/js/prototype.js +4184 -0
  352. data/html/js/result-page.js +775 -0
  353. data/html/js/rt-setting-page.js +152 -0
  354. data/html/js/sidebar.js +263 -0
  355. data/html/js/templates.js +386 -0
  356. data/html/js/utils.js +890 -0
  357. data/html/js/uuid.js +103 -0
  358. data/html/js/yui/treeview.js +3671 -0
  359. data/html/swf/chart.swf +0 -0
  360. data/html/test/agent_editor_spec.js +815 -0
  361. data/html/test/index.html +40 -0
  362. data/html/test/jsspec/JSSpec.css +224 -0
  363. data/html/test/jsspec/JSSpec.js +1549 -0
  364. data/html/test/jsspec/diff_match_patch.js +1 -0
  365. data/html/test/utils_spec.js +111 -0
  366. data/lib/jiji/agent/agent.rb +149 -0
  367. data/lib/jiji/agent/agent_manager.rb +138 -0
  368. data/lib/jiji/agent/agent_registry.rb +165 -0
  369. data/lib/jiji/agent/permitter.rb +128 -0
  370. data/lib/jiji/agent/util.rb +16 -0
  371. data/lib/jiji/collector.rb +226 -0
  372. data/lib/jiji/command.rb +204 -0
  373. data/lib/jiji/configuration.rb +86 -0
  374. data/lib/jiji/dao/file_system_dao.rb +158 -0
  375. data/lib/jiji/dao/rate_dao.rb +149 -0
  376. data/lib/jiji/dao/timed_data_dao.rb +336 -0
  377. data/lib/jiji/dao/trade_result_dao.rb +128 -0
  378. data/lib/jiji/error.rb +49 -0
  379. data/lib/jiji/migration/migrator.rb +50 -0
  380. data/lib/jiji/migration/migrator1_0_3.rb +26 -0
  381. data/lib/jiji/migration/migrator1_1_0.rb +46 -0
  382. data/lib/jiji/migration/migrator1_2_0.rb +67 -0
  383. data/lib/jiji/models.rb +223 -0
  384. data/lib/jiji/observer.rb +105 -0
  385. data/lib/jiji/operator.rb +396 -0
  386. data/lib/jiji/output.rb +221 -0
  387. data/lib/jiji/output_manager.rb +84 -0
  388. data/lib/jiji/plugin/embedded/click_securities_demo_plugin.rb +141 -0
  389. data/lib/jiji/plugin/embedded/single_click_client.rb +116 -0
  390. data/lib/jiji/plugin/plugin_loader.rb +53 -0
  391. data/lib/jiji/plugin/securities_plugin.rb +134 -0
  392. data/lib/jiji/process.rb +234 -0
  393. data/lib/jiji/process_manager.rb +290 -0
  394. data/lib/jiji/registry.rb +349 -0
  395. data/lib/jiji/server.rb +127 -0
  396. data/lib/jiji/service/agent_service.rb +230 -0
  397. data/lib/jiji/service/hello_service.rb +10 -0
  398. data/lib/jiji/service/output_service.rb +82 -0
  399. data/lib/jiji/service/process_service.rb +76 -0
  400. data/lib/jiji/service/rate_service.rb +38 -0
  401. data/lib/jiji/service/system_service.rb +14 -0
  402. data/lib/jiji/service/trade_result_service.rb +31 -0
  403. data/lib/jiji/util/backtester.rb +116 -0
  404. data/lib/jiji/util/block_to_session.rb +70 -0
  405. data/lib/jiji/util/cache.rb +79 -0
  406. data/lib/jiji/util/csv_append_support.rb +15 -0
  407. data/lib/jiji/util/file_lock.rb +86 -0
  408. data/lib/jiji/util/fix_yaml_bug.rb +11 -0
  409. data/lib/jiji/util/include_proxy.rb +17 -0
  410. data/lib/jiji/util/iterator.rb +70 -0
  411. data/lib/jiji/util/json_broker.rb +55 -0
  412. data/lib/jiji/util/json_rpc_requestor.rb +30 -0
  413. data/lib/jiji/util/rate_data_importer.rb +219 -0
  414. data/lib/jiji/util/synchronize_interceptor.rb +41 -0
  415. data/lib/jiji/util/thread_use_generator.rb +52 -0
  416. data/lib/jiji/util/util.rb +112 -0
  417. data/lib/jiji_plugin.rb +6 -0
  418. data/swf/build.xml +23 -0
  419. data/swf/chart/FxChart-config.xml +9 -0
  420. data/swf/chart/FxChart.mxml +17 -0
  421. data/swf/chart/fx/chart/Chart.as +173 -0
  422. data/swf/chart/fx/chart/ctrl/AutoUpdate.as +96 -0
  423. data/swf/chart/fx/chart/ctrl/Controller.as +270 -0
  424. data/swf/chart/fx/chart/ctrl/Event.as +75 -0
  425. data/swf/chart/fx/chart/model/Model.as +228 -0
  426. data/swf/chart/fx/chart/model/TimedData.as +40 -0
  427. data/swf/chart/fx/chart/ui/AbstractChartUI.as +59 -0
  428. data/swf/chart/fx/chart/ui/AbstractDrawChartUI.as +63 -0
  429. data/swf/chart/fx/chart/ui/Constants.as +233 -0
  430. data/swf/chart/fx/chart/ui/InformationWindow.as +228 -0
  431. data/swf/chart/fx/chart/ui/LayerManager.as +95 -0
  432. data/swf/chart/fx/chart/ui/Loading.as +32 -0
  433. data/swf/chart/fx/chart/ui/Pointer.as +61 -0
  434. data/swf/chart/fx/chart/ui/RangeInfoWindow.as +84 -0
  435. data/swf/chart/fx/chart/ui/RenderingContext.as +54 -0
  436. data/swf/chart/fx/chart/ui/ScaleSelector.as +84 -0
  437. data/swf/chart/fx/chart/ui/Scroll.as +241 -0
  438. data/swf/chart/fx/chart/ui/ScrollBar.as +378 -0
  439. data/swf/chart/fx/chart/ui/Stage.as +97 -0
  440. data/swf/chart/fx/chart/ui/TradeDetailWindow.as +147 -0
  441. data/swf/chart/fx/chart/ui/TradeResult.as +330 -0
  442. data/swf/chart/fx/chart/ui/Window.as +96 -0
  443. data/swf/chart/fx/chart/ui/candle/Axis.as +112 -0
  444. data/swf/chart/fx/chart/ui/candle/Candle.as +79 -0
  445. data/swf/chart/fx/chart/ui/candle/CandleChart.as +81 -0
  446. data/swf/chart/fx/chart/ui/graph/Graph.as +200 -0
  447. data/swf/chart/fx/chart/ui/graph/GraphManager.as +192 -0
  448. data/swf/chart/fx/chart/ui/resource/buy.gif +0 -0
  449. data/swf/chart/fx/chart/ui/resource/cursor_hand.gif +0 -0
  450. data/swf/chart/fx/chart/ui/resource/diff_label.gif +0 -0
  451. data/swf/chart/fx/chart/ui/resource/down.gif +0 -0
  452. data/swf/chart/fx/chart/ui/resource/down_buy.gif +0 -0
  453. data/swf/chart/fx/chart/ui/resource/down_buy_1.gif +0 -0
  454. data/swf/chart/fx/chart/ui/resource/down_buy_2.gif +0 -0
  455. data/swf/chart/fx/chart/ui/resource/down_buy_3.gif +0 -0
  456. data/swf/chart/fx/chart/ui/resource/down_sell.gif +0 -0
  457. data/swf/chart/fx/chart/ui/resource/down_sell_1.gif +0 -0
  458. data/swf/chart/fx/chart/ui/resource/down_sell_2.gif +0 -0
  459. data/swf/chart/fx/chart/ui/resource/down_sell_3.gif +0 -0
  460. data/swf/chart/fx/chart/ui/resource/draw_buy.gif +0 -0
  461. data/swf/chart/fx/chart/ui/resource/draw_sell.gif +0 -0
  462. data/swf/chart/fx/chart/ui/resource/end_label.gif +0 -0
  463. data/swf/chart/fx/chart/ui/resource/fixed.gif +0 -0
  464. data/swf/chart/fx/chart/ui/resource/loading.gif +0 -0
  465. data/swf/chart/fx/chart/ui/resource/max_label.gif +0 -0
  466. data/swf/chart/fx/chart/ui/resource/min_label.gif +0 -0
  467. data/swf/chart/fx/chart/ui/resource/scroll_bar.gif +0 -0
  468. data/swf/chart/fx/chart/ui/resource/scroll_bar_a.gif +0 -0
  469. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle.gif +0 -0
  470. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle_a.gif +0 -0
  471. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle_o.gif +0 -0
  472. data/swf/chart/fx/chart/ui/resource/scroll_bar_left.gif +0 -0
  473. data/swf/chart/fx/chart/ui/resource/scroll_bar_left_a.gif +0 -0
  474. data/swf/chart/fx/chart/ui/resource/scroll_bar_left_o.gif +0 -0
  475. data/swf/chart/fx/chart/ui/resource/scroll_bar_o.gif +0 -0
  476. data/swf/chart/fx/chart/ui/resource/scroll_bar_right.gif +0 -0
  477. data/swf/chart/fx/chart/ui/resource/scroll_bar_right_a.gif +0 -0
  478. data/swf/chart/fx/chart/ui/resource/scroll_bar_right_o.gif +0 -0
  479. data/swf/chart/fx/chart/ui/resource/scroll_handle.gif +0 -0
  480. data/swf/chart/fx/chart/ui/resource/scroll_info_handle.gif +0 -0
  481. data/swf/chart/fx/chart/ui/resource/scroll_left_button.gif +0 -0
  482. data/swf/chart/fx/chart/ui/resource/scroll_left_button_d.gif +0 -0
  483. data/swf/chart/fx/chart/ui/resource/scroll_left_button_down.gif +0 -0
  484. data/swf/chart/fx/chart/ui/resource/scroll_left_button_g.gif +0 -0
  485. data/swf/chart/fx/chart/ui/resource/scroll_left_button_o.gif +0 -0
  486. data/swf/chart/fx/chart/ui/resource/scroll_left_button_up.gif +0 -0
  487. data/swf/chart/fx/chart/ui/resource/scroll_outer.gif +0 -0
  488. data/swf/chart/fx/chart/ui/resource/scroll_outer_left.gif +0 -0
  489. data/swf/chart/fx/chart/ui/resource/scroll_outer_right.gif +0 -0
  490. data/swf/chart/fx/chart/ui/resource/scroll_right_button.gif +0 -0
  491. data/swf/chart/fx/chart/ui/resource/scroll_right_button_d.gif +0 -0
  492. data/swf/chart/fx/chart/ui/resource/scroll_right_button_down.gif +0 -0
  493. data/swf/chart/fx/chart/ui/resource/scroll_right_button_g.gif +0 -0
  494. data/swf/chart/fx/chart/ui/resource/scroll_right_button_o.gif +0 -0
  495. data/swf/chart/fx/chart/ui/resource/scroll_right_button_up.gif +0 -0
  496. data/swf/chart/fx/chart/ui/resource/scroll_slider_left.gif +0 -0
  497. data/swf/chart/fx/chart/ui/resource/scroll_slider_right.gif +0 -0
  498. data/swf/chart/fx/chart/ui/resource/sell.gif +0 -0
  499. data/swf/chart/fx/chart/ui/resource/start_label.gif +0 -0
  500. data/swf/chart/fx/chart/ui/resource/stripe.gif +0 -0
  501. data/swf/chart/fx/chart/ui/resource/stripe_b.gif +0 -0
  502. data/swf/chart/fx/chart/ui/resource/stripe_r.gif +0 -0
  503. data/swf/chart/fx/chart/ui/resource/unfixed.gif +0 -0
  504. data/swf/chart/fx/chart/ui/resource/up.gif +0 -0
  505. data/swf/chart/fx/chart/ui/resource/up_buy.gif +0 -0
  506. data/swf/chart/fx/chart/ui/resource/up_buy_1.gif +0 -0
  507. data/swf/chart/fx/chart/ui/resource/up_buy_2.gif +0 -0
  508. data/swf/chart/fx/chart/ui/resource/up_buy_3.gif +0 -0
  509. data/swf/chart/fx/chart/ui/resource/up_sell.gif +0 -0
  510. data/swf/chart/fx/chart/ui/resource/up_sell_1.gif +0 -0
  511. data/swf/chart/fx/chart/ui/resource/up_sell_2.gif +0 -0
  512. data/swf/chart/fx/chart/ui/resource/up_sell_3.gif +0 -0
  513. data/swf/chart/fx/net/StubFactory.as +113 -0
  514. data/swf/chart/fx/util/ListenerSupport.as +55 -0
  515. data/swf/chart/fx/util/PositionManager.as +95 -0
  516. data/swf/chart/fx/util/ScaleFormatter.as +156 -0
  517. data/swf/chart/fx/util/Util.as +61 -0
  518. data/swf/chart/log.as +40 -0
  519. data/swf/lib/corelib.swc +0 -0
  520. data/test/BackCollectorTest/basic/2008-08-04/AUDJPY.csv +5 -0
  521. data/test/BackCollectorTest/basic/2008-08-04/USDJPY.csv +5 -0
  522. data/test/BackCollectorTest/basic/2008-08-04/ZARJPY.csv +5 -0
  523. data/test/BackCollectorTest/basic/2008-08-05/AUDJPY.csv +5 -0
  524. data/test/BackCollectorTest/basic/2008-08-05/USDJPY.csv +5 -0
  525. data/test/BackCollectorTest/basic/2008-08-05/ZARJPY.csv +5 -0
  526. data/test/BackCollectorTest/basic/2008-08-06/AUDJPY.csv +5 -0
  527. data/test/BackCollectorTest/basic/2008-08-06/USDJPY.csv +5 -0
  528. data/test/BackCollectorTest/basic/2008-08-06/ZARJPY.csv +5 -0
  529. data/test/BackCollectorTest/basic/2008-08-07/AUDJPY.csv +5 -0
  530. data/test/BackCollectorTest/basic/2008-08-07/USDJPY.csv +5 -0
  531. data/test/BackCollectorTest/basic/2008-08-07/ZARJPY.csv +5 -0
  532. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-04.csv +5 -0
  533. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-05.csv +5 -0
  534. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-06.csv +5 -0
  535. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-07.csv +5 -0
  536. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-04.csv +5 -0
  537. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-05.csv +5 -0
  538. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-06.csv +5 -0
  539. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-07.csv +5 -0
  540. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-04.csv +5 -0
  541. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-05.csv +5 -0
  542. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-06.csv +5 -0
  543. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-07.csv +5 -0
  544. data/test/BackCollectorTest/lack/2008-08-04/AUDJPY.csv +5 -0
  545. data/test/BackCollectorTest/lack/2008-08-04/USDJPY.csv +5 -0
  546. data/test/BackCollectorTest/lack/2008-08-04/ZARJPY.csv +5 -0
  547. data/test/BackCollectorTest/lack/2008-08-06/AUDJPY.csv +5 -0
  548. data/test/BackCollectorTest/lack/2008-08-06/USDJPY.csv +5 -0
  549. data/test/BackCollectorTest/lack/2008-08-06/ZARJPY.csv +5 -0
  550. data/test/BackCollectorTest/lack/2008-08-07/AUDJPY.csv +5 -0
  551. data/test/BackCollectorTest/lack/2008-08-07/USDJPY.csv +5 -0
  552. data/test/BackCollectorTest/lack/2008-08-07/ZARJPY.csv +5 -0
  553. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-04.csv +5 -0
  554. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-06.csv +5 -0
  555. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-07.csv +5 -0
  556. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-04.csv +5 -0
  557. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-06.csv +5 -0
  558. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-07.csv +5 -0
  559. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-04.csv +5 -0
  560. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-06.csv +5 -0
  561. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-07.csv +5 -0
  562. data/test/OutputregistryTest/conf/configuration.yaml +3 -0
  563. data/test/ProcessManagerTest/agents/moving_average.rb +95 -0
  564. data/test/ProcessManagerTest/conf/configuration.yaml +6 -0
  565. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-21.csv +5853 -0
  566. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-22.csv +5821 -0
  567. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-23.csv +5921 -0
  568. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-24.csv +5956 -0
  569. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-25.csv +5796 -0
  570. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-21.csv +5853 -0
  571. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-22.csv +5821 -0
  572. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-23.csv +5921 -0
  573. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-24.csv +5956 -0
  574. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-25.csv +5796 -0
  575. data/test/ProcessTest/agents/foo.rb +10 -0
  576. data/test/ProcessTest/conf/configuration.yaml +3 -0
  577. data/test/agent/agent_tests.rb +10 -0
  578. data/test/agent/test_AgentManager.rb +321 -0
  579. data/test/agent/test_AgentRegistry.rb +662 -0
  580. data/test/agent/test_PeriodicallyAgent.rb +180 -0
  581. data/test/agent/test_Permitter.rb +217 -0
  582. data/test/all_tests.rb +24 -0
  583. data/test/dao/dao_tests.rb +9 -0
  584. data/test/dao/test_FileSystemDao.rb +431 -0
  585. data/test/dao/test_RateDao.rb +695 -0
  586. data/test/dao/test_TradeResultDao.rb +487 -0
  587. data/test/jiji_plugin.rb +7 -0
  588. data/test/migration/migration_tests.rb +10 -0
  589. data/test/migration/migrator1_0_3test_data/rmt/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  590. data/test/migration/migrator1_0_3test_data/rmt/out/NjM5YWFhZmQtNDFjNy00NjUxLWIwYmItNTc3ZjAyZTg5ODA5/56e75YuV5bmz5Z2H57ea/meta.yaml +12 -0
  591. data/test/migration/migrator1_0_3test_data/rmt/out/NjM5YWFhZmQtNDFjNy00NjUxLWIwYmItNTc3ZjAyZTg5ODA5/56e75Yuasdwqdd/meta.yaml +12 -0
  592. data/test/migration/migrator1_1_0test_data/configuration.yaml +11 -0
  593. data/test/migration/migrator1_2_0test_data/basic/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  594. data/test/migration/migrator1_2_0test_data/basic/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  595. data/test/migration/migrator1_2_0test_data/basic/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  596. data/test/migration/migrator1_2_0test_data/basic/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  597. data/test/migration/migrator1_2_0test_data/basic/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  598. data/test/migration/migrator1_2_0test_data/basic/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  599. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  600. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  601. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  602. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  603. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  604. data/test/migration/migrator1_2_0test_data/basic/props.yaml +85 -0
  605. data/test/migration/migrator1_2_0test_data/illegal_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  606. data/test/migration/migrator1_2_0test_data/illegal_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  607. data/test/migration/migrator1_2_0test_data/illegal_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  608. data/test/migration/migrator1_2_0test_data/illegal_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  609. data/test/migration/migrator1_2_0test_data/illegal_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  610. data/test/migration/migrator1_2_0test_data/illegal_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  611. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  612. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  613. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  614. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  615. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  616. data/test/migration/migrator1_2_0test_data/illegal_props/props.yaml +1 -0
  617. data/test/migration/migrator1_2_0test_data/no_outs/props.yaml +85 -0
  618. data/test/migration/migrator1_2_0test_data/no_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  619. data/test/migration/migrator1_2_0test_data/no_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  620. data/test/migration/migrator1_2_0test_data/no_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  621. data/test/migration/migrator1_2_0test_data/no_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  622. data/test/migration/migrator1_2_0test_data/no_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  623. data/test/migration/migrator1_2_0test_data/no_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  624. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  625. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  626. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  627. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  628. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  629. data/test/migration/test_Migrator.rb +117 -0
  630. data/test/migration/test_Migrator1_0_3.rb +118 -0
  631. data/test/migration/test_Migrator1_1_0.rb +56 -0
  632. data/test/migration/test_Migrator1_2_0.rb +94 -0
  633. data/test/plugin/embedded/test_SingleClickClient.rb +144 -0
  634. data/test/plugin/error_test/jiji_plugin.rb +2 -0
  635. data/test/plugin/plugin_tests.rb +8 -0
  636. data/test/plugin/test/foo_plugin.rb +1 -0
  637. data/test/plugin/test/jiji_plugin.rb +2 -0
  638. data/test/plugin/test_Loader.rb +33 -0
  639. data/test/plugin/test_gem/a/jiji_plugin_test_gem_a-1.0.0.gem +0 -0
  640. data/test/plugin/test_gem/a/jiji_plugin_test_gem_a.gemspec +10 -0
  641. data/test/plugin/test_gem/a/lib/jiji_plugin.rb +2 -0
  642. data/test/plugin/test_gem/a/lib/jiji_plugin_test.rb +6 -0
  643. data/test/plugin/test_gem/b/jiji_plugin_test_gem_b-1.0.0.gem +0 -0
  644. data/test/plugin/test_gem/b/jiji_plugin_test_gem_b.gemspec +9 -0
  645. data/test/plugin/test_gem/b/lib/jiji_plugin.rb +2 -0
  646. data/test/service/all_service_tests.rb +10 -0
  647. data/test/service/test_AgentService.rb +185 -0
  648. data/test/service/test_OutputService.rb +33 -0
  649. data/test/service/test_RateService.rb +56 -0
  650. data/test/shared/rate.csv +144 -0
  651. data/test/shared/shared_tests.rb +9 -0
  652. data/test/shared/test_Cross.rb +144 -0
  653. data/test/shared/test_PositionManager.rb +285 -0
  654. data/test/shared/test_Signal.rb +65 -0
  655. data/test/test_BackTestCollector.rb +273 -0
  656. data/test/test_Collector.rb +230 -0
  657. data/test/test_Configuration.rb +61 -0
  658. data/test/test_Configuration_a.yaml +6 -0
  659. data/test/test_Operator.rb +501 -0
  660. data/test/test_Output.rb +175 -0
  661. data/test/test_OutputManager.rb +162 -0
  662. data/test/test_Output_registry.rb +42 -0
  663. data/test/test_Process.rb +557 -0
  664. data/test/test_ProcessManager.rb +723 -0
  665. data/test/test_utils.rb +112 -0
  666. data/test/util/test_BlockToSession.rb +121 -0
  667. data/test/util/test_CSV.rb +84 -0
  668. data/test/util/test_SynchronizeInterceptor.rb +76 -0
  669. data/test/util/util_tests.rb +9 -0
  670. metadata +941 -0
@@ -0,0 +1,557 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $: << "../lib"
4
+
5
+ require 'rubygems'
6
+ require 'runit/testcase'
7
+ require 'runit/cui/testrunner'
8
+ require 'jiji/process'
9
+ require 'jiji/registry'
10
+ require 'logger'
11
+ require 'test_utils'
12
+
13
+ # プロセスのテスト
14
+ class ProcessTest < RUNIT::TestCase
15
+
16
+ include Test::Constants
17
+
18
+ def setup
19
+ @dir = File.dirname(__FILE__) + "/ProcessTest"
20
+ FileUtils.mkdir_p @dir
21
+ @registry = JIJI::Registry.new(@dir , nil)
22
+ @registry.plugin_loader.load
23
+ end
24
+
25
+ def teardown
26
+ begin
27
+ Test.destry( @registry, @dir )
28
+ ensure
29
+ FileUtils.rm_rf "#{@dir}/process_info_test"
30
+ end
31
+ end
32
+
33
+ # ProcessInfoの基本操作のテスト
34
+ def test_process_info
35
+
36
+ dir = "#{@dir}/process_info_test"
37
+
38
+ p1 = JIJI::ProcessInfo.new( "1", dir )
39
+ assert_equals p1.process_id, "1"
40
+ assert_equals p1.props, {}
41
+ assert_equals p1["x"], nil
42
+ assert_equals p1.progress, 0
43
+ assert_equals p1.data_exist?, false
44
+
45
+ #プロパティを設定。データがファイルに保存される。
46
+ p1.props = {"x"=>"xxx", "y"=>"yyy"}
47
+ assert_equals p1.process_id, "1"
48
+ assert_equals p1.props, {"x"=>"xxx", "y"=>"yyy"}
49
+ assert_equals p1["x"], "xxx"
50
+ assert_equals p1["y"], "yyy"
51
+ assert_equals p1.progress, 0
52
+ assert_equals p1.data_exist?, true
53
+
54
+
55
+ #再作成
56
+ p1 = JIJI::ProcessInfo.new( "1", dir )
57
+ assert_equals p1.process_id, "1"
58
+ assert_equals p1.props, {}
59
+ assert_equals p1["x"], nil
60
+ assert_equals p1.progress, 0
61
+ assert_equals p1.data_exist?, true
62
+
63
+ #保存されたデータを読み込み
64
+ p1.load
65
+ assert_equals p1.process_id, "1"
66
+ assert_equals p1.props, {"x"=>"xxx", "y"=>"yyy"}
67
+ assert_equals p1["x"], "xxx"
68
+ assert_equals p1["y"], "yyy"
69
+ assert_equals p1.progress, 0
70
+
71
+ #プロパティを変更
72
+ p1["x"] = "aaa"
73
+ p1["a"] = "aaa"
74
+ p1.progress = 20
75
+ assert_equals p1.process_id, "1"
76
+ assert_equals p1.props, {"x"=>"aaa", "y"=>"yyy", "a"=>"aaa"}
77
+ assert_equals p1["x"], "aaa"
78
+ assert_equals p1["y"], "yyy"
79
+ assert_equals p1["a"], "aaa"
80
+ assert_equals p1.progress, 20
81
+
82
+ #再作成
83
+ p1 = JIJI::ProcessInfo.new( "1", dir )
84
+ assert_equals p1.process_id, "1"
85
+ assert_equals p1.props, {}
86
+ assert_equals p1["x"], nil
87
+ assert_equals p1.progress, 0
88
+ assert_equals p1.data_exist?, true
89
+
90
+ #保存されたデータを読み込み
91
+ p1.load
92
+ assert_equals p1.process_id, "1"
93
+ assert_equals p1.props, {"x"=>"aaa", "y"=>"yyy", "a"=>"aaa"}
94
+ assert_equals p1["x"], "aaa"
95
+ assert_equals p1["y"], "yyy"
96
+ assert_equals p1["a"], "aaa"
97
+ assert_equals p1.progress, 0 #進捗は記録されない。
98
+
99
+
100
+ #別のProcessInfo
101
+ p1 = JIJI::ProcessInfo.new( "2", dir )
102
+ assert_equals p1.process_id, "2"
103
+ assert_equals p1.props, {}
104
+ assert_equals p1["x"], nil
105
+ assert_equals p1.progress, 0
106
+ assert_equals p1.data_exist?, false
107
+ end
108
+
109
+ # Processの基本動作のテスト
110
+ def test_backtest_process
111
+
112
+ # エージェント設定なし
113
+ pi1 = @registry.process_info( "1" )
114
+ pi1.props = {
115
+ "id"=>"pid1",
116
+ "name"=>"エージェントなし",
117
+ "start_date"=>0,
118
+ "end_date"=>100
119
+ }
120
+ p1 = @registry.backtest_process(pi1)
121
+ agent_mng = p1.agent_manager
122
+
123
+ #エージェントを読み込み → 何もロードされない
124
+ p1.load_agents( false )
125
+ assert_equals agent_mng.map, []
126
+
127
+ assert_equals agent_mng.operator.trade_enable, false
128
+
129
+ # トレードのon/offを設定
130
+ p1.trade_enable = true
131
+ pi1["trade_enable"] = true
132
+ assert_equals agent_mng.operator.trade_enable, true
133
+ p1.trade_enable = false
134
+ pi1["trade_enable"] = false
135
+ assert_equals agent_mng.operator.trade_enable, false
136
+ p1.trade_enable = true
137
+ pi1["trade_enable"] = true
138
+ assert_equals agent_mng.operator.trade_enable, true
139
+
140
+ #エージェントを追加
141
+ agents = [
142
+ {"id"=>"aaa",
143
+ "name"=>"テストエージェント1",
144
+ "class"=>"TestAgent@foo.rb",
145
+ "class_name" => "TestAgent",
146
+ "file_name" => "foo.rb",
147
+ "description" => "説明",
148
+ "property_def" => {"id"=>"x", "default"=>85 },
149
+ "properties" => {"x"=>30, "y"=>40 }},
150
+ {"id"=>"bbb",
151
+ "name"=>"テストエージェント2",
152
+ "class"=>"TestAgent2@foo.rb",
153
+ "class_name" => "TestAgent",
154
+ "file_name" => "foo.rb",
155
+ "description" => "説明2",
156
+ "property_def" => {"id"=>"x", "default"=>85 },
157
+ "properties" => {"x"=>30, "y"=>41 }}
158
+ ]
159
+ pi1["agents"] = agents
160
+ p1.set_agents( agents )
161
+ assert_equals pi1["agents"], agents
162
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>30, "y"=>40 }
163
+ assert_equals agent_mng.get("bbb").agent.properties, {"x"=>30, "y"=>41 }
164
+
165
+ assert_equals agent_mng.get("aaa").operator.agent_name, "テストエージェント1"
166
+ assert_equals agent_mng.get("bbb").operator.agent_name, "テストエージェント2"
167
+
168
+ out1 = agent_mng.output_manager.get( "1", "aaa" )
169
+ assert_equals out1.agent_id, "aaa"
170
+ assert_equals out1.agent_name, "テストエージェント1"
171
+ out2 = agent_mng.output_manager.get( "1", "bbb" )
172
+ assert_equals out2.agent_id, "bbb"
173
+ assert_equals out2.agent_name, "テストエージェント2"
174
+
175
+
176
+ # 変更
177
+ agents = [
178
+ {"id"=>"aaa",
179
+ "name"=>"テストエージェント1",
180
+ "class"=>"TestAgent@foo.rb",
181
+ "class_name" => "TestAgent",
182
+ "file_name" => "foo.rb",
183
+ "description" => "説明",
184
+ "property_def" => {"id"=>"x", "default"=>85 },
185
+ "properties" => {"x"=>50, "y"=>40 }},
186
+ {"id"=>"bbb",
187
+ "name"=>"テストエージェント4",
188
+ "class"=>"TestAgent2@foo.rb",
189
+ "class_name" => "TestAgent",
190
+ "file_name" => "foo.rb",
191
+ "description" => "説明2aaaaaa",
192
+ "property_def" => {"id"=>"x", "default"=>85 },
193
+ "properties" => {"x"=>60, "y"=>41 }}
194
+ ]
195
+ pi1["agents"] = agents
196
+ p1.set_agents( agents )
197
+ assert_equals pi1["agents"], agents
198
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>50, "y"=>40 }
199
+ assert_equals agent_mng.get("bbb").agent.properties, {"x"=>60, "y"=>41 }
200
+
201
+ assert_equals agent_mng.get("aaa").operator.agent_name, "テストエージェント1"
202
+ assert_equals agent_mng.get("bbb").operator.agent_name, "テストエージェント4"
203
+
204
+ out1 = agent_mng.output_manager.get( "1", "aaa" )
205
+ assert_equals out1.agent_id, "aaa"
206
+ assert_equals out1.agent_name, "テストエージェント1"
207
+ out2 = agent_mng.output_manager.get( "1", "bbb" )
208
+ assert_equals out2.agent_id, "bbb"
209
+ assert_equals out2.agent_name, "テストエージェント4"
210
+
211
+ # 削除
212
+ agents = [
213
+ {"id"=>"aaa",
214
+ "name"=>"テストエージェント11",
215
+ "class"=>"TestAgent@foo.rb",
216
+ "class_name" => "TestAgent",
217
+ "file_name" => "foo.rb",
218
+ "description" => "説明",
219
+ "property_def" => {"id"=>"x", "default"=>85 },
220
+ "properties" => {"x"=>50, "y"=>41 }}
221
+ ]
222
+ p1.set_agents( agents )
223
+ pi1["agents"] = agents
224
+ assert_equals pi1["agents"], agents
225
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>50, "y"=>41 }
226
+ assert_equals agent_mng.get("bbb"), nil
227
+
228
+ assert_equals agent_mng.get("aaa").operator.agent_name, "テストエージェント11"
229
+
230
+ out1 = agent_mng.output_manager.get( "1", "aaa" )
231
+ assert_equals out1.agent_id, "aaa"
232
+ assert_equals out1.agent_name, "テストエージェント11"
233
+ out2 = agent_mng.output_manager.get( "1", "bbb" ) # outputは削除されない。
234
+ assert_equals out2.agent_id, "bbb"
235
+ assert_equals out2.agent_name, "テストエージェント4"
236
+
237
+
238
+ # 保存されたデータから再構築
239
+ pi1 = @registry.process_info( "1" )
240
+ pi1.load
241
+ p1 = @registry.backtest_process(pi1)
242
+ agent_mng = p1.agent_manager
243
+
244
+ p1.load_agents( false )
245
+ assert_equals p1.agent_manager, agent_mng
246
+ assert_equals pi1["agents"], agents
247
+ assert_equals pi1["trade_enable"], false #バックテストは必ずfalseになる
248
+
249
+ assert_equals agent_mng.operator.trade_enable, false #バックテストは必ずfalseになる
250
+
251
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>50, "y"=>41 }
252
+ assert_equals agent_mng.get("bbb"), nil
253
+
254
+ assert_equals agent_mng.get("aaa").operator.agent_name, "テストエージェント11"
255
+
256
+ out1 = agent_mng.output_manager.get( "1", "aaa" )
257
+ assert_equals out1.agent_id, "aaa"
258
+ assert_equals out1.agent_name, "テストエージェント11"
259
+ out2 = agent_mng.output_manager.get( "1", "bbb" )
260
+ assert_equals out2.agent_id, "bbb"
261
+ assert_equals out2.agent_name, "テストエージェント4"
262
+
263
+ p1.stop
264
+
265
+ # 作成の段階でエージェントを指定する
266
+ pi2 = @registry.process_info( "2" )
267
+ pi2.props = {
268
+ "id"=>"2",
269
+ "name"=>"エージェントあり",
270
+ "start_date"=>0,
271
+ "end_date"=>100,
272
+ "agents"=>agents
273
+ }
274
+ p2 = @registry.backtest_process(pi2)
275
+ agent_mng = p2.agent_manager
276
+
277
+ p2.load_agents( false )
278
+ assert_equals p2.agent_manager, agent_mng
279
+ assert_equals p2.info, pi2
280
+ assert_equals agent_mng.operator.trade_enable, false
281
+
282
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>50, "y"=>41 }
283
+ assert_equals agent_mng.get("bbb"), nil
284
+
285
+ out1 = agent_mng.output_manager.get( "2", "aaa" )
286
+ assert_equals out1.agent_id, "aaa"
287
+ assert_equals out1.agent_name, "テストエージェント11"
288
+
289
+ p2.stop
290
+ end
291
+
292
+ # Processの基本動作のテスト
293
+ def test_rmt_process
294
+
295
+ p1 = @registry.rmt_process
296
+ agent_mng = p1.agent_manager
297
+
298
+ #エージェントを読み込み → 何もロードされない
299
+ p1.load_agents( false )
300
+ assert_equals agent_mng.map, []
301
+
302
+ assert_equals agent_mng.operator.trade_enable, false
303
+
304
+ # トレードのon/offを設定
305
+ p1.trade_enable = true
306
+ p1.info["trade_enable"] = true
307
+ assert_equals agent_mng.operator.trade_enable, true
308
+ p1.trade_enable = false
309
+ p1.info["trade_enable"] = false
310
+ assert_equals agent_mng.operator.trade_enable, false
311
+ p1.trade_enable = true
312
+ p1.info["trade_enable"] = true
313
+ assert_equals agent_mng.operator.trade_enable, true
314
+
315
+ #エージェントを追加
316
+ agents = [
317
+ {"id"=>"aaa",
318
+ "name"=>"テストエージェント1",
319
+ "class"=>"TestAgent@foo.rb",
320
+ "class_name" => "TestAgent",
321
+ "file_name" => "foo.rb",
322
+ "description" => "説明",
323
+ "property_def" => {"id"=>"x", "default"=>85 },
324
+ "properties" => {"x"=>30, "y"=>40 }},
325
+ {"id"=>"bbb",
326
+ "name"=>"テストエージェント2",
327
+ "class"=>"TestAgent2@foo.rb",
328
+ "class_name" => "TestAgent",
329
+ "file_name" => "foo.rb",
330
+ "description" => "説明2",
331
+ "property_def" => {"id"=>"x", "default"=>85 },
332
+ "properties" => {"x"=>30, "y"=>41 }}
333
+ ]
334
+ p1.set_agents( agents )
335
+ p1.info["agents"] = agents
336
+ assert_equals p1.info["agents"], agents
337
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>30, "y"=>40 }
338
+ assert_equals agent_mng.get("bbb").agent.properties, {"x"=>30, "y"=>41 }
339
+
340
+ assert_equals agent_mng.get("aaa").operator.agent_name, "テストエージェント1"
341
+ assert_equals agent_mng.get("bbb").operator.agent_name, "テストエージェント2"
342
+
343
+ out1 = agent_mng.output_manager.get( "rmt", "aaa" )
344
+ assert_equals out1.agent_id, "aaa"
345
+ assert_equals out1.agent_name, "テストエージェント1"
346
+ out2 = agent_mng.output_manager.get( "rmt", "bbb" )
347
+ assert_equals out2.agent_id, "bbb"
348
+ assert_equals out2.agent_name, "テストエージェント2"
349
+
350
+ p1.stop
351
+ Test.destry( @registry)
352
+ @registry = JIJI::Registry.new(@dir , nil)
353
+ @registry.plugin_loader.load
354
+
355
+ # 保存されたデータから再構築
356
+ p1 = @registry.rmt_process
357
+ agent_mng = p1.agent_manager
358
+
359
+ p1.load_agents( false )
360
+ assert_equals p1.agent_manager, agent_mng
361
+ assert_equals p1.info["agents"], agents
362
+ assert_equals p1.info["trade_enable"], true
363
+
364
+ assert_equals agent_mng.operator.trade_enable, true
365
+
366
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>30, "y"=>40 }
367
+ assert_equals agent_mng.get("bbb").agent.properties, {"x"=>30, "y"=>41 }
368
+
369
+ assert_equals agent_mng.get("aaa").operator.agent_name, "テストエージェント1"
370
+ assert_equals agent_mng.get("bbb").operator.agent_name, "テストエージェント2"
371
+
372
+ out1 = agent_mng.output_manager.get( "rmt", "aaa" )
373
+ assert_equals out1.agent_id, "aaa"
374
+ assert_equals out1.agent_name, "テストエージェント1"
375
+ out2 = agent_mng.output_manager.get( "rmt", "bbb" )
376
+ assert_equals out2.agent_id, "bbb"
377
+ assert_equals out2.agent_name, "テストエージェント2"
378
+
379
+
380
+ # 削除
381
+ agents = [
382
+ {"id"=>"aaa",
383
+ "name"=>"テストエージェント11",
384
+ "class"=>"TestAgent@foo.rb",
385
+ "class_name" => "TestAgent",
386
+ "file_name" => "foo.rb",
387
+ "description" => "説明",
388
+ "property_def" => {"id"=>"x", "default"=>85 },
389
+ "properties" => {"x"=>50, "y"=>41 }}
390
+ ]
391
+ p1.set_agents( agents )
392
+ p1.info["agents"] = agents
393
+ assert_equals p1.info["agents"], agents
394
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>50, "y"=>41 }
395
+ assert_equals agent_mng.get("bbb"), nil
396
+
397
+ assert_equals agent_mng.get("aaa").operator.agent_name, "テストエージェント11"
398
+
399
+ out1 = agent_mng.output_manager.get( "rmt", "aaa" )
400
+ assert_equals out1.agent_id, "aaa"
401
+ assert_equals out1.agent_name, "テストエージェント11"
402
+ out2 = agent_mng.output_manager.get( "rmt", "bbb" )
403
+ assert_equals out2.agent_id, "bbb"
404
+ assert_equals out2.agent_name, "テストエージェント2"
405
+
406
+
407
+ p1.info["trade_enable"] = false
408
+ p1.trade_enable = false
409
+ p1.stop
410
+ Test.destry( @registry)
411
+ @registry = JIJI::Registry.new(@dir , nil)
412
+ @registry.plugin_loader.load
413
+
414
+ # 保存されたデータから再構築
415
+ p1 = @registry.rmt_process
416
+ agent_mng = p1.agent_manager
417
+
418
+ p1.load_agents( false )
419
+ assert_equals p1.agent_manager, agent_mng
420
+ assert_equals p1.info["agents"], agents
421
+ assert_equals p1.info["trade_enable"], false
422
+
423
+ assert_equals agent_mng.operator.trade_enable, false
424
+ assert_equals p1.info["agents"], agents
425
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>50, "y"=>41 }
426
+ assert_equals agent_mng.get("bbb"), nil
427
+
428
+ assert_equals agent_mng.get("aaa").operator.agent_name, "テストエージェント11"
429
+
430
+ out1 = agent_mng.output_manager.get( "rmt", "aaa" )
431
+ assert_equals out1.agent_id, "aaa"
432
+ assert_equals out1.agent_name, "テストエージェント11"
433
+ out2 = agent_mng.output_manager.get( "rmt", "bbb" )
434
+ assert_equals out2.agent_id, "bbb"
435
+ assert_equals out2.agent_name, "テストエージェント2"
436
+ end
437
+
438
+
439
+ # エージェントの作成でエラーになった場合のテスト
440
+ def test_error
441
+
442
+ agents = [
443
+ {"id"=>"aaa",
444
+ "name"=>"テストエージェント1",
445
+ "class"=>"TestAgent@foo.rb",
446
+ "class_name" => "TestAgent",
447
+ "file_name" => "foo.rb",
448
+ "description" => "説明",
449
+ "property_def" => {"id"=>"x", "default"=>85 },
450
+ "properties" => {"x"=>50, "y"=>41 }}
451
+ ]
452
+
453
+ pi1 = @registry.process_info( "1" )
454
+ pi1.props = {
455
+ "id"=>"pid1",
456
+ "name"=>"エージェントなし",
457
+ "start_date"=>0,
458
+ "end_date"=>100,
459
+ "agents"=>agents
460
+ }
461
+ p1 = @registry.backtest_process(pi1)
462
+ agent_mng = p1.agent_manager
463
+ error_registry = Test::RegistryMock.new # エージェントレジストリをモックに差し替え。
464
+ agent_mng.agent_registry = error_registry
465
+
466
+ # 生成時にエラー
467
+ Test::RegistryMock.set_fail_create {|cl,p| true }
468
+ begin
469
+ # エラーを無視しないモードで生成 / 例外が発生する
470
+ p1.load_agents( false )
471
+ fail
472
+ rescue RuntimeError
473
+ end
474
+ assert_equals agent_mng.get("aaa"), nil
475
+
476
+ # エラーを無視するモードで生成 / 例外は発生しない
477
+ p1.load_agents( true )
478
+ assert_equals agent_mng.get("aaa"), nil
479
+
480
+
481
+ # エージェントの追加時にエラー
482
+ agents << {"id"=>"bbb",
483
+ "name"=>"テストエージェント4",
484
+ "class"=>"TestAgent2@foo.rb",
485
+ "class_name" => "TestAgent",
486
+ "file_name" => "foo.rb",
487
+ "description" => "説明2aaaaaa",
488
+ "property_def" => {"id"=>"x", "default"=>85 },
489
+ "properties" => {"x"=>60, "y"=>41 }}
490
+ result = p1.set_agents(agents)
491
+ assert_not_nil result["aaa"][:cause]
492
+ assert_equals result["aaa"][:info], agents[0]
493
+ assert_equals result["aaa"][:operation], :add
494
+ assert_not_nil result["bbb"][:cause]
495
+ assert_equals result["bbb"][:info], agents[1]
496
+ assert_equals result["bbb"][:operation], :add
497
+ assert_equals agent_mng.get("aaa"), nil
498
+ assert_equals agent_mng.get("bbb"), nil
499
+
500
+ Test::RegistryMock.set_fail_create {|cl,p| false }
501
+
502
+ # エージェントのプロパティ更新時にエラー
503
+ Test::Agent.set_fail_propset {|a| a.cl == "TestAgent@foo.rb" }
504
+ p1.load_agents( false ) # ロードできるようになる。
505
+ assert_equals agent_mng.get("aaa").agent.cl, "TestAgent@foo.rb"
506
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>50, "y"=>41 }
507
+ assert_equals agent_mng.get("bbb").agent.cl, "TestAgent2@foo.rb"
508
+ assert_equals agent_mng.get("bbb").agent.properties, {"x"=>60, "y"=>41 }
509
+
510
+ agents[0]["properties"] = {"x"=>80, "y"=>81 }
511
+ agents[1]["properties"] = {"x"=>80, "y"=>81 }
512
+ result = p1.set_agents(agents)
513
+ assert_not_nil result["aaa"][:cause]
514
+ assert_equals result["aaa"][:info], agents[0]
515
+ assert_equals result["aaa"][:operation], :update
516
+ assert_nil result["bbb"]
517
+
518
+ #"aaa"のプロパティは更新されていない
519
+ assert_equals agent_mng.get("aaa").agent.cl, "TestAgent@foo.rb"
520
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>50, "y"=>41 }
521
+ assert_equals agent_mng.get("bbb").agent.cl, "TestAgent2@foo.rb"
522
+ assert_equals agent_mng.get("bbb").agent.properties, {"x"=>80, "y"=>81 }
523
+ Test::Agent.set_fail_propset {|a| false }
524
+
525
+ # エージェントの削除時にエラー
526
+ class << agent_mng
527
+ def remove( agent_id )
528
+ raise "test" if agent_id == "aaa"
529
+ super
530
+ end
531
+ end
532
+
533
+ result = p1.set_agents([])
534
+ assert_not_nil result["aaa"][:cause]
535
+ assert_equals result["aaa"][:info], agents[0]
536
+ assert_equals result["aaa"][:operation], :remove
537
+ assert_nil result["bbb"]
538
+
539
+ #エージェント"aaa"は健在
540
+ assert_equals agent_mng.get("aaa").agent.cl, "TestAgent@foo.rb"
541
+ assert_equals agent_mng.get("aaa").agent.properties, {"x"=>50, "y"=>41 }
542
+ assert_equals agent_mng.get("bbb"), nil
543
+
544
+ p1.stop
545
+ end
546
+
547
+ # エージェントマネージャを再作成する
548
+ def new_agent_mang( process_id, agent_registory=RegistryMock.new )
549
+ agent_mng = JIJI::AgentManager.new( process_id, agent_registory, Logger.new(STDOUT))
550
+ agent_mng.operator = Struct.new(:trade_enable, :agent_name).new(true)
551
+ agent_mng.conf = CONF
552
+ agent_mng.conf.set( [:agent,:safe_level], 0)
553
+ agent_mng.output_manager = JIJI::OutputManager.new( @registry_mock )
554
+ return agent_mng
555
+ end
556
+
557
+ end