delta_test 0.1.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 (89) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +4 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +165 -0
  8. data/Rakefile +17 -0
  9. data/bin/delta_test +12 -0
  10. data/circle.yml +12 -0
  11. data/delta_test.gemspec +30 -0
  12. data/lib/delta_test/analyzer.rb +47 -0
  13. data/lib/delta_test/cli.rb +224 -0
  14. data/lib/delta_test/configuration.rb +173 -0
  15. data/lib/delta_test/dependencies_table.rb +83 -0
  16. data/lib/delta_test/errors.rb +55 -0
  17. data/lib/delta_test/generator.rb +101 -0
  18. data/lib/delta_test/git.rb +88 -0
  19. data/lib/delta_test/related_spec_list.rb +64 -0
  20. data/lib/delta_test/spec_helpers.rb +42 -0
  21. data/lib/delta_test/utils.rb +93 -0
  22. data/lib/delta_test/version.rb +9 -0
  23. data/lib/delta_test.rb +47 -0
  24. data/spec/fixtures/sample/alpha.rb +19 -0
  25. data/spec/fixtures/sample/beta.rb +15 -0
  26. data/spec/fixtures/sample/gamma.rb +9 -0
  27. data/spec/lib/delta_test/analyzer_spec.rb +126 -0
  28. data/spec/lib/delta_test/cli_spec.rb +422 -0
  29. data/spec/lib/delta_test/configuration_spec.rb +353 -0
  30. data/spec/lib/delta_test/dependencies_table_spec.rb +129 -0
  31. data/spec/lib/delta_test/generator_spec.rb +201 -0
  32. data/spec/lib/delta_test/git_spec.rb +178 -0
  33. data/spec/lib/delta_test/related_spec_list_spec.rb +182 -0
  34. data/spec/lib/delta_test/spec_helpers_spec.rb +72 -0
  35. data/spec/lib/delta_test/utils_spec.rb +244 -0
  36. data/spec/lib/delta_test_spec.rb +119 -0
  37. data/spec/rails/.gitignore +19 -0
  38. data/spec/rails/.rspec +3 -0
  39. data/spec/rails/Gemfile +15 -0
  40. data/spec/rails/Gemfile.lock +163 -0
  41. data/spec/rails/README.rdoc +28 -0
  42. data/spec/rails/Rakefile +6 -0
  43. data/spec/rails/app/controllers/application_controller.rb +5 -0
  44. data/spec/rails/app/controllers/concerns/.keep +0 -0
  45. data/spec/rails/app/helpers/application_helper.rb +2 -0
  46. data/spec/rails/app/mailers/.keep +0 -0
  47. data/spec/rails/app/models/.keep +0 -0
  48. data/spec/rails/app/models/concerns/.keep +0 -0
  49. data/spec/rails/app/views/layouts/application.html.haml +7 -0
  50. data/spec/rails/bin/bundle +3 -0
  51. data/spec/rails/bin/rails +4 -0
  52. data/spec/rails/bin/rake +4 -0
  53. data/spec/rails/bin/setup +29 -0
  54. data/spec/rails/config/application.rb +35 -0
  55. data/spec/rails/config/boot.rb +3 -0
  56. data/spec/rails/config/database.yml +25 -0
  57. data/spec/rails/config/environment.rb +5 -0
  58. data/spec/rails/config/environments/development.rb +41 -0
  59. data/spec/rails/config/environments/production.rb +79 -0
  60. data/spec/rails/config/environments/test.rb +42 -0
  61. data/spec/rails/config/initializers/assets.rb +11 -0
  62. data/spec/rails/config/initializers/backtrace_silencers.rb +7 -0
  63. data/spec/rails/config/initializers/cookies_serializer.rb +3 -0
  64. data/spec/rails/config/initializers/filter_parameter_logging.rb +4 -0
  65. data/spec/rails/config/initializers/inflections.rb +16 -0
  66. data/spec/rails/config/initializers/mime_types.rb +4 -0
  67. data/spec/rails/config/initializers/session_store.rb +3 -0
  68. data/spec/rails/config/initializers/wrap_parameters.rb +14 -0
  69. data/spec/rails/config/locales/en.yml +23 -0
  70. data/spec/rails/config/routes.rb +56 -0
  71. data/spec/rails/config/secrets.yml +22 -0
  72. data/spec/rails/config.ru +4 -0
  73. data/spec/rails/db/seeds.rb +7 -0
  74. data/spec/rails/delta_test.yml +5 -0
  75. data/spec/rails/lib/assets/.keep +0 -0
  76. data/spec/rails/lib/tasks/.keep +0 -0
  77. data/spec/rails/log/.keep +0 -0
  78. data/spec/rails/public/404.html +67 -0
  79. data/spec/rails/public/422.html +67 -0
  80. data/spec/rails/public/500.html +66 -0
  81. data/spec/rails/public/favicon.ico +0 -0
  82. data/spec/rails/public/robots.txt +5 -0
  83. data/spec/rails/spec/features/sample_spec.rb +7 -0
  84. data/spec/rails/spec/spec_helper.rb +16 -0
  85. data/spec/rails/vendor/assets/javascripts/.keep +0 -0
  86. data/spec/rails/vendor/assets/stylesheets/.keep +0 -0
  87. data/spec/spec_helper.rb +39 -0
  88. data/spec/supports/create_table_file.rb +21 -0
  89. metadata +283 -0
@@ -0,0 +1,353 @@
1
+ describe DeltaTest::Configuration do
2
+
3
+ let(:configuration) { DeltaTest::Configuration.new }
4
+
5
+ describe '::new' do
6
+
7
+ let(:options) do
8
+ %i[
9
+ base_path
10
+ table_file
11
+ files
12
+ ]
13
+ end
14
+
15
+ it 'should set default values' do
16
+ options.each do |option|
17
+ expect(configuration.respond_to?(option)).to be(true)
18
+ expect(configuration.send(option)).not_to be_nil
19
+ end
20
+ end
21
+
22
+ end
23
+
24
+ describe '#base_path, #base_path=' do
25
+
26
+ it 'should return an instance of Pathname' do
27
+ expect(configuration.base_path).to be_a(Pathname)
28
+ end
29
+
30
+ it 'should store an instance of Pathname from a string in the setter' do
31
+ path = 'foo/bar'
32
+
33
+ expect {
34
+ configuration.base_path = path
35
+ }.not_to raise_error
36
+
37
+ expect(configuration.base_path).to be_a(Pathname)
38
+ expect(configuration.base_path.to_s).to eq(path)
39
+ end
40
+
41
+ end
42
+
43
+ describe '#table_file, #table_file=' do
44
+
45
+ it 'should return an instance of Pathname' do
46
+ expect(configuration.table_file).to be_a(Pathname)
47
+ end
48
+
49
+ it 'should store an instance of Pathname from a string in the setter' do
50
+ path = 'foo/bar'
51
+
52
+ expect {
53
+ configuration.table_file = path
54
+ }.not_to raise_error
55
+
56
+ expect(configuration.table_file).to be_a(Pathname)
57
+ expect(configuration.table_file.to_s).to eq(path)
58
+ end
59
+
60
+ end
61
+
62
+ describe '#validate!' do
63
+
64
+ describe '#base_path' do
65
+
66
+ it 'should raise an error if `base_path` is a relative path' do
67
+ configuration.base_path = "relative/path"
68
+
69
+ expect {
70
+ configuration.validate!
71
+ }.to raise_error(/base_path/)
72
+ end
73
+
74
+ it 'should not raise if `base_path` is a absolute path' do
75
+ configuration.base_path = "/absolute/path"
76
+
77
+ expect {
78
+ configuration.validate!
79
+ }.not_to raise_error
80
+ end
81
+
82
+ end
83
+
84
+ describe '#files' do
85
+
86
+ it 'should raise an error if `files` is not set' do
87
+ configuration.files = nil
88
+
89
+ expect {
90
+ configuration.validate!
91
+ }.to raise_error(/files/)
92
+ end
93
+
94
+ it 'should raise an error if `files` is neither an array' do
95
+ configuration.files = {}
96
+
97
+ expect {
98
+ configuration.validate!
99
+ }.to raise_error(/files/)
100
+ end
101
+
102
+ it 'should not raise if `files` is an array' do
103
+ configuration.files = []
104
+
105
+ expect {
106
+ configuration.validate!
107
+ }.not_to raise_error
108
+ end
109
+
110
+ end
111
+
112
+ describe '#patterns' do
113
+
114
+ it 'should raise an error if `patterns` is not set' do
115
+ configuration.patterns = nil
116
+
117
+ expect {
118
+ configuration.validate!
119
+ }.to raise_error(/patterns/)
120
+ end
121
+
122
+ it 'should raise an error if `patterns` is neither an array' do
123
+ configuration.patterns = {}
124
+
125
+ expect {
126
+ configuration.validate!
127
+ }.to raise_error(/patterns/)
128
+ end
129
+
130
+ it 'should not raise if `patterns` is an array' do
131
+ configuration.patterns = []
132
+
133
+ expect {
134
+ configuration.validate!
135
+ }.not_to raise_error
136
+ end
137
+
138
+ end
139
+
140
+ describe '#exclude_patterns' do
141
+
142
+ it 'should raise an error if `exclude_patterns` is not set' do
143
+ configuration.exclude_patterns = nil
144
+
145
+ expect {
146
+ configuration.validate!
147
+ }.to raise_error(/patterns/)
148
+ end
149
+
150
+ it 'should raise an error if `exclude_patterns` is neither an array' do
151
+ configuration.exclude_patterns = {}
152
+
153
+ expect {
154
+ configuration.validate!
155
+ }.to raise_error(/exclude_patterns/)
156
+ end
157
+
158
+ it 'should not raise if `exclude_patterns` is an array' do
159
+ configuration.exclude_patterns = []
160
+
161
+ expect {
162
+ configuration.validate!
163
+ }.not_to raise_error
164
+ end
165
+
166
+ end
167
+
168
+ end
169
+
170
+ describe '#precalculate!' do
171
+
172
+ describe '#filtered_files' do
173
+
174
+ it 'should return an instance of Set' do
175
+ configuration.precalculate!
176
+ expect(configuration.filtered_files).to be_a(Set)
177
+ end
178
+
179
+ it 'should return a set of filtered file paths' do
180
+ base_path = '/base_path'
181
+ patterns = [
182
+ '**/*r'
183
+ ]
184
+ files = [
185
+ '/base_path/foo/bar',
186
+ '/base_path/foo/bar',
187
+ '/base_path/foo/bar/baz',
188
+ ]
189
+ filtered_files = Set[
190
+ Pathname.new('foo/bar'),
191
+ ]
192
+
193
+ configuration.base_path = base_path
194
+ configuration.files = files
195
+ configuration.patterns = patterns
196
+
197
+ configuration.precalculate!
198
+ expect(configuration.filtered_files).to eq(filtered_files)
199
+ end
200
+
201
+ end
202
+
203
+ describe '#table_file_path' do
204
+
205
+ it 'should return an absolute path to the table file if `table_file` is a relative' do
206
+ configuration.base_path = '/base_path'
207
+ configuration.table_file = 'somewhere/table_file'
208
+
209
+ configuration.precalculate!
210
+ expect(configuration.table_file_path).to eq(Pathname.new('/base_path/somewhere/table_file'))
211
+ end
212
+
213
+ it 'should return the same value to the table file if `table_file` is a absolute' do
214
+ configuration.base_path = '/base_path'
215
+ configuration.table_file = '/somewhere/table_file'
216
+
217
+ configuration.precalculate!
218
+ expect(configuration.table_file_path).to eq(Pathname.new('/somewhere/table_file'))
219
+ end
220
+
221
+ end
222
+
223
+ end
224
+
225
+ describe '#update' do
226
+
227
+ it 'should call `validate!` and `precalculate!` after the block' do
228
+ dummy = double
229
+ allow(dummy).to receive(:not_yet_called)
230
+ allow(dummy).to receive(:already_called)
231
+
232
+ expect(dummy).to receive(:not_yet_called).with(no_args).once.ordered
233
+ expect(configuration).to receive(:validate!).with(no_args).once.ordered
234
+ expect(configuration).to receive(:precalculate!).with(no_args).once.ordered
235
+ expect(dummy).to receive(:already_called).with(no_args).once.ordered
236
+
237
+ configuration.update do |config|
238
+ dummy.not_yet_called
239
+ end
240
+
241
+ dummy.already_called
242
+ end
243
+
244
+ end
245
+
246
+ describe 'Auto configuration' do
247
+
248
+ describe '#auto_configure!' do
249
+
250
+ it 'should call `load_from_file!`, `retrive_files_from_git_index!` and `update`' do
251
+ allow(configuration).to receive(:load_from_file!).and_return(true)
252
+ allow(configuration).to receive(:retrive_files_from_git_index!).and_return(true)
253
+
254
+ expect(configuration).to receive(:load_from_file!).with(no_args).once.ordered
255
+ expect(configuration).to receive(:retrive_files_from_git_index!).with(no_args).once.ordered
256
+ expect(configuration).to receive(:update).with(no_args).once.ordered
257
+
258
+ configuration.auto_configure!
259
+ end
260
+
261
+ end
262
+
263
+ describe '#load_from_file!' do
264
+
265
+ let(:pwd) { '/path/to/pwd' }
266
+ let(:yaml_file_path) { '/path/to/delta_test.yml' }
267
+ let(:table_file_path) { '/path/to/table_file' }
268
+
269
+ let(:yaml_file) do
270
+ file = FakeFS::FakeFile.new
271
+
272
+ file.content = <<-YAML
273
+ table_file: #{table_file_path}
274
+ YAML
275
+
276
+ file
277
+ end
278
+
279
+ before do
280
+ FakeFS::FileSystem.add(pwd)
281
+ Dir.chdir(pwd)
282
+ end
283
+
284
+ it 'should raise an error if no file is found' do
285
+ expect {
286
+ configuration.load_from_file!
287
+ }.to raise_error(DeltaTest::NoConfigurationFileFoundError)
288
+ end
289
+
290
+ it 'should set `base_path` to the directory of yaml file' do
291
+ FakeFS::FileSystem.add(yaml_file_path, yaml_file)
292
+
293
+ expect {
294
+ configuration.load_from_file!
295
+ }.not_to raise_error
296
+
297
+ expect(configuration.base_path).to eq(Pathname.new(File.dirname(yaml_file_path)))
298
+ end
299
+
300
+ it 'should set other option values from yaml' do
301
+ FakeFS::FileSystem.add(yaml_file_path, yaml_file)
302
+
303
+ expect {
304
+ configuration.load_from_file!
305
+ }.not_to raise_error
306
+
307
+ expect(configuration.table_file).to eq(Pathname.new(table_file_path))
308
+ end
309
+
310
+ it 'should raise an error if there is invalid option in yaml' do
311
+ FakeFS::FileSystem.add(yaml_file_path, yaml_file)
312
+ yaml_file.content = <<-YAML
313
+ foo: true
314
+ YAML
315
+
316
+ expect {
317
+ configuration.load_from_file!
318
+ }.to raise_error(DeltaTest::InvalidOptionError, /foo/)
319
+ end
320
+
321
+ end
322
+
323
+ describe 'retrive_files_from_git_index!' do
324
+
325
+ it 'should raise an error if not in git repo' do
326
+ allow(DeltaTest::Git).to receive(:git_repo?).with(no_args).and_return(false)
327
+
328
+ expect {
329
+ configuration.retrive_files_from_git_index!
330
+ }.to raise_error(DeltaTest::NotInGitRepositoryError)
331
+ end
332
+
333
+ it 'should set `files` from the file indices of git' do
334
+ files = [
335
+ 'a/file_1',
336
+ 'a/file_2',
337
+ ]
338
+
339
+ allow(DeltaTest::Git).to receive(:git_repo?).with(no_args).and_return(true)
340
+ allow(DeltaTest::Git).to receive(:ls_files).with(no_args).and_return(files)
341
+
342
+ expect {
343
+ configuration.retrive_files_from_git_index!
344
+ }.not_to raise_error
345
+
346
+ expect(configuration.files).to eq(files)
347
+ end
348
+
349
+ end
350
+
351
+ end
352
+
353
+ end
@@ -0,0 +1,129 @@
1
+ require 'delta_test/dependencies_table'
2
+
3
+ describe DeltaTest::DependenciesTable do
4
+
5
+ it 'should be a subclass of Hash' do
6
+ expect(DeltaTest::DependenciesTable).to be < Hash
7
+ end
8
+
9
+
10
+ let(:table) { DeltaTest::DependenciesTable.new }
11
+
12
+ describe '#[]' do
13
+
14
+ it 'should initiate an empty set if not accessed before' do
15
+ value = table[:foo]
16
+ expect(value).to be_a(Set)
17
+ expect(value).to be_empty
18
+ end
19
+
20
+ it 'should retain objects throughout accesses' do
21
+ foo_1 = table[:foo].object_id
22
+ foo_2 = table[:foo].object_id
23
+ expect(foo_1).to eq(foo_2)
24
+ end
25
+
26
+ end
27
+
28
+ describe '#add' do
29
+
30
+ let(:spec_file) { 'spec/foo_spec.rb' }
31
+ let(:base_path) { '/base_path' }
32
+
33
+ let(:files) do
34
+ ['foo/file_1.txt']
35
+ end
36
+
37
+ before do
38
+ DeltaTest.configure do |config|
39
+ config.base_path = base_path
40
+ config.files = files
41
+ end
42
+ end
43
+
44
+ it 'should add a regulated file path' do
45
+ table.add(spec_file, '/base_path/foo/file_1.txt')
46
+ expect(table[spec_file]).to eq(Set[Pathname.new('foo/file_1.txt')])
47
+ end
48
+
49
+ it 'should add nothing if a file path is not included in `files` set' do
50
+ table.add(spec_file, '/base_path/foo/file_2.txt')
51
+ expect(table[spec_file]).to be_empty
52
+ end
53
+
54
+ end
55
+
56
+ describe '#without_default_proc' do
57
+
58
+ it 'should reset default_proc temporary inside a block' do
59
+ expect(table.default_proc).not_to be_nil
60
+ table.without_default_proc do
61
+ expect(table.default_proc).to be_nil
62
+ end
63
+ expect(table.default_proc).not_to be_nil
64
+ end
65
+
66
+ end
67
+
68
+ describe '#cleanup!' do
69
+
70
+ it 'should delete items where value is an empty set' do
71
+ table[:foo]
72
+ table[:bar] << 1
73
+ expect(table.keys).to eq([:foo, :bar])
74
+ table.cleanup!
75
+ expect(table.keys).to eq([:bar])
76
+ end
77
+
78
+ end
79
+
80
+ shared_examples :_create_table do
81
+
82
+ include_examples :create_table_file
83
+
84
+ let!(:table) do
85
+ table = DeltaTest::DependenciesTable.new
86
+
87
+ table[:foo] << 1
88
+ table[:foo] << 2
89
+ table[:bar] << 10
90
+ table[:bar] << 20
91
+
92
+ table
93
+ end
94
+
95
+ end
96
+
97
+ describe '#dump' do
98
+
99
+ include_examples :_create_table
100
+
101
+ it 'should dump a table object to a file' do
102
+ expect(table_file.content).to be_empty
103
+
104
+ expect {
105
+ table.dump(table_file_path)
106
+ }.not_to raise_error
107
+
108
+ expect(table_file.content).not_to be_empty
109
+ end
110
+
111
+ end
112
+
113
+ describe '::load' do
114
+
115
+ include_examples :_create_table
116
+
117
+ it 'should restore a table object from a file' do
118
+ table.dump(table_file_path)
119
+ restored_table = nil
120
+ expect {
121
+ restored_table = DeltaTest::DependenciesTable.load(table_file_path)
122
+ }.not_to raise_error
123
+ expect(restored_table).to be_a(DeltaTest::DependenciesTable)
124
+ expect(restored_table).to eq(table)
125
+ end
126
+
127
+ end
128
+
129
+ end
@@ -0,0 +1,201 @@
1
+ require 'delta_test/generator'
2
+
3
+ describe DeltaTest::Generator do
4
+
5
+ include_examples :create_table_file
6
+
7
+ let(:base_path) { Pathname.new(File.expand_path('../../../fixtures', __FILE__)) }
8
+
9
+ let(:spec_file) { 'foo/spec_file.rb' }
10
+ let(:spec_file_2) { 'foo/spec_file_2.rb' }
11
+
12
+ let(:files) do
13
+ [
14
+ 'sample/alpha.rb',
15
+ 'sample/beta.rb',
16
+ # 'sample/gamma.rb', # intentionally omitted
17
+ ]
18
+ end
19
+
20
+ let(:generator) { DeltaTest::Generator.new }
21
+
22
+ before do
23
+ DeltaTest.configure do |config|
24
+ config.base_path = base_path
25
+ config.table_file = table_file_path
26
+ config.files = files
27
+ end
28
+
29
+ DeltaTest.active = true
30
+ end
31
+
32
+ after do
33
+ DeltaTest.active = false
34
+ RubyProf.stop if RubyProf.running?
35
+ end
36
+
37
+ describe '#setup!' do
38
+
39
+ it 'should setup a generator' do
40
+ expect {
41
+ generator.setup!(false) # disable tearadown
42
+ }.not_to raise_error
43
+
44
+ expect(generator).to be_respond_to(:table)
45
+ expect(generator.table).to be_a(DeltaTest::DependenciesTable)
46
+ end
47
+
48
+ end
49
+
50
+ describe '#start!' do
51
+
52
+ before do
53
+ generator.setup!(false) # disable tearadown
54
+ end
55
+
56
+ it 'should start ruby-prof' do
57
+ expect(RubyProf.running?).to be(false)
58
+
59
+ expect {
60
+ generator.start!(spec_file)
61
+ }.not_to raise_error
62
+
63
+ expect(RubyProf.running?).to be(true)
64
+ end
65
+
66
+ describe '#current_spec_file' do
67
+
68
+ it 'should be set' do
69
+ expect(generator.current_spec_file).to be_nil
70
+ generator.start!(spec_file)
71
+ expect(generator.current_spec_file).to eq(spec_file)
72
+ end
73
+
74
+ it 'should be regulated' do
75
+ expect(generator.current_spec_file).to be_nil
76
+ generator.start!('./%s' % spec_file)
77
+ expect(generator.current_spec_file).to eq(spec_file)
78
+ end
79
+
80
+ end
81
+
82
+ end
83
+
84
+ describe '#stop!' do
85
+
86
+ before do
87
+ generator.setup!(false) # disable tearadown
88
+ end
89
+
90
+ it 'should stop ruby-prof' do
91
+ expect(RubyProf.running?).to be(false)
92
+ generator.start!(spec_file)
93
+ expect(RubyProf.running?).to be(true)
94
+ generator.stop!
95
+ expect(RubyProf.running?).to be(false)
96
+ end
97
+
98
+ it 'should unset current_spec_file' do
99
+ expect(generator.current_spec_file).to be_nil
100
+ generator.start!(spec_file)
101
+ expect(generator.current_spec_file).to eq(spec_file)
102
+ generator.stop!
103
+ expect(generator.current_spec_file).to be_nil
104
+ end
105
+
106
+ end
107
+
108
+ describe '#table' do
109
+
110
+ before do
111
+ generator.setup!(false) # disable tearadown
112
+ end
113
+
114
+ it 'should return a set of source files' do
115
+ expect(generator.table).to be_empty
116
+
117
+ generator.start!(spec_file)
118
+ Sample::Alpha.new.alpha
119
+ generator.stop!
120
+
121
+ expect(generator.table.keys).to eq([spec_file])
122
+ expect(generator.table[spec_file]).to include(Pathname.new('sample/alpha.rb'))
123
+ end
124
+
125
+ it 'should return a set of source files for every spec files' do
126
+ expect(generator.table).to be_empty
127
+
128
+ generator.start!(spec_file)
129
+ Sample::Alpha.new.alpha
130
+ generator.stop!
131
+
132
+ generator.start!(spec_file_2)
133
+ Sample::Beta.new.beta
134
+ generator.stop!
135
+
136
+ expect(generator.table.keys).to eq([spec_file, spec_file_2])
137
+ expect(generator.table[spec_file]).to include(Pathname.new('sample/alpha.rb'))
138
+ expect(generator.table[spec_file_2]).to include(Pathname.new('sample/beta.rb'))
139
+ end
140
+
141
+ it 'should not include paths not included in `files`' do
142
+ expect(generator.table).to be_empty
143
+
144
+ generator.start!(spec_file)
145
+ Sample::Alpha.new.beta_gamma
146
+ generator.stop!
147
+
148
+ expect(generator.table.keys).to eq([spec_file])
149
+ expect(generator.table[spec_file]).to include(Pathname.new('sample/alpha.rb'))
150
+ expect(generator.table[spec_file]).to include(Pathname.new('sample/beta.rb'))
151
+ expect(generator.table[spec_file]).not_to include(Pathname.new('sample/gamma.rb'))
152
+ end
153
+
154
+ end
155
+
156
+ describe '#teardown!' do
157
+
158
+ context 'When not `setup!` is called yet' do
159
+
160
+ it 'should do nothing' do
161
+ expect {
162
+ generator.teardown!
163
+ }.not_to raise_error
164
+ end
165
+
166
+ end
167
+
168
+ context 'When `setup!` is called' do
169
+
170
+ before do
171
+ generator.setup!(false) # disable tearadown
172
+ end
173
+
174
+ it 'should stop ruby-prof if running' do
175
+ expect(RubyProf.running?).to be(false)
176
+ generator.start!(spec_file)
177
+ expect(RubyProf.running?).to be(true)
178
+ generator.teardown!
179
+ expect(RubyProf.running?).to be(false)
180
+ end
181
+
182
+ it 'should save the table into a file' do
183
+ expect(generator.table).to be_empty
184
+
185
+ generator.start!(spec_file)
186
+ Sample::Alpha.new.beta_gamma
187
+ generator.stop!
188
+
189
+ expect(generator.table).not_to be_empty
190
+ expect(table_file.content).to be_empty
191
+
192
+ generator.teardown!
193
+
194
+ expect(table_file.content).not_to be_empty
195
+ end
196
+
197
+ end
198
+
199
+ end
200
+
201
+ end