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.
- checksums.yaml +4 -4
- data/.rubocop.yml +23 -0
- data/.travis.yml +1 -0
- data/.yardopts +3 -0
- data/Gemfile +1 -1
- data/Manifest.txt +137 -52
- data/Rakefile +50 -44
- data/autohotkey/config/system/system.txt +0 -5
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +6 -1
- data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
- data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
- data/autohotkey/config/targets/META/screens/data.txt +12 -0
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
- data/autohotkey/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
- data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
- data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
- data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
- data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
- data/autohotkey/tools/CmdSequence +14 -0
- data/autohotkey/tools/CmdSequenceAHK +23 -0
- data/autohotkey/tools/CmdSequenceAHK2 +16 -0
- data/autohotkey/tools/cmd_extractor.ahk +2 -2
- data/autohotkey/tools/cmd_sender.ahk +4 -6
- data/autohotkey/tools/cmd_sequence.ahk +215 -0
- data/autohotkey/tools/cmd_sequence2.ahk +23 -0
- data/autohotkey/tools/data_viewer.ahk +2 -3
- data/autohotkey/tools/limits_monitor.ahk +9 -11
- data/autohotkey/tools/open_gl_builder.ahk +1 -2
- data/autohotkey/tools/packet_viewer.ahk +51 -35
- data/autohotkey/tools/replay.ahk +1 -2
- data/autohotkey/tools/script_runner.ahk +1 -2
- data/autohotkey/tools/script_runner2.ahk +1 -2
- data/autohotkey/tools/test_runner2.ahk +1 -5
- data/autohotkey/tools/test_runner3.ahk +1 -3
- data/autohotkey/tools/tlm_grapher.ahk +1 -3
- data/autohotkey/tools/tlm_grapher3.ahk +1 -2
- data/autohotkey/tools/tlm_viewer.ahk +8 -3
- data/autohotkey/tools/tlm_viewer2.ahk +2 -3
- data/autohotkey/tools/tlm_viewer5.ahk +1 -2
- data/cosmos.gemspec +26 -20
- data/data/cmd_sequence.png +0 -0
- data/data/config/_array_params.yaml +23 -0
- data/data/config/_id_items.yaml +24 -0
- data/data/config/_id_params.yaml +58 -0
- data/data/config/_interfaces.yaml +206 -0
- data/data/config/_items.yaml +20 -0
- data/data/config/_params.yaml +58 -0
- data/data/config/cmd_tlm_server.yaml +110 -0
- data/data/config/command.yaml +38 -0
- data/data/config/command_modifiers.yaml +127 -0
- data/data/config/command_telemetry.yaml +3 -0
- data/data/config/data_viewer.yaml +43 -0
- data/data/config/handbook_creator.yaml +23 -0
- data/data/config/housekeeping_params.yaml +71 -0
- data/data/config/interface_modifiers.yaml +44 -0
- data/data/config/item_modifiers.yaml +172 -0
- data/data/config/launcher.yaml +117 -0
- data/data/config/limits_monitor.yaml +53 -0
- data/data/config/linegraph_params.yaml +30 -0
- data/data/config/linegraph_plot.yaml +106 -0
- data/data/config/page_modifiers.yaml +128 -0
- data/data/config/param_item_modifiers.yaml +41 -0
- data/data/config/parameter_modifiers.yaml +144 -0
- data/data/config/protocols.yaml +257 -0
- data/data/config/screen.yaml +151 -0
- data/data/config/script_runner.yaml +15 -0
- data/data/config/system.yaml +153 -0
- data/data/config/table_manager.yaml +76 -0
- data/data/config/table_parameter_modifiers.yaml +9 -0
- data/data/config/target.yaml +71 -0
- data/data/config/telemetry.yaml +73 -0
- data/data/config/telemetry_modifiers.yaml +129 -0
- data/data/config/test_runner.yaml +118 -0
- data/data/config/tlm_extractor.yaml +109 -0
- data/data/config/tlm_grapher.yaml +78 -0
- data/data/config/tlm_viewer.yaml +107 -0
- data/data/config/unknown.yaml +3 -0
- data/data/config/widgets.yaml +1339 -0
- data/data/config/xy_params.yaml +50 -0
- data/data/config/xy_plot.yaml +12 -0
- data/data/config_editor.png +0 -0
- data/data/crc.txt +172 -161
- data/data/delete.png +0 -0
- data/demo/config/data/crc.txt +56 -36
- data/demo/config/data/meta_init.txt +1 -4
- data/demo/config/system/system.txt +15 -3
- data/demo/config/system/system2.txt +13 -3
- data/demo/config/targets/EXAMPLE/lib/example_interface.rb +2 -6
- data/demo/config/targets/EXAMPLE/target.txt +3 -1
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -0
- data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
- data/demo/config/targets/INST/screens/adcs.txt +39 -15
- data/demo/config/targets/INST/screens/commanding.txt +26 -19
- data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
- data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
- data/demo/config/targets/INST/screens/tabs.txt +0 -2
- data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
- data/demo/config/targets/INST/tables/EventAction.csv +9 -0
- data/demo/config/targets/INST/tables/EventAction.dat +0 -0
- data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
- data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
- data/demo/config/targets/INST/target.txt +4 -0
- data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
- data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
- data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
- data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
- data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -3
- data/demo/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
- data/demo/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
- data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
- data/demo/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
- data/demo/config/targets/SYSTEM/lib/limits_groups.rb +39 -0
- data/demo/config/targets/SYSTEM/screens/status.txt +1 -1
- data/demo/config/targets/SYSTEM/target.txt +12 -0
- data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +1 -1
- data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +8 -5
- data/demo/config/targets/TEMPLATED/target.txt +2 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +15 -6
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +13 -5
- data/demo/config/tools/data_viewer/data_viewer.txt +9 -0
- data/demo/config/tools/launcher/launcher.txt +9 -6
- data/demo/config/tools/launcher/launcher2.txt +16 -13
- data/demo/config/tools/launcher/launcher_mini.txt +45 -0
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +12 -11
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +12 -11
- data/demo/config/tools/test_runner/test_runner.txt +1 -1
- data/demo/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
- data/demo/lib/example_background_task.rb +9 -5
- data/demo/lib/example_target.rb +5 -15
- data/demo/lib/scpi_target.rb +4 -10
- data/demo/procedures/cosmos_api_test.rb +17 -0
- data/demo/tools/CmdSequence +16 -0
- data/demo/tools/CmdSequence.bat +9 -0
- data/demo/tools/ConfigEditor +16 -0
- data/demo/tools/ConfigEditor.bat +9 -0
- data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
- data/ext/cosmos/ext/packet/packet.c +5 -5
- data/install/config/data/crc.txt +12 -8
- data/install/config/system/system.txt +13 -3
- data/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +14 -0
- data/install/config/targets/SYSTEM/target.txt +12 -0
- data/install/tools/CmdSequence +16 -0
- data/install/tools/CmdSequence.bat +9 -0
- data/install/tools/ConfigEditor +16 -0
- data/install/tools/ConfigEditor.bat +9 -0
- data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
- data/lib/cosmos.rb +1 -1
- data/lib/cosmos/config/config_parser.rb +147 -59
- data/lib/cosmos/config/meta_config_parser.rb +57 -0
- data/lib/cosmos/conversions/polynomial_conversion.rb +20 -4
- data/lib/cosmos/conversions/unix_time_conversion.rb +4 -4
- data/lib/cosmos/core_ext/array.rb +45 -5
- data/lib/cosmos/core_ext/cosmos_io.rb +31 -15
- data/lib/cosmos/core_ext/file.rb +2 -2
- data/lib/cosmos/core_ext/kernel.rb +1 -6
- data/lib/cosmos/core_ext/objectspace.rb +0 -2
- data/lib/cosmos/core_ext/string.rb +27 -4
- data/lib/cosmos/core_ext/time.rb +39 -10
- data/lib/cosmos/gui/choosers/combobox_chooser.rb +37 -26
- data/lib/cosmos/gui/choosers/file_chooser.rb +23 -6
- data/lib/cosmos/gui/choosers/float_chooser.rb +13 -11
- data/lib/cosmos/gui/choosers/integer_chooser.rb +13 -11
- data/lib/cosmos/gui/choosers/string_chooser.rb +18 -36
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +64 -64
- data/lib/cosmos/gui/choosers/value_chooser.rb +15 -15
- data/lib/cosmos/gui/dialogs/about_dialog.rb +18 -13
- data/lib/cosmos/gui/dialogs/calendar_dialog.rb +11 -3
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/details_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +7 -7
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +20 -15
- data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +6 -5
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +5 -2
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +4 -4
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +3 -0
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +7 -6
- data/lib/cosmos/gui/dialogs/splash.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +114 -0
- data/lib/cosmos/gui/line_graph/line_graph.rb +9 -10
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +7 -5
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +3 -7
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +3 -8
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +2 -7
- data/lib/cosmos/gui/line_graph/overview_graph.rb +6 -1
- data/lib/cosmos/gui/opengl/earth_model.rb +6 -3
- data/lib/cosmos/gui/opengl/gl_bounds.rb +11 -23
- data/lib/cosmos/gui/opengl/gl_light.rb +3 -4
- data/lib/cosmos/gui/opengl/gl_material.rb +3 -4
- data/lib/cosmos/gui/opengl/gl_scene.rb +10 -4
- data/lib/cosmos/gui/opengl/gl_shape.rb +6 -2
- data/lib/cosmos/gui/opengl/gl_viewer.rb +5 -5
- data/lib/cosmos/gui/opengl/gl_viewport.rb +11 -12
- data/lib/cosmos/gui/opengl/moon_model.rb +6 -3
- data/lib/cosmos/gui/opengl/stl_reader.rb +8 -9
- data/lib/cosmos/gui/opengl/stl_shape.rb +4 -5
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +7 -7
- data/lib/cosmos/gui/qt.rb +1 -1
- data/lib/cosmos/gui/qt_tool.rb +21 -10
- data/lib/cosmos/gui/text/completion.rb +23 -2
- data/lib/cosmos/gui/text/completion_text_edit.rb +38 -23
- data/lib/cosmos/gui/utilities/analyze_log.rb +1 -1
- data/lib/cosmos/gui/utilities/screenshot.rb +2 -2
- data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +11 -1
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +19 -6
- data/lib/cosmos/interfaces.rb +10 -0
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +28 -47
- data/lib/cosmos/interfaces/interface.rb +240 -22
- data/lib/cosmos/interfaces/linc_interface.rb +3 -5
- data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
- data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
- data/lib/cosmos/{streams/fixed_stream_protocol.rb → interfaces/protocols/fixed_protocol.rb} +40 -37
- data/lib/cosmos/{streams/length_stream_protocol.rb → interfaces/protocols/length_protocol.rb} +55 -48
- data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
- data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
- data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +209 -0
- data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
- data/lib/cosmos/interfaces/serial_interface.rb +28 -23
- data/lib/cosmos/interfaces/simulated_target_interface.rb +27 -16
- data/lib/cosmos/interfaces/stream_interface.rb +36 -108
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +21 -21
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +555 -94
- data/lib/cosmos/interfaces/udp_interface.rb +51 -83
- data/lib/cosmos/io/buffered_file.rb +92 -2
- data/lib/cosmos/io/json_drb.rb +2 -2
- data/lib/cosmos/io/posix_serial_driver.rb +3 -1
- data/lib/cosmos/io/raw_logger.rb +3 -3
- data/lib/cosmos/io/serial_driver.rb +14 -5
- data/lib/cosmos/io/win32_serial_driver.rb +16 -4
- data/lib/cosmos/packet_logs.rb +0 -1
- data/lib/cosmos/packet_logs/packet_log_reader.rb +11 -1
- data/lib/cosmos/packet_logs/packet_log_writer.rb +31 -13
- data/lib/cosmos/packets/binary_accessor.rb +599 -32
- data/lib/cosmos/packets/commands.rb +48 -24
- data/lib/cosmos/packets/packet.rb +140 -54
- data/lib/cosmos/packets/packet_config.rb +0 -2
- data/lib/cosmos/packets/parsers/packet_item_parser.rb +10 -2
- data/lib/cosmos/packets/structure.rb +81 -33
- data/lib/cosmos/packets/structure_item.rb +45 -5
- data/lib/cosmos/packets/telemetry.rb +149 -55
- data/lib/cosmos/script/api_shared.rb +1000 -0
- data/lib/cosmos/script/commands.rb +2 -2
- data/lib/cosmos/script/extract.rb +19 -4
- data/lib/cosmos/script/limits.rb +2 -0
- data/lib/cosmos/script/script.rb +1 -1
- data/lib/cosmos/script/scripting.rb +4 -784
- data/lib/cosmos/script/telemetry.rb +44 -23
- data/lib/cosmos/script/tools.rb +15 -69
- data/lib/cosmos/streams/serial_stream.rb +12 -19
- data/lib/cosmos/streams/stream.rb +2 -11
- data/lib/cosmos/streams/tcpip_socket_stream.rb +3 -13
- data/lib/cosmos/system/system.rb +187 -31
- data/lib/cosmos/system/target.rb +11 -2
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +12 -11
- data/lib/cosmos/tools/cmd_sender/{cmd_sender_item_delegate.rb → cmd_param_table_item_delegate.rb} +11 -10
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +209 -164
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
- data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +179 -5
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +31 -14
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +23 -16
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +92 -20
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +1 -1
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +17 -4
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +0 -5
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +1 -2
- data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +4 -4
- data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +121 -0
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +8 -4
- data/lib/cosmos/tools/config_editor/config_editor.rb +720 -0
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +675 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +44 -27
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +8 -22
- data/lib/cosmos/tools/launcher/launcher.rb +29 -12
- data/lib/cosmos/tools/launcher/launcher_config.rb +1 -1
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +153 -42
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +44 -6
- data/lib/cosmos/tools/replay/replay.rb +36 -20
- data/lib/cosmos/tools/replay/replay_server.rb +1 -1
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +1 -1
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +31 -21
- data/lib/cosmos/tools/table_manager/table_config.rb +9 -3
- data/lib/cosmos/tools/table_manager/table_manager.rb +27 -7
- data/lib/cosmos/tools/test_runner/results_writer.rb +6 -6
- data/lib/cosmos/tools/test_runner/test_runner.rb +4 -6
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +4 -5
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +1 -1
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +1 -1
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +23 -6
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +44 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +20 -7
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1 -1
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +11 -4
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +2 -2
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +1 -1
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +16 -0
- data/lib/cosmos/tools/tlm_viewer/screen.rb +36 -32
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +59 -50
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +2 -2
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +22 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +9 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +3 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +3 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +12 -12
- data/lib/cosmos/top_level.rb +34 -24
- data/lib/cosmos/utilities/crc.rb +108 -6
- data/lib/cosmos/utilities/csv.rb +68 -14
- data/lib/cosmos/utilities/logger.rb +2 -2
- data/lib/cosmos/utilities/low_fragmentation_array.rb +9 -1
- data/lib/cosmos/version.rb +6 -6
- data/lib/cosmos/win32/win32_main.rb +50 -46
- data/run_gui_tests.bat +3 -1
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +2 -2
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +2 -2
- data/spec/core_ext/file_spec.rb +1 -1
- data/spec/core_ext/objectspace_spec.rb +12 -9
- data/spec/core_ext/string_spec.rb +6 -0
- data/spec/core_ext/time_spec.rb +10 -0
- data/spec/gui/line_graph/line_clip_spec.rb +226 -224
- data/spec/gui/qt_spec.rb +81 -79
- data/spec/install/config/system/system.txt +0 -6
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +5 -5
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +8 -8
- data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
- data/{install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt → spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
- data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
- data/spec/install/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
- data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
- data/spec/install/config/targets/SYSTEM/target.txt +12 -0
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +9 -13
- data/spec/interfaces/interface_spec.rb +402 -18
- data/spec/interfaces/linc_interface_spec.rb +37 -39
- data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
- data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
- data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
- data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
- data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
- data/spec/interfaces/protocols/template_protocol_spec.rb +218 -0
- data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
- data/spec/interfaces/serial_interface_spec.rb +35 -34
- data/spec/interfaces/simulated_target_interface_spec.rb +13 -13
- data/spec/interfaces/tcpip_client_interface_spec.rb +21 -16
- data/spec/interfaces/tcpip_server_interface_spec.rb +66 -69
- data/spec/interfaces/udp_interface_spec.rb +120 -55
- data/spec/io/serial_driver_spec.rb +41 -39
- data/spec/io/udp_sockets_spec.rb +13 -8
- data/spec/io/win32_serial_driver_spec.rb +62 -59
- data/spec/packet_logs/packet_log_reader_spec.rb +68 -47
- data/spec/packet_logs/packet_log_writer_spec.rb +7 -5
- data/spec/packets/commands_spec.rb +5 -5
- data/spec/packets/packet_spec.rb +2 -14
- data/spec/script/extract_spec.rb +21 -7
- data/spec/script/scripting_spec.rb +261 -6
- data/spec/script/telemetry_spec.rb +17 -9
- data/spec/spec_helper.rb +26 -10
- data/spec/streams/serial_stream_spec.rb +87 -82
- data/spec/streams/tcpip_client_stream_spec.rb +12 -4
- data/spec/streams/tcpip_socket_stream_spec.rb +5 -0
- data/spec/system/system_spec.rb +66 -50
- data/spec/system/target_spec.rb +33 -11
- data/spec/tools/cmd_tlm_server/api_spec.rb +5 -5
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +75 -15
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +125 -5
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +244 -232
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +18 -18
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +124 -29
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +2 -2
- data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +50 -10
- data/spec/tools/table_manager/tablemanager_core_spec.rb +0 -1
- data/spec/top_level/top_level_spec.rb +39 -11
- data/spec/utilities/csv_spec.rb +62 -20
- data/tasks/gemfile_stats.rake +6 -3
- data/test/performance/config/system/system_packets.txt +0 -1
- data/test/performance/config/system/system_threads.txt +0 -1
- metadata +177 -92
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
- data/autohotkey/config/targets/COSMOS/target.txt +0 -5
- data/autohotkey/userpath.txt +0 -1
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/demo/config/targets/COSMOS/screens/limits_change.txt +0 -20
- data/demo/config/targets/COSMOS/screens/version.txt +0 -19
- data/demo/config/targets/COSMOS/target.txt +0 -11
- data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +0 -10
- data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +0 -13
- data/demo/userpath.txt +0 -1
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/install/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
- data/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
- data/install/config/targets/COSMOS/screens/version.txt +0 -19
- data/install/config/targets/COSMOS/target.txt +0 -9
- data/install/config/targets/SYSTEM/README.txt +0 -1
- data/install/userpath.txt +0 -1
- data/lib/cosmos/io/tcpip_server.rb +0 -571
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +0 -107
- data/lib/cosmos/streams/burst_stream_protocol.rb +0 -25
- data/lib/cosmos/streams/preidentified_stream_protocol.rb +0 -118
- data/lib/cosmos/streams/stream_protocol.rb +0 -373
- data/lib/cosmos/streams/template_stream_protocol.rb +0 -140
- data/lib/cosmos/streams/terminated_stream_protocol.rb +0 -85
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +0 -41
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/spec/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
- data/spec/install/config/targets/COSMOS/screens/version.txt +0 -19
- data/spec/install/config/targets/COSMOS/target.txt +0 -5
- data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +0 -4
- data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +0 -4
- data/spec/install/userpath.txt +0 -1
- data/spec/interfaces/stream_interface_spec.rb +0 -157
- data/spec/io/tcpip_server_spec.rb +0 -338
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +0 -170
- data/spec/streams/burst_stream_protocol_spec.rb +0 -32
- data/spec/streams/fixed_stream_protocol_spec.rb +0 -113
- data/spec/streams/length_stream_protocol_spec.rb +0 -300
- data/spec/streams/preidentified_stream_protocol_spec.rb +0 -121
- data/spec/streams/stream_protocol_spec.rb +0 -346
- data/spec/streams/template_stream_protocol_spec.rb +0 -156
- data/spec/streams/terminated_stream_protocol_spec.rb +0 -127
- 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
|
-
|
|
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
|
data/lib/cosmos/version.rb
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# encoding: ascii-8bit
|
|
2
2
|
|
|
3
|
-
COSMOS_VERSION = '
|
|
3
|
+
COSMOS_VERSION = '4.0.0'
|
|
4
4
|
module Cosmos
|
|
5
5
|
module Version
|
|
6
|
-
MAJOR = '
|
|
7
|
-
MINOR = '
|
|
8
|
-
PATCH = '
|
|
9
|
-
BUILD = '
|
|
6
|
+
MAJOR = '4'
|
|
7
|
+
MINOR = '0'
|
|
8
|
+
PATCH = '0'
|
|
9
|
+
BUILD = '5fd7539d1e07cb9a71388e9cd0ec60b97a0f625a'
|
|
10
10
|
end
|
|
11
|
-
VERSION = '
|
|
11
|
+
VERSION = '4.0.0'
|
|
12
12
|
end
|
|
@@ -10,55 +10,59 @@
|
|
|
10
10
|
|
|
11
11
|
module Cosmos
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
30
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
#
|
|
55
|
-
|
|
56
|
-
return_value ||= 0
|
|
57
|
-
return_value
|
|
61
|
+
# Make an equivalent capital C call method
|
|
62
|
+
alias Call call
|
|
58
63
|
end
|
|
59
|
-
|
|
60
|
-
|
|
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
|
|
data/run_gui_tests.bat
CHANGED
|
@@ -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
|
data/spec/core_ext/file_spec.rb
CHANGED
|
@@ -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 "
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
data/spec/core_ext/time_spec.rb
CHANGED
|
@@ -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
|
-
|
|
12
|
-
require '
|
|
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
|
-
|
|
17
|
+
describe LineClip do
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
it "indicates the first point was not clipped" do
|
|
43
|
+
expect(@clipped_line[4]).to be false
|
|
44
|
+
end
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
it "indicates the first point was clipped" do
|
|
63
|
+
expect(@clipped_line[4]).to be true
|
|
64
|
+
end
|
|
64
65
|
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
it "indicates the first point was not clipped" do
|
|
83
|
+
expect(@clipped_line[4]).to be false
|
|
84
|
+
end
|
|
84
85
|
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
@
|
|
100
|
-
@
|
|
92
|
+
@xmin = -10.0
|
|
93
|
+
@xmax = 10.0
|
|
94
|
+
@ymin = -10.0
|
|
95
|
+
@ymax = 10.0
|
|
101
96
|
end
|
|
102
97
|
|
|
103
|
-
describe "
|
|
98
|
+
describe "given a first point on the graph" do
|
|
104
99
|
before(:all) do
|
|
105
|
-
@
|
|
106
|
-
@
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
-
|
|
115
|
-
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
|
|
126
|
-
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
|
|
137
|
-
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
148
|
-
|
|
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
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
|
|
159
|
-
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
170
|
-
|
|
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
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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
|
-
|
|
181
|
-
|
|
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
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
-
|
|
192
|
-
|
|
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
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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 "
|
|
204
|
+
describe "given a second point on the graph" do
|
|
210
205
|
before(:all) do
|
|
211
|
-
@
|
|
212
|
-
@
|
|
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
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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
|
-
|
|
221
|
-
|
|
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
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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
|
-
|
|
232
|
-
|
|
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
|
-
|
|
239
|
-
|
|
240
|
-
|
|
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
|
-
|
|
243
|
-
|
|
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
|
-
|
|
250
|
-
|
|
251
|
-
|
|
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
|
-
|
|
254
|
-
|
|
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
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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
|
-
|
|
265
|
-
|
|
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
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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
|
-
|
|
276
|
-
|
|
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
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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
|
-
|
|
294
|
-
|
|
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 "
|
|
310
|
+
describe "given a both points off the graph" do
|
|
298
311
|
before(:all) do
|
|
299
|
-
@x0 =
|
|
300
|
-
@y0 =
|
|
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
|
-
|
|
310
|
-
|
|
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
|