knapsack_pro 8.3.2 → 8.4.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.
@@ -0,0 +1,448 @@
1
+ require 'open3'
2
+ require 'tmpdir'
3
+
4
+ describe 'TimeTracker' do
5
+ around(:each) do |example|
6
+ Dir.mktmpdir(nil, 'spec_time_tracker') do |dir|
7
+ @dir = dir
8
+ example.run
9
+ end
10
+ end
11
+
12
+ describe '#queue' do
13
+ it 'single example' do
14
+ spec = <<~SPEC
15
+ describe 'KnapsackPro::Formatters::TimeTracker' do
16
+ it do
17
+ sleep 0.1
18
+ expect(1).to eq 1
19
+ end
20
+ end
21
+ SPEC
22
+
23
+ run_specs(spec, 'queue') do |spec_paths, queue|
24
+ expect(queue.size).to eq(1)
25
+ expect(queue[0]['path']).to eq(spec_paths[0])
26
+ expect(queue[0]['time_execution']).to be_between(0.10, 0.15)
27
+ end
28
+ end
29
+
30
+ it 'two files' do
31
+ spec0 = <<~SPEC
32
+ describe 'KnapsackPro::Formatters::TimeTracker 1' do
33
+ it do
34
+ sleep 0.1
35
+ expect(1).to eq 1
36
+ end
37
+ end
38
+ SPEC
39
+
40
+ spec1 = <<~SPEC
41
+ describe 'KnapsackPro::Formatters::TimeTracker 2' do
42
+ it do
43
+ sleep 0.2
44
+ expect(1).to eq 1
45
+ end
46
+ end
47
+ SPEC
48
+
49
+ run_specs([spec0, spec1], 'queue') do |spec_paths, queue|
50
+ expect(queue.size).to eq(2)
51
+ expect(queue[0]['path']).to eq(spec_paths[0])
52
+ expect(queue[0]['time_execution']).to be_between(0.10, 0.15)
53
+ expect(queue[1]['path']).to eq(spec_paths[1])
54
+ expect(queue[1]['time_execution']).to be_between(0.20, 0.25)
55
+ end
56
+ end
57
+
58
+ it 'failing example' do
59
+ spec = <<~SPEC
60
+ describe 'KnapsackPro::Formatters::TimeTracker' do
61
+ it do
62
+ sleep 0.1
63
+ expect(1).to eq 2
64
+ end
65
+ end
66
+ SPEC
67
+
68
+ run_specs(spec, 'queue') do |spec_paths, queue|
69
+ expect(queue.size).to eq(1)
70
+ expect(queue[0]['path']).to eq(spec_paths[0])
71
+ expect(queue[0]['time_execution']).to be_between(0.10, 0.15)
72
+ end
73
+ end
74
+
75
+ it 'pending example' do
76
+ spec = <<~SPEC
77
+ describe 'KnapsackPro::Formatters::TimeTracker' do
78
+ xit do
79
+ sleep 0.1
80
+ expect(1).to eq 2
81
+ end
82
+ end
83
+ SPEC
84
+
85
+ run_specs(spec, 'queue') do |spec_paths, queue|
86
+ expect(queue.size).to eq(1)
87
+ expect(queue[0]['path']).to eq(spec_paths[0])
88
+ expect(queue[0]['time_execution']).to eq(0.0)
89
+ end
90
+ end
91
+
92
+ it 'multiple top level groups' do
93
+ spec = <<~SPEC
94
+ describe 'KnapsackPro::Formatters::TimeTracker 1' do
95
+ it do
96
+ sleep 0.1
97
+ expect(1).to eq 1
98
+ end
99
+ end
100
+
101
+ describe 'KnapsackPro::Formatters::TimeTracker 2' do
102
+ it do
103
+ sleep 0.2
104
+ expect(1).to eq 1
105
+ end
106
+ end
107
+ SPEC
108
+
109
+ run_specs(spec, 'queue') do |spec_paths, queue|
110
+ expect(queue.size).to eq(1)
111
+ expect(queue[0]['path']).to eq(spec_paths[0])
112
+ expect(queue[0]['time_execution']).to be_between(0.30, 0.35)
113
+ end
114
+ end
115
+
116
+ it 'rspec split by test example' do
117
+ spec = <<~SPEC
118
+ describe 'KnapsackPro::Formatters::TimeTracker 1' do
119
+ it do
120
+ expect(1).to eq 1
121
+ end
122
+
123
+ it do
124
+ sleep 0.1
125
+ expect(1).to eq 1
126
+ end
127
+ end
128
+
129
+ describe 'KnapsackPro::Formatters::TimeTracker 2' do
130
+ it do
131
+ sleep 0.2
132
+ expect(1).to eq 1
133
+ end
134
+
135
+ it do
136
+ sleep 0.3
137
+ expect(1).to eq 1
138
+ end
139
+ end
140
+ SPEC
141
+
142
+ run_specs(spec, 'queue', env: 'TEST__SBTE=1') do |spec_paths, queue|
143
+ expect(queue.size).to eq(4)
144
+
145
+ spec_path = spec_paths[0]
146
+ expect(queue.find { |time| time['path'] == "#{spec_path}[1:1]" }['time_execution']).to be_between(0.00, 0.05).exclusive
147
+ expect(queue.find { |time| time['path'] == "#{spec_path}[1:2]" }['time_execution']).to be_between(0.10, 0.15)
148
+ expect(queue.find { |time| time['path'] == "#{spec_path}[2:1]" }['time_execution']).to be_between(0.20, 0.25)
149
+ expect(queue.find { |time| time['path'] == "#{spec_path}[2:2]" }['time_execution']).to be_between(0.30, 0.35)
150
+ end
151
+ end
152
+
153
+ it 'hooks' do
154
+ spec = <<~SPEC
155
+ describe 'KnapsackPro::Formatters::TimeTracker' do
156
+ before(:all) do
157
+ sleep 0.1
158
+ end
159
+
160
+ before(:each) do
161
+ sleep 0.1
162
+ end
163
+
164
+ after(:each) do
165
+ sleep 0.1
166
+ end
167
+
168
+ it do
169
+ expect(1).to eq 1
170
+ end
171
+
172
+ it do
173
+ expect(1).to eq 1
174
+ end
175
+
176
+ after(:all) do
177
+ sleep 0.1
178
+ end
179
+ end
180
+ SPEC
181
+
182
+ run_specs(spec, 'queue') do |spec_paths, queue|
183
+ expect(queue.size).to eq(1)
184
+ expect(queue[0]['path']).to eq(spec_paths[0])
185
+ expect(queue[0]['time_execution']).to be_between(0.60, 0.65)
186
+ end
187
+ end
188
+
189
+ it 'nested hooks' do
190
+ spec = <<~SPEC
191
+ describe 'KnapsackPro::Formatters::TimeTracker' do
192
+ before(:all) do
193
+ sleep 0.1
194
+ end
195
+
196
+ after(:all) do
197
+ sleep 0.1
198
+ end
199
+
200
+ it do
201
+ expect(1).to eq 1
202
+ end
203
+
204
+ describe do
205
+ before(:all) do
206
+ sleep 0.1
207
+ end
208
+
209
+ after(:all) do
210
+ sleep 0.1
211
+ end
212
+
213
+ it do
214
+ expect(1).to eq 1
215
+ end
216
+ end
217
+
218
+ describe do
219
+ before(:all) do
220
+ sleep 0.1
221
+ end
222
+
223
+ after(:all) do
224
+ sleep 0.1
225
+ end
226
+
227
+ it do
228
+ expect(1).to eq 1
229
+ end
230
+ end
231
+ end
232
+ SPEC
233
+
234
+ run_specs(spec, 'queue') do |spec_paths, queue|
235
+ expect(queue.size).to eq(1)
236
+ expect(queue[0]['path']).to eq(spec_paths[0])
237
+ expect(queue[0]['time_execution']).to be_between(0.60, 0.65)
238
+ end
239
+ end
240
+
241
+ it 'hooks with rspec split by test example' do
242
+ spec = <<~SPEC
243
+ describe 'KnapsackPro::Formatters::TimeTracker' do
244
+ before(:all) do
245
+ sleep 0.1
246
+ end
247
+
248
+ before(:each) do
249
+ sleep 0.1
250
+ end
251
+
252
+ after(:each) do
253
+ sleep 0.1
254
+ end
255
+
256
+ it do
257
+ expect(1).to eq 1
258
+ end
259
+
260
+ it do
261
+ expect(1).to eq 1
262
+ end
263
+
264
+ after(:all) do
265
+ sleep 0.1
266
+ end
267
+ end
268
+ SPEC
269
+
270
+ run_specs(spec, 'queue', env: 'TEST__SBTE=1') do |spec_paths, queue|
271
+ expect(queue.size).to eq(2)
272
+
273
+ spec_path = spec_paths[0]
274
+ expect(queue.find { |time| time['path'] == "#{spec_path}[1:1]" }['time_execution']).to be_between(0.40, 0.45)
275
+ expect(queue.find { |time| time['path'] == "#{spec_path}[1:2]" }['time_execution']).to be_between(0.40, 0.45)
276
+ end
277
+ end
278
+
279
+ it 'nested hooks with rspec split by test example' do
280
+ spec = <<~SPEC
281
+ describe 'KnapsackPro::Formatters::TimeTracker' do
282
+ before(:all) do
283
+ sleep 0.1
284
+ end
285
+
286
+ after(:all) do
287
+ sleep 0.1
288
+ end
289
+
290
+ it do
291
+ expect(1).to eq 1
292
+ end
293
+
294
+ describe do
295
+ before(:all) do
296
+ sleep 0.1
297
+ end
298
+
299
+ after(:all) do
300
+ sleep 0.1
301
+ end
302
+
303
+ it do
304
+ expect(1).to eq 1
305
+ end
306
+ end
307
+
308
+ describe do
309
+ before(:all) do
310
+ sleep 0.1
311
+ end
312
+
313
+ after(:all) do
314
+ sleep 0.1
315
+ end
316
+
317
+ it do
318
+ expect(1).to eq 1
319
+ end
320
+ end
321
+ end
322
+ SPEC
323
+
324
+ run_specs(spec, 'queue', env: 'TEST__SBTE=1') do |spec_paths, queue|
325
+ expect(queue.size).to eq(3)
326
+
327
+ spec_path = spec_paths[0]
328
+ expect(queue.find { |time| time['path'] == "#{spec_path}[1:1]" }['time_execution']).to be_between(0.20, 0.25)
329
+ expect(queue.find { |time| time['path'] == "#{spec_path}[1:2:1]" }['time_execution']).to be_between(0.40, 0.45)
330
+ expect(queue.find { |time| time['path'] == "#{spec_path}[1:3:1]" }['time_execution']).to be_between(0.40, 0.45)
331
+ end
332
+ end
333
+
334
+ it 'unknown path' do
335
+ spec = <<~SPEC
336
+ RSpec.configure do |config|
337
+ config.before(:all) do
338
+ time_tracker = ::RSpec.configuration.formatters.find { |f| f.class.to_s == 'TestableTimeTracker' }
339
+ time_tracker.scheduled_paths = ['#{@dir}/0_spec.rb']
340
+ end
341
+ end
342
+
343
+ describe 'KnapsackPro::Formatters::TimeTracker' do
344
+ it do
345
+ expect(1).to eq 1
346
+ end
347
+ end
348
+ SPEC
349
+
350
+ run_specs(spec, 'queue', env: 'TEST__EMPTY_FILE_PATH=1') do |spec_paths, queue|
351
+ expect(queue.size).to eq(1)
352
+ expect(queue[0]['path']).to eq(spec_paths[0])
353
+ expect(queue[0]['time_execution']).to eq(0.0)
354
+ end
355
+ end
356
+
357
+ it 'empty group' do
358
+ spec = <<~SPEC
359
+ RSpec.configure do |config|
360
+ config.before(:suite) do
361
+ time_tracker = ::RSpec.configuration.formatters.find { |f| f.class.to_s == 'TestableTimeTracker' }
362
+ time_tracker.scheduled_paths = ['#{@dir}/0_spec.rb']
363
+ end
364
+ end
365
+
366
+ describe 'KnapsackPro::Formatters::TimeTracker' do
367
+ end
368
+ SPEC
369
+
370
+ run_specs(spec, 'queue') do |spec_paths, queue|
371
+ expect(queue.size).to eq(1)
372
+ expect(queue[0]['path']).to eq(spec_paths[0])
373
+ expect(queue[0]['time_execution']).to eq(0.0)
374
+ end
375
+ end
376
+ end
377
+
378
+ describe '#duration' do
379
+ it do
380
+ spec = <<~SPEC
381
+ describe 'KnapsackPro::Formatters::TimeTracker' do
382
+ it do
383
+ expect(1).to eq 1
384
+ end
385
+ end
386
+ SPEC
387
+
388
+ run_specs(spec, 'duration') do |_, duration|
389
+ expect(duration).to be_between(0.00, 0.05).exclusive
390
+ end
391
+ end
392
+ end
393
+
394
+ describe '#unexecuted_test_files' do
395
+ it do
396
+ spec = <<~SPEC
397
+ RSpec.configure do |config|
398
+ config.before(:all) do
399
+ time_tracker = ::RSpec.configuration.formatters.find { |f| f.class.to_s == 'TestableTimeTracker' }
400
+ time_tracker.scheduled_paths = ['#{@dir}/0_spec.rb', 'foo_spec.rb[1:1]']
401
+ end
402
+ end
403
+
404
+ describe 'KnapsackPro::Formatters::TimeTracker' do
405
+ xit do
406
+ end
407
+ end
408
+ SPEC
409
+
410
+ run_specs(spec, 'unexecuted_test_files') do |spec_paths, unexecuted_test_files|
411
+ expect(unexecuted_test_files).to eq(["#{@dir}/0_spec.rb", 'foo_spec.rb[1:1]'])
412
+ end
413
+ end
414
+ end
415
+
416
+ describe '#batch' do
417
+ it do
418
+ spec = <<~SPEC
419
+ describe 'KnapsackPro::Formatters::TimeTracker' do
420
+ it do
421
+ sleep 0.1
422
+ expect(1).to eq 1
423
+ end
424
+ end
425
+ SPEC
426
+
427
+ run_specs(spec, 'batch') do |spec_paths, batch|
428
+ expect(batch.size).to eq(1)
429
+ expect(batch[0]['path']).to eq(spec_paths[0])
430
+ expect(batch[0]['time_execution']).to be_between(0.10, 0.15)
431
+ end
432
+ end
433
+ end
434
+
435
+ def run_specs(specs, method, env: '')
436
+ paths = Array(specs).map.with_index do |spec, i|
437
+ path = "#{@dir}/#{i}_spec.rb"
438
+ File.write(path, spec)
439
+ path
440
+ end
441
+
442
+ out, err, _status = Open3.capture3("#{env} TEST__METHOD=#{method} bundle exec rspec --default-path spec_time_tracker -f TestableTimeTracker spec_time_tracker")
443
+ puts err if ENV['TEST__DEBUG']
444
+ result = Marshal.load(out.lines.last)
445
+
446
+ yield(paths, result)
447
+ end
448
+ end
@@ -0,0 +1,29 @@
1
+ require 'knapsack_pro'
2
+ require_relative '../lib/knapsack_pro/formatters/time_tracker'
3
+
4
+ class TestableTimeTracker < KnapsackPro::Formatters::TimeTracker
5
+ ::RSpec::Core::Formatters.register self, :dump_summary
6
+
7
+ if ENV['TEST__SBTE']
8
+ def rspec_split_by_test_example?(_file)
9
+ true
10
+ end
11
+ end
12
+
13
+ if ENV['TEST__EMPTY_FILE_PATH']
14
+ def file_path_for(_example)
15
+ ''
16
+ end
17
+ end
18
+
19
+ def dump_summary(_)
20
+ method = ENV['TEST__METHOD']
21
+ result = send(method)
22
+ puts Marshal.dump(result)
23
+ return if ENV['TEST__DEBUG'].nil?
24
+
25
+ warn 'DEBUG'
26
+ warn result
27
+ warn 'GUBED'
28
+ end
29
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knapsack_pro
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.3.2
4
+ version: 8.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ArturT
@@ -215,7 +215,6 @@ files:
215
215
  - README.md
216
216
  - Rakefile
217
217
  - bin/knapsack_pro
218
- - bin/test
219
218
  - knapsack_pro.gemspec
220
219
  - lib/knapsack_pro.rb
221
220
  - lib/knapsack_pro/adapters/base_adapter.rb
@@ -359,7 +358,7 @@ files:
359
358
  - spec/knapsack_pro/crypto/digestor_spec.rb
360
359
  - spec/knapsack_pro/crypto/encryptor_spec.rb
361
360
  - spec/knapsack_pro/formatters/time_tracker_fetcher_spec.rb
362
- - spec/knapsack_pro/formatters/time_tracker_specs.rb
361
+ - spec/knapsack_pro/formatters/time_tracker_spec.rb
363
362
  - spec/knapsack_pro/hooks/queue_spec.rb
364
363
  - spec/knapsack_pro/logger_wrapper_spec.rb
365
364
  - spec/knapsack_pro/presenter_spec.rb
@@ -403,6 +402,7 @@ files:
403
402
  - spec_fake/models/admin_spec.rb
404
403
  - spec_fake/models/user_spec.rb
405
404
  - spec_fake/spec_helper.rb
405
+ - spec_time_tracker/spec_helper.rb
406
406
  - test_fake/a_test.rb
407
407
  - test_fake/b_test.rb
408
408
  homepage: https://knapsackpro.com
@@ -481,7 +481,7 @@ test_files:
481
481
  - spec/knapsack_pro/crypto/digestor_spec.rb
482
482
  - spec/knapsack_pro/crypto/encryptor_spec.rb
483
483
  - spec/knapsack_pro/formatters/time_tracker_fetcher_spec.rb
484
- - spec/knapsack_pro/formatters/time_tracker_specs.rb
484
+ - spec/knapsack_pro/formatters/time_tracker_spec.rb
485
485
  - spec/knapsack_pro/hooks/queue_spec.rb
486
486
  - spec/knapsack_pro/logger_wrapper_spec.rb
487
487
  - spec/knapsack_pro/presenter_spec.rb
data/bin/test DELETED
@@ -1,15 +0,0 @@
1
- #!/bin/bash
2
-
3
- bundle exec ruby spec/knapsack_pro/formatters/time_tracker_specs.rb
4
- FORMATTERS_EXIT_CODE=$?
5
-
6
- bundle exec rspec spec
7
- RSPEC_EXIT_CODE=$?
8
-
9
- if [ "$FORMATTERS_EXIT_CODE" -ne "0" ]; then
10
- exit $FORMATTERS_EXIT_CODE
11
- fi
12
-
13
- if [ "$RSPEC_EXIT_CODE" -ne "0" ]; then
14
- exit $RSPEC_EXIT_CODE
15
- fi