cosmos 3.4.2 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (261) hide show
  1. checksums.yaml +4 -4
  2. data/Manifest.txt +69 -11
  3. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +23 -0
  4. data/autohotkey/tools/TestRunnerAHK5 +17 -0
  5. data/autohotkey/tools/TestRunnerAHK6 +17 -0
  6. data/autohotkey/tools/cmd_extractor.ahk +6 -0
  7. data/autohotkey/tools/data_viewer.ahk +6 -0
  8. data/autohotkey/tools/limits_monitor.ahk +67 -14
  9. data/autohotkey/tools/replay.ahk +6 -0
  10. data/autohotkey/tools/test_runner5.ahk +8 -0
  11. data/autohotkey/tools/test_runner6.ahk +5 -0
  12. data/autohotkey/tools/tlm_extractor.ahk +25 -1
  13. data/autohotkey/tools/tlm_grapher.ahk +6 -0
  14. data/cosmos.gemspec +19 -19
  15. data/data/crc.txt +46 -46
  16. data/data/critical.wav +0 -0
  17. data/data/information.wav +0 -0
  18. data/data/input.wav +0 -0
  19. data/data/message.wav +0 -0
  20. data/data/question.wav +0 -0
  21. data/data/warning.wav +0 -0
  22. data/demo/Gemfile +5 -1
  23. data/demo/Launcher +5 -4
  24. data/demo/Launcher.bat +6 -56
  25. data/demo/config/data/crc.txt +73 -55
  26. data/demo/config/system/system.txt +1 -0
  27. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +2 -0
  28. data/demo/procedures/example_test.rb +17 -16
  29. data/demo/tools/CmdExtractor +6 -5
  30. data/demo/tools/CmdExtractor.bat +6 -56
  31. data/demo/tools/CmdSender +6 -5
  32. data/demo/tools/CmdSender.bat +6 -56
  33. data/demo/tools/CmdTlmServer +6 -5
  34. data/demo/tools/CmdTlmServer.bat +6 -56
  35. data/demo/tools/DataViewer +6 -5
  36. data/demo/tools/DataViewer.bat +6 -56
  37. data/demo/tools/ExampleTarget +6 -5
  38. data/demo/tools/ExampleTarget.bat +6 -56
  39. data/demo/tools/HandbookCreator +6 -5
  40. data/demo/tools/HandbookCreator.bat +6 -58
  41. data/demo/tools/Launcher +6 -5
  42. data/demo/tools/Launcher.bat +6 -56
  43. data/demo/tools/LimitsMonitor +6 -5
  44. data/demo/tools/LimitsMonitor.bat +6 -56
  45. data/demo/tools/OpenGLBuilder +6 -5
  46. data/demo/tools/OpenGLBuilder.bat +6 -56
  47. data/demo/tools/PacketViewer +6 -5
  48. data/demo/tools/PacketViewer.bat +6 -56
  49. data/demo/tools/Replay +6 -5
  50. data/demo/tools/Replay.bat +6 -56
  51. data/demo/tools/ScpiTarget +6 -5
  52. data/demo/tools/ScpiTarget.bat +6 -56
  53. data/demo/tools/ScriptRunner +6 -5
  54. data/demo/tools/ScriptRunner.bat +6 -56
  55. data/demo/tools/TableManager +6 -5
  56. data/demo/tools/TableManager.bat +6 -56
  57. data/demo/tools/TestRunner +6 -5
  58. data/demo/tools/TestRunner.bat +6 -56
  59. data/demo/tools/TlmExtractor +6 -5
  60. data/demo/tools/TlmExtractor.bat +6 -56
  61. data/demo/tools/TlmGrapher +6 -5
  62. data/demo/tools/TlmGrapher.bat +6 -56
  63. data/demo/tools/TlmViewer +6 -5
  64. data/demo/tools/TlmViewer.bat +6 -56
  65. data/demo/tools/ToolLaunch.bat +63 -0
  66. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +6 -5
  67. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  68. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +6 -5
  69. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  70. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +6 -5
  71. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  72. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +6 -5
  73. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  74. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +6 -5
  75. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  76. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +6 -5
  77. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  78. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +6 -5
  79. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  80. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +6 -5
  81. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  82. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +6 -5
  83. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  84. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +6 -5
  85. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  86. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +6 -5
  87. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  88. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +6 -5
  89. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  90. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +6 -5
  91. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  92. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +6 -5
  93. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  94. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +6 -5
  95. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  96. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +6 -5
  97. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  98. data/demo/tools/tool_launch.rb +38 -0
  99. data/install/Gemfile +5 -1
  100. data/install/Launcher +5 -3
  101. data/install/Launcher.bat +6 -56
  102. data/install/config/data/crc.txt +67 -49
  103. data/install/config/tools/launcher/launcher.txt +1 -0
  104. data/install/tools/CmdExtractor +6 -5
  105. data/install/tools/CmdExtractor.bat +6 -56
  106. data/install/tools/CmdSender +6 -5
  107. data/install/tools/CmdSender.bat +6 -56
  108. data/install/tools/CmdTlmServer +6 -5
  109. data/install/tools/CmdTlmServer.bat +6 -56
  110. data/install/tools/DataViewer +6 -5
  111. data/install/tools/DataViewer.bat +6 -56
  112. data/install/tools/HandbookCreator +6 -5
  113. data/install/tools/HandbookCreator.bat +6 -58
  114. data/install/tools/Launcher +6 -5
  115. data/install/tools/Launcher.bat +6 -56
  116. data/install/tools/LimitsMonitor +6 -5
  117. data/install/tools/LimitsMonitor.bat +6 -56
  118. data/install/tools/OpenGLBuilder +6 -5
  119. data/install/tools/OpenGLBuilder.bat +6 -56
  120. data/install/tools/PacketViewer +6 -5
  121. data/install/tools/PacketViewer.bat +6 -56
  122. data/install/tools/Replay +6 -5
  123. data/install/tools/Replay.bat +6 -56
  124. data/install/tools/ScriptRunner +6 -5
  125. data/install/tools/ScriptRunner.bat +6 -56
  126. data/install/tools/TableManager +6 -5
  127. data/install/tools/TableManager.bat +6 -56
  128. data/install/tools/TestRunner +6 -5
  129. data/install/tools/TestRunner.bat +6 -56
  130. data/install/tools/TlmExtractor +6 -5
  131. data/install/tools/TlmExtractor.bat +6 -56
  132. data/install/tools/TlmGrapher +6 -5
  133. data/install/tools/TlmGrapher.bat +6 -56
  134. data/install/tools/TlmViewer +6 -5
  135. data/install/tools/TlmViewer.bat +6 -56
  136. data/install/tools/ToolLaunch.bat +63 -0
  137. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +6 -5
  138. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  139. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +6 -5
  140. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  141. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +6 -5
  142. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  143. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +6 -5
  144. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  145. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +6 -5
  146. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  147. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +6 -5
  148. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  149. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +6 -5
  150. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  151. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +6 -5
  152. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  153. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +6 -5
  154. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  155. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +6 -5
  156. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  157. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +6 -5
  158. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  159. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +6 -5
  160. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  161. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +6 -5
  162. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  163. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +6 -5
  164. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  165. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +6 -5
  166. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  167. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +6 -5
  168. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  169. data/install/tools/tool_launch.rb +38 -0
  170. data/lib/cosmos/core_ext/string.rb +3 -2
  171. data/lib/cosmos/gui/dialogs/about_dialog.rb +3 -7
  172. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +200 -136
  173. data/lib/cosmos/gui/opengl/gl_viewer.rb +8 -8
  174. data/lib/cosmos/gui/qt.rb +56 -27
  175. data/lib/cosmos/gui/qt_tool.rb +3 -1
  176. data/lib/cosmos/gui/text/ruby_editor.rb +130 -110
  177. data/lib/cosmos/gui/utilities/script_module_gui.rb +150 -4
  178. data/lib/cosmos/io/json_drb.rb +1 -1
  179. data/lib/cosmos/io/win32_serial_driver.rb +2 -4
  180. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +1 -0
  181. data/lib/cosmos/packet_logs/packet_log_reader.rb +13 -4
  182. data/lib/cosmos/packets/limits.rb +6 -3
  183. data/lib/cosmos/packets/telemetry.rb +34 -3
  184. data/lib/cosmos/processors/new_packet_log_processor.rb +1 -1
  185. data/lib/cosmos/script/commands.rb +20 -2
  186. data/lib/cosmos/script/extract.rb +11 -3
  187. data/lib/cosmos/script/limits.rb +6 -0
  188. data/lib/cosmos/script/scripting.rb +17 -9
  189. data/lib/cosmos/system/system.rb +73 -17
  190. data/lib/cosmos/system/target.rb +10 -5
  191. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +1 -0
  192. data/lib/cosmos/tools/cmd_tlm_server/api.rb +95 -0
  193. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +8 -4
  194. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +55 -0
  195. data/lib/cosmos/tools/data_viewer/data_viewer.rb +5 -12
  196. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +14 -48
  197. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +1 -5
  198. data/lib/cosmos/tools/launcher/launcher.rb +4 -0
  199. data/lib/cosmos/tools/launcher/launcher_config.rb +50 -0
  200. data/lib/cosmos/tools/launcher/launcher_tool.rb +21 -9
  201. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +607 -566
  202. data/lib/cosmos/tools/replay/replay.rb +51 -45
  203. data/lib/cosmos/tools/script_runner/script_runner.rb +13 -5
  204. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +8 -109
  205. data/lib/cosmos/tools/test_runner/test.rb +65 -6
  206. data/lib/cosmos/tools/test_runner/test_runner.rb +4 -4
  207. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +5 -0
  208. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +3 -0
  209. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +3 -2
  210. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +9 -6
  211. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +1 -5
  212. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +1 -5
  213. data/lib/cosmos/top_level.rb +86 -3
  214. data/lib/cosmos/version.rb +5 -5
  215. data/lib/cosmos/win32/win32_main.rb +7 -1
  216. data/spec/packet_logs/packet_log_reader_spec.rb +67 -7
  217. data/spec/packets/limits_spec.rb +19 -1
  218. data/spec/packets/telemetry_spec.rb +44 -1
  219. data/spec/script/commands_spec.rb +14 -0
  220. data/spec/script/scripting_spec.rb +5 -1
  221. data/spec/script/telemetry_spec.rb +38 -3
  222. data/spec/system/system_spec.rb +24 -4
  223. data/spec/tools/cmd_tlm_server/api_spec.rb +30 -0
  224. data/test/benchmarks/gsub_benchmark.rb +42 -4
  225. data/test/benchmarks/is_a_benchmark.rb +34 -0
  226. data/test/performance/config/data/crc.txt +161 -171
  227. data/test/performance/config/system/system_packets.txt +10 -10
  228. data/test/performance/config/system/system_threads.txt +30 -30
  229. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +7 -2
  230. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -0
  231. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -0
  232. data/test/performance/config/targets/{EXAMPLE → PACKET}/cmd_tlm_server.txt +2 -2
  233. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -0
  234. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -0
  235. data/test/performance/config/targets/PACKET/screens/status.txt +25 -0
  236. data/test/performance/config/targets/PACKET/target.txt +28 -0
  237. data/test/performance/config/targets/{EXAMPLE/cmd_tlm/example_cmds.txt → THREAD/cmd_tlm/thread_cmds.txt} +1 -1
  238. data/test/performance/config/targets/{EXAMPLE/cmd_tlm/example_tlm.txt → THREAD/cmd_tlm/thread_tlm.txt} +1 -1
  239. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -0
  240. data/test/performance/config/targets/{EXAMPLE/lib/example_interface.rb → THREAD/lib/thread_interface.rb} +1 -1
  241. data/test/performance/config/targets/THREAD/screens/status.txt +25 -0
  242. data/test/performance/config/targets/{EXAMPLE → THREAD}/target.txt +0 -0
  243. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +24 -30
  244. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +31 -31
  245. data/test/performance/config/tools/launcher/launcher_packets.txt +16 -11
  246. data/test/performance/config/tools/launcher/launcher_threads.txt +41 -35
  247. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -0
  248. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +10 -38
  249. data/test/performance/lib/packet_target.rb +126 -0
  250. data/test/performance/lib/{example_target.rb → thread_target.rb} +9 -9
  251. data/test/performance/tools/CmdTlmServerMemProf +1 -1
  252. data/test/performance/tools/{ExampleTarget → PacketTarget} +2 -2
  253. data/test/performance/tools/{ExampleTarget.bat → PacketTarget.bat} +0 -0
  254. data/test/performance/tools/ThreadTarget +14 -0
  255. data/test/performance/tools/ThreadTarget.bat +59 -0
  256. data/test/performance/tools/TlmGrapherMemProf +1 -1
  257. data/test/performance/tools/TlmViewerMemProf +19 -0
  258. data/{autohotkey/tools/Replay.bat → test/performance/tools/TlmViewerMemProf.bat} +1 -1
  259. metadata +107 -55
  260. data/test/performance/lib/example_background_task.rb +0 -57
  261. 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 = System.default_packet_log_reader.new
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
- interface = nil
397
-
398
- # Identify and update packet
399
- if packet.identified?
400
- # Preidentifed packet - place it into the current value table
401
- identified_packet = System.telemetry.update!(packet.target_name,
402
- packet.packet_name,
403
- packet.buffer)
404
- else
405
- # Packet needs to be identified
406
- identified_packet = System.telemetry.identify!(packet.buffer)
407
- end
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
- if identified_packet and packet.target_name != 'UNKNOWN'
410
- identified_packet.received_time = packet.received_time
411
- packet = identified_packet
412
- target = System.targets[packet.target_name.upcase]
413
- interface = target.interface if target
414
- else
415
- unknown_packet = System.telemetry.update!('UNKNOWN', 'UNKNOWN', packet.buffer)
416
- unknown_packet.received_time = packet.received_time
417
- packet = unknown_packet
418
- data_length = packet.length
419
- string = "Unknown #{data_length} byte packet starting: "
420
- num_bytes_to_print = [UNKNOWN_BYTES_TO_PRINT, data_length].min
421
- data_to_print = packet.buffer(false)[0..(num_bytes_to_print - 1)]
422
- data_to_print.each_byte do |byte|
423
- string << sprintf("%02X", byte)
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
- target = System.targets[packet.target_name]
431
- target.tlm_cnt += 1 if target
432
- packet.received_count += 1
433
- packet.check_limits(System.limits_set)
434
- ReplayServer.instance.post_packet(packet)
435
-
436
- # Write to routers
437
- if interface
438
- interface.routers.each do |router|
439
- begin
440
- router.write(packet) if router.write_allowed? and router.connected?
441
- rescue => err
442
- Logger.error "Problem writing to router #{router.name} - #{err.class}:#{err.message}"
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()')) { active_script_runner_frame.find() }
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()')) { active_script_runner_frame.find_next() }
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()')) { active_script_runner_frame.find_previous() }
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()')) { active_script_runner_frame.replace() }
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(active_script_runner_frame().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 # def initialize
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.breakpoint(current_tab_filename(), line)
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(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'; " + text)
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.breakpoint(filename, line_number)
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.breakpoint(line_number) if present
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 = object.class.to_s
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