cosmos 3.9.2 → 4.0.0

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 (438) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +23 -0
  3. data/.travis.yml +1 -0
  4. data/.yardopts +3 -0
  5. data/Gemfile +1 -1
  6. data/Manifest.txt +137 -52
  7. data/Rakefile +50 -44
  8. data/autohotkey/config/system/system.txt +0 -5
  9. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +6 -1
  10. data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
  11. data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
  12. data/autohotkey/config/targets/META/screens/data.txt +12 -0
  13. data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  14. data/autohotkey/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  15. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  16. data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
  17. data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
  18. data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
  19. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  20. data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
  21. data/autohotkey/tools/CmdSequence +14 -0
  22. data/autohotkey/tools/CmdSequenceAHK +23 -0
  23. data/autohotkey/tools/CmdSequenceAHK2 +16 -0
  24. data/autohotkey/tools/cmd_extractor.ahk +2 -2
  25. data/autohotkey/tools/cmd_sender.ahk +4 -6
  26. data/autohotkey/tools/cmd_sequence.ahk +215 -0
  27. data/autohotkey/tools/cmd_sequence2.ahk +23 -0
  28. data/autohotkey/tools/data_viewer.ahk +2 -3
  29. data/autohotkey/tools/limits_monitor.ahk +9 -11
  30. data/autohotkey/tools/open_gl_builder.ahk +1 -2
  31. data/autohotkey/tools/packet_viewer.ahk +51 -35
  32. data/autohotkey/tools/replay.ahk +1 -2
  33. data/autohotkey/tools/script_runner.ahk +1 -2
  34. data/autohotkey/tools/script_runner2.ahk +1 -2
  35. data/autohotkey/tools/test_runner2.ahk +1 -5
  36. data/autohotkey/tools/test_runner3.ahk +1 -3
  37. data/autohotkey/tools/tlm_grapher.ahk +1 -3
  38. data/autohotkey/tools/tlm_grapher3.ahk +1 -2
  39. data/autohotkey/tools/tlm_viewer.ahk +8 -3
  40. data/autohotkey/tools/tlm_viewer2.ahk +2 -3
  41. data/autohotkey/tools/tlm_viewer5.ahk +1 -2
  42. data/cosmos.gemspec +26 -20
  43. data/data/cmd_sequence.png +0 -0
  44. data/data/config/_array_params.yaml +23 -0
  45. data/data/config/_id_items.yaml +24 -0
  46. data/data/config/_id_params.yaml +58 -0
  47. data/data/config/_interfaces.yaml +206 -0
  48. data/data/config/_items.yaml +20 -0
  49. data/data/config/_params.yaml +58 -0
  50. data/data/config/cmd_tlm_server.yaml +110 -0
  51. data/data/config/command.yaml +38 -0
  52. data/data/config/command_modifiers.yaml +127 -0
  53. data/data/config/command_telemetry.yaml +3 -0
  54. data/data/config/data_viewer.yaml +43 -0
  55. data/data/config/handbook_creator.yaml +23 -0
  56. data/data/config/housekeeping_params.yaml +71 -0
  57. data/data/config/interface_modifiers.yaml +44 -0
  58. data/data/config/item_modifiers.yaml +172 -0
  59. data/data/config/launcher.yaml +117 -0
  60. data/data/config/limits_monitor.yaml +53 -0
  61. data/data/config/linegraph_params.yaml +30 -0
  62. data/data/config/linegraph_plot.yaml +106 -0
  63. data/data/config/page_modifiers.yaml +128 -0
  64. data/data/config/param_item_modifiers.yaml +41 -0
  65. data/data/config/parameter_modifiers.yaml +144 -0
  66. data/data/config/protocols.yaml +257 -0
  67. data/data/config/screen.yaml +151 -0
  68. data/data/config/script_runner.yaml +15 -0
  69. data/data/config/system.yaml +153 -0
  70. data/data/config/table_manager.yaml +76 -0
  71. data/data/config/table_parameter_modifiers.yaml +9 -0
  72. data/data/config/target.yaml +71 -0
  73. data/data/config/telemetry.yaml +73 -0
  74. data/data/config/telemetry_modifiers.yaml +129 -0
  75. data/data/config/test_runner.yaml +118 -0
  76. data/data/config/tlm_extractor.yaml +109 -0
  77. data/data/config/tlm_grapher.yaml +78 -0
  78. data/data/config/tlm_viewer.yaml +107 -0
  79. data/data/config/unknown.yaml +3 -0
  80. data/data/config/widgets.yaml +1339 -0
  81. data/data/config/xy_params.yaml +50 -0
  82. data/data/config/xy_plot.yaml +12 -0
  83. data/data/config_editor.png +0 -0
  84. data/data/crc.txt +172 -161
  85. data/data/delete.png +0 -0
  86. data/demo/config/data/crc.txt +56 -36
  87. data/demo/config/data/meta_init.txt +1 -4
  88. data/demo/config/system/system.txt +15 -3
  89. data/demo/config/system/system2.txt +13 -3
  90. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +2 -6
  91. data/demo/config/targets/EXAMPLE/target.txt +3 -1
  92. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -0
  93. data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
  94. data/demo/config/targets/INST/screens/adcs.txt +39 -15
  95. data/demo/config/targets/INST/screens/commanding.txt +26 -19
  96. data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
  97. data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
  98. data/demo/config/targets/INST/screens/tabs.txt +0 -2
  99. data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
  100. data/demo/config/targets/INST/tables/EventAction.csv +9 -0
  101. data/demo/config/targets/INST/tables/EventAction.dat +0 -0
  102. data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
  103. data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
  104. data/demo/config/targets/INST/target.txt +4 -0
  105. data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
  106. data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
  107. data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
  108. data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
  109. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -3
  110. data/demo/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  111. data/demo/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  112. data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  113. data/demo/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
  114. data/demo/config/targets/SYSTEM/lib/limits_groups.rb +39 -0
  115. data/demo/config/targets/SYSTEM/screens/status.txt +1 -1
  116. data/demo/config/targets/SYSTEM/target.txt +12 -0
  117. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +1 -1
  118. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +8 -5
  119. data/demo/config/targets/TEMPLATED/target.txt +2 -0
  120. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +15 -6
  121. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +13 -5
  122. data/demo/config/tools/data_viewer/data_viewer.txt +9 -0
  123. data/demo/config/tools/launcher/launcher.txt +9 -6
  124. data/demo/config/tools/launcher/launcher2.txt +16 -13
  125. data/demo/config/tools/launcher/launcher_mini.txt +45 -0
  126. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +12 -11
  127. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +12 -11
  128. data/demo/config/tools/test_runner/test_runner.txt +1 -1
  129. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  130. data/demo/lib/example_background_task.rb +9 -5
  131. data/demo/lib/example_target.rb +5 -15
  132. data/demo/lib/scpi_target.rb +4 -10
  133. data/demo/procedures/cosmos_api_test.rb +17 -0
  134. data/demo/tools/CmdSequence +16 -0
  135. data/demo/tools/CmdSequence.bat +9 -0
  136. data/demo/tools/ConfigEditor +16 -0
  137. data/demo/tools/ConfigEditor.bat +9 -0
  138. data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  139. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  140. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  141. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  142. data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  143. data/ext/cosmos/ext/packet/packet.c +5 -5
  144. data/install/config/data/crc.txt +12 -8
  145. data/install/config/system/system.txt +13 -3
  146. data/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +14 -0
  147. data/install/config/targets/SYSTEM/target.txt +12 -0
  148. data/install/tools/CmdSequence +16 -0
  149. data/install/tools/CmdSequence.bat +9 -0
  150. data/install/tools/ConfigEditor +16 -0
  151. data/install/tools/ConfigEditor.bat +9 -0
  152. data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  153. data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  154. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  155. data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  156. data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  157. data/lib/cosmos.rb +1 -1
  158. data/lib/cosmos/config/config_parser.rb +147 -59
  159. data/lib/cosmos/config/meta_config_parser.rb +57 -0
  160. data/lib/cosmos/conversions/polynomial_conversion.rb +20 -4
  161. data/lib/cosmos/conversions/unix_time_conversion.rb +4 -4
  162. data/lib/cosmos/core_ext/array.rb +45 -5
  163. data/lib/cosmos/core_ext/cosmos_io.rb +31 -15
  164. data/lib/cosmos/core_ext/file.rb +2 -2
  165. data/lib/cosmos/core_ext/kernel.rb +1 -6
  166. data/lib/cosmos/core_ext/objectspace.rb +0 -2
  167. data/lib/cosmos/core_ext/string.rb +27 -4
  168. data/lib/cosmos/core_ext/time.rb +39 -10
  169. data/lib/cosmos/gui/choosers/combobox_chooser.rb +37 -26
  170. data/lib/cosmos/gui/choosers/file_chooser.rb +23 -6
  171. data/lib/cosmos/gui/choosers/float_chooser.rb +13 -11
  172. data/lib/cosmos/gui/choosers/integer_chooser.rb +13 -11
  173. data/lib/cosmos/gui/choosers/string_chooser.rb +18 -36
  174. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +64 -64
  175. data/lib/cosmos/gui/choosers/value_chooser.rb +15 -15
  176. data/lib/cosmos/gui/dialogs/about_dialog.rb +18 -13
  177. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +11 -3
  178. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +1 -1
  179. data/lib/cosmos/gui/dialogs/details_dialog.rb +1 -1
  180. data/lib/cosmos/gui/dialogs/exception_dialog.rb +7 -7
  181. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +20 -15
  182. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
  183. data/lib/cosmos/gui/dialogs/legal_dialog.rb +6 -5
  184. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +5 -2
  185. data/lib/cosmos/gui/dialogs/progress_dialog.rb +1 -1
  186. data/lib/cosmos/gui/dialogs/pry_dialog.rb +4 -4
  187. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +3 -0
  188. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +7 -6
  189. data/lib/cosmos/gui/dialogs/splash.rb +1 -1
  190. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -1
  191. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +114 -0
  192. data/lib/cosmos/gui/line_graph/line_graph.rb +9 -10
  193. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +7 -5
  194. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +3 -7
  195. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +3 -8
  196. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +2 -7
  197. data/lib/cosmos/gui/line_graph/overview_graph.rb +6 -1
  198. data/lib/cosmos/gui/opengl/earth_model.rb +6 -3
  199. data/lib/cosmos/gui/opengl/gl_bounds.rb +11 -23
  200. data/lib/cosmos/gui/opengl/gl_light.rb +3 -4
  201. data/lib/cosmos/gui/opengl/gl_material.rb +3 -4
  202. data/lib/cosmos/gui/opengl/gl_scene.rb +10 -4
  203. data/lib/cosmos/gui/opengl/gl_shape.rb +6 -2
  204. data/lib/cosmos/gui/opengl/gl_viewer.rb +5 -5
  205. data/lib/cosmos/gui/opengl/gl_viewport.rb +11 -12
  206. data/lib/cosmos/gui/opengl/moon_model.rb +6 -3
  207. data/lib/cosmos/gui/opengl/stl_reader.rb +8 -9
  208. data/lib/cosmos/gui/opengl/stl_shape.rb +4 -5
  209. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +7 -7
  210. data/lib/cosmos/gui/qt.rb +1 -1
  211. data/lib/cosmos/gui/qt_tool.rb +21 -10
  212. data/lib/cosmos/gui/text/completion.rb +23 -2
  213. data/lib/cosmos/gui/text/completion_text_edit.rb +38 -23
  214. data/lib/cosmos/gui/utilities/analyze_log.rb +1 -1
  215. data/lib/cosmos/gui/utilities/screenshot.rb +2 -2
  216. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +11 -1
  217. data/lib/cosmos/gui/widgets/packet_log_frame.rb +19 -6
  218. data/lib/cosmos/interfaces.rb +10 -0
  219. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +28 -47
  220. data/lib/cosmos/interfaces/interface.rb +240 -22
  221. data/lib/cosmos/interfaces/linc_interface.rb +3 -5
  222. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
  223. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
  224. data/lib/cosmos/{streams/fixed_stream_protocol.rb → interfaces/protocols/fixed_protocol.rb} +40 -37
  225. data/lib/cosmos/{streams/length_stream_protocol.rb → interfaces/protocols/length_protocol.rb} +55 -48
  226. data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
  227. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
  228. data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
  229. data/lib/cosmos/interfaces/protocols/template_protocol.rb +209 -0
  230. data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
  231. data/lib/cosmos/interfaces/serial_interface.rb +28 -23
  232. data/lib/cosmos/interfaces/simulated_target_interface.rb +27 -16
  233. data/lib/cosmos/interfaces/stream_interface.rb +36 -108
  234. data/lib/cosmos/interfaces/tcpip_client_interface.rb +21 -21
  235. data/lib/cosmos/interfaces/tcpip_server_interface.rb +555 -94
  236. data/lib/cosmos/interfaces/udp_interface.rb +51 -83
  237. data/lib/cosmos/io/buffered_file.rb +92 -2
  238. data/lib/cosmos/io/json_drb.rb +2 -2
  239. data/lib/cosmos/io/posix_serial_driver.rb +3 -1
  240. data/lib/cosmos/io/raw_logger.rb +3 -3
  241. data/lib/cosmos/io/serial_driver.rb +14 -5
  242. data/lib/cosmos/io/win32_serial_driver.rb +16 -4
  243. data/lib/cosmos/packet_logs.rb +0 -1
  244. data/lib/cosmos/packet_logs/packet_log_reader.rb +11 -1
  245. data/lib/cosmos/packet_logs/packet_log_writer.rb +31 -13
  246. data/lib/cosmos/packets/binary_accessor.rb +599 -32
  247. data/lib/cosmos/packets/commands.rb +48 -24
  248. data/lib/cosmos/packets/packet.rb +140 -54
  249. data/lib/cosmos/packets/packet_config.rb +0 -2
  250. data/lib/cosmos/packets/parsers/packet_item_parser.rb +10 -2
  251. data/lib/cosmos/packets/structure.rb +81 -33
  252. data/lib/cosmos/packets/structure_item.rb +45 -5
  253. data/lib/cosmos/packets/telemetry.rb +149 -55
  254. data/lib/cosmos/script/api_shared.rb +1000 -0
  255. data/lib/cosmos/script/commands.rb +2 -2
  256. data/lib/cosmos/script/extract.rb +19 -4
  257. data/lib/cosmos/script/limits.rb +2 -0
  258. data/lib/cosmos/script/script.rb +1 -1
  259. data/lib/cosmos/script/scripting.rb +4 -784
  260. data/lib/cosmos/script/telemetry.rb +44 -23
  261. data/lib/cosmos/script/tools.rb +15 -69
  262. data/lib/cosmos/streams/serial_stream.rb +12 -19
  263. data/lib/cosmos/streams/stream.rb +2 -11
  264. data/lib/cosmos/streams/tcpip_socket_stream.rb +3 -13
  265. data/lib/cosmos/system/system.rb +187 -31
  266. data/lib/cosmos/system/target.rb +11 -2
  267. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +12 -11
  268. data/lib/cosmos/tools/cmd_sender/{cmd_sender_item_delegate.rb → cmd_param_table_item_delegate.rb} +11 -10
  269. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +209 -164
  270. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
  271. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
  272. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
  273. data/lib/cosmos/tools/cmd_tlm_server/api.rb +179 -5
  274. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +31 -14
  275. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +23 -16
  276. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +92 -20
  277. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +1 -1
  278. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +17 -4
  279. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +0 -5
  280. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +1 -2
  281. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +4 -4
  282. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +121 -0
  283. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +8 -4
  284. data/lib/cosmos/tools/config_editor/config_editor.rb +720 -0
  285. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +675 -0
  286. data/lib/cosmos/tools/data_viewer/data_viewer.rb +44 -27
  287. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +8 -22
  288. data/lib/cosmos/tools/launcher/launcher.rb +29 -12
  289. data/lib/cosmos/tools/launcher/launcher_config.rb +1 -1
  290. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +153 -42
  291. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +44 -6
  292. data/lib/cosmos/tools/replay/replay.rb +36 -20
  293. data/lib/cosmos/tools/replay/replay_server.rb +1 -1
  294. data/lib/cosmos/tools/script_runner/script_runner_config.rb +1 -1
  295. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +31 -21
  296. data/lib/cosmos/tools/table_manager/table_config.rb +9 -3
  297. data/lib/cosmos/tools/table_manager/table_manager.rb +27 -7
  298. data/lib/cosmos/tools/test_runner/results_writer.rb +6 -6
  299. data/lib/cosmos/tools/test_runner/test_runner.rb +4 -6
  300. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +4 -5
  301. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +1 -1
  302. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +1 -1
  303. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +23 -6
  304. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +44 -3
  305. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +20 -7
  306. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1 -1
  307. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +11 -4
  308. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +2 -2
  309. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +1 -1
  310. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +16 -0
  311. data/lib/cosmos/tools/tlm_viewer/screen.rb +36 -32
  312. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +59 -50
  313. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +2 -2
  314. data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
  315. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +1 -0
  316. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +22 -4
  317. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +9 -0
  318. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
  319. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +3 -2
  320. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +3 -2
  321. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +12 -12
  322. data/lib/cosmos/top_level.rb +34 -24
  323. data/lib/cosmos/utilities/crc.rb +108 -6
  324. data/lib/cosmos/utilities/csv.rb +68 -14
  325. data/lib/cosmos/utilities/logger.rb +2 -2
  326. data/lib/cosmos/utilities/low_fragmentation_array.rb +9 -1
  327. data/lib/cosmos/version.rb +6 -6
  328. data/lib/cosmos/win32/win32_main.rb +50 -46
  329. data/run_gui_tests.bat +3 -1
  330. data/spec/conversions/unix_time_formatted_conversion_spec.rb +2 -2
  331. data/spec/conversions/unix_time_seconds_conversion_spec.rb +2 -2
  332. data/spec/core_ext/file_spec.rb +1 -1
  333. data/spec/core_ext/objectspace_spec.rb +12 -9
  334. data/spec/core_ext/string_spec.rb +6 -0
  335. data/spec/core_ext/time_spec.rb +10 -0
  336. data/spec/gui/line_graph/line_clip_spec.rb +226 -224
  337. data/spec/gui/qt_spec.rb +81 -79
  338. data/spec/install/config/system/system.txt +0 -6
  339. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +5 -5
  340. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +8 -8
  341. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  342. data/{install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt → spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  343. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  344. data/spec/install/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
  345. data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
  346. data/spec/install/config/targets/SYSTEM/target.txt +12 -0
  347. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +9 -13
  348. data/spec/interfaces/interface_spec.rb +402 -18
  349. data/spec/interfaces/linc_interface_spec.rb +37 -39
  350. data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
  351. data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
  352. data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
  353. data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
  354. data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
  355. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
  356. data/spec/interfaces/protocols/template_protocol_spec.rb +218 -0
  357. data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
  358. data/spec/interfaces/serial_interface_spec.rb +35 -34
  359. data/spec/interfaces/simulated_target_interface_spec.rb +13 -13
  360. data/spec/interfaces/tcpip_client_interface_spec.rb +21 -16
  361. data/spec/interfaces/tcpip_server_interface_spec.rb +66 -69
  362. data/spec/interfaces/udp_interface_spec.rb +120 -55
  363. data/spec/io/serial_driver_spec.rb +41 -39
  364. data/spec/io/udp_sockets_spec.rb +13 -8
  365. data/spec/io/win32_serial_driver_spec.rb +62 -59
  366. data/spec/packet_logs/packet_log_reader_spec.rb +68 -47
  367. data/spec/packet_logs/packet_log_writer_spec.rb +7 -5
  368. data/spec/packets/commands_spec.rb +5 -5
  369. data/spec/packets/packet_spec.rb +2 -14
  370. data/spec/script/extract_spec.rb +21 -7
  371. data/spec/script/scripting_spec.rb +261 -6
  372. data/spec/script/telemetry_spec.rb +17 -9
  373. data/spec/spec_helper.rb +26 -10
  374. data/spec/streams/serial_stream_spec.rb +87 -82
  375. data/spec/streams/tcpip_client_stream_spec.rb +12 -4
  376. data/spec/streams/tcpip_socket_stream_spec.rb +5 -0
  377. data/spec/system/system_spec.rb +66 -50
  378. data/spec/system/target_spec.rb +33 -11
  379. data/spec/tools/cmd_tlm_server/api_spec.rb +5 -5
  380. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +75 -15
  381. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +125 -5
  382. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +244 -232
  383. data/spec/tools/cmd_tlm_server/commanding_spec.rb +18 -18
  384. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +124 -29
  385. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +2 -2
  386. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
  387. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +50 -10
  388. data/spec/tools/table_manager/tablemanager_core_spec.rb +0 -1
  389. data/spec/top_level/top_level_spec.rb +39 -11
  390. data/spec/utilities/csv_spec.rb +62 -20
  391. data/tasks/gemfile_stats.rake +6 -3
  392. data/test/performance/config/system/system_packets.txt +0 -1
  393. data/test/performance/config/system/system_threads.txt +0 -1
  394. metadata +177 -92
  395. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  396. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
  397. data/autohotkey/config/targets/COSMOS/target.txt +0 -5
  398. data/autohotkey/userpath.txt +0 -1
  399. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  400. data/demo/config/targets/COSMOS/screens/limits_change.txt +0 -20
  401. data/demo/config/targets/COSMOS/screens/version.txt +0 -19
  402. data/demo/config/targets/COSMOS/target.txt +0 -11
  403. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +0 -10
  404. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +0 -13
  405. data/demo/userpath.txt +0 -1
  406. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  407. data/install/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
  408. data/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
  409. data/install/config/targets/COSMOS/screens/version.txt +0 -19
  410. data/install/config/targets/COSMOS/target.txt +0 -9
  411. data/install/config/targets/SYSTEM/README.txt +0 -1
  412. data/install/userpath.txt +0 -1
  413. data/lib/cosmos/io/tcpip_server.rb +0 -571
  414. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +0 -107
  415. data/lib/cosmos/streams/burst_stream_protocol.rb +0 -25
  416. data/lib/cosmos/streams/preidentified_stream_protocol.rb +0 -118
  417. data/lib/cosmos/streams/stream_protocol.rb +0 -373
  418. data/lib/cosmos/streams/template_stream_protocol.rb +0 -140
  419. data/lib/cosmos/streams/terminated_stream_protocol.rb +0 -85
  420. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +0 -41
  421. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  422. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
  423. data/spec/install/config/targets/COSMOS/screens/version.txt +0 -19
  424. data/spec/install/config/targets/COSMOS/target.txt +0 -5
  425. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +0 -4
  426. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +0 -4
  427. data/spec/install/userpath.txt +0 -1
  428. data/spec/interfaces/stream_interface_spec.rb +0 -157
  429. data/spec/io/tcpip_server_spec.rb +0 -338
  430. data/spec/packet_logs/meta_packet_log_writer_spec.rb +0 -170
  431. data/spec/streams/burst_stream_protocol_spec.rb +0 -32
  432. data/spec/streams/fixed_stream_protocol_spec.rb +0 -113
  433. data/spec/streams/length_stream_protocol_spec.rb +0 -300
  434. data/spec/streams/preidentified_stream_protocol_spec.rb +0 -121
  435. data/spec/streams/stream_protocol_spec.rb +0 -346
  436. data/spec/streams/template_stream_protocol_spec.rb +0 -156
  437. data/spec/streams/terminated_stream_protocol_spec.rb +0 -127
  438. data/test/performance/userpath.txt +0 -1
@@ -125,9 +125,9 @@ module Cosmos
125
125
  def log_message(severity_string, message, &block)
126
126
  @mutex.synchronize do
127
127
  if block_given?
128
- puts "#{Time.now.formatted} #{@detail_string ? "(#{@detail_string}):" : ''}#{severity_string} " << yield
128
+ puts "#{Time.now.sys.formatted} #{@detail_string ? "(#{@detail_string}):" : ''}#{severity_string} " << yield
129
129
  else
130
- puts "#{Time.now.formatted} #{@detail_string ? "(#{@detail_string}):" : ''}#{severity_string} #{message}"
130
+ puts "#{Time.now.sys.formatted} #{@detail_string ? "(#{@detail_string}):" : ''}#{severity_string} #{message}"
131
131
  end
132
132
  end
133
133
  end
@@ -8,4 +8,12 @@
8
8
  # as published by the Free Software Foundation; version 3 with
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
- require 'cosmos/ext/low_fragmentation_array'
11
+ if RUBY_ENGINE == 'ruby' and !ENV['COSMOS_NO_EXT']
12
+ require 'cosmos/ext/low_fragmentation_array'
13
+ else
14
+ module Cosmos
15
+ class LowFragmentationArray < Array
16
+ # Can't implement low fragmention in native ruby easily
17
+ end
18
+ end
19
+ end
@@ -1,12 +1,12 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- COSMOS_VERSION = '3.9.2'
3
+ COSMOS_VERSION = '4.0.0'
4
4
  module Cosmos
5
5
  module Version
6
- MAJOR = '3'
7
- MINOR = '9'
8
- PATCH = '2'
9
- BUILD = '82298a42b756edd3783b51c2d7d17535b6ab8f1a'
6
+ MAJOR = '4'
7
+ MINOR = '0'
8
+ PATCH = '0'
9
+ BUILD = '5fd7539d1e07cb9a71388e9cd0ec60b97a0f625a'
10
10
  end
11
- VERSION = '3.9.2'
11
+ VERSION = '4.0.0'
12
12
  end
@@ -10,55 +10,59 @@
10
10
 
11
11
  module Cosmos
12
12
 
13
- # Win32API is deprecated in 1.9.x so recreate it
14
- require 'fiddle'
15
- class Win32API
16
- # Cache to hold already opened dll files
17
- DLL_CACHE = {}
18
-
19
- VALUE_TYPEMAP = {"0" => Fiddle::TYPE_VOID, "S" => Fiddle::TYPE_VOIDP, "I" => Fiddle::TYPE_LONG}
20
-
21
- def initialize(dll_name, function_name, import, export = "0")
22
- # Convert all input parameters into either 0, S, or I
23
- @function_prototype = [import].join.tr("VPpNnLlIiCc", "0SSI")
24
- params = []
25
- @function_prototype.split('').each do |param|
26
- params << VALUE_TYPEMAP[param]
27
- end
13
+ if RUBY_ENGINE == 'ruby'
14
+ # Win32API is deprecated in 1.9.x so recreate it
15
+ require 'fiddle'
16
+ class Win32API
17
+ # Cache to hold already opened dll files
18
+ DLL_CACHE = {}
19
+
20
+ VALUE_TYPEMAP = {"0" => Fiddle::TYPE_VOID, "S" => Fiddle::TYPE_VOIDP, "I" => Fiddle::TYPE_LONG}
21
+
22
+ def initialize(dll_name, function_name, import, export = "0")
23
+ # Convert all input parameters into either 0, S, or I
24
+ @function_prototype = [import].join.tr("VPpNnLlIiCc", "0SSI")
25
+ params = []
26
+ @function_prototype.split('').each do |param|
27
+ params << VALUE_TYPEMAP[param]
28
+ end
28
29
 
29
- # Get handle to dll file and add to cache if necessary
30
- dll_handle = DLL_CACHE[dll_name] ||= Fiddle.dlopen(dll_name)
30
+ # Get handle to dll file and add to cache if necessary
31
+ dll_handle = DLL_CACHE[dll_name] ||= Fiddle.dlopen(dll_name)
31
32
 
32
- # Create Fiddle::Function necessary to call a function with proper return type and name
33
- @function = Fiddle::Function.new(dll_handle[function_name], params, VALUE_TYPEMAP[export.tr("VPpNnLlIi", "0SSI")])
34
- end
33
+ # Create Fiddle::Function necessary to call a function with proper return type and name
34
+ @function = Fiddle::Function.new(dll_handle[function_name], params, VALUE_TYPEMAP[export.tr("VPpNnLlIi", "0SSI")])
35
+ end
35
36
 
36
- def call(*args)
37
- # Break up prototype into characters
38
- import = @function_prototype.split('')
39
-
40
- args.each_with_index do |arg, index|
41
- case import[index]
42
- when 'S'
43
- # Handle NULL specified with 0 value
44
- arg = nil if arg == 0
45
-
46
- # Convert argument into array of longs
47
- args[index], = [arg].pack("p").unpack("l!*")
48
- when 'I'
49
- # Handle intergers larger than 2^31 - 1
50
- args[index], = [arg].pack("I").unpack("i")
37
+ def call(*args)
38
+ # Break up prototype into characters
39
+ import = @function_prototype.split('')
40
+
41
+ args.each_with_index do |arg, index|
42
+ case import[index]
43
+ when 'S'
44
+ # Handle NULL specified with 0 value
45
+ arg = nil if arg == 0
46
+
47
+ # Convert argument into array of longs
48
+ args[index], = [arg].pack("p").unpack("l!*")
49
+ when 'I'
50
+ # Handle intergers larger than 2^31 - 1
51
+ args[index], = [arg].pack("I").unpack("i")
52
+ end
51
53
  end
54
+
55
+ # Call the function and return its return value
56
+ return_value = @function.call(*args)
57
+ return_value ||= 0
58
+ return_value
52
59
  end
53
60
 
54
- # Call the function and return its return value
55
- return_value = @function.call(*args)
56
- return_value ||= 0
57
- return_value
61
+ # Make an equivalent capital C call method
62
+ alias Call call
58
63
  end
59
-
60
- # Make an equivalent capital C call method
61
- alias Call call
64
+ else
65
+ require 'Win32API'
62
66
  end
63
67
 
64
68
  # Win32 class
@@ -131,11 +135,11 @@ module Cosmos
131
135
  CBR_115200 = 115200
132
136
  CBR_128000 = 128000
133
137
  CBR_256000 = 256000
134
-
138
+
135
139
  BAUD_RATES = [
136
- CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600,
137
- CBR_14400, CBR_19200, CBR_38400, CBR_56000, CBR_57600, CBR_115200,
138
- CBR_128000, CBR_256000, 230400, 460800, 500000, 576000, 921600,
140
+ CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600,
141
+ CBR_14400, CBR_19200, CBR_38400, CBR_56000, CBR_57600, CBR_115200,
142
+ CBR_128000, CBR_256000, 230400, 460800, 500000, 576000, 921600,
139
143
  1000000, 1152000, 1500000, 2000000, 3000000, 3500000, 4000000
140
144
  ]
141
145
 
@@ -1,5 +1,7 @@
1
1
  call bundle exec ruby autohotkey\tools\CmdExtractorAHK --defaultsize
2
2
  call bundle exec ruby autohotkey\tools\CmdSenderAHK -w 650 -t 650
3
+ call bundle exec ruby autohotkey\tools\CmdSequenceAHK -w 650 -t 650
4
+ call bundle exec ruby autohotkey\tools\CmdSequenceAHK2 -w 650 -t 650 -r run_sequence.txt -o procedures
3
5
  call bundle exec ruby autohotkey\tools\CmdTlmServerAHK -x 50 -y 50 -w 900 -t 1000
4
6
  call bundle exec ruby autohotkey\tools\CmdTlmServerAHK2 -w 900 -t 1000 -p -n -c cmd_tlm_server.txt
5
7
  call bundle exec ruby autohotkey\tools\DataViewerAHK -w 600 -t 800
@@ -9,7 +11,7 @@ call bundle exec ruby autohotkey\tools\LimitsMonitorAHK
9
11
  call bundle exec ruby autohotkey\tools\OpenGLBuilderAHK -w 600 -t 600
10
12
  call bundle exec ruby autohotkey\tools\PacketViewerAHK -w 600 -t 800
11
13
  call bundle exec ruby autohotkey\tools\PacketViewerAHK2 --defaultsize -p "INST ADCS"
12
- call bundle exec ruby autohotkey\tools\ReplayAHK
14
+ call bundle exec ruby autohotkey\tools\ReplayAHK -w 800
13
15
  call bundle exec ruby autohotkey\tools\ScriptRunnerAHK -w 600 -t 800
14
16
  call bundle exec ruby autohotkey\tools\ScriptRunnerAHK2 -w 600 -t 800
15
17
  call bundle exec ruby autohotkey\tools\TableManagerAHK -w 800 -t 800
@@ -61,12 +61,12 @@ module Cosmos
61
61
  describe "to_s" do
62
62
  it "returns the seconds conversion" do
63
63
  gc = UnixTimeFormattedConversion.new('TIME')
64
- expect(gc.to_s).to eql "Time.at(packet.read('TIME', :RAW, buffer), 0).formatted"
64
+ expect(gc.to_s).to eql "Time.at(packet.read('TIME', :RAW, buffer), 0).sys.formatted"
65
65
  end
66
66
 
67
67
  it "returns the microseconds conversion" do
68
68
  gc = UnixTimeFormattedConversion.new('TIME','TIME_US')
69
- expect(gc.to_s).to eql "Time.at(packet.read('TIME', :RAW, buffer), packet.read('TIME_US', :RAW, buffer)).formatted"
69
+ expect(gc.to_s).to eql "Time.at(packet.read('TIME', :RAW, buffer), packet.read('TIME_US', :RAW, buffer)).sys.formatted"
70
70
  end
71
71
  end
72
72
  end
@@ -63,12 +63,12 @@ module Cosmos
63
63
  describe "to_s" do
64
64
  it "returns the seconds conversion" do
65
65
  gc = UnixTimeSecondsConversion.new('TIME')
66
- expect(gc.to_s).to eql "Time.at(packet.read('TIME', :RAW, buffer), 0).to_f"
66
+ expect(gc.to_s).to eql "Time.at(packet.read('TIME', :RAW, buffer), 0).sys.to_f"
67
67
  end
68
68
 
69
69
  it "returns the microseconds conversion" do
70
70
  gc = UnixTimeSecondsConversion.new('TIME','TIME_US')
71
- expect(gc.to_s).to eql "Time.at(packet.read('TIME', :RAW, buffer), packet.read('TIME_US', :RAW, buffer)).to_f"
71
+ expect(gc.to_s).to eql "Time.at(packet.read('TIME', :RAW, buffer), packet.read('TIME_US', :RAW, buffer)).sys.to_f"
72
72
  end
73
73
  end
74
74
  end
@@ -62,7 +62,7 @@ describe File do
62
62
 
63
63
  describe "find_in_search_path" do
64
64
  it "returns the path to the file" do
65
- expect(File.find_in_search_path("cosmos.rb")).to match "/lib/cosmos.rb"
65
+ expect(File.find_in_search_path("cosmos.rb")).to match "lib/cosmos.rb"
66
66
  end
67
67
 
68
68
  it "returns nil if the file can't be found" do
@@ -13,17 +13,20 @@ require 'cosmos/core_ext/objectspace'
13
13
 
14
14
  describe ObjectSpace do
15
15
 
16
- describe "find" do
17
- it "finds a class in the Ruby object space" do
18
- expect(ObjectSpace.find(Class)).not_to be_nil
19
- expect(ObjectSpace.find(Cosmos)).to be_nil
16
+ if RUBY_ENGINE == 'ruby'
17
+ describe "find" do
18
+ it "finds a class in the Ruby object space" do
19
+ expect(ObjectSpace.find(Class)).not_to be_nil
20
+ expect(ObjectSpace.find(Cosmos)).to be_nil
21
+ end
20
22
  end
21
- end
22
23
 
23
- describe "find_all" do
24
- it "finds classes in the Ruby object space" do
25
- expect(ObjectSpace.find_all(Class)).to be_a(Array)
26
- expect(ObjectSpace.find_all(Cosmos)).to eql([])
24
+ describe "find_all" do
25
+ it "finds classes in the Ruby object space" do
26
+ expect(ObjectSpace.find_all(Class)).to be_a(Array)
27
+ expect(ObjectSpace.find_all(Cosmos)).to eql([])
28
+ end
27
29
  end
28
30
  end
31
+
29
32
  end
@@ -204,6 +204,12 @@ describe String do
204
204
  expect("5.123\n5.123".convert_to_value).to eql "5.123\n5.123"
205
205
  expect("[0,1,2,3]\n[0,1,2,3]".convert_to_value).to eql "[0,1,2,3]\n[0,1,2,3]"
206
206
  end
207
+
208
+ it "handles special float values" do
209
+ expect("Infinity".convert_to_value).to eql Float::INFINITY
210
+ expect("-Infinity".convert_to_value).to eql -Float::INFINITY
211
+ expect("NAN".convert_to_value.nan?).to eql true # Note Float::NAN != Float::NAN by definition
212
+ end
207
213
  end
208
214
 
209
215
  describe "hex_to_byte_string" do
@@ -207,4 +207,14 @@ describe Time do
207
207
  expect(Time.init_epoch_delta("1969/12/31 12:00:00")).to eql 60*60*12
208
208
  end
209
209
  end
210
+
211
+ describe "Time.sys" do
212
+ it "converts time to UTC or local" do
213
+ Time.use_utc
214
+ expect(Time.now.sys.utc?).to eql true
215
+ Time.use_local
216
+ expect(Time.now.sys.utc?).to eql false
217
+ end
218
+ end
219
+
210
220
  end
@@ -8,315 +8,317 @@
8
8
  # as published by the Free Software Foundation; version 3 with
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
- require 'spec_helper'
12
- require 'cosmos/ext/line_graph'
11
+ if RUBY_ENGINE == 'ruby'
12
+ require 'spec_helper'
13
+ require 'cosmos/ext/line_graph'
13
14
 
14
- module Cosmos
15
+ module Cosmos
15
16
 
16
- describe LineClip do
17
+ describe LineClip do
17
18
 
18
- shared_examples_for "line returned" do
19
- it "is not nil" do
20
- expect(@clipped_line).not_to be_nil
19
+ shared_examples_for "line returned" do
20
+ it "is not nil" do
21
+ expect(@clipped_line).not_to be_nil
22
+ end
21
23
  end
22
- end
23
24
 
24
- shared_examples_for "no line returned" do
25
- it "is nil" do
26
- expect(@clipped_line).to be_nil
25
+ shared_examples_for "no line returned" do
26
+ it "is nil" do
27
+ expect(@clipped_line).to be_nil
28
+ end
27
29
  end
28
- end
29
30
 
30
- shared_examples_for "not clipped" do
31
- it "returns the same first point" do
32
- expect(@clipped_line[0]).to eql(@x0)
33
- expect(@clipped_line[1]).to eql(@y0)
34
- end
31
+ shared_examples_for "not clipped" do
32
+ it "returns the same first point" do
33
+ expect(@clipped_line[0]).to eql(@x0)
34
+ expect(@clipped_line[1]).to eql(@y0)
35
+ end
35
36
 
36
- it "returns the same second point" do
37
- expect(@clipped_line[2]).to eql(@x1)
38
- expect(@clipped_line[3]).to eql(@y1)
39
- end
37
+ it "returns the same second point" do
38
+ expect(@clipped_line[2]).to eql(@x1)
39
+ expect(@clipped_line[3]).to eql(@y1)
40
+ end
40
41
 
41
- it "indicates the first point was not clipped" do
42
- expect(@clipped_line[4]).to be false
43
- end
42
+ it "indicates the first point was not clipped" do
43
+ expect(@clipped_line[4]).to be false
44
+ end
44
45
 
45
- it "indicates the second point was not clipped" do
46
- expect(@clipped_line[5]).to be false
46
+ it "indicates the second point was not clipped" do
47
+ expect(@clipped_line[5]).to be false
48
+ end
47
49
  end
48
- end
49
50
 
50
- shared_examples_for "first point clipped" do
51
- it "returns a clipped first point" do
52
- expect(@xmin..@xmax).to include(@clipped_line[0])
53
- expect(@ymin..@ymax).to include(@clipped_line[1])
54
- end
51
+ shared_examples_for "first point clipped" do
52
+ it "returns a clipped first point" do
53
+ expect(@xmin..@xmax).to include(@clipped_line[0])
54
+ expect(@ymin..@ymax).to include(@clipped_line[1])
55
+ end
55
56
 
56
- it "returns the same second point" do
57
- expect(@clipped_line[2]).to eql(@x1)
58
- expect(@clipped_line[3]).to eql(@y1)
59
- end
57
+ it "returns the same second point" do
58
+ expect(@clipped_line[2]).to eql(@x1)
59
+ expect(@clipped_line[3]).to eql(@y1)
60
+ end
60
61
 
61
- it "indicates the first point was clipped" do
62
- expect(@clipped_line[4]).to be true
63
- end
62
+ it "indicates the first point was clipped" do
63
+ expect(@clipped_line[4]).to be true
64
+ end
64
65
 
65
- it "indicates the second point was not clipped" do
66
- expect(@clipped_line[5]).to be false
66
+ it "indicates the second point was not clipped" do
67
+ expect(@clipped_line[5]).to be false
68
+ end
67
69
  end
68
- end
69
70
 
70
- shared_examples_for "second point clipped" do
71
- it "returns the same first point" do
72
- expect(@clipped_line[0]).to eql(@x0)
73
- expect(@clipped_line[1]).to eql(@y0)
74
- end
71
+ shared_examples_for "second point clipped" do
72
+ it "returns the same first point" do
73
+ expect(@clipped_line[0]).to eql(@x0)
74
+ expect(@clipped_line[1]).to eql(@y0)
75
+ end
75
76
 
76
- it "returns a clipped second point" do
77
- expect(@xmin..@xmax).to include(@clipped_line[2])
78
- expect(@ymin..@ymax).to include(@clipped_line[3])
79
- end
77
+ it "returns a clipped second point" do
78
+ expect(@xmin..@xmax).to include(@clipped_line[2])
79
+ expect(@ymin..@ymax).to include(@clipped_line[3])
80
+ end
80
81
 
81
- it "indicates the first point was not clipped" do
82
- expect(@clipped_line[4]).to be false
83
- end
82
+ it "indicates the first point was not clipped" do
83
+ expect(@clipped_line[4]).to be false
84
+ end
84
85
 
85
- it "indicates the second point was clipped" do
86
- expect(@clipped_line[5]).to be true
86
+ it "indicates the second point was clipped" do
87
+ expect(@clipped_line[5]).to be true
88
+ end
87
89
  end
88
- end
89
-
90
- before(:all) do
91
- @xmin = -10.0
92
- @xmax = 10.0
93
- @ymin = -10.0
94
- @ymax = 10.0
95
- end
96
90
 
97
- describe "given a first point on the graph" do
98
91
  before(:all) do
99
- @x0 = -3.0
100
- @y0 = 5.0
92
+ @xmin = -10.0
93
+ @xmax = 10.0
94
+ @ymin = -10.0
95
+ @ymax = 10.0
101
96
  end
102
97
 
103
- describe "and given a second point on the graph" do
98
+ describe "given a first point on the graph" do
104
99
  before(:all) do
105
- @x1 = 3.6
106
- @y1 = 9.9
107
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
100
+ @x0 = -3.0
101
+ @y0 = 5.0
108
102
  end
109
103
 
110
- it_should_behave_like "line returned"
111
- it_should_behave_like "not clipped"
112
- end
104
+ describe "and given a second point on the graph" do
105
+ before(:all) do
106
+ @x1 = 3.6
107
+ @y1 = 9.9
108
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
109
+ end
113
110
 
114
- describe "and given a second point off the graph to the upper left" do
115
- before(:all) do
116
- @x1 = -15.0
117
- @y1 = 13.0
118
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
111
+ it_should_behave_like "line returned"
112
+ it_should_behave_like "not clipped"
119
113
  end
120
114
 
121
- it_should_behave_like "line returned"
122
- it_should_behave_like "second point clipped"
123
- end
115
+ describe "and given a second point off the graph to the upper left" do
116
+ before(:all) do
117
+ @x1 = -15.0
118
+ @y1 = 13.0
119
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
120
+ end
124
121
 
125
- describe "and given a second point off the graph to the top" do
126
- before(:all) do
127
- @x1 = 5.0
128
- @y1 = 180.0
129
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
122
+ it_should_behave_like "line returned"
123
+ it_should_behave_like "second point clipped"
130
124
  end
131
125
 
132
- it_should_behave_like "line returned"
133
- it_should_behave_like "second point clipped"
134
- end
126
+ describe "and given a second point off the graph to the top" do
127
+ before(:all) do
128
+ @x1 = 5.0
129
+ @y1 = 180.0
130
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
131
+ end
135
132
 
136
- describe "and given a second point off the graph to the upper right" do
137
- before(:all) do
138
- @x1 = 15.0
139
- @y1 = 13.0
140
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
133
+ it_should_behave_like "line returned"
134
+ it_should_behave_like "second point clipped"
141
135
  end
142
136
 
143
- it_should_behave_like "line returned"
144
- it_should_behave_like "second point clipped"
145
- end
137
+ describe "and given a second point off the graph to the upper right" do
138
+ before(:all) do
139
+ @x1 = 15.0
140
+ @y1 = 13.0
141
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
142
+ end
146
143
 
147
- describe "and given a second point off the graph to the right" do
148
- before(:all) do
149
- @x1 = 70.0
150
- @y1 = -3.0
151
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
144
+ it_should_behave_like "line returned"
145
+ it_should_behave_like "second point clipped"
152
146
  end
153
147
 
154
- it_should_behave_like "line returned"
155
- it_should_behave_like "second point clipped"
156
- end
148
+ describe "and given a second point off the graph to the right" do
149
+ before(:all) do
150
+ @x1 = 70.0
151
+ @y1 = -3.0
152
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
153
+ end
157
154
 
158
- describe "and given a second point off the graph to the bottom right" do
159
- before(:all) do
160
- @x1 = -15.0
161
- @y1 = -13.0
162
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
155
+ it_should_behave_like "line returned"
156
+ it_should_behave_like "second point clipped"
163
157
  end
164
158
 
165
- it_should_behave_like "line returned"
166
- it_should_behave_like "second point clipped"
167
- end
159
+ describe "and given a second point off the graph to the bottom right" do
160
+ before(:all) do
161
+ @x1 = -15.0
162
+ @y1 = -13.0
163
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
164
+ end
168
165
 
169
- describe "and given a second point off the graph to the bottom" do
170
- before(:all) do
171
- @x1 = 0.0
172
- @y1 = 13.57
173
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
166
+ it_should_behave_like "line returned"
167
+ it_should_behave_like "second point clipped"
174
168
  end
175
169
 
176
- it_should_behave_like "line returned"
177
- it_should_behave_like "second point clipped"
178
- end
170
+ describe "and given a second point off the graph to the bottom" do
171
+ before(:all) do
172
+ @x1 = 0.0
173
+ @y1 = 13.57
174
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
175
+ end
179
176
 
180
- describe "and given a second point off the graph to the bottom left" do
181
- before(:all) do
182
- @x1 = -150.0
183
- @y1 = -150.0
184
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
177
+ it_should_behave_like "line returned"
178
+ it_should_behave_like "second point clipped"
185
179
  end
186
180
 
187
- it_should_behave_like "line returned"
188
- it_should_behave_like "second point clipped"
189
- end
181
+ describe "and given a second point off the graph to the bottom left" do
182
+ before(:all) do
183
+ @x1 = -150.0
184
+ @y1 = -150.0
185
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
186
+ end
190
187
 
191
- describe "and given a second point off the graph to the left" do
192
- before(:all) do
193
- @x1 = -20.0
194
- @y1 = 3.0
195
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
188
+ it_should_behave_like "line returned"
189
+ it_should_behave_like "second point clipped"
196
190
  end
197
191
 
198
- it_should_behave_like "line returned"
199
- it_should_behave_like "second point clipped"
200
- end
201
- end
192
+ describe "and given a second point off the graph to the left" do
193
+ before(:all) do
194
+ @x1 = -20.0
195
+ @y1 = 3.0
196
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
197
+ end
202
198
 
203
- describe "given a second point on the graph" do
204
- before(:all) do
205
- @x1 = 3.2
206
- @y1 = -9.9
199
+ it_should_behave_like "line returned"
200
+ it_should_behave_like "second point clipped"
201
+ end
207
202
  end
208
203
 
209
- describe "and given a first point on the graph" do
204
+ describe "given a second point on the graph" do
210
205
  before(:all) do
211
- @x0 = 3.6
212
- @y0 = 9.9
213
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
206
+ @x1 = 3.2
207
+ @y1 = -9.9
214
208
  end
215
209
 
216
- it_should_behave_like "line returned"
217
- it_should_behave_like "not clipped"
218
- end
210
+ describe "and given a first point on the graph" do
211
+ before(:all) do
212
+ @x0 = 3.6
213
+ @y0 = 9.9
214
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
215
+ end
219
216
 
220
- describe "and given a first point off the graph to the upper left" do
221
- before(:all) do
222
- @x0 = -15.0
223
- @y0 = 13.0
224
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
217
+ it_should_behave_like "line returned"
218
+ it_should_behave_like "not clipped"
225
219
  end
226
220
 
227
- it_should_behave_like "line returned"
228
- it_should_behave_like "first point clipped"
229
- end
221
+ describe "and given a first point off the graph to the upper left" do
222
+ before(:all) do
223
+ @x0 = -15.0
224
+ @y0 = 13.0
225
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
226
+ end
230
227
 
231
- describe "and given a first point off the graph to the top" do
232
- before(:all) do
233
- @x0 = 5.0
234
- @y0 = 180.0
235
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
228
+ it_should_behave_like "line returned"
229
+ it_should_behave_like "first point clipped"
236
230
  end
237
231
 
238
- it_should_behave_like "line returned"
239
- it_should_behave_like "first point clipped"
240
- end
232
+ describe "and given a first point off the graph to the top" do
233
+ before(:all) do
234
+ @x0 = 5.0
235
+ @y0 = 180.0
236
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
237
+ end
241
238
 
242
- describe "and given a first point off the graph to the upper right" do
243
- before(:all) do
244
- @x0 = 15.0
245
- @y0 = 13.0
246
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
239
+ it_should_behave_like "line returned"
240
+ it_should_behave_like "first point clipped"
247
241
  end
248
242
 
249
- it_should_behave_like "line returned"
250
- it_should_behave_like "first point clipped"
251
- end
243
+ describe "and given a first point off the graph to the upper right" do
244
+ before(:all) do
245
+ @x0 = 15.0
246
+ @y0 = 13.0
247
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
248
+ end
252
249
 
253
- describe "and given a first point off the graph to the right" do
254
- before(:all) do
255
- @x0 = 70.0
256
- @y0 = -3.0
257
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
250
+ it_should_behave_like "line returned"
251
+ it_should_behave_like "first point clipped"
258
252
  end
259
253
 
260
- it_should_behave_like "line returned"
261
- it_should_behave_like "first point clipped"
262
- end
254
+ describe "and given a first point off the graph to the right" do
255
+ before(:all) do
256
+ @x0 = 70.0
257
+ @y0 = -3.0
258
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
259
+ end
263
260
 
264
- describe "and given a first point off the graph to the bottom right" do
265
- before(:all) do
266
- @x0 = -15.0
267
- @y0 = -13.0
268
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
261
+ it_should_behave_like "line returned"
262
+ it_should_behave_like "first point clipped"
269
263
  end
270
264
 
271
- it_should_behave_like "line returned"
272
- it_should_behave_like "first point clipped"
273
- end
265
+ describe "and given a first point off the graph to the bottom right" do
266
+ before(:all) do
267
+ @x0 = -15.0
268
+ @y0 = -13.0
269
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
270
+ end
274
271
 
275
- describe "and given a first point off the graph to the bottom" do
276
- before(:all) do
277
- @x0 = 0.0
278
- @y0 = 13.57
279
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
272
+ it_should_behave_like "line returned"
273
+ it_should_behave_like "first point clipped"
280
274
  end
281
275
 
282
- it_should_behave_like "line returned"
283
- it_should_behave_like "first point clipped"
284
- end
276
+ describe "and given a first point off the graph to the bottom" do
277
+ before(:all) do
278
+ @x0 = 0.0
279
+ @y0 = 13.57
280
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
281
+ end
285
282
 
286
- describe "and given a first point off the graph to the bottom left" do
287
- before(:all) do
288
- @x0 = -150.0
289
- @y0 = -150.0
290
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
283
+ it_should_behave_like "line returned"
284
+ it_should_behave_like "first point clipped"
285
+ end
286
+
287
+ describe "and given a first point off the graph to the bottom left" do
288
+ before(:all) do
289
+ @x0 = -150.0
290
+ @y0 = -150.0
291
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
292
+ end
293
+
294
+ it_should_behave_like "line returned"
295
+ it_should_behave_like "first point clipped"
291
296
  end
292
297
 
293
- it_should_behave_like "line returned"
294
- it_should_behave_like "first point clipped"
298
+ describe "and given a first point off the graph to the left" do
299
+ before(:all) do
300
+ @x0 = -20.0
301
+ @y0 = 3.0
302
+ @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
303
+ end
304
+
305
+ it_should_behave_like "line returned"
306
+ it_should_behave_like "first point clipped"
307
+ end
295
308
  end
296
309
 
297
- describe "and given a first point off the graph to the left" do
310
+ describe "given a both points off the graph" do
298
311
  before(:all) do
299
- @x0 = -20.0
300
- @y0 = 3.0
312
+ @x0 = 15.0
313
+ @y0 = -15.0
314
+ @x1 = 13.2
315
+ @y1 = -9.9
301
316
  @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
302
317
  end
303
318
 
304
- it_should_behave_like "line returned"
305
- it_should_behave_like "first point clipped"
319
+ it_should_behave_like "no line returned"
306
320
  end
307
321
  end
308
322
 
309
- describe "given a both points off the graph" do
310
- before(:all) do
311
- @x0 = 15.0
312
- @y0 = -15.0
313
- @x1 = 13.2
314
- @y1 = -9.9
315
- @clipped_line = LineClip.line_clip(@x0, @y0, @x1, @y1, @xmin, @ymin, @xmax, @ymax)
316
- end
317
-
318
- it_should_behave_like "no line returned"
319
- end
320
- end
321
-
322
- end # module Cosmos
323
+ end # module Cosmos
324
+ end