seeing_is_believing 0.0.26 → 1.0.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
2
  SHA1:
3
- metadata.gz: dda86a6b926231e08234e6a6a7c7fde07d650888
4
- data.tar.gz: 39ab6eff76179f074c4382d5ffef3d49683bc624
3
+ metadata.gz: dd476d63d1de8b5fced222b2d26b906a19b4cb5f
4
+ data.tar.gz: ce1c44ebecbe7c565f47131a554d368299078319
5
5
  SHA512:
6
- metadata.gz: c4ad0cc0e416f1c1e01b9650a6e5a2143dbeccb4c668478b179e2a3898b0b9655c5b920b334f69e7bce7d748b4204930ab9a5d376b51dc49b727399b40e6c875
7
- data.tar.gz: c27f2c5220c0a9e6991384de68dc4c9e3de44f7de954356311fae9989b45d531240f40be3cb6ffca5536820967efd2123aa7353ec2f1cc474566120b634bf311
6
+ metadata.gz: ee60234e1717c3cde6319b2930ead345af9e94723edfef4784ee479584476041bcaf87d2c896bb247c98b48a38a05062a71767f2bb86102fedcc4d009604b1a1
7
+ data.tar.gz: 8839249d298c32500fab42c3501eb4dc1705981c01b05932ff12ac94ab30a7e8df5924d39e895b0d971cae19ca7c4620c0caa0ad7ec941bb780057fd4b16e445
data/Readme.md CHANGED
@@ -151,8 +151,6 @@ Todo
151
151
  * Add xmpfilter option to sublime text
152
152
  * Update TextMate examples to use same keys as sublime, add xmpfilter option on cmd+opt+N
153
153
  * Move as much of the SyntaxAnalyzer as possible over to Parser and ditch Ripper altogether
154
- * print exceptions at the end of the file, too
155
-
156
154
 
157
155
 
158
156
  License
@@ -8,7 +8,7 @@ Feature: Running the binary unsuccessfully
8
8
  Scenario: Raising exceptions
9
9
  Given the file "raises_exception.rb":
10
10
  """
11
- raise "ZOMG!"
11
+ raise "ZOMG\n!!!!"
12
12
  """
13
13
  And the file "requires_exception_raising_code.rb":
14
14
  """
@@ -32,10 +32,20 @@ Feature: Running the binary unsuccessfully
32
32
  end # => nil
33
33
 
34
34
  def second_defined
35
- require_relative 'raises_exception' # ~> RuntimeError: ZOMG!
35
+ require_relative 'raises_exception' # ~> RuntimeError: ZOMG\n!!!!
36
36
  end # => nil
37
37
 
38
38
  first_defined
39
+
40
+ # ~> RuntimeError
41
+ # ~> ZOMG
42
+ # ~> !!!!
43
+ # ~>
44
+ # ~> {{Haiti.config.proving_grounds_dir}}/raises_exception.rb:1:in `<top (required)>'
45
+ # ~> requires_exception_raising_code.rb:6:in `require_relative'
46
+ # ~> requires_exception_raising_code.rb:6:in `second_defined'
47
+ # ~> requires_exception_raising_code.rb:2:in `first_defined'
48
+ # ~> requires_exception_raising_code.rb:9:in `<main>'
39
49
  """
40
50
 
41
51
  Scenario: Syntactically invalid file
@@ -76,7 +86,7 @@ Feature: Running the binary unsuccessfully
76
86
  When I run "seeing_is_believing stack_overflow.rb"
77
87
  Then stderr is empty
78
88
  And the exit status is 1
79
- And stdout is:
89
+ And stdout includes:
80
90
  """
81
91
  def m() m end # ~> SystemStackError: stack level too deep
82
92
  m
@@ -123,6 +123,11 @@ Feature: Running the binary successfully
123
123
  # >> some stdout output
124
124
 
125
125
  # !> some stderr output
126
+
127
+ # ~> Exception
128
+ # ~> message
129
+ # ~>
130
+ # ~> backtrace
126
131
  __END__
127
132
  """
128
133
  When I run "seeing_is_believing previous_output.rb"
@@ -2,6 +2,7 @@ Feature: Using flags
2
2
 
3
3
  Sometimes you want more control over what comes out, for that we give you flags.
4
4
 
5
+
5
6
  Scenario: --start-line
6
7
  Given the file "start_line.rb":
7
8
  """
@@ -33,6 +34,7 @@ Feature: Using flags
33
34
  3 # => 3
34
35
  """
35
36
 
37
+
36
38
  Scenario: --end-line
37
39
  Given the file "end_line.rb":
38
40
  """
@@ -64,6 +66,7 @@ Feature: Using flags
64
66
  3 + 3
65
67
  """
66
68
 
69
+
67
70
  Scenario: --start-line and --end-line
68
71
  Given the file "start_and_end_line.rb":
69
72
  """
@@ -99,6 +102,7 @@ Feature: Using flags
99
102
  4 + 4
100
103
  """
101
104
 
105
+
102
106
  Scenario: --result-length sets the length of the portion including and after the # =>
103
107
  Given the file "result_lengths.rb":
104
108
  """
@@ -129,8 +133,14 @@ Feature: Using flags
129
133
  # >> aa...
130
134
 
131
135
  # !> aa...
136
+
137
+ # ~> Ru...
138
+ # ~> aa...
139
+ # ~>
140
+ # ~> re...
132
141
  """
133
142
 
143
+
134
144
  Scenario: --line-length sets the total length of a given line
135
145
  Given the file "line_lengths.rb":
136
146
  """
@@ -157,6 +167,11 @@ Feature: Using flags
157
167
  # >> aaaaaaaaaaaaaaaaaaaaaaaa...
158
168
 
159
169
  # !> aaaaaaaaaaaaaaaaaaaaaaaa...
170
+
171
+ # ~> RuntimeError
172
+ # ~> aaaaaaaaaaaaaaaaaaaaaaaa...
173
+ # ~>
174
+ # ~> line_lengths.rb:7:in `<m...
160
175
  """
161
176
  Given the file "line_lengths2.rb":
162
177
  """
@@ -169,6 +184,7 @@ Feature: Using flags
169
184
  When I run "seeing_is_believing --line-length 14 line_lengths2.rb"
170
185
  Then stdout is "12345"
171
186
 
187
+
172
188
  Scenario: --require
173
189
  Given the file "print_1.rb" "puts 1"
174
190
  Given the file "print_2.rb" "puts 2"
@@ -185,6 +201,7 @@ Feature: Using flags
185
201
  # >> 3
186
202
  """
187
203
 
204
+
188
205
  Scenario: --program
189
206
  When I run "seeing_is_believing --program '1'"
190
207
  Then stderr is empty
@@ -194,6 +211,7 @@ Feature: Using flags
194
211
  1 # => 1
195
212
  """
196
213
 
214
+
197
215
  Scenario: --load-path
198
216
  Given the file "print_1.rb" "puts 1"
199
217
  And the file "some_dir/print_2.rb" "puts 2"
@@ -211,6 +229,7 @@ Feature: Using flags
211
229
  """
212
230
  And the exit status is 0
213
231
 
232
+
214
233
  Scenario: --encoding
215
234
  Given the file "utf-8.rb" "'ç'"
216
235
  When I run "seeing_is_believing --encoding u utf-8.rb"
@@ -221,6 +240,7 @@ Feature: Using flags
221
240
  'ç' # => "ç"
222
241
  """
223
242
 
243
+
224
244
  Scenario: --as and stdin
225
245
  Given the file "example.rb" "1+1"
226
246
  Given the stdin content:
@@ -237,6 +257,7 @@ Feature: Using flags
237
257
  __FILE__ # => "example.rb"
238
258
  """
239
259
 
260
+
240
261
  Scenario: --as and -e
241
262
  Given the file "example.rb" "1+1"
242
263
  When I run 'seeing_is_believing --as example.rb -e "__FILE__"'
@@ -244,6 +265,7 @@ Feature: Using flags
244
265
  And the exit status is 0
245
266
  And stdout is '__FILE__ # => "example.rb"'
246
267
 
268
+
247
269
  Scenario: --clean
248
270
  Given the file "example.rb":
249
271
  """
@@ -269,24 +291,28 @@ Feature: Using flags
269
291
  1
270
292
  """
271
293
 
294
+
272
295
  Scenario: --clean on an invalid file will clean
273
296
  When I run 'seeing_is_believing --clean -e "1+ # => lkj"'
274
297
  Then stderr is empty
275
298
  And the exit status is 0
276
299
  And stdout is '1+'
277
300
 
301
+
278
302
  Scenario: --version
279
303
  When I run 'seeing_is_believing --version'
280
304
  Then stderr is empty
281
305
  And the exit status is 0
282
306
  And stdout is '{{SeeingIsBelieving::VERSION}}'
283
307
 
308
+
284
309
  Scenario: --help
285
310
  When I run "seeing_is_believing --help"
286
311
  Then stderr is empty
287
312
  And the exit status is 0
288
313
  And stdout includes "Usage"
289
314
 
315
+
290
316
  Scenario: --timeout
291
317
  Given the file "example.rb" "sleep 1"
292
318
  When I run "seeing_is_believing --timeout 0.1 example.rb"
@@ -294,6 +320,7 @@ Feature: Using flags
294
320
  And the exit status is 2
295
321
  And stderr is "Timeout Error after 0.1 seconds!"
296
322
 
323
+
297
324
  Scenario: --timeout
298
325
  Given the file "example.rb" "1 + 1"
299
326
  When I run "seeing_is_believing --timeout 1.0 example.rb"
@@ -301,6 +328,7 @@ Feature: Using flags
301
328
  And the exit status is 0
302
329
  And stdout is "1 + 1 # => 2"
303
330
 
331
+
304
332
  Scenario: --alignment-strategy file
305
333
  Given the file "file_alignments.rb":
306
334
  """
@@ -405,6 +433,7 @@ Feature: Using flags
405
433
  When I run "seeing_is_believing --inherit-exit-status exit_status.rb"
406
434
  Then the exit status is 123
407
435
 
436
+
408
437
  # Show that Ruby exceptions exit with 1, and --inherit-exit-status does as well
409
438
  Scenario: --inherit-exit-status
410
439
  Given the file "exception_exit_status.rb" "raise Exception"
@@ -413,6 +442,7 @@ Feature: Using flags
413
442
  When I run "seeing_is_believing --inherit-exit-status exception_exit_status.rb"
414
443
  Then the exit status is 1
415
444
 
445
+
416
446
  Scenario: --inherit-exit-status in an at_exit block
417
447
  Given the file "exit_status_in_at_exit_block.rb" "at_exit { exit 10 }"
418
448
  When I run "seeing_is_believing exit_status_in_at_exit_block.rb"
@@ -420,7 +450,7 @@ Feature: Using flags
420
450
  When I run "seeing_is_believing --inherit-exit-status exit_status_in_at_exit_block.rb"
421
451
  Then the exit status is 10
422
452
 
423
- # after making this use the parser instead of regexes, add a test showing that the line `"1 # =>"` does not get updated
453
+
424
454
  Scenario: --xmpfilter-style
425
455
  Given the file "magic_comments.rb":
426
456
  """
@@ -449,3 +479,36 @@ Feature: Using flags
449
479
  "omg2"
450
480
  # => "omg2"
451
481
  """
482
+
483
+ Scenario: --debug
484
+ Given the file "simple_program.rb":
485
+ """
486
+ # encoding: utf-8
487
+ 1# 123
488
+ 2
489
+ """
490
+ When I run "seeing_is_believing --debug simple_program.rb"
491
+ Then stderr is empty
492
+ And the exit status is 0
493
+ # source without comments
494
+ And stdout includes "SOURCE WITHOUT COMMENTS:"
495
+ And stdout includes:
496
+ """
497
+ # encoding: utf-8
498
+ 1
499
+ 2
500
+ """
501
+ # expression evaluation
502
+ And stdout includes "EXPRESSION EVALUATION:"
503
+ And stdout includes "GENERATED"
504
+ # translated program
505
+ And stdout includes "TRANSLATED PROGRAM:"
506
+ And stdout includes "$seeing_is_believing_current_result"
507
+ # result
508
+ And stdout includes "RESULT:"
509
+ And stdout includes:
510
+ """
511
+ # encoding: utf-8
512
+ 1# 123
513
+ 2 # => 2
514
+ """
@@ -3,6 +3,7 @@ Feature:
3
3
  As the dev who wrote SeeingIsBelieving
4
4
  I want to have tests on those bugs that I found and could not have predicted
5
5
 
6
+
6
7
  Scenario: A program containing a single comment
7
8
  Given the stdin content "# single comment"
8
9
  When I run "seeing_is_believing"
@@ -10,6 +11,7 @@ Feature:
10
11
  And the exit status is 0
11
12
  And stdout is "# single comment"
12
13
 
14
+
13
15
  Scenario: Name error just fucks everything
14
16
  Given the file "no_method_error.rb":
15
17
  """
@@ -21,8 +23,14 @@ Feature:
21
23
  And stdout is:
22
24
  """
23
25
  a # ~> NameError: undefined local variable or method `a' for main:Object
26
+
27
+ # ~> NameError
28
+ # ~> undefined local variable or method `a' for main:Object
29
+ # ~>
30
+ # ~> no_method_error.rb:1:in `<main>'
24
31
  """
25
32
 
33
+
26
34
  Scenario: Errors being raised in the evaluated code that don't exist in the evaluating code
27
35
  Given the file "raising_custom_errors.rb":
28
36
  """
@@ -37,6 +45,7 @@ Feature:
37
45
  Then stderr is empty
38
46
  And the exit status is 1
39
47
 
48
+
40
49
  Scenario: statements that inherit void value expressions
41
50
  Given the file "statements_that_inherit_void_value_expressions.rb":
42
51
  """
@@ -60,6 +69,7 @@ Feature:
60
69
  m # => 1
61
70
  """
62
71
 
72
+
63
73
  Scenario: comments aren't updated with values
64
74
  Given the file "comments_arent_updated_with_values.rb":
65
75
  """
@@ -73,6 +83,7 @@ Feature:
73
83
  2 # some other comment
74
84
  """
75
85
 
86
+
76
87
  # NOTE: Don't change the body of this file, it's nondeterministic
77
88
  # I have no idea why this particular string fucks Parser up, but other similar ones don't
78
89
  # We can probably remove this once parser reaches 2.0.0, they've fixed this bug now.
@@ -100,3 +111,55 @@ Feature:
100
111
  2 # => 2
101
112
  __END__
102
113
  """
114
+
115
+
116
+ Scenario: Unintentional magic comment on not-first line
117
+ Given the file "wtf.rb":
118
+ """
119
+ 1
120
+ # Transfer-Encoding: chunked
121
+ """
122
+ When I run "seeing_is_believing wtf.rb"
123
+ Then stdout is:
124
+ """
125
+ 1 # => 1
126
+ # Transfer-Encoding: chunked
127
+ """
128
+
129
+
130
+ Scenario: The file contains content that looks like previous output, should not be removed
131
+ Given the file "not_actually_previous_output.rb":
132
+ """
133
+ "1 # => 1"
134
+ "2 # ~> SomeError: some message"
135
+
136
+ "# >> some stdout"
137
+
138
+ "# !> some stderr"
139
+ """
140
+ When I run "seeing_is_believing not_actually_previous_output.rb"
141
+ Then stdout is:
142
+ """
143
+ "1 # => 1" # => "1 # => 1"
144
+ "2 # ~> SomeError: some message" # => "2 # ~> SomeError: some message"
145
+
146
+ "# >> some stdout" # => "# >> some stdout"
147
+
148
+ "# !> some stderr" # => "# !> some stderr"
149
+ """
150
+
151
+
152
+ Scenario: Multiple leading inline comments should make it through to the final program
153
+ Given the file "multiple_leading_comments.rb":
154
+ """
155
+ #!/usr/bin/env ruby
156
+ # encoding: utf-8
157
+ 'ç'
158
+ """
159
+ When I run "seeing_is_believing multiple_leading_comments.rb"
160
+ Then stdout is:
161
+ """
162
+ #!/usr/bin/env ruby
163
+ # encoding: utf-8
164
+ 'ç' # => "ç"
165
+ """
@@ -5,6 +5,7 @@ require 'timeout'
5
5
  require 'seeing_is_believing/queue'
6
6
  require 'seeing_is_believing/result'
7
7
  require 'seeing_is_believing/version'
8
+ require 'seeing_is_believing/debugger'
8
9
  require 'seeing_is_believing/expression_list'
9
10
  require 'seeing_is_believing/remove_inline_comments'
10
11
  require 'seeing_is_believing/evaluate_by_moving_files'
@@ -18,9 +19,9 @@ class SeeingIsBelieving
18
19
  new(*args).call
19
20
  end
20
21
 
21
- def initialize(string_or_stream, options={})
22
- @string = string_or_stream
23
- @stream = to_stream string_or_stream
22
+ def initialize(program, options={})
23
+ program_string = RemoveInlineComments::NonLeading.call program
24
+ @stream = to_stream program_string
24
25
  @matrix_filename = options[:matrix_filename]
25
26
  @filename = options[:filename]
26
27
  @stdin = to_stream options.fetch(:stdin, '')
@@ -29,6 +30,9 @@ class SeeingIsBelieving
29
30
  @encoding = options.fetch :encoding, nil
30
31
  @line_number = 1
31
32
  @timeout = options[:timeout]
33
+ @debugger = options.fetch :debugger, Debugger.new(enabled: false)
34
+
35
+ debugger.context("SOURCE WITHOUT COMMENTS") { program_string }
32
36
  end
33
37
 
34
38
  # I'd like to refactor this, but I was unsatisfied with the three different things I tried.
@@ -71,6 +75,7 @@ class SeeingIsBelieving
71
75
 
72
76
  # build the program
73
77
  program = leading_comments << record_exceptions_in(body) << data_segment
78
+ debugger.context("TRANSLATED PROGRAM") { program }
74
79
 
75
80
  # return the result
76
81
  result_for program, max_line_number
@@ -79,14 +84,14 @@ class SeeingIsBelieving
79
84
 
80
85
  private
81
86
 
82
- attr_reader :stream, :matrix_filename
87
+ attr_reader :stream, :matrix_filename, :debugger
83
88
 
84
89
  def expression_list
85
- @expression_list ||= ExpressionList.new get_next_line: lambda { next_line_queue.dequeue },
90
+ @expression_list ||= ExpressionList.new debugger: debugger,
91
+ get_next_line: lambda { next_line_queue.dequeue },
86
92
  peek_next_line: lambda { next_line_queue.peek },
87
93
  on_complete: lambda { |line, children, completions, offset|
88
- expression = RemoveInlineComments.call \
89
- [line, *children, *completions].map(&:chomp).join("\n")
94
+ expression = [line, *children, *completions].map(&:chomp).join("\n")
90
95
 
91
96
  if do_not_record? expression
92
97
  expression + "\n"