cosmos 3.4.2 → 3.5.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/Manifest.txt +69 -11
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +23 -0
- data/autohotkey/tools/TestRunnerAHK5 +17 -0
- data/autohotkey/tools/TestRunnerAHK6 +17 -0
- data/autohotkey/tools/cmd_extractor.ahk +6 -0
- data/autohotkey/tools/data_viewer.ahk +6 -0
- data/autohotkey/tools/limits_monitor.ahk +67 -14
- data/autohotkey/tools/replay.ahk +6 -0
- data/autohotkey/tools/test_runner5.ahk +8 -0
- data/autohotkey/tools/test_runner6.ahk +5 -0
- data/autohotkey/tools/tlm_extractor.ahk +25 -1
- data/autohotkey/tools/tlm_grapher.ahk +6 -0
- data/cosmos.gemspec +19 -19
- data/data/crc.txt +46 -46
- data/data/critical.wav +0 -0
- data/data/information.wav +0 -0
- data/data/input.wav +0 -0
- data/data/message.wav +0 -0
- data/data/question.wav +0 -0
- data/data/warning.wav +0 -0
- data/demo/Gemfile +5 -1
- data/demo/Launcher +5 -4
- data/demo/Launcher.bat +6 -56
- data/demo/config/data/crc.txt +73 -55
- data/demo/config/system/system.txt +1 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +2 -0
- data/demo/procedures/example_test.rb +17 -16
- data/demo/tools/CmdExtractor +6 -5
- data/demo/tools/CmdExtractor.bat +6 -56
- data/demo/tools/CmdSender +6 -5
- data/demo/tools/CmdSender.bat +6 -56
- data/demo/tools/CmdTlmServer +6 -5
- data/demo/tools/CmdTlmServer.bat +6 -56
- data/demo/tools/DataViewer +6 -5
- data/demo/tools/DataViewer.bat +6 -56
- data/demo/tools/ExampleTarget +6 -5
- data/demo/tools/ExampleTarget.bat +6 -56
- data/demo/tools/HandbookCreator +6 -5
- data/demo/tools/HandbookCreator.bat +6 -58
- data/demo/tools/Launcher +6 -5
- data/demo/tools/Launcher.bat +6 -56
- data/demo/tools/LimitsMonitor +6 -5
- data/demo/tools/LimitsMonitor.bat +6 -56
- data/demo/tools/OpenGLBuilder +6 -5
- data/demo/tools/OpenGLBuilder.bat +6 -56
- data/demo/tools/PacketViewer +6 -5
- data/demo/tools/PacketViewer.bat +6 -56
- data/demo/tools/Replay +6 -5
- data/demo/tools/Replay.bat +6 -56
- data/demo/tools/ScpiTarget +6 -5
- data/demo/tools/ScpiTarget.bat +6 -56
- data/demo/tools/ScriptRunner +6 -5
- data/demo/tools/ScriptRunner.bat +6 -56
- data/demo/tools/TableManager +6 -5
- data/demo/tools/TableManager.bat +6 -56
- data/demo/tools/TestRunner +6 -5
- data/demo/tools/TestRunner.bat +6 -56
- data/demo/tools/TlmExtractor +6 -5
- data/demo/tools/TlmExtractor.bat +6 -56
- data/demo/tools/TlmGrapher +6 -5
- data/demo/tools/TlmGrapher.bat +6 -56
- data/demo/tools/TlmViewer +6 -5
- data/demo/tools/TlmViewer.bat +6 -56
- data/demo/tools/ToolLaunch.bat +63 -0
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +6 -5
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +6 -5
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +6 -5
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +6 -5
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +6 -5
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +6 -5
- data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +6 -5
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +6 -5
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +6 -5
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +6 -5
- data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +6 -5
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +6 -5
- data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +6 -5
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +6 -5
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +6 -5
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +6 -5
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/tool_launch.rb +38 -0
- data/install/Gemfile +5 -1
- data/install/Launcher +5 -3
- data/install/Launcher.bat +6 -56
- data/install/config/data/crc.txt +67 -49
- data/install/config/tools/launcher/launcher.txt +1 -0
- data/install/tools/CmdExtractor +6 -5
- data/install/tools/CmdExtractor.bat +6 -56
- data/install/tools/CmdSender +6 -5
- data/install/tools/CmdSender.bat +6 -56
- data/install/tools/CmdTlmServer +6 -5
- data/install/tools/CmdTlmServer.bat +6 -56
- data/install/tools/DataViewer +6 -5
- data/install/tools/DataViewer.bat +6 -56
- data/install/tools/HandbookCreator +6 -5
- data/install/tools/HandbookCreator.bat +6 -58
- data/install/tools/Launcher +6 -5
- data/install/tools/Launcher.bat +6 -56
- data/install/tools/LimitsMonitor +6 -5
- data/install/tools/LimitsMonitor.bat +6 -56
- data/install/tools/OpenGLBuilder +6 -5
- data/install/tools/OpenGLBuilder.bat +6 -56
- data/install/tools/PacketViewer +6 -5
- data/install/tools/PacketViewer.bat +6 -56
- data/install/tools/Replay +6 -5
- data/install/tools/Replay.bat +6 -56
- data/install/tools/ScriptRunner +6 -5
- data/install/tools/ScriptRunner.bat +6 -56
- data/install/tools/TableManager +6 -5
- data/install/tools/TableManager.bat +6 -56
- data/install/tools/TestRunner +6 -5
- data/install/tools/TestRunner.bat +6 -56
- data/install/tools/TlmExtractor +6 -5
- data/install/tools/TlmExtractor.bat +6 -56
- data/install/tools/TlmGrapher +6 -5
- data/install/tools/TlmGrapher.bat +6 -56
- data/install/tools/TlmViewer +6 -5
- data/install/tools/TlmViewer.bat +6 -56
- data/install/tools/ToolLaunch.bat +63 -0
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +6 -5
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +6 -5
- data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +6 -5
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +6 -5
- data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +6 -5
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +6 -5
- data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +6 -5
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +6 -5
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +6 -5
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +6 -5
- data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +6 -5
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +6 -5
- data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +6 -5
- data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +6 -5
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +6 -5
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +6 -5
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/tool_launch.rb +38 -0
- data/lib/cosmos/core_ext/string.rb +3 -2
- data/lib/cosmos/gui/dialogs/about_dialog.rb +3 -7
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +200 -136
- data/lib/cosmos/gui/opengl/gl_viewer.rb +8 -8
- data/lib/cosmos/gui/qt.rb +56 -27
- data/lib/cosmos/gui/qt_tool.rb +3 -1
- data/lib/cosmos/gui/text/ruby_editor.rb +130 -110
- data/lib/cosmos/gui/utilities/script_module_gui.rb +150 -4
- data/lib/cosmos/io/json_drb.rb +1 -1
- data/lib/cosmos/io/win32_serial_driver.rb +2 -4
- data/lib/cosmos/packet_logs/ccsds_log_reader.rb +1 -0
- data/lib/cosmos/packet_logs/packet_log_reader.rb +13 -4
- data/lib/cosmos/packets/limits.rb +6 -3
- data/lib/cosmos/packets/telemetry.rb +34 -3
- data/lib/cosmos/processors/new_packet_log_processor.rb +1 -1
- data/lib/cosmos/script/commands.rb +20 -2
- data/lib/cosmos/script/extract.rb +11 -3
- data/lib/cosmos/script/limits.rb +6 -0
- data/lib/cosmos/script/scripting.rb +17 -9
- data/lib/cosmos/system/system.rb +73 -17
- data/lib/cosmos/system/target.rb +10 -5
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +1 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +95 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +8 -4
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +55 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +5 -12
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +14 -48
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +1 -5
- data/lib/cosmos/tools/launcher/launcher.rb +4 -0
- data/lib/cosmos/tools/launcher/launcher_config.rb +50 -0
- data/lib/cosmos/tools/launcher/launcher_tool.rb +21 -9
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +607 -566
- data/lib/cosmos/tools/replay/replay.rb +51 -45
- data/lib/cosmos/tools/script_runner/script_runner.rb +13 -5
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +8 -109
- data/lib/cosmos/tools/test_runner/test.rb +65 -6
- data/lib/cosmos/tools/test_runner/test_runner.rb +4 -4
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +5 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +3 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +3 -2
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +9 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +1 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +1 -5
- data/lib/cosmos/top_level.rb +86 -3
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/win32_main.rb +7 -1
- data/spec/packet_logs/packet_log_reader_spec.rb +67 -7
- data/spec/packets/limits_spec.rb +19 -1
- data/spec/packets/telemetry_spec.rb +44 -1
- data/spec/script/commands_spec.rb +14 -0
- data/spec/script/scripting_spec.rb +5 -1
- data/spec/script/telemetry_spec.rb +38 -3
- data/spec/system/system_spec.rb +24 -4
- data/spec/tools/cmd_tlm_server/api_spec.rb +30 -0
- data/test/benchmarks/gsub_benchmark.rb +42 -4
- data/test/benchmarks/is_a_benchmark.rb +34 -0
- data/test/performance/config/data/crc.txt +161 -171
- data/test/performance/config/system/system_packets.txt +10 -10
- data/test/performance/config/system/system_threads.txt +30 -30
- data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +7 -2
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -0
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -0
- data/test/performance/config/targets/{EXAMPLE → PACKET}/cmd_tlm_server.txt +2 -2
- data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -0
- data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -0
- data/test/performance/config/targets/PACKET/screens/status.txt +25 -0
- data/test/performance/config/targets/PACKET/target.txt +28 -0
- data/test/performance/config/targets/{EXAMPLE/cmd_tlm/example_cmds.txt → THREAD/cmd_tlm/thread_cmds.txt} +1 -1
- data/test/performance/config/targets/{EXAMPLE/cmd_tlm/example_tlm.txt → THREAD/cmd_tlm/thread_tlm.txt} +1 -1
- data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -0
- data/test/performance/config/targets/{EXAMPLE/lib/example_interface.rb → THREAD/lib/thread_interface.rb} +1 -1
- data/test/performance/config/targets/THREAD/screens/status.txt +25 -0
- data/test/performance/config/targets/{EXAMPLE → THREAD}/target.txt +0 -0
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +24 -30
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +31 -31
- data/test/performance/config/tools/launcher/launcher_packets.txt +16 -11
- data/test/performance/config/tools/launcher/launcher_threads.txt +41 -35
- data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -0
- data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +10 -38
- data/test/performance/lib/packet_target.rb +126 -0
- data/test/performance/lib/{example_target.rb → thread_target.rb} +9 -9
- data/test/performance/tools/CmdTlmServerMemProf +1 -1
- data/test/performance/tools/{ExampleTarget → PacketTarget} +2 -2
- data/test/performance/tools/{ExampleTarget.bat → PacketTarget.bat} +0 -0
- data/test/performance/tools/ThreadTarget +14 -0
- data/test/performance/tools/ThreadTarget.bat +59 -0
- data/test/performance/tools/TlmGrapherMemProf +1 -1
- data/test/performance/tools/TlmViewerMemProf +19 -0
- data/{autohotkey/tools/Replay.bat → test/performance/tools/TlmViewerMemProf.bat} +1 -1
- metadata +107 -55
- data/test/performance/lib/example_background_task.rb +0 -57
- data/test/performance/lib/scpi_target.rb +0 -74
|
@@ -48,7 +48,7 @@ module Cosmos
|
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
# Initialize variables
|
|
51
|
-
@packet_log_reader
|
|
51
|
+
@packet_log_reader = System.default_packet_log_reader.new
|
|
52
52
|
@log_directory = System.paths['LOGS']
|
|
53
53
|
@log_directory << '/' unless @log_directory[-1..-1] == '\\' or @log_directory[-1..-1] == '/'
|
|
54
54
|
@log_filename = nil
|
|
@@ -225,6 +225,7 @@ module Cosmos
|
|
|
225
225
|
progress_dialog.set_overall_progress(0.0)
|
|
226
226
|
progress_dialog.cancel_callback = method(:cancel_callback)
|
|
227
227
|
progress_dialog.enable_cancel_button
|
|
228
|
+
Cosmos.check_log_configuration(@packet_log_reader, selection)
|
|
228
229
|
@packet_offsets = @packet_log_reader.packet_offsets(selection, lambda {|percentage| progress_dialog.set_overall_progress(percentage); @cancel})
|
|
229
230
|
@playback_index = 0
|
|
230
231
|
update_slider_and_current_time(nil)
|
|
@@ -393,55 +394,60 @@ module Cosmos
|
|
|
393
394
|
end
|
|
394
395
|
|
|
395
396
|
def handle_packet(packet)
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
#
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
397
|
+
# For replay we will try our best here but not crash on errors
|
|
398
|
+
begin
|
|
399
|
+
interface = nil
|
|
400
|
+
|
|
401
|
+
# Identify and update packet
|
|
402
|
+
if packet.identified?
|
|
403
|
+
# Preidentifed packet - place it into the current value table
|
|
404
|
+
identified_packet = System.telemetry.update!(packet.target_name,
|
|
405
|
+
packet.packet_name,
|
|
406
|
+
packet.buffer)
|
|
407
|
+
else
|
|
408
|
+
# Packet needs to be identified
|
|
409
|
+
identified_packet = System.telemetry.identify!(packet.buffer)
|
|
410
|
+
end
|
|
408
411
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
412
|
+
if identified_packet and packet.target_name != 'UNKNOWN'
|
|
413
|
+
identified_packet.received_time = packet.received_time
|
|
414
|
+
packet = identified_packet
|
|
415
|
+
target = System.targets[packet.target_name.upcase]
|
|
416
|
+
interface = target.interface if target
|
|
417
|
+
else
|
|
418
|
+
unknown_packet = System.telemetry.update!('UNKNOWN', 'UNKNOWN', packet.buffer)
|
|
419
|
+
unknown_packet.received_time = packet.received_time
|
|
420
|
+
packet = unknown_packet
|
|
421
|
+
data_length = packet.length
|
|
422
|
+
string = "Unknown #{data_length} byte packet starting: "
|
|
423
|
+
num_bytes_to_print = [UNKNOWN_BYTES_TO_PRINT, data_length].min
|
|
424
|
+
data_to_print = packet.buffer(false)[0..(num_bytes_to_print - 1)]
|
|
425
|
+
data_to_print.each_byte do |byte|
|
|
426
|
+
string << sprintf("%02X", byte)
|
|
427
|
+
end
|
|
428
|
+
time_string = ''
|
|
429
|
+
time_string = packet.received_time.formatted << ' ' if packet.received_time
|
|
430
|
+
puts "#{time_string}ERROR: #{string}"
|
|
424
431
|
end
|
|
425
|
-
time_string = ''
|
|
426
|
-
time_string = packet.received_time.formatted << ' ' if packet.received_time
|
|
427
|
-
puts "#{time_string}ERROR: #{string}"
|
|
428
|
-
end
|
|
429
432
|
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
433
|
+
target = System.targets[packet.target_name]
|
|
434
|
+
target.tlm_cnt += 1 if target
|
|
435
|
+
packet.received_count += 1
|
|
436
|
+
packet.check_limits(System.limits_set)
|
|
437
|
+
ReplayServer.instance.post_packet(packet)
|
|
438
|
+
|
|
439
|
+
# Write to routers
|
|
440
|
+
if interface
|
|
441
|
+
interface.routers.each do |router|
|
|
442
|
+
begin
|
|
443
|
+
router.write(packet) if router.write_allowed? and router.connected?
|
|
444
|
+
rescue => err
|
|
445
|
+
Logger.error "Problem writing to router #{router.name} - #{err.class}:#{err.message}"
|
|
446
|
+
end
|
|
443
447
|
end
|
|
444
448
|
end
|
|
449
|
+
rescue Exception => err
|
|
450
|
+
Logger.error "Problem handling packet #{packet.target_name} #{packet.packet_name} - #{err.class}:#{err.message}"
|
|
445
451
|
end
|
|
446
452
|
end
|
|
447
453
|
|
|
@@ -159,31 +159,39 @@ module Cosmos
|
|
|
159
159
|
@search_find_keyseq = Qt::KeySequence.new(tr('Ctrl+F'))
|
|
160
160
|
@search_find.shortcut = @search_find_keyseq
|
|
161
161
|
@search_find.statusTip = tr('Find text')
|
|
162
|
-
@search_find.connect(SIGNAL('triggered()'))
|
|
162
|
+
@search_find.connect(SIGNAL('triggered()')) do
|
|
163
|
+
FindReplaceDialog.show_find(active_script_runner_frame().script)
|
|
164
|
+
end
|
|
163
165
|
|
|
164
166
|
@search_find_next = Qt::Action.new(tr('Find &Next'), self)
|
|
165
167
|
@search_find_next_keyseq = Qt::KeySequence.new(tr('F3'))
|
|
166
168
|
@search_find_next.shortcut = @search_find_next_keyseq
|
|
167
169
|
@search_find_next.statusTip = tr('Find next instance')
|
|
168
|
-
@search_find_next.connect(SIGNAL('triggered()'))
|
|
170
|
+
@search_find_next.connect(SIGNAL('triggered()')) do
|
|
171
|
+
FindReplaceDialog.find_next(active_script_runner_frame().script)
|
|
172
|
+
end
|
|
169
173
|
|
|
170
174
|
@search_find_previous = Qt::Action.new(tr('Find &Previous'), self)
|
|
171
175
|
@search_find_previous_keyseq = Qt::KeySequence.new(tr('Shift+F3'))
|
|
172
176
|
@search_find_previous.shortcut = @search_find_previous_keyseq
|
|
173
177
|
@search_find_previous.statusTip = tr('Find previous instance')
|
|
174
|
-
@search_find_previous.connect(SIGNAL('triggered()'))
|
|
178
|
+
@search_find_previous.connect(SIGNAL('triggered()')) do
|
|
179
|
+
FindReplaceDialog.find_previous(active_script_runner_frame().script)
|
|
180
|
+
end
|
|
175
181
|
|
|
176
182
|
@search_replace = Qt::Action.new(tr('&Replace'), self)
|
|
177
183
|
@search_replace_keyseq = Qt::KeySequence.new(tr('Ctrl+H'))
|
|
178
184
|
@search_replace.shortcut = @search_replace_keyseq
|
|
179
185
|
@search_replace.statusTip = tr('Replace')
|
|
180
|
-
@search_replace.connect(SIGNAL('triggered()'))
|
|
186
|
+
@search_replace.connect(SIGNAL('triggered()')) do
|
|
187
|
+
FindReplaceDialog.show_replace(active_script_runner_frame().script)
|
|
188
|
+
end
|
|
181
189
|
|
|
182
190
|
# Script Actions
|
|
183
191
|
@script_syntax_all = Qt::Action.new(tr('&Ruby Syntax Check'), self)
|
|
184
192
|
@script_syntax_all.statusTip = tr('Check ruby syntax of this script')
|
|
185
193
|
@script_syntax_all.connect(SIGNAL('triggered()')) do
|
|
186
|
-
active_script_runner_frame().ruby_syntax_check_text(
|
|
194
|
+
active_script_runner_frame().ruby_syntax_check_text()
|
|
187
195
|
end
|
|
188
196
|
|
|
189
197
|
@script_mnemonic_all = Qt::Action.new(tr('&Mnemonic Check'), self)
|
|
@@ -37,11 +37,9 @@ module Cosmos
|
|
|
37
37
|
class ScriptRunnerDialog < Qt::Dialog
|
|
38
38
|
attr_reader :script_runner_frame
|
|
39
39
|
|
|
40
|
-
# Constructor
|
|
41
40
|
def initialize(parent,
|
|
42
41
|
title,
|
|
43
42
|
default_tab_text = 'Untitled')
|
|
44
|
-
# Call base class constructor
|
|
45
43
|
super(parent)
|
|
46
44
|
setWindowTitle(title)
|
|
47
45
|
setMinimumWidth(parent.width * 0.8)
|
|
@@ -52,7 +50,7 @@ module Cosmos
|
|
|
52
50
|
layout = Qt::VBoxLayout.new
|
|
53
51
|
layout.addWidget(@script_runner_frame)
|
|
54
52
|
setLayout(layout)
|
|
55
|
-
end
|
|
53
|
+
end
|
|
56
54
|
|
|
57
55
|
# Executes the given text and closes when complete
|
|
58
56
|
def execute_text_and_close_on_complete(text, text_binding = nil)
|
|
@@ -102,6 +100,7 @@ module Cosmos
|
|
|
102
100
|
attr_reader :script_class
|
|
103
101
|
attr_reader :top_level_instrumented_cache
|
|
104
102
|
attr_accessor :stdout_max_lines
|
|
103
|
+
attr_reader :script
|
|
105
104
|
|
|
106
105
|
@@instance = nil
|
|
107
106
|
@@run_thread = nil
|
|
@@ -650,7 +649,7 @@ module Cosmos
|
|
|
650
649
|
# Implement the breakpoint callbacks from the RubyEditor
|
|
651
650
|
######################################
|
|
652
651
|
def breakpoint_set(line)
|
|
653
|
-
ScriptRunnerFrame.
|
|
652
|
+
ScriptRunnerFrame.set_breakpoint(current_tab_filename(), line)
|
|
654
653
|
end
|
|
655
654
|
|
|
656
655
|
def breakpoint_cleared(line)
|
|
@@ -692,107 +691,6 @@ module Cosmos
|
|
|
692
691
|
@script.comment_or_uncomment_lines unless running?()
|
|
693
692
|
end
|
|
694
693
|
|
|
695
|
-
##################################################################
|
|
696
|
-
# Implement Search functionality in the frame (find, replace, etc)
|
|
697
|
-
##################################################################
|
|
698
|
-
def find
|
|
699
|
-
unless @find_dialog
|
|
700
|
-
@find_dialog = FindReplaceDialog.new(@script)
|
|
701
|
-
@find_dialog.connect(SIGNAL('find_next()')) { dialog_find(@find_dialog) }
|
|
702
|
-
end
|
|
703
|
-
@find_dialog.show
|
|
704
|
-
@find_dialog.raise
|
|
705
|
-
@find_dialog.activateWindow
|
|
706
|
-
end
|
|
707
|
-
|
|
708
|
-
def find_next
|
|
709
|
-
flags = FindReplaceDialog.find_flags
|
|
710
|
-
flags &= ~Qt::TextDocument::FindBackward.to_i
|
|
711
|
-
found = @script.find(FindReplaceDialog.find_text, flags)
|
|
712
|
-
if not found and FindReplaceDialog.wrap_around?
|
|
713
|
-
cursor = @script.textCursor
|
|
714
|
-
cursor.movePosition(Qt::TextCursor::Start)
|
|
715
|
-
@script.setTextCursor(cursor)
|
|
716
|
-
@script.find(FindReplaceDialog.find_text, flags)
|
|
717
|
-
end
|
|
718
|
-
end
|
|
719
|
-
|
|
720
|
-
def find_previous
|
|
721
|
-
flags = FindReplaceDialog.find_flags
|
|
722
|
-
flags |= Qt::TextDocument::FindBackward.to_i
|
|
723
|
-
found = @script.find(FindReplaceDialog.find_text, flags)
|
|
724
|
-
if not found and FindReplaceDialog.wrap_around?
|
|
725
|
-
cursor = @script.textCursor
|
|
726
|
-
cursor.movePosition(Qt::TextCursor::End)
|
|
727
|
-
@script.setTextCursor(cursor)
|
|
728
|
-
@script.find(FindReplaceDialog.find_text, flags)
|
|
729
|
-
end
|
|
730
|
-
end
|
|
731
|
-
|
|
732
|
-
def replace
|
|
733
|
-
unless @replace_dialog
|
|
734
|
-
@replace_dialog = FindReplaceDialog.new(@script, true)
|
|
735
|
-
@replace_dialog.connect(SIGNAL('find_next()')) { dialog_find(@replace_dialog) }
|
|
736
|
-
@replace_dialog.connect(SIGNAL('replace()')) { dialog_replace(@replace_dialog) }
|
|
737
|
-
@replace_dialog.connect(SIGNAL('replace_all()')) { dialog_replace_all(@replace_dialog) }
|
|
738
|
-
end
|
|
739
|
-
@replace_dialog.show
|
|
740
|
-
@replace_dialog.raise
|
|
741
|
-
@replace_dialog.activateWindow
|
|
742
|
-
end
|
|
743
|
-
|
|
744
|
-
def dialog_find(dialog)
|
|
745
|
-
found = @script.find(dialog.find_text, dialog.find_flags)
|
|
746
|
-
if not found and dialog.wrap_around?
|
|
747
|
-
cursor = @script.textCursor
|
|
748
|
-
if dialog.find_up?
|
|
749
|
-
cursor.movePosition(Qt::TextCursor::End)
|
|
750
|
-
else
|
|
751
|
-
cursor.movePosition(Qt::TextCursor::Start)
|
|
752
|
-
end
|
|
753
|
-
@script.setTextCursor(cursor)
|
|
754
|
-
@script.find(dialog.find_text, dialog.find_flags)
|
|
755
|
-
end
|
|
756
|
-
end
|
|
757
|
-
|
|
758
|
-
def dialog_replace(dialog)
|
|
759
|
-
if @script.textCursor.hasSelection &&
|
|
760
|
-
@script.textCursor.selectedText == dialog.find_text
|
|
761
|
-
found = true
|
|
762
|
-
else
|
|
763
|
-
found = @script.find(dialog.find_text, dialog.find_flags)
|
|
764
|
-
if not found and dialog.wrap_around?
|
|
765
|
-
cursor = @script.textCursor
|
|
766
|
-
if dialog.find_up?
|
|
767
|
-
cursor.movePosition(Qt::TextCursor::End)
|
|
768
|
-
else
|
|
769
|
-
cursor.movePosition(Qt::TextCursor::Start)
|
|
770
|
-
end
|
|
771
|
-
@script.setTextCursor(cursor)
|
|
772
|
-
found = @script.find(dialog.find_text, dialog.find_flags)
|
|
773
|
-
end
|
|
774
|
-
end
|
|
775
|
-
if found
|
|
776
|
-
@script.textCursor.removeSelectedText
|
|
777
|
-
@script.textCursor.insertText(dialog.replace_text)
|
|
778
|
-
cursor = @script.textCursor
|
|
779
|
-
cursor.setPosition(cursor.position-1)
|
|
780
|
-
cursor.select(Qt::TextCursor::WordUnderCursor)
|
|
781
|
-
@script.setTextCursor(cursor)
|
|
782
|
-
end
|
|
783
|
-
end
|
|
784
|
-
|
|
785
|
-
def dialog_replace_all(dialog)
|
|
786
|
-
cursor = @script.textCursor
|
|
787
|
-
cursor.movePosition(Qt::TextCursor::Start)
|
|
788
|
-
@script.setTextCursor(cursor)
|
|
789
|
-
|
|
790
|
-
while (@script.find(dialog.find_text, dialog.find_flags) == true)
|
|
791
|
-
@script.textCursor.removeSelectedText
|
|
792
|
-
@script.textCursor.insertText(dialog.replace_text)
|
|
793
|
-
end
|
|
794
|
-
end
|
|
795
|
-
|
|
796
694
|
##################################################################################
|
|
797
695
|
# Implement Script functionality in the frame (run selection, run from cursor, etc
|
|
798
696
|
##################################################################################
|
|
@@ -840,10 +738,11 @@ module Cosmos
|
|
|
840
738
|
end
|
|
841
739
|
end
|
|
842
740
|
|
|
843
|
-
def ruby_syntax_check_text(
|
|
741
|
+
def ruby_syntax_check_text(selection = nil)
|
|
844
742
|
unless self.class.running?()
|
|
743
|
+
selection = text() unless selection
|
|
845
744
|
check_process = IO.popen("ruby -c -rubygems 2>&1", 'r+')
|
|
846
|
-
check_process.write("require 'cosmos'; require 'cosmos/script'; " +
|
|
745
|
+
check_process.write("require 'cosmos'; require 'cosmos/script'; " + selection)
|
|
847
746
|
check_process.close_write
|
|
848
747
|
results = check_process.gets
|
|
849
748
|
check_process.close
|
|
@@ -1060,7 +959,7 @@ module Cosmos
|
|
|
1060
959
|
@debug_frame = nil
|
|
1061
960
|
end
|
|
1062
961
|
|
|
1063
|
-
def self.
|
|
962
|
+
def self.set_breakpoint(filename, line_number)
|
|
1064
963
|
filename = File.basename(filename)
|
|
1065
964
|
@@breakpoints[filename] ||= {}
|
|
1066
965
|
@@breakpoints[filename][line_number] = true
|
|
@@ -1645,7 +1544,7 @@ module Cosmos
|
|
|
1645
1544
|
breakpoints = @@breakpoints[File.basename(filename)]
|
|
1646
1545
|
if breakpoints
|
|
1647
1546
|
breakpoints.each do |line_number, present|
|
|
1648
|
-
@active_script.
|
|
1547
|
+
@active_script.add_breakpoint(line_number) if present
|
|
1649
1548
|
end
|
|
1650
1549
|
end
|
|
1651
1550
|
end
|
|
@@ -48,21 +48,30 @@ module Cosmos
|
|
|
48
48
|
class TestResult
|
|
49
49
|
attr_accessor :test
|
|
50
50
|
attr_accessor :test_case
|
|
51
|
+
attr_accessor :test_suite
|
|
51
52
|
attr_accessor :output
|
|
52
53
|
attr_accessor :exceptions
|
|
53
54
|
attr_accessor :stopped
|
|
54
55
|
attr_accessor :result
|
|
55
56
|
attr_accessor :message
|
|
56
57
|
|
|
58
|
+
@@test_suite = nil
|
|
59
|
+
|
|
57
60
|
def initialize
|
|
58
61
|
@test = nil
|
|
59
62
|
@test_case = nil
|
|
63
|
+
@test_suite = nil
|
|
64
|
+
@test_suite = @@test_suite.clone if @@test_suite
|
|
60
65
|
@output = nil
|
|
61
66
|
@exceptions = nil
|
|
62
67
|
@stopped = false
|
|
63
68
|
@result = :SKIP
|
|
64
69
|
@message = nil
|
|
65
70
|
end
|
|
71
|
+
|
|
72
|
+
def self.test_suite= (test_suite)
|
|
73
|
+
@@test_suite = test_suite
|
|
74
|
+
end
|
|
66
75
|
end # class TestResult
|
|
67
76
|
|
|
68
77
|
# TestGroup class
|
|
@@ -104,7 +113,7 @@ module Cosmos
|
|
|
104
113
|
# Name of the test
|
|
105
114
|
def name
|
|
106
115
|
if self.class != Test
|
|
107
|
-
self.class.to_s
|
|
116
|
+
self.class.to_s.split('::')[-1]
|
|
108
117
|
else
|
|
109
118
|
'UnnamedTest'
|
|
110
119
|
end
|
|
@@ -160,7 +169,7 @@ module Cosmos
|
|
|
160
169
|
$stdout.add_stream(@output_io)
|
|
161
170
|
$stderr.add_stream(@output_io)
|
|
162
171
|
|
|
163
|
-
result.test
|
|
172
|
+
result.test = object.class.to_s.split('::')[-1]
|
|
164
173
|
result.test_case = method_name.to_s
|
|
165
174
|
begin
|
|
166
175
|
if defined? ScriptRunnerFrame
|
|
@@ -273,6 +282,38 @@ module Cosmos
|
|
|
273
282
|
@@current_test_result.message << "\n"
|
|
274
283
|
end
|
|
275
284
|
end
|
|
285
|
+
|
|
286
|
+
def self.current_test_suite
|
|
287
|
+
if @@current_test_result
|
|
288
|
+
@@current_test_result.test_suite
|
|
289
|
+
else
|
|
290
|
+
nil
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
def self.current_test_group
|
|
295
|
+
if @@current_test_result
|
|
296
|
+
@@current_test_result.test
|
|
297
|
+
else
|
|
298
|
+
nil
|
|
299
|
+
end
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
def self.current_test
|
|
303
|
+
if @@current_test_result
|
|
304
|
+
@@current_test_result.test
|
|
305
|
+
else
|
|
306
|
+
nil
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def self.current_test_case
|
|
311
|
+
if @@current_test_result
|
|
312
|
+
@@current_test_result.test_case
|
|
313
|
+
else
|
|
314
|
+
nil
|
|
315
|
+
end
|
|
316
|
+
end
|
|
276
317
|
end # class Test
|
|
277
318
|
|
|
278
319
|
class TestSuite
|
|
@@ -291,7 +332,7 @@ module Cosmos
|
|
|
291
332
|
# Name of the test suite
|
|
292
333
|
def name
|
|
293
334
|
if self.class != TestSuite
|
|
294
|
-
self.class.to_s
|
|
335
|
+
self.class.to_s.split('::')[-1]
|
|
295
336
|
else
|
|
296
337
|
'UnassignedTestSuite'
|
|
297
338
|
end
|
|
@@ -327,6 +368,7 @@ module Cosmos
|
|
|
327
368
|
|
|
328
369
|
# Run all the tests
|
|
329
370
|
def run(&block)
|
|
371
|
+
TestResult.test_suite = name()
|
|
330
372
|
TestStatus.instance.total = get_num_tests()
|
|
331
373
|
results = []
|
|
332
374
|
|
|
@@ -370,11 +412,14 @@ module Cosmos
|
|
|
370
412
|
raise StopScript if result.stopped
|
|
371
413
|
end
|
|
372
414
|
|
|
415
|
+
TestResult.test_suite = nil
|
|
373
416
|
results
|
|
374
417
|
end
|
|
375
418
|
|
|
376
419
|
# Run a specific test
|
|
377
420
|
def run_test(test_class, internal = false, &block)
|
|
421
|
+
TestResult.test_suite = name() unless internal
|
|
422
|
+
|
|
378
423
|
# Determine if this test_class is in the plan and the number of tests associated with this test_class
|
|
379
424
|
in_plan = false
|
|
380
425
|
num_tests = 0
|
|
@@ -422,43 +467,57 @@ module Cosmos
|
|
|
422
467
|
end
|
|
423
468
|
end
|
|
424
469
|
|
|
470
|
+
TestResult.test_suite = nil unless internal
|
|
425
471
|
return results
|
|
426
472
|
end
|
|
427
473
|
|
|
428
474
|
# Run a specific test case
|
|
429
475
|
def run_test_case(test_class, test_case, internal = false)
|
|
476
|
+
TestResult.test_suite = name() unless internal
|
|
430
477
|
TestStatus.instance.total = 1 unless internal
|
|
431
|
-
@tests[test_class].run_test_case(test_case)
|
|
478
|
+
result = @tests[test_class].run_test_case(test_case)
|
|
479
|
+
TestResult.test_suite = nil unless internal
|
|
480
|
+
result
|
|
432
481
|
end
|
|
433
482
|
|
|
434
483
|
def run_setup(internal = false)
|
|
484
|
+
TestResult.test_suite = name() unless internal
|
|
435
485
|
result = nil
|
|
436
486
|
if self.class.method_defined?(:setup) and @tests.length > 0
|
|
437
487
|
TestStatus.instance.total = 1 unless internal
|
|
438
488
|
TestStatus.instance.status = "#{self.class} : setup"
|
|
439
489
|
result = @tests[@tests.keys[0]].run_function(self, :setup)
|
|
440
490
|
end
|
|
491
|
+
TestResult.test_suite = nil unless internal
|
|
441
492
|
result
|
|
442
493
|
end
|
|
443
494
|
|
|
444
495
|
def run_teardown(internal = false)
|
|
496
|
+
TestResult.test_suite = name() unless internal
|
|
445
497
|
result = nil
|
|
446
498
|
if self.class.method_defined?(:teardown) and @tests.length > 0
|
|
447
499
|
TestStatus.instance.total = 1 unless internal
|
|
448
500
|
TestStatus.instance.status = "#{self.class} : teardown"
|
|
449
501
|
result = @tests[@tests.keys[0]].run_function(self, :teardown)
|
|
450
502
|
end
|
|
503
|
+
TestResult.test_suite = nil unless internal
|
|
451
504
|
result
|
|
452
505
|
end
|
|
453
506
|
|
|
454
507
|
def run_test_setup(test_class, internal = false)
|
|
508
|
+
TestResult.test_suite = name() unless internal
|
|
455
509
|
TestStatus.instance.total = 1 unless internal
|
|
456
|
-
@tests[test_class].run_setup
|
|
510
|
+
result = @tests[test_class].run_setup
|
|
511
|
+
TestResult.test_suite = nil unless internal
|
|
512
|
+
result
|
|
457
513
|
end
|
|
458
514
|
|
|
459
515
|
def run_test_teardown(test_class, internal = false)
|
|
516
|
+
TestResult.test_suite = name() unless internal
|
|
460
517
|
TestStatus.instance.total = 1 unless internal
|
|
461
|
-
@tests[test_class].run_teardown
|
|
518
|
+
result = @tests[test_class].run_teardown
|
|
519
|
+
TestResult.test_suite = nil unless internal
|
|
520
|
+
result
|
|
462
521
|
end
|
|
463
522
|
|
|
464
523
|
def get_num_tests
|