cosmos 3.8.2 → 3.8.3

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.
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