mutator_rails 0.1.8

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 (52) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +37 -0
  3. data/.codeclimate.yml +20 -0
  4. data/.gitignore +12 -0
  5. data/.rspec +2 -0
  6. data/.ruby-version +1 -0
  7. data/CODE_OF_CONDUCT.md +46 -0
  8. data/Gemfile +7 -0
  9. data/Gemfile.lock +232 -0
  10. data/LICENSE.md +21 -0
  11. data/README.md +31 -0
  12. data/Rakefile +8 -0
  13. data/app/models/test.rb +7 -0
  14. data/bin/console +15 -0
  15. data/bin/setup +8 -0
  16. data/config/mutator_rails.yml +8 -0
  17. data/defaults.reek +131 -0
  18. data/lib/mutator_rails.rb +33 -0
  19. data/lib/mutator_rails/analyze.rb +27 -0
  20. data/lib/mutator_rails/cleanup.rb +60 -0
  21. data/lib/mutator_rails/config.rb +34 -0
  22. data/lib/mutator_rails/full_mutate.rb +39 -0
  23. data/lib/mutator_rails/guide.rb +69 -0
  24. data/lib/mutator_rails/list_maker.rb +25 -0
  25. data/lib/mutator_rails/mutation_log.rb +112 -0
  26. data/lib/mutator_rails/railtie.rb +18 -0
  27. data/lib/mutator_rails/single_mutate.rb +134 -0
  28. data/lib/mutator_rails/statistics.rb +192 -0
  29. data/lib/mutator_rails/version.rb +5 -0
  30. data/lib/tasks/mutator/analyze.rake +13 -0
  31. data/lib/tasks/mutator/cleanup.rake +13 -0
  32. data/lib/tasks/mutator/mutate_files.rake +12 -0
  33. data/lib/tasks/mutator/mutator.rake +17 -0
  34. data/lib/tasks/mutator/statistics.rake +13 -0
  35. data/log/mutant/analysis.tsv +3 -0
  36. data/log/mutant/guide.txt +1 -0
  37. data/log/mutant/models/test.log +92 -0
  38. data/log/mutant/models/test2.log +92 -0
  39. data/log/mutant/statistics.txt +19 -0
  40. data/mutator_rails.gemspec +37 -0
  41. data/spec/models/test_spec.rb +15 -0
  42. data/spec/mutator_rails/analyze_spec.rb +26 -0
  43. data/spec/mutator_rails/cleanup_spec.rb +13 -0
  44. data/spec/mutator_rails/full_mutate_spec.rb +13 -0
  45. data/spec/mutator_rails/guide_spec.rb +33 -0
  46. data/spec/mutator_rails/list_maker_spec.rb +17 -0
  47. data/spec/mutator_rails/mutation_log_spec.rb +36 -0
  48. data/spec/mutator_rails/single_mutate_spec.rb +111 -0
  49. data/spec/mutator_rails/statistics_spec.rb +48 -0
  50. data/spec/mutator_rails_spec.rb +9 -0
  51. data/spec/spec_helper.rb +49 -0
  52. metadata +306 -0
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe MutatorRails::ListMaker do
6
+
7
+ let(:object) { described_class.new }
8
+
9
+ describe '#make_list' do
10
+ it 'has proper content' do
11
+ result = object.make_list
12
+
13
+ expect(result).to have(2).entries
14
+ expect(result.last.link).to eql('=HYPERLINK("models/test2.log","Export::ActivityExporter2")')
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe MutatorRails::MutationLog do
6
+ let(:log) { 'log/mutant/models/test.log' }
7
+ let(:object) { described_class.new(log) }
8
+
9
+ describe '#call' do
10
+ let(:expectation) { '\t73\t26\t99\t73.737\t1.559\t63.52' }
11
+ subject { object.to_s }
12
+ it 'processes the all code' do
13
+ expect(subject).to match(expectation)
14
+ expect(subject).to match('HYPERLINK')
15
+ expect(subject).to match('"Export::ActivityExporter"')
16
+ end
17
+ end
18
+
19
+ describe '#pct' do
20
+ it 'has a pct' do
21
+ expect(object.pct).to equal 73.737
22
+ end
23
+ end
24
+
25
+ describe '#alive' do
26
+ it 'has an alive count' do
27
+ expect(object.alive).to equal 26
28
+ end
29
+ end
30
+
31
+ describe '#link' do
32
+ it 'has a link' do
33
+ expect(object.link).to eql '=HYPERLINK("models/test.log","Export::ActivityExporter")'
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe MutatorRails::SingleMutate do
6
+ let(:file) { 'app/models/test.rb' }
7
+ let(:guide) { MutatorRails::Guide.new }
8
+ let(:object) { described_class.new(guide, file) }
9
+
10
+ describe '#call' do
11
+ it 'processes the all code' do
12
+ object.call
13
+ end
14
+ end
15
+
16
+ describe '#old_log' do
17
+ it 'returns old log file name (deprecated name)' do
18
+ expect(object.old_log)
19
+ .to eql('log/mutant/models/test_fdef5a515ce8eff897a72b026aadbaba_0e7f4802f58bbbb186be8b44a74a33e3_0.8.14.log')
20
+ end
21
+ end
22
+
23
+ describe '#log_location' do
24
+ it 'returns log file' do
25
+ expect(object.log_location.to_s)
26
+ .to eql('log/mutant/models/test')
27
+ end
28
+ end
29
+
30
+ describe '#full_log' do
31
+ it 'returns full log file name' do
32
+ expect(object.full_log.to_s)
33
+ .to eql('log/mutant/models/test.log')
34
+ end
35
+ end
36
+
37
+ describe '#log' do
38
+ it 'returns log file' do
39
+ expect(object.log.to_s)
40
+ .to eql('log/mutant/models/test.log')
41
+ end
42
+ end
43
+
44
+ describe '#log_dir' do
45
+ it 'returns log file dir' do
46
+ expect(object.log_dir.to_s).to eql('log/mutant/models')
47
+ end
48
+ end
49
+
50
+ describe '#spec_md5' do
51
+ it 'returns md5 hash of spec file' do
52
+ expect(object.spec_md5)
53
+ .to eql('0e7f4802f58bbbb186be8b44a74a33e3')
54
+ end
55
+ end
56
+
57
+ describe '#path' do
58
+ it 'returns path to code' do
59
+ expect(object.path)
60
+ .to be_an_instance_of(Pathname)
61
+ end
62
+ end
63
+
64
+ describe '#rerun' do
65
+ let(:cmd) { 'command' }
66
+ it 'returns nothing - no rerun' do
67
+ expect(object.rerun(cmd)).to be_nil
68
+ end
69
+ end
70
+
71
+ describe '#first_run' do
72
+ let(:parms) { %w[a b] }
73
+ it 'returns first run results cmd' do
74
+ expect(object.first_run(parms))
75
+ .to eql('SPEC_OPTS="--pattern spec/models/test_spec.rb" RAILS_ENV=test bundle exec mutant a b')
76
+ end
77
+ end
78
+
79
+ describe '#spec_opt' do
80
+ it 'returns spec option string' do
81
+ expect(object.spec_opt)
82
+ .to eql('SPEC_OPTS="--pattern spec/models/test_spec.rb" ')
83
+ end
84
+ end
85
+
86
+ describe '#spec_file' do
87
+ it 'returns spec_file name' do
88
+ expect(object.spec_file)
89
+ .to eql('spec/models/test_spec.rb')
90
+ end
91
+ end
92
+
93
+ describe '#complete?' do
94
+ let(:log) { 'log/mutant/models/test.log' }
95
+ let(:file2) { __FILE__ }
96
+ it 'returns completion indication' do
97
+ expect(object.complete?(log)).to be true
98
+ end
99
+
100
+ it 'returns completion indication' do
101
+ expect(object.complete?(file2)).to be false
102
+ end
103
+ end
104
+
105
+ describe '#preface' do
106
+ let(:base) { 'abc' }
107
+ it 'returns preface' do
108
+ expect(object.preface(base)).to eql('')
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe MutatorRails::Statistics do
6
+ let(:object) { described_class.call }
7
+ let(:statistics_file) { 'log/mutant/statistics.txt' }
8
+ before do
9
+ File.delete(statistics_file) if File.exist?(statistics_file)
10
+ end
11
+
12
+ describe '#call' do
13
+ let(:expectations) do
14
+ "
15
+ 2 module(s) were mutated in 2 minutes 7 seconds
16
+ for a total of 198 mutations tested @ 1.56/sec average
17
+ which left 52 mutations alive (26.3%)
18
+ and 146 killed (73.7%)
19
+
20
+ 0 module(s) were fully mutated (0.0%)
21
+
22
+ The following modules had most alive mutations (top 10):
23
+ . Export::ActivityExporter (26)
24
+ . Export::ActivityExporter2 (26)
25
+
26
+ The following modules had longest mutation time (top 10):
27
+ . Export::ActivityExporter (1 minute 3 seconds)
28
+ . Export::ActivityExporter2 (1 minute 3 seconds)
29
+
30
+ The following modules had largest mutation count (top 10):
31
+ . Export::ActivityExporter (99)
32
+ . Export::ActivityExporter2 (99)"
33
+ end
34
+
35
+ it 'processes the log files' do
36
+ object
37
+
38
+ expect(File.exist?(statistics_file)).to be true
39
+ end
40
+
41
+ it 'has the proper stats' do
42
+ object
43
+ stats = File.read(statistics_file)
44
+
45
+ expect(stats).to match(expectations)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe MutatorRails do
6
+ it 'has a version number' do
7
+ expect(MutatorRails::VERSION).to be_an_instance_of(String)
8
+ end
9
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ ENV['RACK_ENV'] = 'test'
4
+
5
+ require 'simplecov'
6
+
7
+ SimpleCov.add_filter '/spec/'
8
+ SimpleCov.start 'rails' unless File.basename($0).eql?('mutant')
9
+
10
+ require 'bundler/setup'
11
+ require 'mutator_rails'
12
+ require 'rspec/collection_matchers'
13
+
14
+ RSpec.configure do |config|
15
+ # Enable flags like --only-failures and --next-failure
16
+ config.example_status_persistence_file_path = '.rspec_status'
17
+
18
+ # Disable RSpec exposing methods globally on `Module` and `main`
19
+ config.disable_monkey_patching!
20
+
21
+ config.expect_with :rspec do |c|
22
+ c.syntax = :expect
23
+
24
+ # This option will default to `true` in RSpec 4. It makes the `description`
25
+ # and `failure_message` of custom matchers include text for helper methods
26
+ # defined using `chain`, e.g.:
27
+ # be_bigger_than(2).and_smaller_than(4).description
28
+ # # => "be bigger than 2 and smaller than 4"
29
+ # ...rather than:
30
+ # # => "be bigger than 2"
31
+ c.include_chain_clauses_in_custom_matcher_descriptions = true
32
+ end
33
+
34
+ # rspec-mocks config goes here. You can use an alternate test double
35
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
36
+ config.mock_with :rspec do |mocks|
37
+ # Prevents you from mocking or stubbing a method that does not exist on
38
+ # a real object. This is generally recommended, and will default to
39
+ # `true` in RSpec 4.
40
+ mocks.verify_partial_doubles = true
41
+ end
42
+
43
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
44
+ # have no way to turn it off -- the option exists only for backwards
45
+ # compatibility in RSpec 3). It causes shared context metadata to be
46
+ # inherited by the metadata hash of host groups and examples, rather than
47
+ # triggering implicit auto-inclusion in groups with matching metadata.
48
+ config.shared_context_metadata_behavior = :apply_to_host_groups
49
+ end
metadata ADDED
@@ -0,0 +1,306 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mutator_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.8
5
+ platform: ruby
6
+ authors:
7
+ - Tim Chambers
8
+ - Jason Dinsmore
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2018-01-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.15'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.15'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '12.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '12.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rails
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '4.0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '4.0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rspec-core
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 3.6.0
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 3.6.0
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec-expectations
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: 3.6.0
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: 3.6.0
84
+ - !ruby/object:Gem::Dependency
85
+ name: rspec_junit_formatter
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: codeclimate-test-reporter
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rspec-collection_matchers
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rspec-mocks
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 3.6.0
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: 3.6.0
140
+ - !ruby/object:Gem::Dependency
141
+ name: mutant
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: 0.8.14
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 0.8.14
154
+ - !ruby/object:Gem::Dependency
155
+ name: mutant-rspec
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: 0.8.14
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: 0.8.14
168
+ - !ruby/object:Gem::Dependency
169
+ name: concord
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: 0.1.4
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: 0.1.4
182
+ - !ruby/object:Gem::Dependency
183
+ name: procto
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: 0.0.3
189
+ type: :development
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: 0.0.3
196
+ - !ruby/object:Gem::Dependency
197
+ name: adamantium
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: 0.2.0
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: 0.2.0
210
+ - !ruby/object:Gem::Dependency
211
+ name: reek
212
+ requirement: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - "~>"
215
+ - !ruby/object:Gem::Version
216
+ version: 4.7.2
217
+ type: :development
218
+ prerelease: false
219
+ version_requirements: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - "~>"
222
+ - !ruby/object:Gem::Version
223
+ version: 4.7.2
224
+ description: Automate mutation testing to find weaknesses in code
225
+ email:
226
+ - tim@possibilogy.com
227
+ - jason@dinjas.com
228
+ executables: []
229
+ extensions: []
230
+ extra_rdoc_files: []
231
+ files:
232
+ - ".circleci/config.yml"
233
+ - ".codeclimate.yml"
234
+ - ".gitignore"
235
+ - ".rspec"
236
+ - ".ruby-version"
237
+ - CODE_OF_CONDUCT.md
238
+ - Gemfile
239
+ - Gemfile.lock
240
+ - LICENSE.md
241
+ - README.md
242
+ - Rakefile
243
+ - app/models/test.rb
244
+ - bin/console
245
+ - bin/setup
246
+ - config/mutator_rails.yml
247
+ - defaults.reek
248
+ - lib/mutator_rails.rb
249
+ - lib/mutator_rails/analyze.rb
250
+ - lib/mutator_rails/cleanup.rb
251
+ - lib/mutator_rails/config.rb
252
+ - lib/mutator_rails/full_mutate.rb
253
+ - lib/mutator_rails/guide.rb
254
+ - lib/mutator_rails/list_maker.rb
255
+ - lib/mutator_rails/mutation_log.rb
256
+ - lib/mutator_rails/railtie.rb
257
+ - lib/mutator_rails/single_mutate.rb
258
+ - lib/mutator_rails/statistics.rb
259
+ - lib/mutator_rails/version.rb
260
+ - lib/tasks/mutator/analyze.rake
261
+ - lib/tasks/mutator/cleanup.rake
262
+ - lib/tasks/mutator/mutate_files.rake
263
+ - lib/tasks/mutator/mutator.rake
264
+ - lib/tasks/mutator/statistics.rake
265
+ - log/mutant/analysis.tsv
266
+ - log/mutant/guide.txt
267
+ - log/mutant/models/test.log
268
+ - log/mutant/models/test2.log
269
+ - log/mutant/statistics.txt
270
+ - mutator_rails.gemspec
271
+ - spec/models/test_spec.rb
272
+ - spec/mutator_rails/analyze_spec.rb
273
+ - spec/mutator_rails/cleanup_spec.rb
274
+ - spec/mutator_rails/full_mutate_spec.rb
275
+ - spec/mutator_rails/guide_spec.rb
276
+ - spec/mutator_rails/list_maker_spec.rb
277
+ - spec/mutator_rails/mutation_log_spec.rb
278
+ - spec/mutator_rails/single_mutate_spec.rb
279
+ - spec/mutator_rails/statistics_spec.rb
280
+ - spec/mutator_rails_spec.rb
281
+ - spec/spec_helper.rb
282
+ homepage: https://github.com/dinj-oss/mutator_rails
283
+ licenses:
284
+ - MIT
285
+ metadata: {}
286
+ post_install_message:
287
+ rdoc_options: []
288
+ require_paths:
289
+ - lib
290
+ required_ruby_version: !ruby/object:Gem::Requirement
291
+ requirements:
292
+ - - ">="
293
+ - !ruby/object:Gem::Version
294
+ version: '2.3'
295
+ required_rubygems_version: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: 1.3.6
300
+ requirements: []
301
+ rubyforge_project:
302
+ rubygems_version: 2.5.2
303
+ signing_key:
304
+ specification_version: 4
305
+ summary: Integrate automated mutation testing into Rails.
306
+ test_files: []