byebug 1.4.1 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +5 -0
  3. data/CHANGELOG.md +10 -0
  4. data/GUIDE.md +235 -9
  5. data/bin/byebug +12 -16
  6. data/byebug.gemspec +0 -1
  7. data/ext/byebug/byebug.c +5 -6
  8. data/lib/byebug.rb +17 -8
  9. data/lib/byebug/command.rb +12 -21
  10. data/lib/byebug/commands/breakpoints.rb +5 -9
  11. data/lib/byebug/commands/catchpoint.rb +2 -4
  12. data/lib/byebug/commands/condition.rb +4 -6
  13. data/lib/byebug/commands/continue.rb +2 -4
  14. data/lib/byebug/commands/control.rb +2 -4
  15. data/lib/byebug/commands/display.rb +4 -10
  16. data/lib/byebug/commands/edit.rb +2 -4
  17. data/lib/byebug/commands/enable.rb +6 -10
  18. data/lib/byebug/commands/eval.rb +12 -13
  19. data/lib/byebug/commands/finish.rb +2 -4
  20. data/lib/byebug/commands/frame.rb +6 -15
  21. data/lib/byebug/commands/help.rb +2 -3
  22. data/lib/byebug/commands/info.rb +5 -7
  23. data/lib/byebug/commands/jump.rb +2 -4
  24. data/lib/byebug/commands/kill.rb +2 -4
  25. data/lib/byebug/commands/list.rb +2 -4
  26. data/lib/byebug/commands/method.rb +4 -10
  27. data/lib/byebug/commands/quit.rb +2 -4
  28. data/lib/byebug/commands/reload.rb +1 -3
  29. data/lib/byebug/commands/repl.rb +3 -7
  30. data/lib/byebug/commands/save.rb +2 -4
  31. data/lib/byebug/commands/set.rb +4 -8
  32. data/lib/byebug/commands/show.rb +2 -4
  33. data/lib/byebug/commands/skip.rb +2 -4
  34. data/lib/byebug/commands/source.rb +1 -3
  35. data/lib/byebug/commands/stepping.rb +2 -4
  36. data/lib/byebug/commands/trace.rb +2 -4
  37. data/lib/byebug/commands/variables.rb +6 -18
  38. data/lib/byebug/version.rb +1 -1
  39. data/old_doc/byebug.texi +1 -9
  40. data/test/breakpoints_test.rb +1 -2
  41. data/test/examples/info.rb +5 -5
  42. data/test/examples/list.rb +21 -21
  43. data/test/examples/reload.rb +5 -5
  44. data/test/examples/repl.rb +6 -0
  45. data/test/examples/save.rb +2 -2
  46. data/test/examples/set.rb +2 -2
  47. data/test/examples/source.rb +2 -2
  48. data/test/finish_test.rb +1 -1
  49. data/test/help_test.rb +31 -15
  50. data/test/list_test.rb +27 -25
  51. data/test/reload_test.rb +3 -3
  52. data/test/repl_test.rb +8 -8
  53. data/test/set_test.rb +2 -12
  54. data/test/support/test_dsl.rb +25 -39
  55. data/test/variables_test.rb +0 -2
  56. metadata +4 -18
  57. data/test/examples/irb.rb +0 -6
@@ -1,6 +1,6 @@
1
1
  byebug
2
- 2
3
- 3
4
- 4
5
- 5
6
- 6
2
+ a = 2
3
+ a = 3
4
+ a = 4
5
+ a = 5
6
+ a = 6
@@ -0,0 +1,6 @@
1
+ byebug
2
+ a = 2
3
+ a = 3
4
+ a = 4
5
+ a = 5
6
+ a = 6
@@ -1,3 +1,3 @@
1
1
  byebug
2
- 2
3
- 3
2
+ a = 2
3
+ a = 3
@@ -1,3 +1,3 @@
1
1
  byebug
2
- 2
3
- 3
2
+ a = 2
3
+ a = 3
@@ -1,3 +1,3 @@
1
1
  byebug
2
- 2
3
- 3
2
+ a = 2
3
+ a = 3
@@ -36,7 +36,7 @@ class TestFinish < TestDsl::TestCase
36
36
  end
37
37
 
38
38
  describe 'Post Mortem' do
39
- before { Byebug::Command.settings[:autoeval] = false }
39
+ temporary_change_hash Byebug::Command.settings, :autoeval, false
40
40
 
41
41
  it 'must not work in post-mortem mode' do
42
42
  enter 'cont', 'finish'
@@ -16,26 +16,42 @@ class TestHelp < TestDsl::TestCase
16
16
  'Type "help <command-name>" for help on a specific command',
17
17
  'Available commands:', columnize(available_commands, 50)
18
18
  end
19
- end
20
19
 
21
- it 'must work when shortcut used' do
22
- enter 'h'
23
- debug_file 'help'
24
- check_output_includes \
25
- 'Type "help <command-name>" for help on a specific command'
20
+ it 'must work when shortcut used' do
21
+ enter 'h'
22
+ debug_file 'help'
23
+ check_output_includes \
24
+ 'Type "help <command-name>" for help on a specific command'
25
+ end
26
26
  end
27
27
 
28
- it 'must show an error if an undefined command is specified' do
29
- enter 'help foobar'
30
- debug_file 'help'
31
- check_output_includes \
32
- 'Undefined command: "foobar". Try "help".', interface.error_queue
28
+ describe 'when typed with a command' do
29
+ it 'must show an error if an undefined command is specified' do
30
+ enter 'help foobar'
31
+ debug_file 'help'
32
+ check_output_includes \
33
+ 'Undefined command: "foobar". Try "help".', interface.error_queue
34
+ end
35
+
36
+ it "must show a command's help" do
37
+ enter 'help break'
38
+ debug_file 'help'
39
+ check_output_includes \
40
+ "b[reak] file:line [if expr]\n" \
41
+ "b[reak] class(.|#)method [if expr]\n\n" \
42
+ "Set breakpoint to some position, (optionally) if expr == true\n"
43
+ end
33
44
  end
34
45
 
35
- it 'must show a command\'s help' do
36
- enter 'help break'
37
- debug_file 'help'
38
- check_output_includes Byebug::BreakCommand.help(nil)
46
+ describe 'when typed with command and subcommand' do
47
+ it "must show subcommand's long help" do
48
+ enter 'help info breakpoints'
49
+ debug_file 'help'
50
+ check_output_includes \
51
+ "Status of user-settable breakpoints.\n" \
52
+ "Without argument, list info about all breakpoints. " \
53
+ "With an integer argument, list info on that breakpoint."
54
+ end
39
55
  end
40
56
 
41
57
  describe 'Post Mortem' do
@@ -43,16 +43,16 @@ class TestList < TestDsl::TestCase
43
43
  enter 'break 5', 'cont'
44
44
  debug_file 'list'
45
45
  check_output_includes "[1, 10] in #{fullpath('list')}", '1: byebug',
46
- '2: 2', '3: 3', '4: 4', '=> 5: 5', '6: 6', '7: 7', '8: 8', '9: 9',
47
- '10: 10'
46
+ '2: a = 2', '3: a = 3', '4: a = 4', '=> 5: a = 5', '6: a = 6',
47
+ '7: a = 7', '8: a = 8', '9: a = 9', '10: a = 10'
48
48
  end
49
49
 
50
50
  it 'must list forward after second call' do
51
51
  enter 'break 5', 'cont', 'list'
52
52
  debug_file 'list'
53
- check_output_includes "[11, 20] in #{fullpath('list')}", '11: 11',
54
- '12: 12', '13: 13', '14: 14', '15: 15', '16: 16', '17: 17', '18: 18',
55
- '19: 19', '20: 20'
53
+ check_output_includes "[11, 20] in #{fullpath('list')}", '11: a = 11',
54
+ '12: a = 12', '13: a = 13', '14: a = 14', '15: a = 15', '16: a = 16',
55
+ '17: a = 17', '18: a = 18', '19: a = 19', '20: a = 20'
56
56
  end
57
57
  end
58
58
 
@@ -62,17 +62,17 @@ class TestList < TestDsl::TestCase
62
62
  it 'must show surrounding lines with the first call' do
63
63
  enter 'break 15', 'cont', 'list -'
64
64
  debug_file 'list'
65
- check_output_includes "[10, 19] in #{fullpath('list')}", '10: 10',
66
- '11: 11', '12: 12', '13: 13', '14: 14', '=> 15: 15', '16: 16', '17: 17',
67
- '18: 18', '19: 19'
65
+ check_output_includes "[10, 19] in #{fullpath('list')}", '10: a = 10',
66
+ '11: a = 11', '12: a = 12', '13: a = 13', '14: a = 14', '=> 15: a = 15',
67
+ '16: a = 16', '17: a = 17', '18: a = 18', '19: a = 19'
68
68
  end
69
69
 
70
70
  it 'must list backward after second call' do
71
71
  enter 'break 15', 'cont', 'list -', 'list -'
72
72
  debug_file 'list'
73
73
  check_output_includes "[1, 10] in #{fullpath('list')}", '1: byebug',
74
- '2: 2', '3: 3', '4: 4', '5: 5', '6: 6', '7: 7', '8: 8', '9: 9',
75
- '10: 10'
74
+ '2: a = 2', '3: a = 3', '4: a = 4', '5: a = 5', '6: a = 6', '7: a = 7',
75
+ '8: a = 8', '9: a = 9', '10: a = 10'
76
76
  end
77
77
  end
78
78
 
@@ -83,8 +83,8 @@ class TestList < TestDsl::TestCase
83
83
  enter 'break 5', 'cont', 'list ='
84
84
  debug_file 'list'
85
85
  check_output_includes "[1, 10] in #{fullpath('list')}", '1: byebug',
86
- '2: 2', '3: 3', '4: 4', '=> 5: 5', '6: 6', '7: 7', '8: 8', '9: 9',
87
- '10: 10'
86
+ '2: a = 2', '3: a = 3', '4: a = 4', '=> 5: a = 5', '6: a = 6',
87
+ '7: a = 7', '8: a = 8', '9: a = 9', '10: a = 10'
88
88
  end
89
89
  end
90
90
 
@@ -93,14 +93,14 @@ class TestList < TestDsl::TestCase
93
93
  enter 'list 4-6'
94
94
  debug_file 'list'
95
95
  check_output_includes \
96
- "[4, 6] in #{fullpath('list')}", '4: 4', '5: 5', '6: 6'
96
+ "[4, 6] in #{fullpath('list')}", '4: a = 4', '5: a = 5', '6: a = 6'
97
97
  end
98
98
 
99
99
  it 'must show with mm,nn' do
100
100
  enter 'list 4,6'
101
101
  debug_file 'list'
102
102
  check_output_includes \
103
- "[4, 6] in #{fullpath('list')}", '4: 4', '5: 5', '6: 6'
103
+ "[4, 6] in #{fullpath('list')}", '4: a = 4', '5: a = 5', '6: a = 6'
104
104
  end
105
105
 
106
106
  it 'must show nothing if there is no such lines' do
@@ -122,38 +122,40 @@ class TestList < TestDsl::TestCase
122
122
  it 'must show surroundings with mm-' do
123
123
  enter 'list 14-'
124
124
  debug_file 'list'
125
- check_output_includes "[9, 18] in #{fullpath('list')}", '9: 9', '10: 10',
126
- '11: 11', '12: 12', '13: 13', '14: 14', '15: 15', '16: 16', '17: 17',
127
- '18: 18'
125
+ check_output_includes "[9, 18] in #{fullpath('list')}", '9: a = 9',
126
+ '10: a = 10', '11: a = 11', '12: a = 12', '13: a = 13', '14: a = 14',
127
+ '15: a = 15', '16: a = 16', '17: a = 17', '18: a = 18'
128
128
  end
129
129
 
130
130
  it 'must show surroundings with mm,' do
131
131
  enter 'list 14,'
132
132
  debug_file 'list'
133
- check_output_includes "[9, 18] in #{fullpath('list')}", '9: 9', '10: 10',
134
- '11: 11', '12: 12', '13: 13', '14: 14', '15: 15', '16: 16', '17: 17',
135
- '18: 18'
133
+ check_output_includes "[9, 18] in #{fullpath('list')}", '9: a = 9',
134
+ '10: a = 10', '11: a = 11', '12: a = 12', '13: a = 13', '14: a = 14',
135
+ '15: a = 15', '16: a = 16', '17: a = 17', '18: a = 18'
136
136
  end
137
137
  end
138
138
 
139
139
  describe 'reload source' do
140
- after { change_line_in_file(fullpath('list'), 4, '4') }
140
+ after { change_line_in_file(fullpath('list'), 4, 'a = 4') }
141
141
 
142
142
  describe 'when autoreload is false' do
143
143
  temporary_change_hash Byebug::Command.settings, :autoreload, false
144
144
 
145
145
  it 'must not reload listing with file changes' do
146
- enter -> { change_line_in_file fullpath('list'), 4, '100' ; 'list 4-4' }
146
+ enter -> { change_line_in_file fullpath('list'), 4, 'a = 100' ;
147
+ 'list 4-4' }
147
148
  debug_file 'list'
148
- check_output_includes '4: 4'
149
+ check_output_includes '4: a = 4'
149
150
  end
150
151
  end
151
152
 
152
153
  describe 'when autoreload is true' do
153
154
  it 'must reload listing with file changes' do
154
- enter -> { change_line_in_file fullpath('list'), 4, '100' ; 'list 4-4' }
155
+ enter -> { change_line_in_file fullpath('list'), 4, 'a = 100' ;
156
+ 'list 4-4' }
155
157
  debug_file 'list'
156
- check_output_includes '4: 100'
158
+ check_output_includes '4: a = 100'
157
159
  end
158
160
  end
159
161
  end
@@ -21,14 +21,14 @@ class TestReload < TestDsl::TestCase
21
21
  end
22
22
 
23
23
  describe 'reloading' do
24
- after { change_line_in_file(fullpath('reload'), 4, '4') }
24
+ after { change_line_in_file(fullpath('reload'), 4, 'a = 4') }
25
25
  it 'must reload the code' do
26
26
  enter 'break 3', 'cont', 'l 4-4', -> do
27
- change_line_in_file(fullpath('reload'), 4, '100')
27
+ change_line_in_file(fullpath('reload'), 4, 'a = 100')
28
28
  'reload'
29
29
  end, 'l 4-4'
30
30
  debug_file 'reload'
31
- check_output_includes '4: 100'
31
+ check_output_includes '4: a = 100'
32
32
  end
33
33
  end
34
34
 
@@ -13,26 +13,26 @@ class TestRepl < TestDsl::TestCase
13
13
  it 'must support next command' do
14
14
  irb.stubs(:eval_input).throws(:IRB_EXIT, :next)
15
15
  enter 'irb'
16
- debug_file('irb') { state.line.must_equal 3 }
16
+ debug_file('repl') { state.line.must_equal 3 }
17
17
  end
18
18
 
19
19
  it 'must support step command' do
20
20
  irb.stubs(:eval_input).throws(:IRB_EXIT, :step)
21
21
  enter 'irb'
22
- debug_file('irb') { state.line.must_equal 3 }
22
+ debug_file('repl') { state.line.must_equal 3 }
23
23
  end
24
24
 
25
25
  it 'must support cont command' do
26
26
  irb.stubs(:eval_input).throws(:IRB_EXIT, :cont)
27
27
  enter 'break 4', 'irb'
28
- debug_file('irb') { state.line.must_equal 4 }
28
+ debug_file('repl') { state.line.must_equal 4 }
29
29
  end
30
30
 
31
31
  describe 'autoirb' do
32
32
  it 'must call irb automatically after breakpoint' do
33
33
  irb.expects(:eval_input)
34
34
  enter 'set autoirb', 'break 4', 'cont', 'set noautoirb'
35
- debug_file 'irb'
35
+ debug_file 'repl'
36
36
  end
37
37
  end
38
38
 
@@ -43,7 +43,7 @@ class TestRepl < TestDsl::TestCase
43
43
  byebug_state = nil
44
44
  irb.stubs(:eval_input).calls { byebug_state = $byebug_state }
45
45
  enter 'irb -d'
46
- debug_file 'irb'
46
+ debug_file 'repl'
47
47
  byebug_state.must_be_kind_of Byebug::CommandProcessor::State
48
48
  end
49
49
 
@@ -51,7 +51,7 @@ class TestRepl < TestDsl::TestCase
51
51
  byebug_state = nil
52
52
  irb.stubs(:eval_input).calls { byebug_state = $byebug_state }
53
53
  enter 'irb'
54
- debug_file 'irb'
54
+ debug_file 'repl'
55
55
  byebug_state.must_be_nil
56
56
  end
57
57
  end
@@ -91,13 +91,13 @@ class TestRepl < TestDsl::TestCase
91
91
 
92
92
  it 'must set $byebug_state if irb is in the debug mode' do
93
93
  enter 'pry -d'
94
- debug_file 'irb'
94
+ debug_file 'repl'
95
95
  $byebug_state.must_be_kind_of Byebug::CommandProcessor::State
96
96
  end
97
97
 
98
98
  it 'must not set $byebug_state if irb is not in the debug mode' do
99
99
  enter 'pry'
100
- debug_file 'pry'
100
+ debug_file 'repl'
101
101
  $byebug_state.must_be_nil
102
102
  end
103
103
  end
@@ -71,7 +71,7 @@ class TestSet < TestDsl::TestCase
71
71
  describe 'testing' do
72
72
  describe '$byebug_state' do
73
73
  describe 'when setting "testing" to on' do
74
- temporary_change_hash Byebug::Command.settings, :testing, 0
74
+ temporary_change_hash Byebug::Command.settings, :testing, false
75
75
 
76
76
  it 'must get set' do
77
77
  enter 'set testing', 'break 3', 'cont'
@@ -81,7 +81,7 @@ class TestSet < TestDsl::TestCase
81
81
  end
82
82
 
83
83
  describe 'when setting "testing" to off' do
84
- temporary_change_hash Byebug::Command.settings, :testing, 1
84
+ temporary_change_hash Byebug::Command.settings, :testing, true
85
85
 
86
86
  it 'must get unset' do
87
87
  enter 'set notesting', 'break 3', 'cont'
@@ -89,16 +89,6 @@ class TestSet < TestDsl::TestCase
89
89
  end
90
90
  end
91
91
  end
92
-
93
- describe 'basename' do
94
- temporary_change_hash Byebug::Command.settings, :basename, false
95
-
96
- it 'must get set if "testing" is on' do
97
- enter 'set testing'
98
- debug_file('set')
99
- Byebug::Command.settings[:basename].must_equal true
100
- end
101
- end
102
92
  end
103
93
 
104
94
  describe 'history' do
@@ -1,55 +1,42 @@
1
1
  module TestDsl
2
2
 
3
- module ClassUtils
4
-
5
- def temporary_change_hash hash, key, value
6
- mod = Module.new do
7
- extend Minitest::Spec::DSL
8
-
9
- before do
10
- @old_hashes ||= {}
11
- @old_hashes.merge!({ hash => { key => hash[key] } }) do |k, v1, v2|
12
- v1.merge(v2)
13
- end
14
- hash[key] = value
15
- end
3
+ class TestBase < MiniTest::Spec
16
4
 
17
- after do
18
- hash[key] = @old_hashes[hash][key]
5
+ def self.temporary_change_hash hash, key, value
6
+ before do
7
+ @old_hashes ||= {}
8
+ @old_hashes.merge!({ hash => { key => hash[key] } }) do |k, v1, v2|
9
+ v1.merge(v2)
19
10
  end
11
+ hash[key] = value
20
12
  end
21
13
 
22
- include mod
14
+ after do
15
+ hash[key] = @old_hashes[hash][key]
16
+ end
23
17
  end
24
18
 
25
- def temporary_change_const klass, const, value
26
- mod = Module.new do
27
- extend Minitest::Spec::DSL
28
-
29
- before do
30
- @old_consts ||= {}
31
- old_value = klass.const_defined?(const) ?
32
- klass.const_get(const) : :__undefined__
33
- @old_consts.merge!({ klass => { const => old_value } }) do |k, v1, v2|
34
- v1.merge(v2)
35
- end
36
- klass.send :remove_const, const if klass.const_defined?(const)
37
- klass.const_set const, value unless value == :__undefined__
38
- end
39
-
40
- after do
41
- klass.send :remove_const, const if klass.const_defined?(const)
42
- klass.const_set const, @old_consts[klass][const] unless
43
- @old_consts[klass][const] == :__undefined__
19
+ def self.temporary_change_const klass, const, value
20
+ before do
21
+ @old_consts ||= {}
22
+ old_value = klass.const_defined?(const) ?
23
+ klass.const_get(const) : :__undefined__
24
+ @old_consts.merge!({ klass => { const => old_value } }) do |k, v1, v2|
25
+ v1.merge(v2)
44
26
  end
27
+ klass.send :remove_const, const if klass.const_defined?(const)
28
+ klass.const_set const, value unless value == :__undefined__
45
29
  end
46
30
 
47
- include mod
31
+ after do
32
+ klass.send :remove_const, const if klass.const_defined?(const)
33
+ klass.const_set const, @old_consts[klass][const] unless
34
+ @old_consts[klass][const] == :__undefined__
35
+ end
48
36
  end
49
37
  end
50
38
 
51
- class TestCase < Minitest::Spec
52
- extend TestDsl::ClassUtils
39
+ class TestCase < TestBase
53
40
  include TestDsl
54
41
 
55
42
  def setup
@@ -183,5 +170,4 @@ module TestDsl
183
170
  new_content = old_content.split("\n").tap { |c| c[line - 1] = new_line_content }.join("\n")
184
171
  File.open(file, 'w') { |f| f.write(new_content) }
185
172
  end
186
-
187
173
  end
@@ -2,8 +2,6 @@ require_relative 'test_helper'
2
2
 
3
3
  class TestVariables < TestDsl::TestCase
4
4
 
5
- temporary_change_hash Byebug::Command.settings, :width, 40
6
-
7
5
  describe 'class variables' do
8
6
  it 'must show variables' do
9
7
  enter 'break 19', 'cont', 'var class'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: byebug
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Rodríguez
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-06-15 00:00:00.000000000 Z
13
+ date: 2013-06-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: columnize
@@ -82,20 +82,6 @@ dependencies:
82
82
  - - ~>
83
83
  - !ruby/object:Gem::Version
84
84
  version: 0.14.0
85
- - !ruby/object:Gem::Dependency
86
- name: minitest
87
- requirement: !ruby/object:Gem::Requirement
88
- requirements:
89
- - - ~>
90
- - !ruby/object:Gem::Version
91
- version: 5.0.3
92
- type: :development
93
- prerelease: false
94
- version_requirements: !ruby/object:Gem::Requirement
95
- requirements:
96
- - - ~>
97
- - !ruby/object:Gem::Version
98
- version: 5.0.3
99
85
  description: |-
100
86
  Byebug is a Ruby 2.0 debugger. It's implemented using the
101
87
  Ruby 2.0 TracePoint C API for execution control and the Debug Inspector C
@@ -189,7 +175,6 @@ files:
189
175
  - test/examples/help.rb
190
176
  - test/examples/info.rb
191
177
  - test/examples/info2.rb
192
- - test/examples/irb.rb
193
178
  - test/examples/jump.rb
194
179
  - test/examples/kill.rb
195
180
  - test/examples/list.rb
@@ -197,6 +182,7 @@ files:
197
182
  - test/examples/post_mortem.rb
198
183
  - test/examples/quit.rb
199
184
  - test/examples/reload.rb
185
+ - test/examples/repl.rb
200
186
  - test/examples/restart.rb
201
187
  - test/examples/save.rb
202
188
  - test/examples/set.rb
@@ -279,7 +265,6 @@ test_files:
279
265
  - test/examples/help.rb
280
266
  - test/examples/info.rb
281
267
  - test/examples/info2.rb
282
- - test/examples/irb.rb
283
268
  - test/examples/jump.rb
284
269
  - test/examples/kill.rb
285
270
  - test/examples/list.rb
@@ -287,6 +272,7 @@ test_files:
287
272
  - test/examples/post_mortem.rb
288
273
  - test/examples/quit.rb
289
274
  - test/examples/reload.rb
275
+ - test/examples/repl.rb
290
276
  - test/examples/restart.rb
291
277
  - test/examples/save.rb
292
278
  - test/examples/set.rb