cosmos 3.8.2 → 3.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/Manifest.txt +5 -5
  3. data/Rakefile +8 -2
  4. data/autohotkey/tools/autohotkey.rb +3 -3
  5. data/data/crc.txt +27 -27
  6. data/demo/Launcher.bat +3 -3
  7. data/demo/config/data/crc.txt +27 -27
  8. data/demo/{procedures → config/targets/INST/procedures}/checks.rb +0 -0
  9. data/demo/{procedures → config/targets/INST/procedures}/collect.rb +2 -2
  10. data/demo/{procedures → config/targets/INST/procedures}/disconnect.rb +0 -0
  11. data/demo/{procedures/clear_util.rb → config/targets/INST/procedures/utilities/clear.rb} +0 -0
  12. data/demo/{procedures/collect_util.rb → config/targets/INST/procedures/utilities/collect.rb} +2 -2
  13. data/demo/config/targets/INST/screens/commanding.txt +3 -3
  14. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +7 -7
  15. data/demo/procedures/plot_test.rb +1 -1
  16. data/demo/tools/CmdExtractor.bat +3 -3
  17. data/demo/tools/CmdSender.bat +3 -3
  18. data/demo/tools/CmdTlmServer.bat +3 -3
  19. data/demo/tools/DataViewer.bat +3 -3
  20. data/demo/tools/ExampleTarget.bat +3 -3
  21. data/demo/tools/HandbookCreator.bat +3 -3
  22. data/demo/tools/Launcher.bat +3 -3
  23. data/demo/tools/LimitsMonitor.bat +3 -3
  24. data/demo/tools/OpenGLBuilder.bat +3 -3
  25. data/demo/tools/PacketViewer.bat +3 -3
  26. data/demo/tools/Replay.bat +3 -3
  27. data/demo/tools/ScpiTarget.bat +3 -3
  28. data/demo/tools/ScriptRunner.bat +3 -3
  29. data/demo/tools/TableManager.bat +3 -3
  30. data/demo/tools/TestRunner.bat +3 -3
  31. data/demo/tools/TlmExtractor.bat +3 -3
  32. data/demo/tools/TlmGrapher.bat +3 -3
  33. data/demo/tools/TlmViewer.bat +3 -3
  34. data/demo/tools/ToolLaunch.bat +3 -6
  35. data/ext/cosmos/ext/packet/packet.c +10 -0
  36. data/install/config/data/crc.txt +17 -17
  37. data/install/tools/CmdExtractor.bat +3 -3
  38. data/install/tools/CmdSender.bat +3 -3
  39. data/install/tools/CmdTlmServer.bat +3 -3
  40. data/install/tools/DataViewer.bat +3 -3
  41. data/install/tools/HandbookCreator.bat +3 -3
  42. data/install/tools/Launcher.bat +3 -3
  43. data/install/tools/LimitsMonitor.bat +3 -3
  44. data/install/tools/OpenGLBuilder.bat +3 -3
  45. data/install/tools/PacketViewer.bat +3 -3
  46. data/install/tools/Replay.bat +3 -3
  47. data/install/tools/ScriptRunner.bat +3 -3
  48. data/install/tools/TableManager.bat +3 -3
  49. data/install/tools/TestRunner.bat +3 -3
  50. data/install/tools/TlmExtractor.bat +3 -3
  51. data/install/tools/TlmGrapher.bat +3 -3
  52. data/install/tools/TlmViewer.bat +3 -3
  53. data/install/tools/ToolLaunch.bat +3 -6
  54. data/lib/cosmos/config/config_parser.rb +10 -2
  55. data/lib/cosmos/gui/qt_tool.rb +6 -0
  56. data/lib/cosmos/gui/utilities/screenshot.rb +8 -0
  57. data/lib/cosmos/gui/utilities/script_module_gui.rb +37 -11
  58. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +3 -3
  59. data/lib/cosmos/interfaces/udp_interface.rb +9 -2
  60. data/lib/cosmos/packet_logs/packet_log_reader.rb +1 -0
  61. data/lib/cosmos/packets/commands.rb +70 -74
  62. data/lib/cosmos/packets/packet.rb +14 -7
  63. data/lib/cosmos/script/scripting.rb +9 -7
  64. data/lib/cosmos/system/system.rb +4 -0
  65. data/lib/cosmos/system/target.rb +2 -0
  66. data/lib/cosmos/tools/cmd_tlm_server/api.rb +10 -10
  67. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +2 -2
  68. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +1 -1
  69. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +5 -15
  70. data/lib/cosmos/tools/script_runner/script_runner.rb +40 -21
  71. data/lib/cosmos/tools/table_manager/table.rb +2 -2
  72. data/lib/cosmos/tools/table_manager/table_config.rb +18 -10
  73. data/lib/cosmos/tools/table_manager/table_manager.rb +61 -59
  74. data/lib/cosmos/tools/table_manager/table_manager_core.rb +24 -56
  75. data/lib/cosmos/tools/test_runner/test_runner.rb +15 -10
  76. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +9 -2
  77. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +1 -1
  78. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +9 -1
  79. data/lib/cosmos/top_level.rb +5 -5
  80. data/lib/cosmos/version.rb +4 -4
  81. data/spec/config/config_parser_spec.rb +40 -2
  82. data/spec/packet_logs/packet_log_reader_spec.rb +66 -2
  83. data/spec/packets/packet_spec.rb +27 -0
  84. data/spec/script/scripting_spec.rb +7 -2
  85. data/spec/spec_helper.rb +4 -5
  86. data/spec/system/system_spec.rb +18 -0
  87. metadata +7 -7
@@ -102,7 +102,7 @@ module Cosmos
102
102
  ensure
103
103
  reset()
104
104
  end
105
- return bin_files
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
- str, size = create_hex_string(data)
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 item_def.display_type == :STRING
309
- if x.length > item_def.range.last || x.length < item_def.range.first
310
- result << " #{item_def.name}: #{x} must be between #{item_def.range.first} and #{item_def.range.last} characters\n"
311
- end
312
- else
313
- # check to see if the value lies within its valid range
314
- if not item_def.range.include?(x)
315
- # if the value is displayed as hex, display the range as hex
316
- if item_def.display_type == :HEX
317
- range_first = "0x%X" % item_def.range.first
318
- range_last = "0x%X" % item_def.range.last
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
- return result
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
- data = table.buffer
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
- next if object.name == 'CustomTestSuite'
1116
- if (object.ancestors.include?(TestSuite) &&
1117
- object != TestSuite &&
1118
- !ignored_test_suite_classes.include?(object))
1119
- @@test_suites << object.new
1120
- end
1121
- if (object.ancestors.include?(Test) &&
1122
- object != Test &&
1123
- !ignored_test_classes.include?(object))
1124
- tests << object
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 (parent_layout, *combobox_items)
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 (parent_layout, radiobutton_text)
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
 
@@ -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['GEM_HOME']}"
461
- file.puts "RUBYLIB: #{ENV['GEM_HOME']}"
462
- file.puts "GEM_PATH: #{ENV['GEM_HOME']}"
463
- file.puts "GEMRC: #{ENV['GEM_HOME']}"
464
- file.puts "RI_DEVKIT: #{ENV['GEM_HOME']}"
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 ""
@@ -1,12 +1,12 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- COSMOS_VERSION = '3.8.2'
3
+ COSMOS_VERSION = '3.8.3'
4
4
  module Cosmos
5
5
  module Version
6
6
  MAJOR = '3'
7
7
  MINOR = '8'
8
- PATCH = '2'
9
- BUILD = '8283169565fc37b09011e37193d511ff15a7d42c'
8
+ PATCH = '3'
9
+ BUILD = 'e6be858ed961d6fe872435be2b74c3499167a62a'
10
10
  end
11
- VERSION = '3.8.2'
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 "optionallies not remove quotes" do
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 "optionallies yield comment lines" do
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 "optionallies not identify and define packets" do
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
@@ -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
- load_utility("cosmos.rb")
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("cosmos.rb")
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