cosmos 4.0.3-java → 4.1.0-java
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/.travis.yml +5 -5
- data/Manifest.txt +11 -1
- data/README.md +3 -2
- data/Rakefile +18 -4
- data/appveyor.yml +19 -0
- data/cosmos.gemspec +12 -3
- data/data/config/cmd_tlm_server.yaml +3 -0
- data/data/crc.txt +63 -60
- data/demo/config/targets/INST/cmd_tlm_server.txt +1 -0
- data/demo/config/targets/INST/cmd_tlm_server2.txt +7 -0
- data/demo/config/tools/cmd_sequence/cmd_sequence.txt +2 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +8 -12
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +7 -9
- data/demo/lib/cmd_sequence_exporter.rb +52 -0
- data/demo/lib/example_background_task.rb +1 -0
- data/demo/procedures/replay_test.rb +32 -0
- data/ext/cosmos/ext/structure/structure.c +39 -3
- data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +1 -0
- data/install/config/tools/launcher/launcher.txt +2 -0
- data/lib/cosmos/config/config_parser.rb +2 -0
- data/lib/cosmos/core_ext/io.rb +89 -60
- data/lib/cosmos/gui/qt.rb +5 -8
- data/lib/cosmos/gui/qt_tool.rb +8 -8
- data/lib/cosmos/gui/text/ruby_editor.rb +12 -12
- data/lib/cosmos/gui/utilities/script_module_gui.rb +9 -9
- data/lib/cosmos/gui/widgets/realtime_button_bar.rb +18 -17
- data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +2 -2
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +3 -0
- data/lib/cosmos/interfaces/udp_interface.rb +27 -14
- data/lib/cosmos/io/buffered_file.rb +0 -1
- data/lib/cosmos/io/json_drb.rb +134 -214
- data/lib/cosmos/io/json_drb_object.rb +22 -61
- data/lib/cosmos/io/json_drb_rack.rb +79 -0
- data/lib/cosmos/io/json_rpc.rb +27 -0
- data/lib/cosmos/io/udp_sockets.rb +102 -58
- data/lib/cosmos/packets/commands.rb +1 -1
- data/lib/cosmos/packets/structure.rb +1 -1
- data/lib/cosmos/packets/structure_item.rb +37 -5
- data/lib/cosmos/script/cmd_tlm_server.rb +76 -2
- data/lib/cosmos/script/replay.rb +60 -0
- data/lib/cosmos/script/script.rb +20 -2
- data/lib/cosmos/script/scripting.rb +9 -9
- data/lib/cosmos/script/tools.rb +14 -0
- data/lib/cosmos/system/system.rb +185 -92
- data/lib/cosmos/system/target.rb +1 -1
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +44 -4
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +4 -0
- data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +7 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +347 -20
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +3 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +329 -111
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +13 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +261 -95
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +46 -35
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +18 -8
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +39 -28
- data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +242 -0
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +24 -8
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +18 -6
- data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +5 -4
- data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +375 -0
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +10 -2
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +40 -5
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +18 -20
- data/lib/cosmos/tools/launcher/launcher_config.rb +5 -16
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +65 -39
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +19 -0
- data/lib/cosmos/tools/replay/replay.rb +5 -505
- data/lib/cosmos/tools/script_runner/script_audit.rb +1 -0
- data/lib/cosmos/tools/script_runner/script_runner.rb +3 -4
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +3 -4
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +44 -23
- data/lib/cosmos/tools/test_runner/results_writer.rb +4 -0
- data/lib/cosmos/tools/test_runner/test_runner.rb +0 -3
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +6 -2
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +26 -1
- data/lib/cosmos/tools/tlm_viewer/screen.rb +24 -1
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +25 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +24 -14
- data/lib/cosmos/top_level.rb +34 -24
- data/lib/cosmos/utilities/csv.rb +60 -8
- data/lib/cosmos/version.rb +5 -5
- data/spec/config/config_parser_spec.rb +10 -1
- data/spec/core_ext/socket_spec.rb +4 -2
- data/spec/gui/utilities/script_module_gui_spec.rb +102 -0
- data/spec/install/config/data/data.txt +1 -0
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +2 -0
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +1 -2
- data/spec/interfaces/protocols/template_protocol_spec.rb +72 -2
- data/spec/interfaces/serial_interface_spec.rb +1 -1
- data/spec/interfaces/udp_interface_spec.rb +14 -0
- data/spec/io/buffered_file_spec.rb +37 -0
- data/spec/io/json_drb_object_spec.rb +2 -15
- data/spec/io/json_drb_spec.rb +61 -121
- data/spec/io/udp_sockets_spec.rb +42 -2
- data/spec/packet_logs/packet_log_reader_spec.rb +5 -2
- data/spec/packets/binary_accessor_spec.rb +1 -1
- data/spec/packets/packet_item_spec.rb +1 -1
- data/spec/packets/structure_item_spec.rb +5 -6
- data/spec/script/cmd_tlm_server_spec.rb +39 -4
- data/spec/script/commands_disconnect_spec.rb +1 -1
- data/spec/script/commands_spec.rb +2 -1
- data/spec/script/scripting_spec.rb +18 -3
- data/spec/script/telemetry_spec.rb +5 -0
- data/spec/spec_helper.rb +43 -26
- data/spec/streams/tcpip_socket_stream_spec.rb +2 -2
- data/spec/system/system_spec.rb +11 -9
- data/spec/system/target_spec.rb +3 -0
- data/spec/tools/cmd_tlm_server/api_spec.rb +543 -29
- data/spec/tools/cmd_tlm_server/background_task_spec.rb +2 -2
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +31 -75
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +199 -66
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +85 -9
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +29 -127
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +10 -50
- data/spec/tools/launcher/launcher_config_spec.rb +1 -1
- data/spec/tools/table_manager/table_item_spec.rb +1 -1
- data/spec/tools/table_manager/tablemanager_core_spec.rb +4 -4
- data/spec/top_level/top_level_spec.rb +151 -3
- data/spec/utilities/csv_spec.rb +24 -5
- metadata +61 -9
- data/lib/cosmos/tools/replay/replay_server.rb +0 -91
|
@@ -19,7 +19,7 @@ module Cosmos
|
|
|
19
19
|
describe LauncherConfig do
|
|
20
20
|
describe "initialize" do
|
|
21
21
|
it "checks for a given filename" do
|
|
22
|
-
expect { LauncherConfig.new('blah_file.txt') }.to raise_error(
|
|
22
|
+
expect { LauncherConfig.new('blah_file.txt') }.to raise_error("Configuration file blah_file.txt does not exist.")
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
it "raises on unknown parameters" do
|
|
@@ -19,7 +19,7 @@ module Cosmos
|
|
|
19
19
|
|
|
20
20
|
describe "process_definition" do
|
|
21
21
|
it "complains if the definition filename does not exist" do
|
|
22
|
-
expect { core.process_definition('path') }.to raise_error(
|
|
22
|
+
expect { core.process_definition('path') }.to raise_error("Configuration file path does not exist.")
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
it "processes the table definition" do
|
|
@@ -47,7 +47,7 @@ module Cosmos
|
|
|
47
47
|
|
|
48
48
|
describe "file_new" do
|
|
49
49
|
it "complains if the definition filename does not exist" do
|
|
50
|
-
expect { core.file_new('path', Dir.pwd) }.to raise_error(/
|
|
50
|
+
expect { core.file_new('path', Dir.pwd) }.to raise_error(/Configuration file path does not exist./)
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
it "creates a new file in the given output dir" do
|
|
@@ -74,7 +74,7 @@ module Cosmos
|
|
|
74
74
|
FileUtils.rm def_filename if File.exist? def_filename
|
|
75
75
|
bin_filename = File.join(Dir.pwd, 'dat.bin')
|
|
76
76
|
File.open(bin_filename,'w') {|file| file.puts "\x00\x01" }
|
|
77
|
-
expect { core.file_open(bin_filename, def_filename) }.to raise_error(/
|
|
77
|
+
expect { core.file_open(bin_filename, def_filename) }.to raise_error(/does not exist/)
|
|
78
78
|
FileUtils.rm bin_filename
|
|
79
79
|
end
|
|
80
80
|
|
|
@@ -83,7 +83,7 @@ module Cosmos
|
|
|
83
83
|
FileUtils.rm bin_filename if File.exist? bin_filename
|
|
84
84
|
def_filename = File.join(Dir.pwd, 'def.txt')
|
|
85
85
|
File.open(def_filename,'w') {|file| file.puts "TABLE table1 BIG_ENDIAN ONE_DIMENSIONAL" }
|
|
86
|
-
expect { core.file_open(bin_filename, def_filename) }.to raise_error(/
|
|
86
|
+
expect { core.file_open(bin_filename, def_filename) }.to raise_error(/Unable to open and load/)
|
|
87
87
|
FileUtils.rm def_filename
|
|
88
88
|
end
|
|
89
89
|
|
|
@@ -100,6 +100,44 @@ module Cosmos
|
|
|
100
100
|
end
|
|
101
101
|
end
|
|
102
102
|
|
|
103
|
+
describe "data_path" do
|
|
104
|
+
it "looks first in USERPATH/config/data" do
|
|
105
|
+
filename = Cosmos.data_path('data.txt')
|
|
106
|
+
expect(filename).to eql File.join(Cosmos::USERPATH,'config','data','data.txt')
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "looks in core/data" do
|
|
110
|
+
filename = Cosmos.data_path('about.txt')
|
|
111
|
+
expect(filename).to eql File.join(Cosmos::PATH,'data','about.txt')
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "complains if the file is not found" do
|
|
115
|
+
expect { Cosmos.data_path('nope.txt') }.to raise_error(/Could not find path/)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
describe "path" do
|
|
120
|
+
it "looks first in the USERPATH" do
|
|
121
|
+
filename = Cosmos.path(__FILE__, ['config','system','system.txt'])
|
|
122
|
+
expect(filename).to eql File.join(Cosmos::USERPATH,'config','system','system.txt')
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "looks relative to the absolute path calling_file" do
|
|
126
|
+
spec = File.expand_path(File.join(File.dirname(Cosmos::USERPATH),'spec_helper.rb'))
|
|
127
|
+
filename = Cosmos.path(spec, ['top_level', 'top_level_spec.rb'])
|
|
128
|
+
expect(filename).to eql __FILE__
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "looks relative to the relative path calling_file" do
|
|
132
|
+
filename = Cosmos.path('spec/spec_helper.rb', ['top_level', 'top_level_spec.rb'])
|
|
133
|
+
expect(filename).to eql __FILE__
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "complains if the path is not found" do
|
|
137
|
+
expect { Cosmos.path(__FILE__, ['nope', 'nowhere.rb']) }.to raise_error(/Could not find path/)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
103
141
|
describe "self.marshal_dump, self.marshal_load" do
|
|
104
142
|
after(:each) do
|
|
105
143
|
Cosmos.disable_warnings do
|
|
@@ -197,10 +235,29 @@ module Cosmos
|
|
|
197
235
|
end
|
|
198
236
|
|
|
199
237
|
describe "create_log_file" do
|
|
238
|
+
it "creates a log file in System LOGS" do
|
|
239
|
+
filename1 = Cosmos.create_log_file('test')
|
|
240
|
+
expect(File.exist?(filename1)).to be true
|
|
241
|
+
if File.dirname(filename1)[-1] == '/' and System.paths['LOGS'][-1] != '/'
|
|
242
|
+
expect(File.dirname(filename1)).to eq (System.paths['LOGS'] + '/')
|
|
243
|
+
elsif File.dirname(filename1)[-1] != '/' and System.paths['LOGS'][-1] == '/'
|
|
244
|
+
expect(File.dirname(filename1) + '/').to eq System.paths['LOGS']
|
|
245
|
+
else
|
|
246
|
+
expect(File.dirname(filename1)).to eq System.paths['LOGS']
|
|
247
|
+
end
|
|
248
|
+
File.delete(filename1)
|
|
249
|
+
end
|
|
250
|
+
|
|
200
251
|
it "creates a log file even if System LOGS doesn't exist" do
|
|
201
|
-
|
|
202
|
-
expect(File.exist?(
|
|
203
|
-
|
|
252
|
+
filename1 = Cosmos.create_log_file('test', 'X:/directory/which/does/not/exit')
|
|
253
|
+
expect(File.exist?(filename1)).to be true
|
|
254
|
+
# Immediately create another log file to ensure we get unique names
|
|
255
|
+
filename2 = Cosmos.create_log_file('test', 'X:/directory/which/does/not/exit')
|
|
256
|
+
expect(File.exist?(filename2)).to be true
|
|
257
|
+
# Ensure the file names are unique
|
|
258
|
+
expect(filename1).to_not eql filename2
|
|
259
|
+
File.delete(filename1)
|
|
260
|
+
File.delete(filename2)
|
|
204
261
|
|
|
205
262
|
Cosmos.set_working_dir do
|
|
206
263
|
# Move the defaults output dir out of the way for this test
|
|
@@ -318,6 +375,24 @@ module Cosmos
|
|
|
318
375
|
expect(klass).to eq MyTestClass
|
|
319
376
|
File.delete(filename)
|
|
320
377
|
end
|
|
378
|
+
|
|
379
|
+
it "requires the class represented by the classname" do
|
|
380
|
+
filename = File.join(Cosmos::USERPATH,"lib","my_other_test_class.rb")
|
|
381
|
+
File.delete(filename) if File.exist? filename
|
|
382
|
+
|
|
383
|
+
# Explicitly load cosmos.rb to ensure the Cosmos::USERPATH/lib
|
|
384
|
+
# directory is in the path
|
|
385
|
+
load 'cosmos.rb'
|
|
386
|
+
File.open(filename,'w') do |file|
|
|
387
|
+
file.puts "class MyOtherTestClass"
|
|
388
|
+
file.puts "end"
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
klass = Cosmos.require_class("MyOtherTestClass")
|
|
392
|
+
expect(klass).to be_a(Class)
|
|
393
|
+
expect(klass).to eq MyOtherTestClass
|
|
394
|
+
File.delete(filename)
|
|
395
|
+
end
|
|
321
396
|
end
|
|
322
397
|
|
|
323
398
|
describe "require_file" do
|
|
@@ -346,6 +421,79 @@ module Cosmos
|
|
|
346
421
|
end
|
|
347
422
|
end
|
|
348
423
|
|
|
424
|
+
describe "kill_thread" do
|
|
425
|
+
before(:each) do
|
|
426
|
+
@log_info = ''
|
|
427
|
+
@log_warn = ''
|
|
428
|
+
@log_error = ''
|
|
429
|
+
allow(Logger).to receive(:info) {|str| @log_info << str}
|
|
430
|
+
allow(Logger).to receive(:warn) {|str| @log_warn << str}
|
|
431
|
+
allow(Logger).to receive(:error) {|str| @log_error << str}
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
it "calls thread.kill if the thread is alive" do
|
|
435
|
+
thread = Thread.new { loop { sleep 1 } }
|
|
436
|
+
Cosmos.kill_thread(nil, thread) # No thread owner
|
|
437
|
+
expect(@log_info).to match("")
|
|
438
|
+
expect(@log_warn).to match("Failed to gracefully kill thread")
|
|
439
|
+
expect(@log_error).to eql("")
|
|
440
|
+
expect(thread.alive?).to be false
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
it "warns if the thread owner doesn't support graceful_kill" do
|
|
444
|
+
thread = Thread.new { loop { sleep 1 } }
|
|
445
|
+
Cosmos.kill_thread(thread, thread)
|
|
446
|
+
expect(@log_info).to match("Thread owner Thread does not support graceful_kill")
|
|
447
|
+
expect(@log_warn).to match("Failed to gracefully kill thread")
|
|
448
|
+
expect(@log_error).to eql("")
|
|
449
|
+
expect(thread.alive?).to be false
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
it "warns if the thread owner is the current thread" do
|
|
453
|
+
class MyThread < Thread
|
|
454
|
+
def graceful_kill; end
|
|
455
|
+
end
|
|
456
|
+
thread = MyThread.new do
|
|
457
|
+
Cosmos.kill_thread(thread, thread)
|
|
458
|
+
end
|
|
459
|
+
sleep 0.1 while thread.alive?
|
|
460
|
+
expect(@log_info).to match("")
|
|
461
|
+
expect(@log_warn).to match("Threads cannot graceful_kill themselves")
|
|
462
|
+
expect(@log_error).to eql("")
|
|
463
|
+
expect(thread.alive?).to be false
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
it "calls graceful_kill on the owner" do
|
|
467
|
+
class ThreadOwner
|
|
468
|
+
attr_accessor :thread
|
|
469
|
+
def initialize
|
|
470
|
+
@thread = Thread.new { loop { sleep 1 } }
|
|
471
|
+
end
|
|
472
|
+
def graceful_kill
|
|
473
|
+
@thread.kill
|
|
474
|
+
end
|
|
475
|
+
end
|
|
476
|
+
owner = ThreadOwner.new
|
|
477
|
+
Cosmos.kill_thread(owner, owner.thread)
|
|
478
|
+
expect(@log_info).to match("")
|
|
479
|
+
expect(@log_warn).to match("")
|
|
480
|
+
expect(@log_error).to match("")
|
|
481
|
+
expect(owner.thread.alive?).to be false
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
it "logs an error if the thread doesn't die" do
|
|
485
|
+
class MyAliveThread
|
|
486
|
+
def alive?; true; end
|
|
487
|
+
def kill; end
|
|
488
|
+
def backtrace; []; end
|
|
489
|
+
end
|
|
490
|
+
Cosmos.kill_thread(nil, MyAliveThread.new)
|
|
491
|
+
expect(@log_info).to match("")
|
|
492
|
+
expect(@log_warn).to match("Failed to gracefully kill thread")
|
|
493
|
+
expect(@log_error).to match("Failed to kill thread")
|
|
494
|
+
end
|
|
495
|
+
end
|
|
496
|
+
|
|
349
497
|
describe "open_file_browser" do
|
|
350
498
|
it "opens a file browser" do
|
|
351
499
|
unless ENV['TRAVIS']
|
data/spec/utilities/csv_spec.rb
CHANGED
|
@@ -21,7 +21,8 @@ module Cosmos
|
|
|
21
21
|
@lines << "bool1,true,false\n"
|
|
22
22
|
@lines << "bool2,false,true\n"
|
|
23
23
|
@lines << "int,10,11\n"
|
|
24
|
-
@lines << "float,1.1,2.2\n"
|
|
24
|
+
@lines << "float,1.1,2.2,3.3\n"
|
|
25
|
+
@lines << "string,test,text with space\n"
|
|
25
26
|
|
|
26
27
|
@test_file = File.open('cosmos_csv_spec.csv','w')
|
|
27
28
|
@test_file.write(@lines.join(''))
|
|
@@ -68,7 +69,7 @@ module Cosmos
|
|
|
68
69
|
end
|
|
69
70
|
|
|
70
71
|
it "returns all keys" do
|
|
71
|
-
expect(@csv.keys).to eq(%w(test bool1 bool2 int float))
|
|
72
|
+
expect(@csv.keys).to eq(%w(test bool1 bool2 int float string))
|
|
72
73
|
end
|
|
73
74
|
|
|
74
75
|
it "returns boolean values" do
|
|
@@ -77,19 +78,37 @@ module Cosmos
|
|
|
77
78
|
|
|
78
79
|
expect(@csv.boolean("bool1", 1)).to be false
|
|
79
80
|
expect(@csv.bool("bool2", 1)).to be true
|
|
81
|
+
|
|
82
|
+
expect(@csv.bool("bool1", (0..-1))).to eql([true, false])
|
|
83
|
+
expect(@csv.bool("bool2", (0..-1))).to eql([false, true])
|
|
80
84
|
end
|
|
81
85
|
|
|
82
86
|
it "returns integer values" do
|
|
83
87
|
expect(@csv.integer("int")).to be(10)
|
|
84
|
-
expect(@csv.int("int")).to be(10)
|
|
85
|
-
|
|
86
|
-
expect(@csv.integer("int", 1)).to be(11)
|
|
87
88
|
expect(@csv.int("int", 1)).to be(11)
|
|
89
|
+
expect(@csv.integer("int", (0..1))).to eql([10, 11])
|
|
88
90
|
end
|
|
89
91
|
|
|
90
92
|
it "returns float values" do
|
|
91
93
|
expect(@csv.float("float")).to eq(1.1)
|
|
92
94
|
expect(@csv.float("float", 1)).to eq(2.2)
|
|
95
|
+
expect(@csv.float("float", 2)).to eq(3.3)
|
|
96
|
+
expect(@csv.float("float", (0..1))).to eql([1.1, 2.2])
|
|
97
|
+
expect(@csv.float("float", (1..2))).to eql([2.2, 3.3])
|
|
98
|
+
expect(@csv.float("float", (0..-1))).to eql([1.1, 2.2, 3.3])
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "returns string values" do
|
|
102
|
+
expect(@csv.string("string")).to eq("test")
|
|
103
|
+
expect(@csv.str("string", 1)).to eq("text with space")
|
|
104
|
+
expect(@csv.str("string", (0..-1))).to eq(["test", "text with space"])
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "returns symbol values" do
|
|
108
|
+
expect(@csv.symbol("string")).to eq(:test)
|
|
109
|
+
# This works but please don't do this! Symbols with spaces is ugly!
|
|
110
|
+
expect(@csv.sym("string", 1)).to eq(:"text with space")
|
|
111
|
+
expect(@csv.sym("string", (0..-1))).to eq([:test, :"text with space"])
|
|
93
112
|
end
|
|
94
113
|
end
|
|
95
114
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cosmos
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.0
|
|
4
|
+
version: 4.1.0
|
|
5
5
|
platform: java
|
|
6
6
|
authors:
|
|
7
7
|
- Ryan Melton
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2017-
|
|
12
|
+
date: 2017-11-17 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -178,7 +178,7 @@ dependencies:
|
|
|
178
178
|
requirements:
|
|
179
179
|
- - "~>"
|
|
180
180
|
- !ruby/object:Gem::Version
|
|
181
|
-
version: 1.1
|
|
181
|
+
version: 1.2.1
|
|
182
182
|
name: rubyzip
|
|
183
183
|
prerelease: false
|
|
184
184
|
type: :runtime
|
|
@@ -186,7 +186,7 @@ dependencies:
|
|
|
186
186
|
requirements:
|
|
187
187
|
- - "~>"
|
|
188
188
|
- !ruby/object:Gem::Version
|
|
189
|
-
version: 1.1
|
|
189
|
+
version: 1.2.1
|
|
190
190
|
- !ruby/object:Gem::Dependency
|
|
191
191
|
requirement: !ruby/object:Gem::Requirement
|
|
192
192
|
requirements:
|
|
@@ -201,6 +201,48 @@ dependencies:
|
|
|
201
201
|
- - "~>"
|
|
202
202
|
- !ruby/object:Gem::Version
|
|
203
203
|
version: '1.6'
|
|
204
|
+
- !ruby/object:Gem::Dependency
|
|
205
|
+
requirement: !ruby/object:Gem::Requirement
|
|
206
|
+
requirements:
|
|
207
|
+
- - "~>"
|
|
208
|
+
- !ruby/object:Gem::Version
|
|
209
|
+
version: 3.10.0
|
|
210
|
+
name: puma
|
|
211
|
+
prerelease: false
|
|
212
|
+
type: :runtime
|
|
213
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
214
|
+
requirements:
|
|
215
|
+
- - "~>"
|
|
216
|
+
- !ruby/object:Gem::Version
|
|
217
|
+
version: 3.10.0
|
|
218
|
+
- !ruby/object:Gem::Dependency
|
|
219
|
+
requirement: !ruby/object:Gem::Requirement
|
|
220
|
+
requirements:
|
|
221
|
+
- - "~>"
|
|
222
|
+
- !ruby/object:Gem::Version
|
|
223
|
+
version: 2.0.3
|
|
224
|
+
name: rack
|
|
225
|
+
prerelease: false
|
|
226
|
+
type: :runtime
|
|
227
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
228
|
+
requirements:
|
|
229
|
+
- - "~>"
|
|
230
|
+
- !ruby/object:Gem::Version
|
|
231
|
+
version: 2.0.3
|
|
232
|
+
- !ruby/object:Gem::Dependency
|
|
233
|
+
requirement: !ruby/object:Gem::Requirement
|
|
234
|
+
requirements:
|
|
235
|
+
- - "~>"
|
|
236
|
+
- !ruby/object:Gem::Version
|
|
237
|
+
version: 2.8.3
|
|
238
|
+
name: httpclient
|
|
239
|
+
prerelease: false
|
|
240
|
+
type: :runtime
|
|
241
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
242
|
+
requirements:
|
|
243
|
+
- - "~>"
|
|
244
|
+
- !ruby/object:Gem::Version
|
|
245
|
+
version: 2.8.3
|
|
204
246
|
- !ruby/object:Gem::Dependency
|
|
205
247
|
requirement: !ruby/object:Gem::Requirement
|
|
206
248
|
requirements:
|
|
@@ -346,15 +388,15 @@ dependencies:
|
|
|
346
388
|
requirements:
|
|
347
389
|
- - "~>"
|
|
348
390
|
- !ruby/object:Gem::Version
|
|
349
|
-
version: '0.
|
|
350
|
-
name:
|
|
391
|
+
version: '0.1'
|
|
392
|
+
name: codecov
|
|
351
393
|
prerelease: false
|
|
352
394
|
type: :development
|
|
353
395
|
version_requirements: !ruby/object:Gem::Requirement
|
|
354
396
|
requirements:
|
|
355
397
|
- - "~>"
|
|
356
398
|
- !ruby/object:Gem::Version
|
|
357
|
-
version: '0.
|
|
399
|
+
version: '0.1'
|
|
358
400
|
- !ruby/object:Gem::Dependency
|
|
359
401
|
requirement: !ruby/object:Gem::Requirement
|
|
360
402
|
requirements:
|
|
@@ -399,6 +441,7 @@ files:
|
|
|
399
441
|
- Manifest.txt
|
|
400
442
|
- README.md
|
|
401
443
|
- Rakefile
|
|
444
|
+
- appveyor.yml
|
|
402
445
|
- autohotkey/config/data/attitude.bin
|
|
403
446
|
- autohotkey/config/data/diamond.STL
|
|
404
447
|
- autohotkey/config/data/groundoff.gif
|
|
@@ -760,6 +803,7 @@ files:
|
|
|
760
803
|
- demo/config/targets/INST/cmd_tlm/inst_cmds.txt
|
|
761
804
|
- demo/config/targets/INST/cmd_tlm/inst_tlm.txt
|
|
762
805
|
- demo/config/targets/INST/cmd_tlm_server.txt
|
|
806
|
+
- demo/config/targets/INST/cmd_tlm_server2.txt
|
|
763
807
|
- demo/config/targets/INST/doc/README.txt
|
|
764
808
|
- demo/config/targets/INST/lib/example_limits_response.rb
|
|
765
809
|
- demo/config/targets/INST/lib/inst_dump_component.rb
|
|
@@ -807,6 +851,7 @@ files:
|
|
|
807
851
|
- demo/config/targets/TEMPLATED/cmd_tlm_server.txt
|
|
808
852
|
- demo/config/targets/TEMPLATED/lib/templated_interface.rb
|
|
809
853
|
- demo/config/targets/TEMPLATED/target.txt
|
|
854
|
+
- demo/config/tools/cmd_sequence/cmd_sequence.txt
|
|
810
855
|
- demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt
|
|
811
856
|
- demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt
|
|
812
857
|
- demo/config/tools/data_viewer/data_viewer.txt
|
|
@@ -849,6 +894,7 @@ files:
|
|
|
849
894
|
- demo/config/tools/tlm_extractor/tlm_extractor4.txt
|
|
850
895
|
- demo/config/tools/tlm_grapher/README.txt
|
|
851
896
|
- demo/config/tools/tlm_viewer/tlm_viewer.txt
|
|
897
|
+
- demo/lib/cmd_sequence_exporter.rb
|
|
852
898
|
- demo/lib/example_background_task.rb
|
|
853
899
|
- demo/lib/example_target.rb
|
|
854
900
|
- demo/lib/scpi_target.rb
|
|
@@ -877,6 +923,7 @@ files:
|
|
|
877
923
|
- demo/procedures/cosmos_api_test.rb
|
|
878
924
|
- demo/procedures/example_test.rb
|
|
879
925
|
- demo/procedures/plot_test.rb
|
|
926
|
+
- demo/procedures/replay_test.rb
|
|
880
927
|
- demo/procedures/run_example_test.rb
|
|
881
928
|
- demo/procedures/test.rb
|
|
882
929
|
- demo/tools/CmdExtractor
|
|
@@ -1344,6 +1391,7 @@ files:
|
|
|
1344
1391
|
- lib/cosmos/io/io_multiplexer.rb
|
|
1345
1392
|
- lib/cosmos/io/json_drb.rb
|
|
1346
1393
|
- lib/cosmos/io/json_drb_object.rb
|
|
1394
|
+
- lib/cosmos/io/json_drb_rack.rb
|
|
1347
1395
|
- lib/cosmos/io/json_rpc.rb
|
|
1348
1396
|
- lib/cosmos/io/posix_serial_driver.rb
|
|
1349
1397
|
- lib/cosmos/io/raw_logger.rb
|
|
@@ -1388,6 +1436,7 @@ files:
|
|
|
1388
1436
|
- lib/cosmos/script/commands.rb
|
|
1389
1437
|
- lib/cosmos/script/extract.rb
|
|
1390
1438
|
- lib/cosmos/script/limits.rb
|
|
1439
|
+
- lib/cosmos/script/replay.rb
|
|
1391
1440
|
- lib/cosmos/script/script.rb
|
|
1392
1441
|
- lib/cosmos/script/scripting.rb
|
|
1393
1442
|
- lib/cosmos/script/telemetry.rb
|
|
@@ -1417,12 +1466,14 @@ files:
|
|
|
1417
1466
|
- lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb
|
|
1418
1467
|
- lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb
|
|
1419
1468
|
- lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb
|
|
1469
|
+
- lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb
|
|
1420
1470
|
- lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb
|
|
1421
1471
|
- lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb
|
|
1422
1472
|
- lib/cosmos/tools/cmd_tlm_server/interface_thread.rb
|
|
1423
1473
|
- lib/cosmos/tools/cmd_tlm_server/interfaces.rb
|
|
1424
1474
|
- lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb
|
|
1425
1475
|
- lib/cosmos/tools/cmd_tlm_server/packet_logging.rb
|
|
1476
|
+
- lib/cosmos/tools/cmd_tlm_server/replay_backend.rb
|
|
1426
1477
|
- lib/cosmos/tools/cmd_tlm_server/router_thread.rb
|
|
1427
1478
|
- lib/cosmos/tools/cmd_tlm_server/routers.rb
|
|
1428
1479
|
- lib/cosmos/tools/config_editor/config_editor.rb
|
|
@@ -1441,7 +1492,6 @@ files:
|
|
|
1441
1492
|
- lib/cosmos/tools/opengl_builder/scene_config.rb
|
|
1442
1493
|
- lib/cosmos/tools/packet_viewer/packet_viewer.rb
|
|
1443
1494
|
- lib/cosmos/tools/replay/replay.rb
|
|
1444
|
-
- lib/cosmos/tools/replay/replay_server.rb
|
|
1445
1495
|
- lib/cosmos/tools/script_runner/script_audit.rb
|
|
1446
1496
|
- lib/cosmos/tools/script_runner/script_runner.rb
|
|
1447
1497
|
- lib/cosmos/tools/script_runner/script_runner_config.rb
|
|
@@ -1610,6 +1660,8 @@ files:
|
|
|
1610
1660
|
- spec/core_ext/time_spec.rb
|
|
1611
1661
|
- spec/gui/line_graph/line_clip_spec.rb
|
|
1612
1662
|
- spec/gui/qt_spec.rb
|
|
1663
|
+
- spec/gui/utilities/script_module_gui_spec.rb
|
|
1664
|
+
- spec/install/config/data/data.txt
|
|
1613
1665
|
- spec/install/config/system/system.txt
|
|
1614
1666
|
- spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt
|
|
1615
1667
|
- spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt
|
|
@@ -1949,7 +2001,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
1949
2001
|
requirements:
|
|
1950
2002
|
- - "~>"
|
|
1951
2003
|
- !ruby/object:Gem::Version
|
|
1952
|
-
version: '2'
|
|
2004
|
+
version: '2.2'
|
|
1953
2005
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1954
2006
|
requirements:
|
|
1955
2007
|
- - ">="
|