puppet-debugger 0.15.2 → 1.0.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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +21 -45
  3. data/.rubocop.yml +64 -233
  4. data/.rubocop_todo.yml +89 -147
  5. data/.ruby-version +1 -1
  6. data/.vscode/launch.json +15 -0
  7. data/CHANGELOG.md +34 -2
  8. data/Gemfile +7 -5
  9. data/README.md +29 -261
  10. data/Rakefile +11 -12
  11. data/bin/pdb +1 -1
  12. data/lib/awesome_print/ext/awesome_puppet.rb +22 -8
  13. data/lib/plugins/puppet-debugger/input_responders/benchmark.rb +5 -4
  14. data/lib/plugins/puppet-debugger/input_responders/classes.rb +14 -2
  15. data/lib/plugins/puppet-debugger/input_responders/classification.rb +4 -2
  16. data/lib/plugins/puppet-debugger/input_responders/commands.rb +18 -18
  17. data/lib/plugins/puppet-debugger/input_responders/datatypes.rb +22 -6
  18. data/lib/plugins/puppet-debugger/input_responders/environment.rb +4 -2
  19. data/lib/plugins/puppet-debugger/input_responders/exit.rb +4 -2
  20. data/lib/plugins/puppet-debugger/input_responders/facterdb_filter.rb +4 -2
  21. data/lib/plugins/puppet-debugger/input_responders/facts.rb +4 -2
  22. data/lib/plugins/puppet-debugger/input_responders/functions.rb +34 -32
  23. data/lib/plugins/puppet-debugger/input_responders/help.rb +4 -2
  24. data/lib/plugins/puppet-debugger/input_responders/krt.rb +4 -2
  25. data/lib/plugins/puppet-debugger/input_responders/play.rb +22 -24
  26. data/lib/plugins/puppet-debugger/input_responders/reset.rb +5 -3
  27. data/lib/plugins/puppet-debugger/input_responders/resources.rb +16 -7
  28. data/lib/plugins/puppet-debugger/input_responders/set.rb +34 -32
  29. data/lib/plugins/puppet-debugger/input_responders/stacktrace.rb +23 -0
  30. data/lib/plugins/puppet-debugger/input_responders/types.rb +6 -2
  31. data/lib/plugins/puppet-debugger/input_responders/vars.rb +8 -7
  32. data/lib/plugins/puppet-debugger/input_responders/whereami.rb +5 -3
  33. data/lib/puppet-debugger.rb +1 -45
  34. data/lib/puppet-debugger/cli.rb +120 -92
  35. data/lib/puppet-debugger/code/code_file.rb +13 -14
  36. data/lib/puppet-debugger/code/code_range.rb +5 -3
  37. data/lib/puppet-debugger/code/loc.rb +1 -1
  38. data/lib/puppet-debugger/debugger_code.rb +2 -0
  39. data/lib/puppet-debugger/hooks.rb +15 -16
  40. data/lib/puppet-debugger/input_responder_plugin.rb +54 -52
  41. data/lib/puppet-debugger/monkey_patches.rb +57 -0
  42. data/lib/puppet-debugger/plugin_test_helper.rb +9 -8
  43. data/lib/puppet-debugger/support.rb +27 -17
  44. data/lib/puppet-debugger/support/environment.rb +10 -3
  45. data/lib/puppet-debugger/support/errors.rb +25 -27
  46. data/lib/puppet-debugger/support/facts.rb +5 -5
  47. data/lib/puppet-debugger/support/node.rb +4 -7
  48. data/lib/puppet-debugger/support/scope.rb +29 -0
  49. data/lib/puppet-debugger/trollop.rb +38 -31
  50. data/lib/puppet-debugger/version.rb +1 -1
  51. data/lib/puppet/application/debugger.rb +151 -126
  52. data/output.json +1 -0
  53. data/puppet-debugger.gemspec +17 -15
  54. data/spec/awesome_print/ext/awesome_puppet_spec.rb +30 -30
  55. data/spec/fixtures/pe-xl-core-0.puppet.vm.json +1 -0
  56. data/spec/fixtures/sample_start_debugger.pp +3 -2
  57. data/spec/hooks_spec.rb +33 -35
  58. data/spec/input_responder_plugin_spec.rb +7 -6
  59. data/spec/input_responders/benchmark_spec.rb +3 -1
  60. data/spec/input_responders/classes_spec.rb +12 -13
  61. data/spec/input_responders/classification_spec.rb +4 -2
  62. data/spec/input_responders/commands_spec.rb +2 -0
  63. data/spec/input_responders/datatypes_spec.rb +8 -2
  64. data/spec/input_responders/environment_spec.rb +2 -0
  65. data/spec/input_responders/exit_spec.rb +9 -11
  66. data/spec/input_responders/facterdb_filter_spec.rb +2 -0
  67. data/spec/input_responders/facts_spec.rb +2 -0
  68. data/spec/input_responders/functions_spec.rb +30 -28
  69. data/spec/input_responders/help_spec.rb +5 -3
  70. data/spec/input_responders/krt_spec.rb +3 -1
  71. data/spec/input_responders/play_spec.rb +10 -20
  72. data/spec/input_responders/reset_spec.rb +2 -0
  73. data/spec/input_responders/resources_spec.rb +7 -1
  74. data/spec/input_responders/set_spec.rb +3 -1
  75. data/spec/input_responders/stacktrace_spec.rb +15 -0
  76. data/spec/input_responders/types_spec.rb +2 -0
  77. data/spec/input_responders/vars_spec.rb +4 -4
  78. data/spec/input_responders/whereami_spec.rb +2 -0
  79. data/spec/pdb_spec.rb +0 -9
  80. data/spec/puppet/application/debugger_spec.rb +35 -17
  81. data/spec/puppet_debugger_spec.rb +81 -83
  82. data/spec/remote_node_spec.rb +1 -5
  83. data/spec/spec_helper.rb +22 -18
  84. data/spec/support_spec.rb +3 -5
  85. data/test_matrix.rb +1 -1
  86. metadata +53 -19
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger'
3
5
  require 'puppet-debugger/plugin_test_helper'
@@ -1,13 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger'
3
5
 
4
6
  describe :exit do
5
7
  let(:args) { [] }
6
8
 
7
- xit 'exits' do
8
- expect{plugin.run(args)}.to eq('')
9
- end
10
-
11
9
  let(:plugin) do
12
10
  instance = PuppetDebugger::InputResponders::Commands.plugin_from_command(subject.to_s).instance
13
11
  instance.debugger = debugger
@@ -26,21 +24,21 @@ describe :exit do
26
24
  {}
27
25
  end
28
26
 
29
- it "commands contant is an array" do
27
+ it 'commands contant is an array' do
30
28
  expect(plugin.class::COMMAND_WORDS).to be_a(Array)
31
29
  end
32
30
 
33
- it "commands must contain at least one word" do
34
- expect(plugin.class::COMMAND_WORDS.count).to be > 0
31
+ it 'commands must contain at least one word' do
32
+ expect(plugin.class::COMMAND_WORDS.count).to be > 0
35
33
  end
36
34
 
37
- it "summary must be a string" do
35
+ it 'summary must be a string' do
38
36
  expect(plugin.class::SUMMARY).to be_a(String)
39
37
  end
40
38
 
41
- it 'implements run' do
42
- expect{plugin.run([])}.not_to raise_error(NotImplementedError)
43
- end
39
+ # it 'implements run' do
40
+ # expect { plugin.run([]) }.not_to raise(SystemExit)
41
+ # end
44
42
 
45
43
  it 'be looked up via any command words' do
46
44
  plugin.class::COMMAND_WORDS.each do |word|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger'
3
5
  require 'puppet-debugger/plugin_test_helper'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger'
3
5
  require 'puppet-debugger/plugin_test_helper'
@@ -1,73 +1,75 @@
1
- require "spec_helper"
2
- require "puppet-debugger"
3
- require "puppet-debugger/plugin_test_helper"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'puppet-debugger'
5
+ require 'puppet-debugger/plugin_test_helper'
4
6
 
5
7
  describe :functions do
6
- include_examples "plugin_tests"
8
+ include_examples 'plugin_tests'
7
9
 
8
10
  let(:input) do
9
11
  "md5('hello')"
10
12
  end
11
13
 
12
14
  let(:mod_dir) do
13
- File.join(fixtures_dir, "modules", "extlib")
15
+ File.join(fixtures_dir, 'modules', 'extlib')
14
16
  end
15
17
 
16
- it "runs" do
18
+ it 'runs' do
17
19
  expect(plugin.run).to be_a String
18
20
  end
19
21
 
20
- it "returns functions" do
22
+ it 'returns functions' do
21
23
  expect(plugin.function_map).to be_a Hash
22
24
  end
23
25
 
24
- it "sorted_list" do
26
+ it 'sorted_list' do
25
27
  expect(plugin.sorted_list).to be_a Array
26
28
  expect(plugin.sorted_list.first).to be_a Hash
27
29
  end
28
30
 
29
- it "returns function names" do
31
+ it 'returns function names' do
30
32
  expect(plugin.func_list).to be_a Array
31
- expect(plugin.func_list.find { |m| m =~ /md5/ }).to eq("md5()")
33
+ expect(plugin.func_list.find { |m| m =~ /md5/ }).to eq('md5()')
32
34
  end
33
35
 
34
- it "execute md5" do
36
+ it 'execute md5' do
35
37
  debugger_output = /5d41402abc4b2a76b9719d911017c592/
36
38
  debugger.handle_input("md5('hello')")
37
39
  expect(output.string).to match(debugger_output)
38
40
  end
39
41
 
40
- it "execute swapcase" do
42
+ it 'execute swapcase' do
41
43
  debugger_output = /HELLO/
42
44
  debugger.handle_input("swapcase('hello')")
43
45
  expect(output.string).to match(debugger_output)
44
46
  end
45
47
 
46
- it "#function_obj with native function" do
47
- expect(plugin.function_obj(File.join(mod_dir, "functions", "dir_split.pp"))).to eq(
48
- { :file => File.join(mod_dir, "functions", "dir_split.pp"), :mod_name => "extlib",
49
- :full_name => "extlib::dir_split", :name => "extlib::dir_split", :namespace => "extlib",
50
- :summary => "Splits the given directory or directories into individual paths." }
48
+ it '#function_obj with native function' do
49
+ expect(plugin.function_obj(File.join(mod_dir, 'functions', 'dir_split.pp'))).to eq(
50
+ file: File.join(mod_dir, 'functions', 'dir_split.pp'), mod_name: 'extlib',
51
+ full_name: 'extlib::dir_split', name: 'extlib::dir_split', namespace: 'extlib',
52
+ summary: 'Splits the given directory or directories into individual paths.'
51
53
  )
52
54
  end
53
55
 
54
- it "#function_obj ruby v4 without namespace" do
55
- expect(plugin.function_obj(File.join(mod_dir, "lib", "puppet", "functions", "echo.rb"))).to eq({ :file => File.join(mod_dir, "lib", "puppet", "functions", "echo.rb"), :mod_name => "extlib",
56
- :full_name => "echo", :name => "echo", :namespace => "", :summary => "DEPRECATED. Use the namespaced function [`extlib::echo`](#extlibecho) instead." })
56
+ it '#function_obj ruby v4 without namespace' do
57
+ expect(plugin.function_obj(File.join(mod_dir, 'lib', 'puppet', 'functions', 'echo.rb'))).to eq(file: File.join(mod_dir, 'lib', 'puppet', 'functions', 'echo.rb'), mod_name: 'extlib',
58
+ full_name: 'echo', name: 'echo', namespace: '', summary: 'DEPRECATED. Use the namespaced function [`extlib::echo`](#extlibecho) instead.')
57
59
  end
58
60
 
59
- it "#function_obj ruby v4 and namespace" do
60
- expect(plugin.function_obj(File.join(mod_dir, "lib", "puppet", "functions", "extlib", "echo.rb"))).to eq({ :file => File.join(mod_dir, "lib", "puppet", "functions", "extlib", "echo.rb"), :mod_name => "extlib",
61
- :full_name => "extlib::echo", :name => "extlib::echo", :namespace => "extlib", :summary => nil })
61
+ it '#function_obj ruby v4 and namespace' do
62
+ expect(plugin.function_obj(File.join(mod_dir, 'lib', 'puppet', 'functions', 'extlib', 'echo.rb'))).to eq(file: File.join(mod_dir, 'lib', 'puppet', 'functions', 'extlib', 'echo.rb'), mod_name: 'extlib',
63
+ full_name: 'extlib::echo', name: 'extlib::echo', namespace: 'extlib', summary: nil)
62
64
  end
63
65
 
64
- it "#function_obj has puppet namespace" do
65
- file, _ = Puppet::Functions.method(:create_function).source_location
66
+ it '#function_obj has puppet namespace' do
67
+ file, = Puppet::Functions.method(:create_function).source_location
66
68
  dir = File.dirname(file)
67
- f_obj = plugin.function_obj(File.join(dir, "functions", "include.rb"))
69
+ f_obj = plugin.function_obj(File.join(dir, 'functions', 'include.rb'))
68
70
  expect(f_obj[:mod_name]).to match(/puppet-.*/)
69
- expect(f_obj[:name]).to eq("include")
70
- expect(f_obj[:full_name]).to eq("include")
71
+ expect(f_obj[:name]).to eq('include')
72
+ expect(f_obj[:full_name]).to eq('include')
71
73
  expect(f_obj[:summary]).to be_nil
72
74
  end
73
75
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger/plugin_test_helper'
3
5
 
4
6
  describe :help do
5
- include_examples "plugin_tests"
7
+ include_examples 'plugin_tests'
6
8
  let(:args) { [] }
7
9
 
8
10
  let(:help_output) do
@@ -23,10 +25,10 @@ describe :help do
23
25
  end
24
26
 
25
27
  it 'show debugger version' do
26
- expect(help_output).to match(/Puppet Debugger Version: \d.\d\d?.\d+\n/)
28
+ expect(help_output).to match(/Puppet Debugger Version: \d.\d\d?.\d.*+\n/)
27
29
  end
28
30
 
29
31
  it 'show created by' do
30
32
  expect(help_output).to match(/Created by: NWOps <corey@nwops.io>\n/)
31
33
  end
32
- end
34
+ end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger/plugin_test_helper'
3
5
 
4
6
  describe :krt do
5
- include_examples "plugin_tests"
7
+ include_examples 'plugin_tests'
6
8
  let(:args) { [] }
7
9
 
8
10
  it 'works' do
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger/plugin_test_helper'
3
5
  describe :play do
4
- include_examples "plugin_tests"
6
+ include_examples 'plugin_tests'
5
7
 
6
8
  describe 'convert url' do
7
9
  describe 'unsupported' do
@@ -96,7 +98,6 @@ describe :play do
96
98
 
97
99
  describe 'multiple lines of input' do
98
100
  before(:each) do
99
-
100
101
  end
101
102
  describe '3 lines' do
102
103
  let(:input) do
@@ -133,16 +134,12 @@ describe :play do
133
134
  end
134
135
  describe 'multiple lines puppet code' do
135
136
  let(:input) do
136
- <<-EOF
137
- if $osfamily {
138
- $var = '3'
139
- }
140
- $var
141
- EOF
142
- end
143
- xit do
144
- plugin.play_back_string(input)
145
- expect(output.string).to include('"3"')
137
+ <<~OUT
138
+ if $osfamily {
139
+ $var = '3'
140
+ }
141
+ $var
142
+ OUT
146
143
  end
147
144
  end
148
145
  end
@@ -158,17 +155,10 @@ $var
158
155
  let(:input) do
159
156
  "play #{file_url}"
160
157
  end
161
- # requires internet and stops testing
162
- xit 'url' do
163
- allow(debugger).to receive(:fetch_url_data).with(file_url + '.txt').and_return(File.read(fixtures_file))
164
- debugger.handle_input(input)
165
- expect(output.string).to match(/test/)
166
- expect(output.string).to match(/Puppet::Type::File/)
167
- end
168
158
 
169
159
  it 'file' do
170
160
  debugger.handle_input("play #{fixtures_file}")
171
161
  expect(output.string).to match(/Puppet::Type::File/)
172
162
  end
173
163
  end
174
- end
164
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger'
3
5
  require 'puppet-debugger/plugin_test_helper'
@@ -1,13 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger'
3
5
  require 'puppet-debugger/plugin_test_helper'
4
6
 
5
7
  describe :resources do
6
8
  include_examples 'plugin_tests'
7
- let(:args) { ["resources"] }
9
+ let(:args) {}
8
10
 
9
11
  it 'should be able to print resources' do
10
12
  debugger_output = /main/
11
13
  expect(plugin.run(args)).to match(debugger_output)
12
14
  end
15
+
16
+ it 'filter resources' do
17
+ expect(plugin.run(['settings'])).to match(/Settings/)
18
+ end
13
19
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger'
3
5
  require 'puppet-debugger/plugin_test_helper'
@@ -7,7 +9,7 @@ describe 'set' do
7
9
  let(:input) do
8
10
  ':set loglevel debug'
9
11
  end
10
-
12
+
11
13
  it 'should set the loglevel' do
12
14
  debugger_output = /loglevel debug is set/
13
15
  debugger.handle_input(input)
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'puppet-debugger'
5
+ require 'puppet-debugger/plugin_test_helper'
6
+
7
+ describe :stacktrace do
8
+ include_examples 'plugin_tests'
9
+ let(:args) {}
10
+
11
+ it 'should be able to print stacktrace' do
12
+ debugger_output = /stacktrace\snot\savailable/
13
+ expect(plugin.run(args)).to match(debugger_output)
14
+ end
15
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger'
3
5
  require 'puppet-debugger/plugin_test_helper'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger'
3
5
  require 'puppet-debugger/plugin_test_helper'
@@ -38,10 +40,10 @@ describe :vars do
38
40
 
39
41
  describe 'list variables' do
40
42
  let(:input) do
41
- <<-EOF
43
+ <<-OUT
42
44
  class test( $param1 = "files", $param2 = $param1 ) {}
43
45
  include test
44
- EOF
46
+ OUT
45
47
  end
46
48
  it 'ls test' do
47
49
  debugger.handle_input(input)
@@ -49,7 +51,5 @@ describe :vars do
49
51
  expect(out).to include('"param1"')
50
52
  expect(out).to include('"param2"')
51
53
  end
52
-
53
-
54
54
  end
55
55
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet-debugger'
3
5
  require 'puppet-debugger/plugin_test_helper'
@@ -28,11 +28,6 @@ describe 'pdb' do
28
28
  expect(`bundle exec bin/pdb --play #{fixtures_file} --run-once`)
29
29
  .to match(/Puppet::Type::File/)
30
30
  end
31
- # xit do
32
- # # this test does not work without internet, and I am at 30K feet right now
33
- # expect(`bundle exec bin/pdb --play #{file_url} --run-once`)
34
- # .to match(/Puppet::Type::File/)
35
- # end
36
31
 
37
32
  describe 'remote_node' do
38
33
  let(:node_obj) do
@@ -44,9 +39,5 @@ describe 'pdb' do
44
39
  before :each do
45
40
  allow(PuppetDebugger).to receive(:get_remote_node).with(node_name).and_return(node_obj)
46
41
  end
47
- # xit do
48
- # expect(`echo 'vars'| bundle exec bin/pdb -n #{node_name}`)
49
- # .to match(/server_facts/)
50
- # end
51
42
  end
52
43
  end
@@ -8,12 +8,15 @@ describe Puppet::Application::Debugger do
8
8
  Puppet::Application::Debugger.new(command_line)
9
9
  end
10
10
 
11
+ # ideally, we should only be providing args in stead of mocking the options
12
+ # however during a text, the options in the puppet application are not merged from
13
+ # the command line opts so the args never get passed through to options
11
14
  let(:args) do
12
15
  []
13
16
  end
14
17
 
15
18
  let(:command_line) do
16
- Puppet::Util::CommandLine.new('debugger', args)
19
+ Puppet::Util::CommandLine.new('puppet', ['debugger', args].flatten)
17
20
  end
18
21
 
19
22
  let(:environment) do
@@ -53,6 +56,7 @@ describe Puppet::Application::Debugger do
53
56
  it 'shows describtion' do
54
57
  expect(debugger.help).to match(/^puppet-debugger\([^\)]+\) -- (.*)$/)
55
58
  end
59
+
56
60
  describe 'with facterdb' do
57
61
  before(:each) do
58
62
  end
@@ -68,13 +72,13 @@ describe Puppet::Application::Debugger do
68
72
 
69
73
  describe 'can reset correctly' do
70
74
  let(:input) do
71
- <<-EOF
72
- $var1 = 'dsfasd'
73
- $var1
74
- reset
75
- $var1 = '111111'
76
- $var1
77
- EOF
75
+ <<~OUT
76
+ $var1 = 'dsfasd'
77
+ $var1
78
+ reset
79
+ $var1 = '111111'
80
+ $var1
81
+ OUT
78
82
  end
79
83
 
80
84
  it 'assign variable' do
@@ -85,26 +89,40 @@ $var1
85
89
  end
86
90
 
87
91
  describe 'without facterdb' do
88
- before(:each) do
89
- end
90
92
  it 'run md5 function' do
91
93
  allow(debugger).to receive(:options).and_return(code: "md5('sdafsd')", quiet: true, run_once: true, use_facterdb: false)
92
94
  expect { debugger.run_command }.to output(/569ebc3d91672e7d3dce25de1684d0c9/).to_stdout
93
95
  end
96
+
94
97
  it 'assign variable' do
95
98
  allow(debugger).to receive(:options).and_return(code: "$var1 = 'blah'", quiet: true, run_once: true, use_facterdb: false)
96
99
  expect { debugger.run_command }.to output(/"blah"/).to_stdout
97
100
  end
98
101
 
102
+ describe 'import a catalog' do
103
+ let(:args) do
104
+ [
105
+ '--quiet', '--run_once', "--code='resources'",
106
+ "--catalog=#{File.expand_path(File.join(fixtures_dir, 'pe-xl-core-0.puppet.vm.json'))}"
107
+ ]
108
+ end
109
+ it 'list resources in catalog' do
110
+ allow(debugger).to receive(:options).and_return(code: 'resources',
111
+ quiet: true, run_once: true, use_facterdb: true,
112
+ catalog: File.expand_path(File.join(fixtures_dir, 'pe-xl-core-0.puppet.vm.json')))
113
+ expect { debugger.run_command }.to output(/Puppet_enterprise/).to_stdout
114
+ end
115
+ end
116
+
99
117
  describe 'can reset correctly' do
100
118
  let(:input) do
101
- <<-EOF
102
- $var1 = 'dsfasd'
103
- $var1
104
- reset
105
- $var1 = '111111'
106
- $var1
107
- EOF
119
+ <<~OUT
120
+ $var1 = 'dsfasd'
121
+ $var1
122
+ reset
123
+ $var1 = '111111'
124
+ $var1
125
+ OUT
108
126
  end
109
127
 
110
128
  it 'assign variable' do