cosmos 3.8.2 → 3.8.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Manifest.txt +5 -5
- data/Rakefile +8 -2
- data/autohotkey/tools/autohotkey.rb +3 -3
- data/data/crc.txt +27 -27
- data/demo/Launcher.bat +3 -3
- data/demo/config/data/crc.txt +27 -27
- data/demo/{procedures → config/targets/INST/procedures}/checks.rb +0 -0
- data/demo/{procedures → config/targets/INST/procedures}/collect.rb +2 -2
- data/demo/{procedures → config/targets/INST/procedures}/disconnect.rb +0 -0
- data/demo/{procedures/clear_util.rb → config/targets/INST/procedures/utilities/clear.rb} +0 -0
- data/demo/{procedures/collect_util.rb → config/targets/INST/procedures/utilities/collect.rb} +2 -2
- data/demo/config/targets/INST/screens/commanding.txt +3 -3
- data/demo/config/tools/table_manager/ExampleTableDefinition.txt +7 -7
- data/demo/procedures/plot_test.rb +1 -1
- data/demo/tools/CmdExtractor.bat +3 -3
- data/demo/tools/CmdSender.bat +3 -3
- data/demo/tools/CmdTlmServer.bat +3 -3
- data/demo/tools/DataViewer.bat +3 -3
- data/demo/tools/ExampleTarget.bat +3 -3
- data/demo/tools/HandbookCreator.bat +3 -3
- data/demo/tools/Launcher.bat +3 -3
- data/demo/tools/LimitsMonitor.bat +3 -3
- data/demo/tools/OpenGLBuilder.bat +3 -3
- data/demo/tools/PacketViewer.bat +3 -3
- data/demo/tools/Replay.bat +3 -3
- data/demo/tools/ScpiTarget.bat +3 -3
- data/demo/tools/ScriptRunner.bat +3 -3
- data/demo/tools/TableManager.bat +3 -3
- data/demo/tools/TestRunner.bat +3 -3
- data/demo/tools/TlmExtractor.bat +3 -3
- data/demo/tools/TlmGrapher.bat +3 -3
- data/demo/tools/TlmViewer.bat +3 -3
- data/demo/tools/ToolLaunch.bat +3 -6
- data/ext/cosmos/ext/packet/packet.c +10 -0
- data/install/config/data/crc.txt +17 -17
- data/install/tools/CmdExtractor.bat +3 -3
- data/install/tools/CmdSender.bat +3 -3
- data/install/tools/CmdTlmServer.bat +3 -3
- data/install/tools/DataViewer.bat +3 -3
- data/install/tools/HandbookCreator.bat +3 -3
- data/install/tools/Launcher.bat +3 -3
- data/install/tools/LimitsMonitor.bat +3 -3
- data/install/tools/OpenGLBuilder.bat +3 -3
- data/install/tools/PacketViewer.bat +3 -3
- data/install/tools/Replay.bat +3 -3
- data/install/tools/ScriptRunner.bat +3 -3
- data/install/tools/TableManager.bat +3 -3
- data/install/tools/TestRunner.bat +3 -3
- data/install/tools/TlmExtractor.bat +3 -3
- data/install/tools/TlmGrapher.bat +3 -3
- data/install/tools/TlmViewer.bat +3 -3
- data/install/tools/ToolLaunch.bat +3 -6
- data/lib/cosmos/config/config_parser.rb +10 -2
- data/lib/cosmos/gui/qt_tool.rb +6 -0
- data/lib/cosmos/gui/utilities/screenshot.rb +8 -0
- data/lib/cosmos/gui/utilities/script_module_gui.rb +37 -11
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +3 -3
- data/lib/cosmos/interfaces/udp_interface.rb +9 -2
- data/lib/cosmos/packet_logs/packet_log_reader.rb +1 -0
- data/lib/cosmos/packets/commands.rb +70 -74
- data/lib/cosmos/packets/packet.rb +14 -7
- data/lib/cosmos/script/scripting.rb +9 -7
- data/lib/cosmos/system/system.rb +4 -0
- data/lib/cosmos/system/target.rb +2 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +10 -10
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +2 -2
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +1 -1
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +5 -15
- data/lib/cosmos/tools/script_runner/script_runner.rb +40 -21
- data/lib/cosmos/tools/table_manager/table.rb +2 -2
- data/lib/cosmos/tools/table_manager/table_config.rb +18 -10
- data/lib/cosmos/tools/table_manager/table_manager.rb +61 -59
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +24 -56
- data/lib/cosmos/tools/test_runner/test_runner.rb +15 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +9 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +9 -1
- data/lib/cosmos/top_level.rb +5 -5
- data/lib/cosmos/version.rb +4 -4
- data/spec/config/config_parser_spec.rb +40 -2
- data/spec/packet_logs/packet_log_reader_spec.rb +66 -2
- data/spec/packets/packet_spec.rb +27 -0
- data/spec/script/scripting_spec.rb +7 -2
- data/spec/spec_helper.rb +4 -5
- data/spec/system/system_spec.rb +18 -0
- metadata +7 -7
@@ -102,7 +102,7 @@ module Cosmos
|
|
102
102
|
ensure
|
103
103
|
reset()
|
104
104
|
end
|
105
|
-
|
105
|
+
bin_files
|
106
106
|
end
|
107
107
|
|
108
108
|
# Opens a specified binary file using a specified definition file as the interpreter
|
@@ -143,8 +143,7 @@ module Cosmos
|
|
143
143
|
result << "Error(s) in #{table.name}:\n" + table_result
|
144
144
|
end
|
145
145
|
end
|
146
|
-
|
147
|
-
return result
|
146
|
+
result
|
148
147
|
end
|
149
148
|
|
150
149
|
def file_hex
|
@@ -156,10 +155,7 @@ module Cosmos
|
|
156
155
|
data << table.buffer
|
157
156
|
end
|
158
157
|
|
159
|
-
|
160
|
-
str << "\n\nTotal Bytes Read: %d" % size
|
161
|
-
|
162
|
-
return str
|
158
|
+
"#{data.formatted}\n\nTotal Bytes Read: #{data.length}"
|
163
159
|
end
|
164
160
|
|
165
161
|
# Generate the RPT file for the currently opened file
|
@@ -304,31 +300,31 @@ module Cosmos
|
|
304
300
|
end
|
305
301
|
|
306
302
|
x = table.read(item_def.name, :RAW)
|
303
|
+
if item_def.data_type == :STRING
|
304
|
+
if x.length > item_def.bit_size / 8
|
305
|
+
result << " #{item_def.name}: #{x} must be less than #{item_def.bit_size / 8} characters\n"
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
307
309
|
unless item_def.range.nil?
|
308
|
-
if
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
x = "0x%X" % x
|
320
|
-
else
|
321
|
-
range_first = item_def.range.first
|
322
|
-
range_last = item_def.range.last
|
323
|
-
x = table.read(item_def.name)
|
324
|
-
end
|
325
|
-
result << " #{item_def.name}: #{x} outside valid range of #{range_first}..#{range_last}\n"
|
310
|
+
# check to see if the value lies within its valid range
|
311
|
+
if not item_def.range.include?(x)
|
312
|
+
# if the value is displayed as hex, display the range as hex
|
313
|
+
if item_def.display_type == :HEX
|
314
|
+
range_first = "0x%X" % item_def.range.first
|
315
|
+
range_last = "0x%X" % item_def.range.last
|
316
|
+
x = "0x%X" % x
|
317
|
+
else
|
318
|
+
range_first = item_def.range.first
|
319
|
+
range_last = item_def.range.last
|
320
|
+
x = table.read(item_def.name)
|
326
321
|
end
|
322
|
+
result << " #{item_def.name}: #{x} outside valid range of #{range_first}..#{range_last}\n"
|
327
323
|
end
|
328
324
|
end
|
329
325
|
end # end each column
|
330
326
|
end # end each row
|
331
|
-
|
327
|
+
result
|
332
328
|
end
|
333
329
|
|
334
330
|
def table_default(table_name)
|
@@ -342,11 +338,7 @@ module Cosmos
|
|
342
338
|
table = @table_def.get_table(table_name)
|
343
339
|
raise "Please open a table first." unless table
|
344
340
|
|
345
|
-
|
346
|
-
str, size = create_hex_string(data)
|
347
|
-
str << "\n\nTotal Bytes Read: %d" % size
|
348
|
-
|
349
|
-
return str
|
341
|
+
"#{table.buffer.formatted}\n\nTotal Bytes Read: #{table.buffer.length}"
|
350
342
|
end
|
351
343
|
|
352
344
|
# option to save the currently displayed table as a stand alone binary file
|
@@ -442,7 +434,6 @@ module Cosmos
|
|
442
434
|
# Override on_save to perform additional actions before the file is
|
443
435
|
# saved to disk.
|
444
436
|
def on_save
|
445
|
-
return
|
446
437
|
end
|
447
438
|
|
448
439
|
# Determines the string representation of an item as it should be printed in a RPT file
|
@@ -463,30 +454,7 @@ module Cosmos
|
|
463
454
|
when :HEX
|
464
455
|
result = @table_def.format_hex(table, item_def)
|
465
456
|
end
|
466
|
-
|
467
|
-
return result
|
468
|
-
end
|
469
|
-
|
470
|
-
# Create a hex string representation of the given binary data string
|
471
|
-
def create_hex_string(data)
|
472
|
-
index = 0
|
473
|
-
str = ""
|
474
|
-
while index < data.length
|
475
|
-
# after 16 bytes insert a newline in the display
|
476
|
-
if index % 16 == 0
|
477
|
-
# don't insert a newline the first time
|
478
|
-
if index != 0
|
479
|
-
str << "\n"
|
480
|
-
end
|
481
|
-
str << "0x%08X: " % index
|
482
|
-
# every 4 bytes insert a space for readability
|
483
|
-
elsif index % 4 == 0
|
484
|
-
str << " "
|
485
|
-
end
|
486
|
-
str << "%02X" % data.getbyte(index)
|
487
|
-
index += 1
|
488
|
-
end
|
489
|
-
return str, index
|
457
|
+
result
|
490
458
|
end
|
491
459
|
|
492
460
|
# Set all the binary data in the table definition to the default values
|
@@ -1112,16 +1112,21 @@ module Cosmos
|
|
1112
1112
|
@@test_suites = @@test_suites.select {|my_suite| my_suite.name == 'CustomTestSuite'}
|
1113
1113
|
tests = []
|
1114
1114
|
ObjectSpace.each_object(Class) do |object|
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1115
|
+
begin
|
1116
|
+
next if object.name == 'CustomTestSuite'
|
1117
|
+
if (object.ancestors.include?(TestSuite) &&
|
1118
|
+
object != TestSuite &&
|
1119
|
+
!ignored_test_suite_classes.include?(object))
|
1120
|
+
@@test_suites << object.new
|
1121
|
+
end
|
1122
|
+
if (object.ancestors.include?(Test) &&
|
1123
|
+
object != Test &&
|
1124
|
+
!ignored_test_classes.include?(object))
|
1125
|
+
tests << object
|
1126
|
+
end
|
1127
|
+
rescue
|
1128
|
+
# Ignore Classes where name, etc may raise exception
|
1129
|
+
# Bundler::Molinillo::DependencyGraph::Action is one example
|
1125
1130
|
end
|
1126
1131
|
end
|
1127
1132
|
# Raise error if no test suites or tests
|
@@ -16,16 +16,23 @@ module Cosmos
|
|
16
16
|
class CheckbuttonWidget < Qt::CheckBox
|
17
17
|
include Widget
|
18
18
|
|
19
|
-
def initialize(parent_layout, checkbutton_text)
|
19
|
+
def initialize(parent_layout, checkbutton_text, checked = 'UNCHECKED')
|
20
20
|
super()
|
21
21
|
setText(checkbutton_text.to_s)
|
22
|
+
case checked.to_s
|
23
|
+
when 'CHECKED'
|
24
|
+
setChecked(true)
|
25
|
+
when 'UNCHECKED'
|
26
|
+
setChecked(false)
|
27
|
+
else
|
28
|
+
raise "Unknown option '#{checked}' given to #{self.class}"
|
29
|
+
end
|
22
30
|
parent_layout.addWidget(self) if parent_layout
|
23
31
|
end
|
24
32
|
|
25
33
|
def checked?
|
26
34
|
self.isChecked()
|
27
35
|
end
|
28
|
-
|
29
36
|
end
|
30
37
|
|
31
38
|
end # module Cosmos
|
@@ -15,7 +15,7 @@ module Cosmos
|
|
15
15
|
class ComboboxWidget < Qt::ComboBox
|
16
16
|
include Widget
|
17
17
|
|
18
|
-
def initialize
|
18
|
+
def initialize(parent_layout, *combobox_items)
|
19
19
|
super()
|
20
20
|
addItems(combobox_items)
|
21
21
|
self.maxVisibleItems = combobox_items.length > 6 ? 6 : combobox_items.length
|
@@ -16,9 +16,17 @@ module Cosmos
|
|
16
16
|
class RadiobuttonWidget < Qt::RadioButton
|
17
17
|
include Widget
|
18
18
|
|
19
|
-
def initialize
|
19
|
+
def initialize(parent_layout, radiobutton_text, checked = 'UNCHECKED')
|
20
20
|
super()
|
21
21
|
setText(radiobutton_text.to_s)
|
22
|
+
case checked.to_s
|
23
|
+
when 'CHECKED'
|
24
|
+
setChecked(true)
|
25
|
+
when 'UNCHECKED'
|
26
|
+
setChecked(false)
|
27
|
+
else
|
28
|
+
raise "Unknown option '#{checked}' given to #{self.class}"
|
29
|
+
end
|
22
30
|
parent_layout.addWidget(self) if parent_layout
|
23
31
|
end
|
24
32
|
|
data/lib/cosmos/top_level.rb
CHANGED
@@ -457,11 +457,11 @@ module Cosmos
|
|
457
457
|
file.puts "Cosmos::USERPATH: #{Cosmos::USERPATH}"
|
458
458
|
file.puts ""
|
459
459
|
file.puts "Environment:"
|
460
|
-
file.puts "RUBYOPT: #{ENV['
|
461
|
-
file.puts "RUBYLIB: #{ENV['
|
462
|
-
file.puts "GEM_PATH: #{ENV['
|
463
|
-
file.puts "GEMRC: #{ENV['
|
464
|
-
file.puts "RI_DEVKIT: #{ENV['
|
460
|
+
file.puts "RUBYOPT: #{ENV['RUBYOPT']}"
|
461
|
+
file.puts "RUBYLIB: #{ENV['RUBYLIB']}"
|
462
|
+
file.puts "GEM_PATH: #{ENV['GEM_PATH']}"
|
463
|
+
file.puts "GEMRC: #{ENV['GEMRC']}"
|
464
|
+
file.puts "RI_DEVKIT: #{ENV['RI_DEVKIT']}"
|
465
465
|
file.puts "GEM_HOME: #{ENV['GEM_HOME']}"
|
466
466
|
file.puts "PATH: #{ENV['PATH']}"
|
467
467
|
file.puts ""
|
data/lib/cosmos/version.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# encoding: ascii-8bit
|
2
2
|
|
3
|
-
COSMOS_VERSION = '3.8.
|
3
|
+
COSMOS_VERSION = '3.8.3'
|
4
4
|
module Cosmos
|
5
5
|
module Version
|
6
6
|
MAJOR = '3'
|
7
7
|
MINOR = '8'
|
8
|
-
PATCH = '
|
9
|
-
BUILD = '
|
8
|
+
PATCH = '3'
|
9
|
+
BUILD = 'e6be858ed961d6fe872435be2b74c3499167a62a'
|
10
10
|
end
|
11
|
-
VERSION = '3.8.
|
11
|
+
VERSION = '3.8.3'
|
12
12
|
end
|
@@ -55,7 +55,45 @@ module Cosmos
|
|
55
55
|
tf.unlink
|
56
56
|
end
|
57
57
|
|
58
|
-
it "
|
58
|
+
it "supports ERB syntax" do
|
59
|
+
tf = Tempfile.new('unittest')
|
60
|
+
tf.puts "KEYWORD <%= 5 * 2 %>"
|
61
|
+
tf.close
|
62
|
+
|
63
|
+
@cp.parse_file(tf.path) do |keyword, params|
|
64
|
+
expect(keyword).to eql "KEYWORD"
|
65
|
+
expect(params[0]).to eql "10"
|
66
|
+
end
|
67
|
+
tf.unlink
|
68
|
+
end
|
69
|
+
|
70
|
+
it "supports ERB partials via render" do
|
71
|
+
tf2 = Tempfile.new('partial.txt')
|
72
|
+
tf2.puts '<% if output %>'
|
73
|
+
tf2.puts 'KEYWORD <%= id %> <%= desc %>'
|
74
|
+
tf2.puts '<% end %>'
|
75
|
+
tf2.close
|
76
|
+
|
77
|
+
# Run the test twice to verify the KEYWORD gets rendered and then doesn't
|
78
|
+
[true, false].each do |output|
|
79
|
+
tf = Tempfile.new('unittest')
|
80
|
+
tf.puts "<%= render '#{File.basename(tf2.path)}', locals: {id: 1, desc: 'Description', output: #{output}} %>"
|
81
|
+
tf.close
|
82
|
+
|
83
|
+
yielded = false
|
84
|
+
@cp.parse_file(tf.path) do |keyword, params|
|
85
|
+
yielded = true
|
86
|
+
expect(keyword).to eql "KEYWORD"
|
87
|
+
expect(params[0]).to eql "1"
|
88
|
+
expect(params[1]).to eql "Description"
|
89
|
+
end
|
90
|
+
expect(yielded).to eql output
|
91
|
+
tf.unlink
|
92
|
+
end
|
93
|
+
tf2.unlink
|
94
|
+
end
|
95
|
+
|
96
|
+
it "optionally does not remove quotes" do
|
59
97
|
tf = Tempfile.new('unittest')
|
60
98
|
line = "KEYWORD PARAM1 PARAM2 'PARAM 3'"
|
61
99
|
tf.puts line
|
@@ -106,7 +144,7 @@ module Cosmos
|
|
106
144
|
tf.unlink
|
107
145
|
end
|
108
146
|
|
109
|
-
it "
|
147
|
+
it "optionally yields comment lines" do
|
110
148
|
tf = Tempfile.new('unittest')
|
111
149
|
tf.puts "KEYWORD1 PARAM1"
|
112
150
|
tf.puts "# This is a comment"
|
@@ -39,8 +39,8 @@ module Cosmos
|
|
39
39
|
plw.write(pkt)
|
40
40
|
@cmd_packets << pkt
|
41
41
|
plw.stop
|
42
|
-
plw = PacketLogWriter.new(:TLM,nil,true,nil,10000000,nil,false)
|
43
42
|
|
43
|
+
plw = PacketLogWriter.new(:TLM,nil,true,nil,10000000,nil,false)
|
44
44
|
@tlm_packets = []
|
45
45
|
pkt = System.telemetry.packet("COSMOS","VERSION").clone
|
46
46
|
pkt.received_time = Time.new(2020,2,1,12,30,15)
|
@@ -259,7 +259,7 @@ module Cosmos
|
|
259
259
|
end
|
260
260
|
end
|
261
261
|
|
262
|
-
it "
|
262
|
+
it "optionally does not identify and define packets" do
|
263
263
|
index = 0
|
264
264
|
@plr.each(Dir[File.join(@log_path,"*cmd.bin")][0], false) do |packet|
|
265
265
|
expect(packet.target_name).to eql @cmd_packets[index].target_name
|
@@ -278,6 +278,70 @@ module Cosmos
|
|
278
278
|
end
|
279
279
|
end
|
280
280
|
|
281
|
+
it "increments the command received count" do
|
282
|
+
plw = PacketLogWriter.new(:CMD,'cnt',true,nil,10000000,nil,false)
|
283
|
+
plw.write(System.commands.packet("INST","COLLECT").clone)
|
284
|
+
plw.write(System.commands.packet("INST","ABORT").clone)
|
285
|
+
plw.write(System.commands.packet("INST","ABORT").clone)
|
286
|
+
plw.write(System.commands.packet("INST","COLLECT").clone)
|
287
|
+
plw.write(System.commands.packet("COSMOS","STOPLOGGING").clone)
|
288
|
+
plw.write(System.commands.packet("INST","ABORT").clone)
|
289
|
+
plw.stop
|
290
|
+
|
291
|
+
cnt = {}
|
292
|
+
@plr.each(Dir[File.join(@log_path,"*cntcmd.bin")][0]) do |packet|
|
293
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] ||= 0
|
294
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] += 1
|
295
|
+
expect(packet.received_count).to eql cnt["#{packet.target_name}_#{packet.packet_name}"]
|
296
|
+
end
|
297
|
+
|
298
|
+
# Resetting a packet should reset only that packet's received_count
|
299
|
+
collect = System.commands.packet("INST","COLLECT")
|
300
|
+
collect.reset
|
301
|
+
cnt["INST_COLLECT"] = 0
|
302
|
+
expect(collect.received_count).to eql 0
|
303
|
+
|
304
|
+
@plr.each(Dir[File.join(@log_path,"*cntcmd.bin")][0]) do |packet|
|
305
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] ||= 0
|
306
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] += 1
|
307
|
+
expect(packet.received_count).to eql cnt["#{packet.target_name}_#{packet.packet_name}"]
|
308
|
+
end
|
309
|
+
|
310
|
+
Dir[File.join(@log_path,"*cntcmd.bin")].each {|file| FileUtils.rm file }
|
311
|
+
end
|
312
|
+
|
313
|
+
it "increments the telemetry received count" do
|
314
|
+
plw = PacketLogWriter.new(:TLM,'cnt',true,nil,10000000,nil,false)
|
315
|
+
plw.write(System.telemetry.packet("INST","HEALTH_STATUS").clone)
|
316
|
+
plw.write(System.telemetry.packet("INST","ADCS").clone)
|
317
|
+
plw.write(System.telemetry.packet("INST","ADCS").clone)
|
318
|
+
plw.write(System.telemetry.packet("INST","HEALTH_STATUS").clone)
|
319
|
+
plw.write(System.telemetry.packet("COSMOS","LIMITS_CHANGE").clone)
|
320
|
+
plw.write(System.telemetry.packet("INST","ADCS").clone)
|
321
|
+
plw.stop
|
322
|
+
|
323
|
+
cnt = {}
|
324
|
+
@plr.each(Dir[File.join(@log_path,"*cnttlm.bin")][0]) do |packet|
|
325
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] ||= 0
|
326
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] += 1
|
327
|
+
expect(packet.received_count).to eql cnt["#{packet.target_name}_#{packet.packet_name}"]
|
328
|
+
end
|
329
|
+
|
330
|
+
# Resetting a packet should reset only that packet's received_count
|
331
|
+
status = System.telemetry.packet("INST","HEALTH_STATUS")
|
332
|
+
status.reset
|
333
|
+
cnt["INST_HEALTH_STATUS"] = 0
|
334
|
+
expect(status.received_count).to eql 0
|
335
|
+
|
336
|
+
@plr.each(Dir[File.join(@log_path,"*cnttlm.bin")][0]) do |packet|
|
337
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] ||= 0
|
338
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] += 1
|
339
|
+
expect(packet.received_count).to eql cnt["#{packet.target_name}_#{packet.packet_name}"]
|
340
|
+
end
|
341
|
+
|
342
|
+
Dir[File.join(@log_path,"*cnttlm.bin")].each {|file| FileUtils.rm file }
|
343
|
+
end
|
344
|
+
|
281
345
|
it "returns all packets if the start time is before all" do
|
282
346
|
time = Time.new(2000,1,31,12,30,16)
|
283
347
|
index = 0
|
data/spec/packets/packet_spec.rb
CHANGED
@@ -832,6 +832,33 @@ module Cosmos
|
|
832
832
|
p.restore_defaults
|
833
833
|
expect(p.buffer).to eql "\x03\x04\x01\x02\x04\x06\x08\x0A"
|
834
834
|
end
|
835
|
+
|
836
|
+
it "writes all except skipped items back to their default values" do
|
837
|
+
p = Packet.new("tgt","pkt")
|
838
|
+
p.append_item("test1", 8, :UINT, 16)
|
839
|
+
i = p.get_item("TEST1")
|
840
|
+
i.default = [3,4]
|
841
|
+
p.write("test1", [1,2])
|
842
|
+
p.append_item("test2", 16, :UINT)
|
843
|
+
i = p.get_item("TEST2")
|
844
|
+
i.default = 0x0102
|
845
|
+
i.states = {"TRUE"=>0x0304}
|
846
|
+
p.write("test2", 0x0304)
|
847
|
+
p.append_item("test3", 32, :UINT)
|
848
|
+
i = p.get_item("TEST3")
|
849
|
+
i.default = 0x02030405
|
850
|
+
i.write_conversion = GenericConversion.new("value * 2")
|
851
|
+
p.write("test3", 0x01020304)
|
852
|
+
expect(p.buffer).to eql "\x01\x02\x03\x04\x02\x04\x06\x08"
|
853
|
+
p.restore_defaults(p.buffer(false), ["test1", "test2", "test3"])
|
854
|
+
expect(p.buffer).to eql "\x01\x02\x03\x04\x02\x04\x06\x08"
|
855
|
+
p.restore_defaults(p.buffer(false), ["test1", "test3"])
|
856
|
+
expect(p.buffer).to eql "\x01\x02\x01\x02\x02\x04\x06\x08"
|
857
|
+
p.restore_defaults(p.buffer(false), ["test3"])
|
858
|
+
expect(p.buffer).to eql "\x03\x04\x01\x02\x02\x04\x06\x08"
|
859
|
+
p.restore_defaults(p.buffer(false))
|
860
|
+
expect(p.buffer).to eql "\x03\x04\x01\x02\x04\x06\x08\x0A"
|
861
|
+
end
|
835
862
|
end
|
836
863
|
|
837
864
|
describe "enable_limits" do
|
@@ -474,9 +474,14 @@ module Cosmos
|
|
474
474
|
end
|
475
475
|
allow(ScriptRunnerFrame).to receive_message_chain(:instance, :use_instrumentation)
|
476
476
|
allow(ScriptRunnerFrame).to receive_message_chain(:instance, :use_instrumentation=)
|
477
|
-
|
477
|
+
script = File.join(Cosmos::USERPATH,'lib','example.rb')
|
478
|
+
File.open(script, 'w') { |file| file.puts "# Example script" }
|
479
|
+
not_cached = load_utility("example.rb")
|
480
|
+
expect(not_cached).to eq true
|
478
481
|
# This one should use the cached version
|
479
|
-
load_utility("
|
482
|
+
not_cached = load_utility("example.rb")
|
483
|
+
expect(not_cached).to eq false
|
484
|
+
File.delete script
|
480
485
|
end
|
481
486
|
end
|
482
487
|
|