seeing_is_believing 3.0.1 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -220,8 +220,8 @@ RSpec.describe SeeingIsBelieving::Binary::Config do
220
220
  expect(parse([]).lib_options.require_files).to eq [matrix_file]
221
221
  end
222
222
 
223
- it 'appends pp for xmpfilter style' do
224
- expect(parse(['-x']).lib_options.require_files).to eq [matrix_file, 'pp']
223
+ it 'appends pp and our customizations for xmpfilter style' do
224
+ expect(parse(['-x']).lib_options.require_files).to eq [matrix_file, 'pp', 'seeing_is_believing/customize_pp']
225
225
  end
226
226
 
227
227
  specify '-r and --require set an error if not provided with a filename' do
@@ -563,6 +563,21 @@ RSpec.describe SeeingIsBelieving::Binary::Config do
563
563
  end
564
564
 
565
565
 
566
+ describe 'align_results?' do
567
+ it 'defaults to true' do
568
+ expect(parse([]).annotator_options.interline_align?).to eq true
569
+ end
570
+ it 'can be turned on with --interline-align' do
571
+ expect(parse(['--interline-align'])).to_not have_error '--interline-align'
572
+ expect(parse(['--interline-align']).annotator_options.interline_align?).to eq true
573
+ end
574
+ it 'can be turned off with --no-interline-align' do
575
+ expect(parse(['--no-interline-align'])).to_not have_error '--no-interline-align'
576
+ expect(parse(['--no-interline-align']).annotator_options.interline_align?).to eq false
577
+ end
578
+ end
579
+
580
+
566
581
  describe '.finalize' do
567
582
  let(:stdin_data) { 'stdin data' }
568
583
  let(:stdin) { object_double $stdin, read: stdin_data }
@@ -20,6 +20,7 @@ module SeeingIsBelieving::EventStream
20
20
  producer.finish!
21
21
  consumer.process_exitstatus(0)
22
22
  close_streams eventstream_producer, stdout_producer, stderr_producer
23
+ consumer.join
23
24
  end
24
25
 
25
26
  before do
@@ -560,7 +560,7 @@ RSpec.describe SeeingIsBelieving do
560
560
 
561
561
  describe 'fork' do
562
562
  it 'records results from both parent and child, without double reporting items that may have been left in the queue at the time of forking' do
563
- n = 10000
563
+ n = 100
564
564
  result = invoke <<-RUBY
565
565
  n = #{n}
566
566
  as = '0' * n; 0
@@ -674,16 +674,6 @@ RSpec.describe SeeingIsBelieving do
674
674
  end').stderr).to eq ''
675
675
  end
676
676
 
677
- specify 'when File does not have sync=, <<, flush, puts, close' do
678
- expect(invoke('class File
679
- undef sync
680
- undef <<
681
- undef flush
682
- undef puts
683
- undef close
684
- end').stderr).to eq ''
685
- end
686
-
687
677
  specify 'when Queue does not have <<, shift, and clear' do
688
678
  expect(invoke('class Queue
689
679
  undef <<
@@ -711,14 +701,19 @@ RSpec.describe SeeingIsBelieving do
711
701
  end
712
702
 
713
703
  specify 'when Fixnum does not have <, <<, next, ==, inspect, to_s' do
714
- expect(invoke('class Fixnum
715
- undef <
716
- undef <<
717
- undef ==
718
- undef next
719
- undef to_s
720
- undef inspect
721
- end').stderr).to eq ''
704
+ result = invoke('class Fixnum
705
+ undef <
706
+ undef <<
707
+ undef ==
708
+ def next
709
+ "redefining instead of undefing b/c it comes from Integer"
710
+ end
711
+ undef to_s
712
+ undef inspect
713
+ end
714
+ "a"')
715
+ expect(result.stderr).to eq ''
716
+ expect(result.to_a.last).to eq ['"a"']
722
717
  end
723
718
 
724
719
  specify 'when Hash does not have [], []=, fetch' do
@@ -754,15 +749,16 @@ RSpec.describe SeeingIsBelieving do
754
749
  end').stderr).to eq ''
755
750
  end
756
751
 
757
- specify 'when Kernel does not have defined?, kind_of?' do
758
- expect(invoke('class Kernel
759
- undef defined?
752
+ # defined? is a macro, not a method, otherwise I'd test that here
753
+ specify 'when Kernel does not have kind_of?' do
754
+ expect(invoke('module Kernel
760
755
  undef kind_of?
761
- end').stderr).to eq ''
756
+ end
757
+ 1').to_a).to eq [[], [], ['nil'], ['1']]
762
758
  end
763
759
 
764
760
  specify 'when Enumerable does not have map' do
765
- expect(invoke('class Module
761
+ expect(invoke('module Enumerable
766
762
  undef map
767
763
  end
768
764
  ').stderr).to eq ''
@@ -780,15 +776,19 @@ RSpec.describe SeeingIsBelieving do
780
776
  end
781
777
 
782
778
  specify 'when Exception does not have message, class (can\'t get backtrace to work)' do
783
- result = invoke('class Exception
784
- undef message
785
- # undef backtrace
786
- undef class
779
+ result = invoke('begin
780
+ raise "hello"
781
+ ensure
782
+ class Exception
783
+ undef message
784
+ undef backtrace
785
+ def class; "totally the wrong thing" end
786
+ end
787
787
  end
788
- raise "hello"
789
788
  ')
790
789
  expect(result.exception.message).to eq 'hello'
791
- # expect(result.exception.backtrace).to eq 'hello'
790
+ expect(result.exception.backtrace.length).to eq 1
791
+ expect(result.exception.backtrace[0]).to match /program\.rb:\d/
792
792
  expect(result.exception.class_name).to eq 'RuntimeError'
793
793
  end
794
794
 
@@ -801,6 +801,8 @@ RSpec.describe SeeingIsBelieving do
801
801
  undef join
802
802
  undef abort_on_exception
803
803
  end
804
+ fork
805
+ 1
804
806
  ').stderr).to eq ''
805
807
  end
806
808
 
@@ -842,31 +844,34 @@ RSpec.describe SeeingIsBelieving do
842
844
  ').stderr).to eq ''
843
845
  end
844
846
 
845
- context 'not clear that there are good ways to deal with these' do
846
- before { skip }
847
+ specify 'when UnboundMethod does not have bind' do
848
+ expect(invoke('class UnboundMethod
849
+ undef bind
850
+ end
851
+ ').stderr).to eq ''
852
+ end
847
853
 
848
- specify 'when UnboundMethod does not have bind' do
849
- expect(invoke('class UnboundMethod
850
- undef bind
851
- end
852
- ').stderr).to eq ''
853
- end
854
+ specify 'when Method does not have call' do
855
+ expect(invoke('class Method
856
+ undef call
857
+ end
858
+ ').stderr).to eq ''
859
+ end
854
860
 
855
- specify 'when Method does not have call' do
856
- expect(invoke('class Method
857
- undef call
858
- end
859
- ').stderr).to eq ''
860
- end
861
- specify 'when Proc does not have call, to_proc' do
862
- expect(invoke('class Proc
863
- undef call
864
- undef to_proc
865
- end
866
- ').stderr).to eq ''
867
- end
861
+ specify 'when Proc does not have call, to_proc' do
862
+ expect(invoke('class Proc
863
+ undef call
864
+ undef to_proc
865
+ end
866
+ ').stderr).to eq ''
867
+ end
868
+
869
+ # Apparently it doesn't have a to_proc method, they must check to see if it's nil in the code that implements &
870
+ specify 'when nil does not have to_s' do
871
+ expect(invoke('class NilClass
872
+ undef to_s
873
+ end
874
+ ').stderr).to eq ''
868
875
  end
869
876
  end
870
877
  end
871
-
872
- # all of them together
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,28 @@ module SibSpecHelpers
3
3
  pending message
4
4
  raise message
5
5
  end
6
+
7
+ def ruby_version
8
+ Version.new RUBY_VERSION
9
+ end
10
+
11
+
12
+ class Version
13
+ attr_reader :segments
14
+ include Comparable
15
+ def initialize(version_string)
16
+ @segments = version_string.scan(/\d+/).map(&:to_i)
17
+ end
18
+ def <=>(other)
19
+ other = Version.new other unless other.kind_of? Version
20
+ segments.zip(other.segments).each do |ours, theirs|
21
+ return 1 if theirs.nil? || theirs < ours
22
+ return -1 if ours < theirs
23
+ end
24
+ segments.length <=> other.segments.length
25
+ end
26
+ end
27
+
6
28
  end
7
29
 
8
30
  RSpec.configure do |c|
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe SibSpecHelpers::Version do
4
+ let(:v231) { SibSpecHelpers::Version.new '2.3.1' }
5
+ example { expect(v231).to eq v231 }
6
+ example { expect(v231).to eq '2.3.1' }
7
+ example { expect(v231).to_not be < '2' }
8
+ example { expect(v231).to be < '3' }
9
+ example { expect(v231).to_not be < '2.2' }
10
+ example { expect(v231).to_not be < '2.3' }
11
+ example { expect(v231).to be < '2.4' }
12
+ example { expect(v231).to_not be < '2.3.0' }
13
+ example { expect(v231).to_not be < '2.3.1' }
14
+ example { expect(v231).to be < '2.3.2' }
15
+ example { expect(v231).to be < '2.3.1.0' }
16
+ end
@@ -637,6 +637,10 @@ RSpec.describe SeeingIsBelieving::WrapExpressions do
637
637
  expect(heredoc_wrap "<<A\n123\nA").to eq "[{<<A}]\n123\nA"
638
638
  expect(heredoc_wrap "<<-A\nA").to eq "[{<<-A}]\nA"
639
639
  expect(heredoc_wrap "<<-A\n123\nA").to eq "[{<<-A}]\n123\nA"
640
+ if ruby_version >= '2.3'
641
+ expect(heredoc_wrap "<<~A\nA").to eq "[{<<~A}]\nA"
642
+ expect(heredoc_wrap "<<~A\n123\nA").to eq "[{<<~A}]\n123\nA"
643
+ end
640
644
  expect(heredoc_wrap "1\n<<A\nA").to eq "[{1}\n{<<A}]\nA"
641
645
  expect(heredoc_wrap "<<A + <<B\n1\nA\n2\nB").to eq "[{<<A + <<B}]\n1\nA\n2\nB"
642
646
  expect(heredoc_wrap "<<A\n1\nA\n<<B\n2\nB").to eq "[{<<A}\n1\nA\n{<<B}]\n2\nB"
@@ -667,6 +671,12 @@ RSpec.describe SeeingIsBelieving::WrapExpressions do
667
671
  expect(heredoc_wrap "<<A.whatever(<<B)\nA\nB").to eq "[{<<A.whatever(<<B)}]\nA\nB"
668
672
  expect(heredoc_wrap "<<A.size()\nA").to eq "[{<<A.size()}]\nA"
669
673
  end
674
+
675
+ it 'is not confused by external heredocs (backticks)' do
676
+ expect(heredoc_wrap "<<`A`\nA").to eq "[{<<`A`}]\nA"
677
+ expect(heredoc_wrap "<<-`A`\nA").to eq "[{<<-`A`}]\nA"
678
+ expect(heredoc_wrap "<<~`A`\nA").to eq "[{<<~`A`}]\nA" if ruby_version >= '2.3'
679
+ end
670
680
  end
671
681
 
672
682
  # raises can be safely ignored, they're just method invocations
@@ -805,6 +815,31 @@ RSpec.describe SeeingIsBelieving::WrapExpressions do
805
815
  end
806
816
  end
807
817
 
818
+ describe 'interpolation wraps the whole value and interpolated values' do
819
+ def self.assert_interpolates(name, code, expected)
820
+ example(name) { expect(wrap code).to eq expected }
821
+ end
822
+
823
+ assert_interpolates 'backtick syscall', "`a\#{\n1\n}\nb\n`", "<`a\#{\n<1>\n}\nb\n`>"
824
+ assert_interpolates 'slash regex', "/a\#{\n1\n}\nb\n/", "</a\#{\n<1>\n}\nb\n/>"
825
+ assert_interpolates 'double quoted string', "\"a\#{\n1\n}\nb\n\"", "<\"a\#{\n<1>\n}\nb\n\">"
826
+ assert_interpolates 'double quoted symbol', ":\"a\#{\n1\n}\nb\n\"", "<:\"a\#{\n<1>\n}\nb\n\">"
827
+
828
+ assert_interpolates 'symbol array with interpolation', "%I.a\#{\n1\n}\nb\n.", "<%I.a\#{\n<1>\n}\nb\n.>"
829
+ assert_interpolates '%x syscall', "%x.a\#{\n1\n}\nb\n.", "<%x.a\#{\n<1>\n}\nb\n.>"
830
+ assert_interpolates '% string', "%.a\#{\n1\n}\nb\n.", "<%.a\#{\n<1>\n}\nb\n.>"
831
+ assert_interpolates 'string array with interpolation', "%W.a\#{\n1\n}\nb\n.", "<%W.a\#{\n<1>\n}\nb\n.>"
832
+ assert_interpolates '%r regex', "%r.a\#{\n1\n}\nb\n.", "<%r.a\#{\n<1>\n}\nb\n.>"
833
+ assert_interpolates '%Q string', "%Q.a\#{\n1\n}\nb\n.", "<%Q.a\#{\n<1>\n}\nb\n.>"
834
+
835
+ assert_interpolates '%s symbol', "%s.a\#{\n1\n}\nb\n.", "<%s.a\#{\n1\n}\nb\n.>"
836
+ assert_interpolates 'single quoted string', "'a\#{\n1\n}\nb\n'", "<'a\#{\n1\n}\nb\n'>"
837
+ assert_interpolates 'single quoted symbol', ":'a\#{\n1\n}\nb\n'", "<:'a\#{\n1\n}\nb\n'>"
838
+ assert_interpolates 'symbol array without interpolation', "%i.a\#{\n1\n}\nb\n.", "<%i.a\#{\n1\n}\nb\n.>"
839
+ assert_interpolates '%q string without interpolation', "%q.a\#{\n1\n}\nb\n.", "<%q.a\#{\n1\n}\nb\n.>"
840
+ assert_interpolates 'string array without interpolation', "%w.a\#{\n1\n}\nb\n.", "<%w.a\#{\n1\n}\nb\n.>"
841
+ end
842
+
808
843
  describe 'BEGIN/END' do
809
844
  # not implemented b/c we cannot wrap around these either.
810
845
  # So what does it mean to wrap around?
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.0.1
4
+ version: 3.1.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: 2016-10-17 00:00:00.000000000 Z
11
+ date: 2016-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -161,9 +161,11 @@ files:
161
161
  - lib/seeing_is_believing/binary/data_structures.rb
162
162
  - lib/seeing_is_believing/binary/engine.rb
163
163
  - lib/seeing_is_believing/binary/format_comment.rb
164
+ - lib/seeing_is_believing/binary/interline_align.rb
164
165
  - lib/seeing_is_believing/binary/remove_annotations.rb
165
166
  - lib/seeing_is_believing/binary/rewrite_comments.rb
166
167
  - lib/seeing_is_believing/code.rb
168
+ - lib/seeing_is_believing/customize_pp.rb
167
169
  - lib/seeing_is_believing/debugger.rb
168
170
  - lib/seeing_is_believing/error.rb
169
171
  - lib/seeing_is_believing/evaluate_by_moving_files.rb
@@ -200,6 +202,7 @@ files:
200
202
  - spec/hash_struct_spec.rb
201
203
  - spec/seeing_is_believing_spec.rb
202
204
  - spec/spec_helper.rb
205
+ - spec/spec_helper_spec.rb
203
206
  - spec/wrap_expressions_spec.rb
204
207
  homepage: https://github.com/JoshCheek/seeing_is_believing
205
208
  licenses:
@@ -261,7 +264,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
261
264
  version: '0'
262
265
  requirements: []
263
266
  rubyforge_project: seeing_is_believing
264
- rubygems_version: 2.5.1
267
+ rubygems_version: 2.6.8
265
268
  signing_key:
266
269
  specification_version: 4
267
270
  summary: Records results of every line of code in your file
@@ -290,4 +293,5 @@ test_files:
290
293
  - spec/hash_struct_spec.rb
291
294
  - spec/seeing_is_believing_spec.rb
292
295
  - spec/spec_helper.rb
296
+ - spec/spec_helper_spec.rb
293
297
  - spec/wrap_expressions_spec.rb