byebug 3.1.2 → 3.2.0
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 +4 -2
- data/CHANGELOG.md +15 -0
- data/GUIDE.md +17 -35
- data/Gemfile +8 -5
- data/LICENSE +1 -1
- data/README.md +10 -22
- data/Rakefile +1 -1
- data/ext/byebug/byebug.c +3 -2
- data/lib/byebug.rb +3 -38
- data/lib/byebug/commands/break.rb +83 -0
- data/lib/byebug/commands/catchpoint.rb +0 -1
- data/lib/byebug/commands/condition.rb +10 -6
- data/lib/byebug/commands/continue.rb +3 -6
- data/lib/byebug/commands/delete.rb +38 -0
- data/lib/byebug/commands/edit.rb +0 -2
- data/lib/byebug/commands/enable.rb +7 -8
- data/lib/byebug/commands/finish.rb +0 -2
- data/lib/byebug/commands/frame.rb +13 -15
- data/lib/byebug/commands/help.rb +1 -3
- data/lib/byebug/commands/history.rb +3 -3
- data/lib/byebug/commands/info.rb +4 -13
- data/lib/byebug/commands/interrupt.rb +25 -0
- data/lib/byebug/commands/kill.rb +0 -2
- data/lib/byebug/commands/list.rb +2 -4
- data/lib/byebug/commands/method.rb +2 -8
- data/lib/byebug/commands/quit.rb +0 -2
- data/lib/byebug/commands/reload.rb +2 -15
- data/lib/byebug/commands/repl.rb +0 -3
- data/lib/byebug/commands/{control.rb → restart.rb} +2 -26
- data/lib/byebug/commands/save.rb +0 -1
- data/lib/byebug/commands/set.rb +4 -7
- data/lib/byebug/commands/show.rb +0 -3
- data/lib/byebug/commands/source.rb +0 -3
- data/lib/byebug/commands/stepping.rb +3 -4
- data/lib/byebug/commands/trace.rb +0 -1
- data/lib/byebug/commands/variables.rb +3 -4
- data/lib/byebug/context.rb +0 -1
- data/lib/byebug/helper.rb +23 -0
- data/lib/byebug/interfaces/script_interface.rb +1 -1
- data/lib/byebug/processors/command_processor.rb +9 -9
- data/lib/byebug/remote.rb +2 -2
- data/lib/byebug/setting.rb +3 -1
- data/lib/byebug/settings/autoeval.rb +3 -1
- data/lib/byebug/settings/autoirb.rb +3 -1
- data/lib/byebug/settings/autolist.rb +3 -1
- data/lib/byebug/settings/autoreload.rb +1 -3
- data/lib/byebug/settings/autosave.rb +1 -3
- data/lib/byebug/settings/callstyle.rb +2 -4
- data/lib/byebug/settings/fullpath.rb +1 -3
- data/lib/byebug/settings/histfile.rb +1 -3
- data/lib/byebug/settings/histsize.rb +0 -4
- data/lib/byebug/settings/listsize.rb +1 -3
- data/lib/byebug/settings/post_mortem.rb +14 -1
- data/lib/byebug/settings/width.rb +1 -17
- data/lib/byebug/version.rb +1 -1
- data/test/break_test.rb +376 -0
- data/test/condition_test.rb +82 -0
- data/test/continue_test.rb +27 -30
- data/test/debugger_alias_test.rb +4 -4
- data/test/delete_test.rb +26 -0
- data/test/display_test.rb +80 -102
- data/test/edit_test.rb +28 -31
- data/test/eval_test.rb +50 -80
- data/test/finish_test.rb +23 -23
- data/test/frame_test.rb +172 -186
- data/test/help_test.rb +27 -37
- data/test/history_test.rb +32 -41
- data/test/info_test.rb +198 -230
- data/test/interrupt_test.rb +17 -36
- data/test/irb_test.rb +47 -0
- data/test/kill_test.rb +19 -19
- data/test/list_test.rb +126 -133
- data/test/method_test.rb +21 -54
- data/test/post_mortem_test.rb +44 -46
- data/test/pry_test.rb +42 -0
- data/test/quit_test.rb +17 -15
- data/test/reload_test.rb +23 -28
- data/test/restart_test.rb +35 -63
- data/test/save_test.rb +46 -62
- data/test/set_test.rb +93 -144
- data/test/show_test.rb +50 -71
- data/test/source_test.rb +23 -26
- data/test/stepping_test.rb +125 -153
- data/test/support/matchers.rb +1 -6
- data/test/support/test_interface.rb +1 -1
- data/test/support/{test_dsl.rb → utils.rb} +17 -64
- data/test/test_helper.rb +25 -7
- data/test/thread_test.rb +101 -89
- data/test/trace_test.rb +48 -85
- data/test/variables_test.rb +43 -80
- metadata +18 -13
- data/lib/byebug/commands/breakpoints.rb +0 -137
- data/lib/byebug/commands/skip.rb +0 -30
- data/test/breakpoints_test.rb +0 -474
- data/test/conditions_test.rb +0 -82
- data/test/repl_test.rb +0 -75
data/test/interrupt_test.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
module
|
2
|
-
class
|
1
|
+
module Byebug
|
2
|
+
class InterruptExample
|
3
3
|
def self.a(num)
|
4
4
|
num += 2
|
5
5
|
b(num)
|
@@ -16,49 +16,30 @@ module InterruptTest
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
class InterruptTestCase <
|
20
|
-
|
19
|
+
class InterruptTestCase < TestCase
|
20
|
+
def setup
|
21
21
|
@example = -> do
|
22
22
|
byebug
|
23
|
-
ex =
|
23
|
+
ex = InterruptExample.a(7)
|
24
24
|
2.times do
|
25
25
|
ex += 1
|
26
26
|
end
|
27
|
-
|
27
|
+
InterruptExample.b(ex)
|
28
28
|
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe 'Interrupt Command' do
|
32
|
-
describe 'method call behaviour' do
|
33
|
-
it 'must interrupt on the next line' do
|
34
|
-
enter 'interrupt', 'continue'
|
35
|
-
debug_proc(@example) do
|
36
|
-
state.line.must_equal 4
|
37
|
-
state.file.must_equal __FILE__
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe 'when forcestep is set' do
|
42
|
-
temporary_change_hash Byebug::Setting, :forcestep, true
|
43
|
-
|
44
|
-
it 'must interrupt on the next line' do
|
45
|
-
enter 'interrupt', 'continue'
|
46
|
-
debug_proc(@example) do
|
47
|
-
state.line.must_equal 4
|
48
|
-
state.file.must_equal __FILE__
|
49
|
-
end
|
50
|
-
end
|
51
29
|
|
52
|
-
|
53
|
-
|
30
|
+
super
|
31
|
+
end
|
54
32
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
33
|
+
def test_interrupt_stops_at_the_next_statement
|
34
|
+
enter 'interrupt', 'continue'
|
35
|
+
debug_proc(@example) do
|
36
|
+
assert_equal [__FILE__, 4], [state.file, state.line]
|
61
37
|
end
|
62
38
|
end
|
39
|
+
|
40
|
+
def test_interrupt_steps_into_blocks
|
41
|
+
enter 'break 24', 'cont', 'interrupt', 'cont'
|
42
|
+
debug_proc(@example) { assert_equal 25, state.line }
|
43
|
+
end
|
63
44
|
end
|
64
45
|
end
|
data/test/irb_test.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
module Byebug
|
2
|
+
class IrbTestCase < TestCase
|
3
|
+
def setup
|
4
|
+
@example = -> do
|
5
|
+
byebug
|
6
|
+
a = 2
|
7
|
+
a = 3
|
8
|
+
a = 4
|
9
|
+
a = 5
|
10
|
+
a = 6
|
11
|
+
end
|
12
|
+
|
13
|
+
super
|
14
|
+
|
15
|
+
interface.stubs(:kind_of?).with(LocalInterface).returns(true)
|
16
|
+
IRB::Irb.stubs(:new).returns(irb)
|
17
|
+
end
|
18
|
+
|
19
|
+
def irb
|
20
|
+
@irb ||= stub(context: -> {})
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_irb_supports_next_command
|
24
|
+
irb.stubs(:eval_input).throws(:IRB_EXIT, :next)
|
25
|
+
enter 'irb'
|
26
|
+
debug_proc(@example) { assert_equal 7, state.line }
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_irb_supports_step_command
|
30
|
+
irb.stubs(:eval_input).throws(:IRB_EXIT, :step)
|
31
|
+
enter 'irb'
|
32
|
+
debug_proc(@example) { assert_equal 7, state.line }
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_irb_supports_cont_command
|
36
|
+
irb.stubs(:eval_input).throws(:IRB_EXIT, :cont)
|
37
|
+
enter 'break 8', 'irb'
|
38
|
+
debug_proc(@example) { assert_equal 8, state.line }
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_autoirb_calls_irb_automatically_after_every_stop
|
42
|
+
irb.expects(:eval_input)
|
43
|
+
enter 'set autoirb', 'break 8', 'cont'
|
44
|
+
debug_proc(@example)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/test/kill_test.rb
CHANGED
@@ -1,50 +1,50 @@
|
|
1
|
-
module
|
2
|
-
class
|
1
|
+
module Byebug
|
2
|
+
class KillExample
|
3
3
|
def self.kill_me
|
4
4
|
'dieeee'
|
5
5
|
end
|
6
6
|
end
|
7
7
|
|
8
|
-
class KillTestCase <
|
9
|
-
|
8
|
+
class KillTestCase < TestCase
|
9
|
+
def setup
|
10
10
|
@example = -> do
|
11
11
|
byebug
|
12
|
-
|
12
|
+
KillExample.kill_me
|
13
13
|
end
|
14
|
+
|
15
|
+
super
|
14
16
|
end
|
15
17
|
|
16
|
-
|
18
|
+
def test_kill_sends_signal_to_some_pid
|
17
19
|
Process.expects(:kill).with('USR1', Process.pid)
|
18
20
|
enter 'kill USR1'
|
19
21
|
debug_proc(@example)
|
20
22
|
end
|
21
23
|
|
22
|
-
|
24
|
+
def test_kill_closes_interface_when_sending_KILL_signal_explicitly
|
23
25
|
Process.stubs(:kill).with('KILL', Process.pid)
|
24
26
|
interface.expects(:close)
|
25
27
|
enter 'kill KILL'
|
26
28
|
debug_proc(@example)
|
27
29
|
end
|
28
30
|
|
29
|
-
|
31
|
+
def test_kill_asks_confirmation_when_sending_kill_implicitly
|
30
32
|
Process.expects(:kill).with('KILL', Process.pid)
|
31
33
|
enter 'kill', 'y'
|
32
34
|
debug_proc(@example)
|
33
35
|
check_output_includes 'Really kill? (y/n)', interface.confirm_queue
|
34
36
|
end
|
35
37
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
38
|
+
def test_kill_does_not_send_an_unknown_signal
|
39
|
+
Process.expects(:kill).with('BLA', Process.pid).never
|
40
|
+
enter 'kill BLA'
|
41
|
+
debug_proc(@example)
|
42
|
+
end
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
end
|
44
|
+
def test_kill_shows_an_error_when_the_signal_in_unknown
|
45
|
+
enter 'kill BLA'
|
46
|
+
debug_proc(@example)
|
47
|
+
check_error_includes 'signal name BLA is not a signal I know about'
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
data/test/list_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
module
|
2
|
-
class ListTestCase <
|
3
|
-
|
1
|
+
module Byebug
|
2
|
+
class ListTestCase < TestCase
|
3
|
+
def setup
|
4
4
|
@example = -> do
|
5
5
|
byebug
|
6
6
|
a = 6
|
@@ -25,6 +25,8 @@ module ListTest
|
|
25
25
|
a = 25
|
26
26
|
a = '%26'
|
27
27
|
end
|
28
|
+
|
29
|
+
super
|
28
30
|
end
|
29
31
|
|
30
32
|
def lines_between(min, max, mark_current = true)
|
@@ -38,167 +40,158 @@ module ListTest
|
|
38
40
|
output
|
39
41
|
end
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
it 'must not set it if the param is not an integer' do
|
48
|
-
enter 'set listsize 4.0', 'list'
|
49
|
-
debug_proc(@example)
|
50
|
-
check_output_includes "[1, 10] in #{__FILE__}"
|
51
|
-
end
|
52
|
-
|
53
|
-
describe 'when it goes before beginning of file' do
|
54
|
-
temporary_change_hash Byebug::Setting, :listsize, 12
|
55
|
-
|
56
|
-
it 'must move range up' do
|
57
|
-
enter 'list'
|
58
|
-
debug_proc(@example)
|
59
|
-
check_output_includes "[1, 12] in #{__FILE__}"
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe 'when it goes after the end of file' do
|
64
|
-
it 'must move range down' do
|
65
|
-
skip "Can't test this with the current setup"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe 'very large' do
|
70
|
-
temporary_change_hash Byebug::Setting, :listsize, 1000
|
71
|
-
|
72
|
-
it 'must list whole file if number of lines is smaller than listsize' do
|
73
|
-
n_lines = %x{wc -l #{__FILE__}}.split.first.to_i
|
74
|
-
debug_proc(@example)
|
75
|
-
check_output_includes "[1, #{n_lines}] in #{__FILE__}"
|
76
|
-
end
|
77
|
-
end
|
43
|
+
def test_lists_source_code_lines
|
44
|
+
Setting[:listsize] = 10
|
45
|
+
enter 'list'
|
46
|
+
debug_proc(@example)
|
47
|
+
check_output_includes "[1, 10] in #{__FILE__}"
|
78
48
|
end
|
79
49
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
check_output_includes("[3, 12] in #{__FILE__}", *lines_between(3, 12))
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'must list forward after second call' do
|
88
|
-
enter 'break 8', 'cont', 'list'
|
89
|
-
debug_proc(@example)
|
90
|
-
check_output_includes("[13, 22] in #{__FILE__}",
|
91
|
-
*lines_between(13, 22, false))
|
92
|
-
end
|
50
|
+
def test_listsize_is_not_set_if_parameter_is_not_an_integer
|
51
|
+
enter 'set listsize 15.0', 'list'
|
52
|
+
debug_proc(@example)
|
53
|
+
check_output_doesnt_include "[1, 15] in #{__FILE__}"
|
93
54
|
end
|
94
55
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
check_output_includes("[13, 22] in #{__FILE__}", *lines_between(13, 22))
|
102
|
-
end
|
56
|
+
def test_moves_range_up_when_it_goes_before_beginning_of_file
|
57
|
+
Setting[:listsize] = 12
|
58
|
+
enter 'list'
|
59
|
+
debug_proc(@example)
|
60
|
+
check_output_includes "[1, 12] in #{__FILE__}"
|
61
|
+
end
|
103
62
|
|
104
|
-
|
105
|
-
|
106
|
-
debug_proc(@example)
|
107
|
-
check_output_includes("[3, 12] in #{__FILE__}",
|
108
|
-
*lines_between(3, 12, false))
|
109
|
-
end
|
63
|
+
def test_moves_range_down_when_it_goes_after_the_end_of_file
|
64
|
+
skip "Can't test this with the current setup"
|
110
65
|
end
|
111
66
|
|
112
|
-
|
113
|
-
|
67
|
+
def test_lists_the_whole_file_if_number_of_lines_is_smaller_than_listsize
|
68
|
+
Setting[:listsize] = 1000
|
69
|
+
n_lines = %x{wc -l #{__FILE__}}.split.first.to_i
|
70
|
+
enter 'list'
|
71
|
+
debug_proc(@example)
|
72
|
+
check_output_includes "[1, #{n_lines}] in #{__FILE__}"
|
73
|
+
end
|
114
74
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
end
|
75
|
+
def test_lists_surrounding_lines_after_the_first_call_to_list
|
76
|
+
enter 'break 8', 'cont', 'list'
|
77
|
+
debug_proc(@example)
|
78
|
+
check_output_includes("[3, 12] in #{__FILE__}", *lines_between(3, 12))
|
120
79
|
end
|
121
80
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
end
|
81
|
+
def test_lists_forwards_after_the_second_call_to_list
|
82
|
+
enter 'break 8', 'cont', 'list', 'list'
|
83
|
+
debug_proc(@example)
|
84
|
+
check_output_includes("[13, 22] in #{__FILE__}",
|
85
|
+
*lines_between(13, 22, false))
|
86
|
+
end
|
129
87
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
end
|
88
|
+
def test_lists_surrounding_lines_after_the_first_call_to_list_minus
|
89
|
+
enter 'break 18', 'cont', 'list -'
|
90
|
+
debug_proc(@example)
|
91
|
+
check_output_includes("[13, 22] in #{__FILE__}", *lines_between(13, 22))
|
92
|
+
end
|
136
93
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
end
|
94
|
+
def test_lists_backwards_after_the_second_call_to_list_minus
|
95
|
+
enter 'break 18', 'cont', 'list -', 'list -'
|
96
|
+
debug_proc(@example)
|
97
|
+
check_output_includes("[3, 12] in #{__FILE__}",
|
98
|
+
*lines_between(3, 12, false))
|
99
|
+
end
|
144
100
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
end
|
101
|
+
def test_lists_surrounding_lines_when_list_equals_is_called
|
102
|
+
enter 'break 8', 'cont', 'list ='
|
103
|
+
debug_proc(@example)
|
104
|
+
check_output_includes("[3, 12] in #{__FILE__}", *lines_between(3, 12))
|
150
105
|
end
|
151
106
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
end
|
107
|
+
def test_lists_specific_range_when_requested_in_hyphen_format
|
108
|
+
enter 'list 7-9'
|
109
|
+
debug_proc(@example)
|
110
|
+
check_output_includes("[7, 9] in #{__FILE__}",
|
111
|
+
*lines_between(7, 9, false))
|
112
|
+
end
|
159
113
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
end
|
114
|
+
def test_lists_specific_range_when_requested_in_comma_format
|
115
|
+
enter 'list 7,9'
|
116
|
+
debug_proc(@example)
|
117
|
+
check_output_includes("[7, 9] in #{__FILE__}",
|
118
|
+
*lines_between(7, 9, false))
|
166
119
|
end
|
167
120
|
|
168
|
-
|
169
|
-
|
121
|
+
def test_lists_nothing_if_unexistent_range_is_specified
|
122
|
+
enter 'list 500,505'
|
123
|
+
debug_proc(@example)
|
124
|
+
check_error_includes 'Invalid line range'
|
125
|
+
check_output_doesnt_include "[500, 505] in #{__FILE__}"
|
126
|
+
check_output_doesnt_include(/^500 \S/)
|
127
|
+
end
|
170
128
|
|
171
|
-
|
172
|
-
|
129
|
+
def test_lists_nothing_if_invalid_range_is_specified
|
130
|
+
enter 'list 5,4'
|
131
|
+
debug_proc(@example)
|
132
|
+
check_output_includes "[5, 4] in #{__FILE__}"
|
133
|
+
end
|
173
134
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
end
|
135
|
+
def test_list_proper_lines_when_range_around_specific_line_with_hyphen
|
136
|
+
enter 'list 17-'
|
137
|
+
debug_proc(@example)
|
138
|
+
check_output_includes("[12, 21] in #{__FILE__}",
|
139
|
+
*lines_between(12, 21, false))
|
140
|
+
end
|
181
141
|
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
check_output_includes(/7:\s+a = 100/)
|
188
|
-
end
|
189
|
-
end
|
142
|
+
def test_list_proper_lines_when_range_around_specific_line_with_comma
|
143
|
+
enter 'list 17,'
|
144
|
+
debug_proc(@example)
|
145
|
+
check_output_includes("[12, 21] in #{__FILE__}",
|
146
|
+
*lines_between(12, 21, false))
|
190
147
|
end
|
191
148
|
|
192
|
-
|
149
|
+
def test_shows_an_error_when_the_file_to_list_does_not_exist
|
193
150
|
enter -> { state.file = 'blabla'; 'list 7-7' }
|
194
151
|
debug_proc(@example)
|
195
152
|
check_error_includes 'No sourcefile available for blabla'
|
196
153
|
end
|
197
154
|
|
198
|
-
|
155
|
+
def test_correctly_print_lines_containing_the_percentage_symbol
|
199
156
|
enter 'list 26'
|
200
157
|
debug_proc(@example)
|
201
158
|
check_output_includes "26: a = '%26'"
|
202
159
|
end
|
203
160
|
end
|
161
|
+
|
162
|
+
class ListTestCaseAutoreload < ListTestCase
|
163
|
+
def setup
|
164
|
+
super
|
165
|
+
Setting[:autoreload] = true
|
166
|
+
enter 'list' # force first reading of file
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_lists_file_changes_with_autoreload_enabled
|
170
|
+
enter -> do
|
171
|
+
change_line_in_file(__FILE__, 7, ' a = 100')
|
172
|
+
'list 7-7'
|
173
|
+
end
|
174
|
+
debug_proc(@example)
|
175
|
+
check_output_includes(/7:\s+a = 100/)
|
176
|
+
change_line_in_file(__FILE__, 7, ' a = 7')
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
class ListTestCaseNoAutoreload < ListTestCase
|
181
|
+
def setup
|
182
|
+
super
|
183
|
+
Setting[:autoreload] = false
|
184
|
+
enter 'list' # force first reading of file
|
185
|
+
end
|
186
|
+
|
187
|
+
def test_does_not_list_file_changes_with_autoreload_disabled
|
188
|
+
enter -> do
|
189
|
+
change_line_in_file(__FILE__, 7, ' a = 100')
|
190
|
+
'list 7-7'
|
191
|
+
end
|
192
|
+
debug_proc(@example)
|
193
|
+
check_output_doesnt_include(/7:\s+a = 100/)
|
194
|
+
change_line_in_file(__FILE__, 7, ' a = 7')
|
195
|
+
end
|
196
|
+
end
|
204
197
|
end
|