seeing_is_believing 3.3.0 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0c1356fef9747e418a57e2f151e4bc2f7625d6d8
4
- data.tar.gz: 27c33822870a7f0bf0f25172ed626d581b1b4906
2
+ SHA256:
3
+ metadata.gz: '05637967d8e40131f85a42ba2246cca7e28c9c53fe02a1ab802dab93cd368a73'
4
+ data.tar.gz: cb89541eec8388b26643ee4c4adcdbadbe60673ad309fb1df2eef1d8fb5e7c5c
5
5
  SHA512:
6
- metadata.gz: b4ba3ac50ac5ac732c097e7dcffebdcd58c7345f8f40df8b1086b33c9d9ef69b5e030ebf139401edc57e89622475eeab1c0cf2a92b966bd0671c9bad6181e144
7
- data.tar.gz: 8bc5907b40214aa58377aec602033e08e47837239bed71d028e3833c4d9a75f28b59e88c55ec04f6c751e4a577695fb9175407b22340bfa3e41fcf7a5d8eb282
6
+ metadata.gz: c3e1fe60f931cfbee373c8bf0cc96a1442e92db587866434ecc35d3e5b638282553265d7576a572206aad91f2b8db73c5c0c01be4b956255e98823f743bc4ee5
7
+ data.tar.gz: b7304a173678eeb157bc6ce35c4fe16777f9c511eae18240862668b15facd4fa7e4153dc13de0c0630e73fe4da257c8dd5a5a1fc1826bdecec6b317014f241fe
data/Rakefile CHANGED
@@ -1,26 +1,13 @@
1
1
  desc 'Have Bundler setup a standalone environment -- run tests in this, b/c its faster and safer'
2
2
  task :install do
3
- exe_path = which("bundle")
4
- unless exe_path
5
- sh 'gem', 'install', 'bundler', '--no-ri', '--no-rdoc'
6
- end
7
-
8
- unless Dir.exist? 'bundle'
9
- # Running without rubygems # http://myronmars.to/n/dev-blog/2012/03/faster-test-boot-times-with-bundler-standalone
10
- sh 'bundle', 'install', '--standalone', '--binstubs', 'bundle/bin'
11
- end
3
+ # Running without rubygems # http://myronmars.to/n/dev-blog/2012/03/faster-test-boot-times-with-bundler-standalone
4
+ which("bundle") or sh 'gem', 'install', 'bundler', '--no-ri', '--no-rdoc'
5
+ Dir.exist? 'bundle' or sh 'bundle', 'install', '--standalone', '--binstubs', 'bundle/bin'
12
6
  end
13
7
 
14
8
  desc 'Remove generated and irrelevant files'
15
9
  task :clean do
16
- rm_rf [
17
- 'bundle',
18
- '.bundle',
19
- 'Gemfile.lock',
20
- 'proving_grounds',
21
- 'tags',
22
- *Dir['*.gem'],
23
- ]
10
+ rm_rf %w[bundle .bundle Gemfile.lock proving_grounds tags] + Dir['*.gem']
24
11
  end
25
12
 
26
13
  directory 'bundle' do
@@ -30,11 +17,11 @@ end
30
17
 
31
18
  def require_paths
32
19
  require 'bundler'
33
- requrable_paths = Bundler.load.specs.flat_map { |spec|
34
- spec.require_paths.map do |path|
35
- File.join(spec.full_gem_path, path)
36
- end
37
- }.flat_map { |p| ['-I', p] }
20
+ Bundler.load.specs.flat_map do |spec|
21
+ spec.require_paths
22
+ .map { |path| File.join spec.full_gem_path, path }
23
+ .flat_map { |p| ['-I', p] }
24
+ end
38
25
  end
39
26
 
40
27
  desc 'Print the require paths for arbitrary binary execution'
@@ -78,7 +65,7 @@ task default: [:spec, :cuke]
78
65
  desc 'Install dependencies and run tests (mainly for Travis CI)'
79
66
  task ci: [:spec, :cuke]
80
67
 
81
- def which(exe)
68
+ def self.which(exe)
82
69
  dirs = ENV["PATH"].split(File::PATH_SEPARATOR)
83
70
  exts = [""]
84
71
  exts.concat(ENV["PathExt"].to_s.split(File::PATH_SEPARATOR))
data/Readme.md CHANGED
@@ -38,10 +38,6 @@ Known Issues
38
38
  ------------
39
39
 
40
40
  * Assumes utf-8 everywhere. If this is an issue, please see the [encodings](https://github.com/JoshCheek/seeing_is_believing/wiki/Encodings) section of the wiki.
41
- * `begin; else; break; end` this code (an else without a rescue) will emit a warning in Ruby, and is omitted from `Parser`'s AST.
42
- As such, I doubt that anyone will ever write it. But if you were to write it, it would blow up, because SiB rewrites your code, wrapping every expression that could have a value.
43
- This code will be wrapped. But using the value is **syntactically** invalid in Ruby, because it constitutes a "void value expression" (aka a pointless time sink and the cause of many bugs in SiB).
44
- Unfortunately, I can't easily check it to see if it's void since it's not in the parsed AST. But it's so edge that I don't think it's worth worrying about.
45
41
 
46
42
 
47
43
  Inspiration
data/appveyor.yml CHANGED
@@ -27,3 +27,5 @@ test_script:
27
27
  environment:
28
28
  matrix:
29
29
  - ruby_version: '21'
30
+ - ruby_version: '22'
31
+ - ruby_version: '23'
@@ -600,3 +600,17 @@ Feature: Using flags
600
600
  .to_s # => "0", "1", "2"
601
601
  end # => 3
602
602
  """
603
+
604
+
605
+ Scenario: --local-cwd causes the current working directory to be the same as the file
606
+ Given the file "subdir/cwd_of_file_test.rb" "__FILE__"
607
+ When I run "seeing_is_believing subdir/cwd_of_file_test.rb"
608
+ Then stderr is empty
609
+ And the exit status is 0
610
+ And stdout is '__FILE__ # => "subdir/cwd_of_file_test.rb"'
611
+ When I run "seeing_is_believing subdir/cwd_of_file_test.rb --local-cwd"
612
+ Then stderr is empty
613
+ And the exit status is 0
614
+ And stdout is '__FILE__ # => "cwd_of_file_test.rb"'
615
+
616
+
@@ -753,3 +753,76 @@ Feature:
753
753
  require 'seeing_is_believing' # => true
754
754
  SeeingIsBelieving.call("1+1").result[1][0] # => "2"
755
755
  """
756
+
757
+
758
+ Scenario: Errors should not blow away comments (Issue #120)
759
+ Given the file "sib_with_error_on_uncommented_line.rb" "dne"
760
+ And the file "sib_with_error_on_commented_line.rb" "dne # this doesn't exist!"
761
+ When I run "seeing_is_believing -x sib_with_error_on_uncommented_line.rb"
762
+ Then stdout is:
763
+ """
764
+ dne # ~> NameError: undefined local variable or method `dne' for main:Object
765
+
766
+ # ~> NameError
767
+ # ~> undefined local variable or method `dne' for main:Object
768
+ # ~>
769
+ # ~> sib_with_error_on_uncommented_line.rb:1:in `<main>'
770
+ """
771
+ When I run "seeing_is_believing -x sib_with_error_on_commented_line.rb"
772
+ Then stdout is:
773
+ """
774
+ dne # this doesn't exist!
775
+
776
+ # ~> NameError
777
+ # ~> undefined local variable or method `dne' for main:Object
778
+ # ~>
779
+ # ~> sib_with_error_on_commented_line.rb:1:in `<main>'
780
+ """
781
+ When I run "seeing_is_believing sib_with_error_on_uncommented_line.rb"
782
+ Then stdout is:
783
+ """
784
+ dne # ~> NameError: undefined local variable or method `dne' for main:Object
785
+
786
+ # ~> NameError
787
+ # ~> undefined local variable or method `dne' for main:Object
788
+ # ~>
789
+ # ~> sib_with_error_on_uncommented_line.rb:1:in `<main>'
790
+ """
791
+ When I run "seeing_is_believing sib_with_error_on_commented_line.rb"
792
+ Then stdout is:
793
+ """
794
+ dne # this doesn't exist!
795
+
796
+ # ~> NameError
797
+ # ~> undefined local variable or method `dne' for main:Object
798
+ # ~>
799
+ # ~> sib_with_error_on_commented_line.rb:1:in `<main>'
800
+ """
801
+
802
+
803
+ Scenario: Errors on files read from stdin with --local-cwd are matched to the correct lines
804
+ Given the file "local_cwd_and_error_on_uncommented_line.rb" "dne"
805
+ When I run "seeing_is_believing --local-cwd < local_cwd_and_error_on_uncommented_line.rb"
806
+ Then stdout includes "dne # ~> NameError: undefined local variable or method `dne' for main:Object"
807
+
808
+
809
+ Scenario: Inspects strings even when they have a singleton class (Issue #118)
810
+ Given the file "result_of_inspect_has_a_singleton_class.rb":
811
+ """
812
+ str = "a string"
813
+ def str.inspect
814
+ self
815
+ end
816
+ str # =>
817
+ """
818
+ When I run "seeing_is_believing -x result_of_inspect_has_a_singleton_class.rb"
819
+ Then stderr is empty
820
+ And the exit status is 0
821
+ And stdout is:
822
+ """
823
+ str = "a string"
824
+ def str.inspect
825
+ self
826
+ end
827
+ str # => a string
828
+ """
@@ -12,6 +12,7 @@ require 'seeing_is_believing/event_stream/handlers/update_result'
12
12
  class SeeingIsBelieving
13
13
  class Options < HashStruct
14
14
  predicate(:event_handler) { EventStream::Handlers::UpdateResult.new Result.new }
15
+ predicate(:local_cwd) { false }
15
16
  attribute(:filename) { nil }
16
17
  attribute(:encoding) { nil }
17
18
  attribute(:stdin) { "" }
@@ -50,7 +51,8 @@ class SeeingIsBelieving
50
51
  load_path_dirs: options.load_path_dirs,
51
52
  encoding: options.encoding,
52
53
  timeout_seconds: options.timeout_seconds,
53
- max_line_captures: options.max_line_captures
54
+ max_line_captures: options.max_line_captures,
55
+ local_cwd: options.local_cwd?
54
56
 
55
57
  options.event_handler
56
58
  }
@@ -0,0 +1,50 @@
1
+ require 'seeing_is_believing/error'
2
+ require 'seeing_is_believing/hard_core_ensure'
3
+
4
+ class SeeingIsBelieving
5
+ class BackupFile
6
+ def self.call(*args, &block)
7
+ new(*args, &block).call
8
+ end
9
+
10
+ def initialize(file_path, backup_filename, &block)
11
+ self.file_path = file_path
12
+ self.block = block
13
+ self.backup_filename = backup_filename
14
+ end
15
+
16
+ def call
17
+ HardCoreEnsure.call \
18
+ code: -> {
19
+ we_will_not_overwrite_existing_backup_file!
20
+ backup_existing_file
21
+ block.call
22
+ },
23
+ ensure: -> {
24
+ set_back_to_initial_conditions
25
+ }
26
+ end
27
+
28
+ private
29
+
30
+ attr_accessor :block, :file_path, :backup_filename
31
+
32
+ def we_will_not_overwrite_existing_backup_file!
33
+ raise TempFileAlreadyExists.new(file_path, backup_filename) if File.exist? backup_filename
34
+ end
35
+
36
+ def backup_existing_file
37
+ return unless File.exist? file_path
38
+ File.rename file_path, backup_filename
39
+ @was_backed_up = true
40
+ end
41
+
42
+ def set_back_to_initial_conditions
43
+ if @was_backed_up
44
+ File.rename(backup_filename, file_path)
45
+ else
46
+ File.delete(file_path)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -111,7 +111,7 @@ class SeeingIsBelieving
111
111
  normal_annotation = annotate_this_line && !pp_annotation
112
112
  if exception_result && annotate_this_line
113
113
  [comment.whitespace, FormatComment.call(comment.text_col, value_prefix, exception_result, @options)]
114
- elsif exception_result
114
+ elsif exception_result && comment.text.empty?
115
115
  whitespace = comment.whitespace
116
116
  whitespace = " " if whitespace.empty?
117
117
  [whitespace, FormatComment.call(0, exception_prefix, exception_result, @options)]
@@ -181,6 +181,9 @@ class SeeingIsBelieving
181
181
  as = filename
182
182
  end
183
183
 
184
+ when '--local-cwd'
185
+ self.lib_options.local_cwd = true
186
+
184
187
  when '-s', '--alignment-strategy'
185
188
  strategies = {'file' => AlignFile, 'chunk' => AlignChunk, 'line' => AlignLine}
186
189
  strategy_names = strategies.keys.inspect
@@ -326,7 +329,7 @@ Options:
326
329
  file => the entire file is at the same alignment
327
330
  line => each line is at its own alignment
328
331
  --[no-]-interline-align # align results on adjacent lines when they have the same number of results
329
- defautls to --align
332
+ defaults to --align
330
333
  -t, --timeout-seconds s # how long to evaluate the source file before timing out
331
334
  0 means it will never timeout (this is the default)
332
335
  accepts floating point values (e.g. 0.5 would timeout after half a second)
@@ -334,8 +337,10 @@ Options:
334
337
  -r, --require file # additional files to be required before running the program
335
338
  -e, --program program-body # pass the program body to execute as an argument
336
339
  -a, --as filename # run the program as if it was the specified filename
340
+ --local-cwd # run the program from the file's directory instead of the calling program's CWD
337
341
  -c, --clean # remove annotations from previous runs of seeing_is_believing
338
342
  -g, --debug # print debugging information
343
+ --debug-to FILE # print debugging information to FILE
339
344
  -x, --xmpfilter-style # annotate marked lines instead of every line
340
345
  -j, --json # print results in json format (i.e. so another program can consume them)
341
346
  -i, --inherit-exitstatus # exit with the exit status of the program being evaluated
@@ -13,12 +13,13 @@
13
13
 
14
14
  require 'rbconfig'
15
15
  require 'socket'
16
- require 'seeing_is_believing/error'
16
+ require "childprocess"
17
+
17
18
  require 'seeing_is_believing/result'
18
19
  require 'seeing_is_believing/debugger'
19
- require 'seeing_is_believing/hard_core_ensure'
20
+ require 'seeing_is_believing/backup_file'
20
21
  require 'seeing_is_believing/event_stream/consumer'
21
- require "childprocess"
22
+
22
23
  ChildProcess.posix_spawn = true # forking locks up for some reason when we run SiB inside of SiB
23
24
 
24
25
  class SeeingIsBelieving
@@ -27,12 +28,13 @@ class SeeingIsBelieving
27
28
  new(*args).call
28
29
  end
29
30
 
30
- attr_accessor :program, :filename, :provided_input, :require_flags, :load_path_flags, :encoding, :timeout_seconds, :debugger, :event_handler, :max_line_captures
31
+ attr_accessor :program, :provided_input, :require_flags, :load_path_flags, :encoding, :timeout_seconds, :debugger, :event_handler, :max_line_captures
32
+
33
+ attr_accessor :file_directory, :file_path, :local_cwd, :relative_filename, :backup_filename
31
34
 
32
- def initialize(program, filename, options={})
35
+ def initialize(program, file_path, options={})
33
36
  options = options.dup
34
37
  self.program = program
35
- self.filename = filename
36
38
  self.encoding = options.delete(:encoding) || "u"
37
39
  self.timeout_seconds = options.delete(:timeout_seconds) || 0 # 0 is the new infinity
38
40
  self.provided_input = options.delete(:provided_input) || String.new
@@ -40,52 +42,27 @@ class SeeingIsBelieving
40
42
  self.load_path_flags = (options.delete(:load_path_dirs) || []).map { |dir| ['-I', dir] }.flatten
41
43
  self.require_flags = (options.delete(:require_files) || ['seeing_is_believing/the_matrix']).map { |filename| ['-r', filename] }.flatten
42
44
  self.max_line_captures = (options.delete(:max_line_captures) || Float::INFINITY) # (optimization: child stops producing results at this number, even though it might make more sense for the consumer to stop emitting them)
45
+ self.local_cwd = options.delete(:local_cwd) || false
46
+ self.file_path = file_path
47
+ self.file_directory = File.dirname file_path
48
+ file_name = File.basename file_path
49
+ self.relative_filename = local_cwd ? file_name : file_path
50
+ self.backup_filename = File.join file_directory, "seeing_is_believing_backup.#{file_name}"
51
+
43
52
  options.any? && raise(ArgumentError, "Unknown options: #{options.inspect}")
44
53
  end
45
54
 
46
55
  def call
47
- HardCoreEnsure.call \
48
- code: -> {
49
- we_will_not_overwrite_existing_backup_file!
50
- backup_existing_file
51
- write_program_to_file
52
- evaluate_file
53
- },
54
- ensure: -> {
55
- set_back_to_initial_conditions
56
- }
57
- end
58
-
59
- def file_directory
60
- File.dirname filename
61
- end
62
-
63
- def backup_filename
64
- File.join file_directory, "seeing_is_believing_backup.#{File.basename filename}"
56
+ BackupFile.call file_path, backup_filename do
57
+ write_program_to_file
58
+ evaluate_file
59
+ end
65
60
  end
66
61
 
67
62
  private
68
63
 
69
- def we_will_not_overwrite_existing_backup_file!
70
- raise TempFileAlreadyExists.new(filename, backup_filename) if File.exist? backup_filename
71
- end
72
-
73
- def backup_existing_file
74
- return unless File.exist? filename
75
- File.rename filename, backup_filename
76
- @was_backed_up = true
77
- end
78
-
79
- def set_back_to_initial_conditions
80
- if @was_backed_up
81
- File.rename(backup_filename, filename)
82
- else
83
- File.delete(filename)
84
- end
85
- end
86
-
87
64
  def write_program_to_file
88
- File.open(filename, 'w', external_encoding: "utf-8") { |f| f.write program.to_s }
65
+ File.open(file_path, 'w', external_encoding: "utf-8") { |f| f.write program.to_s }
89
66
  end
90
67
 
91
68
 
@@ -102,10 +79,11 @@ class SeeingIsBelieving
102
79
  event_stream_port: event_server.addr[1],
103
80
  max_line_captures: max_line_captures,
104
81
  num_lines: program.lines.count,
105
- filename: filename
82
+ filename: relative_filename,
106
83
  )].pack('m0')
107
84
 
108
85
  child = ChildProcess.build(*popen_args)
86
+ child.cwd = file_directory if local_cwd
109
87
  child.leader = true
110
88
  child.duplex = true
111
89
  child.environment.merge!(env)
@@ -165,7 +143,7 @@ class SeeingIsBelieving
165
143
  '-I', File.realpath('..', __dir__), # add lib to the load path
166
144
  *load_path_flags, # users can inject dirs to be added to the load path
167
145
  *require_flags, # users can inject files to be required
168
- filename]
146
+ relative_filename]
169
147
  end
170
148
 
171
149
  def close_streams(*streams)
@@ -118,6 +118,9 @@ class SeeingIsBelieving
118
118
  # for a consideration of many different ways of doing this, see 5633064
119
119
  def to_string_token(string)
120
120
  [Marshal.dump(string.to_s)].pack('m0')
121
+ rescue TypeError => err
122
+ raise unless err.message =~ /singleton can't be dumped/
123
+ to_string_token string.to_s.dup
121
124
  end
122
125
 
123
126
  def build_producer_thread(resultstream)
@@ -1,3 +1,3 @@
1
1
  class SeeingIsBelieving
2
- VERSION = '3.3.0'
2
+ VERSION = '3.4.0'
3
3
  end
@@ -20,11 +20,11 @@ Gem::Specification.new do |s|
20
20
  s.require_paths = ["lib"]
21
21
 
22
22
  s.add_dependency "parser", "~> 2.4.0"
23
- s.add_dependency "childprocess","~> 0.7.1"
23
+ s.add_dependency "childprocess","~> 0.8.0"
24
24
 
25
25
  s.add_development_dependency "pry"
26
26
  s.add_development_dependency "haiti", ">= 0.1", "< 0.3"
27
- s.add_development_dependency "rake", "~> 12.0.0"
27
+ s.add_development_dependency "rake", "~> 12.2.0"
28
28
  s.add_development_dependency "mrspec", "~> 0.3.1"
29
29
  s.add_development_dependency "rspec", "~> 3.6.0"
30
30
  s.add_development_dependency "cucumber", "~> 2.4"
@@ -208,6 +208,16 @@ RSpec.describe SeeingIsBelieving::Binary::Config do
208
208
  end
209
209
 
210
210
 
211
+ describe 'lib_options.local_cwd?' do
212
+ it 'defaults to false' do
213
+ expect(parse([]).lib_options.local_cwd?).to eq false
214
+ end
215
+ it 'is set to true by --local-cwd' do
216
+ expect(parse(['--local-cwd']).lib_options.local_cwd?).to eq true
217
+ end
218
+ end
219
+
220
+
211
221
  describe 'annotator_options.max_result_length' do
212
222
  it 'defaults to infinity' do
213
223
  expect(parse([]).annotator_options.max_result_length).to eq Float::INFINITY
@@ -677,11 +687,11 @@ RSpec.describe SeeingIsBelieving::Binary::Config do
677
687
  end
678
688
 
679
689
  describe 'setting the body' do
680
- it 'does not override the if already set e.g. with -e' do
690
+ it 'does not override the body if already set e.g. with -e' do
681
691
  expect(call(body: 'b', filename: nil).body).to eq 'b'
682
692
  end
683
693
 
684
- it 'is the file body if the filename is provded and exists' do
694
+ it 'is the file body if the filename is provided and exists' do
685
695
  expect(call(body: nil, filename: existing_filename).body)
686
696
  .to eq file_body
687
697
  end
@@ -776,7 +786,7 @@ RSpec.describe SeeingIsBelieving::Binary::Config do
776
786
  end
777
787
 
778
788
  context 'when debug? is a string' do
779
- let(:proving_grounds_dir) { File.realdirpath '../../proving_grounds', __dir__ }
789
+ let(:proving_grounds_dir) { File.expand_path '../../proving_grounds', __dir__ }
780
790
  let(:path) { File.join proving_grounds_dir, 'test.log' }
781
791
  before { Dir.mkdir proving_grounds_dir unless Dir.exist? proving_grounds_dir }
782
792
 
@@ -7,7 +7,7 @@ require 'fileutils'
7
7
  require 'childprocess'
8
8
 
9
9
  RSpec.describe SeeingIsBelieving::EvaluateByMovingFiles do
10
- let(:filedir) { File.realdirpath '../proving_grounds', __dir__ }
10
+ let(:filedir) { File.expand_path '../proving_grounds', __dir__ }
11
11
  let(:filename) { File.join filedir, 'some_filename' }
12
12
 
13
13
  before { FileUtils.mkdir_p filedir }
@@ -120,6 +120,22 @@ RSpec.describe SeeingIsBelieving::EvaluateByMovingFiles do
120
120
  end
121
121
  end
122
122
 
123
+ it 'sets the program\'s working directory to the file\'s directory, when given local_cwd' do
124
+ Dir.chdir '/' do
125
+ root = File.expand_path '/'
126
+ result = invoke 'print Dir.pwd'
127
+ expect(result.stdout).to eq root
128
+ dir, cwd, file_path = invoke(<<-RUBY, local_cwd: true).stdout.lines.map(&:chomp)
129
+ puts File.expand_path(__dir__)
130
+ puts Dir.pwd
131
+ puts __FILE__
132
+ RUBY
133
+ expect(dir).to_not eq root
134
+ expect(cwd).to eq dir
135
+ expect(file_path).to eq File.basename(filename)
136
+ end
137
+ end
138
+
123
139
  it 'does not blow up on exceptions raised in at_exit blocks' do
124
140
  expect { invoke 'at_exit { raise "zomg" }' }.to_not raise_error
125
141
  end
@@ -305,6 +305,13 @@ module SeeingIsBelieving::EventStream
305
305
  producer.record_result :type, 1, obj
306
306
  expect(count).to eq 1
307
307
  end
308
+
309
+ it 'can deal with results of inspect that have singleton methods' do
310
+ str = "a string"
311
+ def str.inspect() self end
312
+ producer.record_result :type, 1, str
313
+ expect(consumer.call.inspected).to eq str
314
+ end
308
315
  end
309
316
 
310
317
  context 'inspect performed by the block' do
@@ -31,7 +31,7 @@ RSpec.describe SeeingIsBelieving do
31
31
  end
32
32
 
33
33
  root_path = File.realpath("..", __dir__)
34
- proving_grounds_path = File.realdirpath('proving_grounds', root_path)
34
+ proving_grounds_path = File.expand_path('proving_grounds', root_path)
35
35
  before(:all) { Dir.mkdir proving_grounds_path unless Dir.exist? proving_grounds_path }
36
36
  around { |spec| Dir.chdir proving_grounds_path, &spec }
37
37
 
@@ -332,10 +332,23 @@ RSpec.describe SeeingIsBelieving do
332
332
  expect(result.stdout).to eq filename
333
333
  end
334
334
 
335
- specify 'cwd of the file is the cwd of the evaluating program' do
336
- filename = File.join proving_grounds_path, 'mah_file.rb'
337
- FileUtils.rm_f filename
338
- expect(invoke('print File.realdirpath(Dir.pwd)', filename: filename).stdout).to eq Dir.pwd
335
+ describe 'cwd' do
336
+ let(:filename) { File.join proving_grounds_path, 'mah_file.rb' }
337
+ before { FileUtils.rm_f filename }
338
+
339
+ it 'defaults to the cwd of the the evaluating program' do
340
+ dir = Dir.chdir '/' do
341
+ invoke('print File.expand_path(Dir.pwd)', filename: filename).stdout
342
+ end
343
+ expect(dir).to eq File.expand_path('/')
344
+ end
345
+
346
+ it 'is the file\'s directory when local_cwd is set' do
347
+ dir = Dir.chdir '/' do
348
+ invoke('print File.expand_path(Dir.pwd)', filename: filename, local_cwd: true).stdout
349
+ end
350
+ expect(dir).to eq proving_grounds_path
351
+ end
339
352
  end
340
353
 
341
354
  it 'does not capture output from __END__ onward' do
@@ -809,6 +809,7 @@ RSpec.describe SeeingIsBelieving::WrapExpressions do
809
809
  expect(wrap("def a\n1\nrescue\n2\nend")).to eq "<def a\n<1>\nrescue\n<2>\nend>"
810
810
  expect(wrap("def a\n1\nrescue\n2\nensure\n3\nend")).to eq "<def a\n<1>\nrescue\n<2>\nensure\n<3>\nend>"
811
811
  expect(wrap("def a\n1\nensure\n2\nend")).to eq "<def a\n<1>\nensure\n<2>\nend>"
812
+ expect(wrap("def a\n1\nelse 2\nend")).to eq "<def a\n<1>\nelse <2>\nend>"
812
813
  end
813
814
 
814
815
  it 'wrap a definition as a call to an invocation' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seeing_is_believing
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Cheek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-11 00:00:00.000000000 Z
11
+ date: 2017-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.7.1
33
+ version: 0.8.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.7.1
40
+ version: 0.8.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -78,14 +78,14 @@ dependencies:
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: 12.0.0
81
+ version: 12.2.0
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: 12.0.0
88
+ version: 12.2.0
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: mrspec
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -171,6 +171,7 @@ files:
171
171
  - features/support/env.rb
172
172
  - features/xmpfilter-style.feature
173
173
  - lib/seeing_is_believing.rb
174
+ - lib/seeing_is_believing/backup_file.rb
174
175
  - lib/seeing_is_believing/binary.rb
175
176
  - lib/seeing_is_believing/binary/align_chunk.rb
176
177
  - lib/seeing_is_believing/binary/align_file.rb
@@ -214,7 +215,6 @@ files:
214
215
  - spec/binary/engine_spec.rb
215
216
  - spec/binary/format_comment_spec.rb
216
217
  - spec/binary/marker_spec.rb
217
- - spec/binary/options_spec.rb
218
218
  - spec/binary/remove_annotations_spec.rb
219
219
  - spec/binary/rewrite_comments_spec.rb
220
220
  - spec/code_spec.rb
@@ -287,7 +287,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
287
287
  version: '0'
288
288
  requirements: []
289
289
  rubyforge_project: seeing_is_believing
290
- rubygems_version: 2.5.2
290
+ rubygems_version: 2.7.2
291
291
  signing_key:
292
292
  specification_version: 4
293
293
  summary: Records results of every line of code in your file
@@ -305,7 +305,6 @@ test_files:
305
305
  - spec/binary/engine_spec.rb
306
306
  - spec/binary/format_comment_spec.rb
307
307
  - spec/binary/marker_spec.rb
308
- - spec/binary/options_spec.rb
309
308
  - spec/binary/remove_annotations_spec.rb
310
309
  - spec/binary/rewrite_comments_spec.rb
311
310
  - spec/code_spec.rb
File without changes