heckle 1.4.3 → 2.0.0.b1
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/.autotest +4 -2
- data/.gemtest +0 -0
- data/History.txt +16 -0
- data/Manifest.txt +9 -1
- data/README.txt +5 -4
- data/Rakefile +13 -13
- data/bin/heckle +5 -93
- data/lib/heckle.rb +122 -16
- data/lib/heckle_runner.rb +113 -0
- data/lib/minitest_heckler.rb +33 -0
- data/lib/test_unit_heckler.rb +0 -1
- data/test/fixtures/heckle_dummy.rb +200 -0
- data/test/fixtures/heckled.rb +4 -0
- data/test/fixtures/minitest_project/README.txt +57 -0
- data/test/fixtures/minitest_project/Rakefile +17 -0
- data/test/fixtures/minitest_project/lib/doubler.rb +9 -0
- data/test/fixtures/minitest_project/test/test_doubler_with_a_number.rb +12 -0
- data/test/fixtures/minitest_project/test/test_doubler_with_bad_input.rb +16 -0
- data/test/test_heckle.rb +634 -356
- data/test/test_heckle_runner.rb +54 -0
- metadata +117 -42
- metadata.gz.sig +0 -0
- data/sample/lib/heckled.rb +0 -80
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'heckle_runner'
|
3
|
+
|
4
|
+
# Tests needed:
|
5
|
+
# * if no method, loads all local methods
|
6
|
+
# * should raise an exception if the class/module can't be found
|
7
|
+
# * should raise an exception if the method can't be found
|
8
|
+
# * Tests for option parsing.
|
9
|
+
|
10
|
+
class TestHeckleRunnerRun < MiniTest::Unit::TestCase
|
11
|
+
@@dummy_dir = File.expand_path('test/fixtures/minitest_project')
|
12
|
+
dummy_lib = File.join(@@dummy_dir, 'lib')
|
13
|
+
|
14
|
+
$LOAD_PATH << dummy_lib
|
15
|
+
|
16
|
+
def setup
|
17
|
+
super
|
18
|
+
|
19
|
+
@old_pwd = Dir.pwd
|
20
|
+
Dir.chdir @@dummy_dir
|
21
|
+
|
22
|
+
# See MiniTest's test/minitest/metametameta.rb
|
23
|
+
@output = StringIO.new("")
|
24
|
+
MiniTest::Unit::TestCase.reset
|
25
|
+
MiniTest::Unit.output = @output
|
26
|
+
end
|
27
|
+
|
28
|
+
def teardown
|
29
|
+
super
|
30
|
+
Dir.chdir @old_pwd
|
31
|
+
MiniTest::Unit.output = $stdout
|
32
|
+
|
33
|
+
MiniTest::Unit::TestCase.test_suites.each do |test|
|
34
|
+
Object.send :remove_const, test.to_s.to_sym
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_run_with_full_coverage
|
39
|
+
out, _ = capture_io do
|
40
|
+
HeckleRunner.run %w[Doubler double]
|
41
|
+
end
|
42
|
+
|
43
|
+
assert_match %r{No mutants survived.}, out
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_run_with_partial_coverage
|
47
|
+
out, _ = capture_io do
|
48
|
+
HeckleRunner.run %w[Doubler double --tests test/test_doubler_with_a_number.rb]
|
49
|
+
end
|
50
|
+
|
51
|
+
assert_match %r{The following mutations didn't cause test failures:}, out
|
52
|
+
refute_match %{No mutants survived.}, out
|
53
|
+
end
|
54
|
+
end
|
metadata
CHANGED
@@ -1,12 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: heckle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: -1277703938
|
5
|
+
prerelease: 6
|
6
|
+
segments:
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
- b
|
11
|
+
- 1
|
12
|
+
version: 2.0.0.b1
|
5
13
|
platform: ruby
|
6
14
|
authors:
|
7
15
|
- Ryan Davis
|
8
|
-
-
|
9
|
-
- Kevin Clark
|
16
|
+
- Pete Higgins
|
10
17
|
autorequire:
|
11
18
|
bindir: bin
|
12
19
|
cert_chain:
|
@@ -32,57 +39,108 @@ cert_chain:
|
|
32
39
|
FBHgymkyj/AOSqKRIpXPhjC6
|
33
40
|
-----END CERTIFICATE-----
|
34
41
|
|
35
|
-
date:
|
36
|
-
default_executable:
|
42
|
+
date: 2012-10-03 00:00:00 Z
|
37
43
|
dependencies:
|
38
44
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
40
|
-
|
41
|
-
|
42
|
-
|
45
|
+
name: ruby_parser
|
46
|
+
prerelease: false
|
47
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
43
49
|
requirements:
|
44
|
-
- -
|
50
|
+
- - ~>
|
45
51
|
- !ruby/object:Gem::Version
|
46
|
-
|
47
|
-
|
52
|
+
hash: 1
|
53
|
+
segments:
|
54
|
+
- 2
|
55
|
+
- 3
|
56
|
+
- 1
|
57
|
+
version: 2.3.1
|
58
|
+
type: :runtime
|
59
|
+
version_requirements: *id001
|
48
60
|
- !ruby/object:Gem::Dependency
|
49
61
|
name: ruby2ruby
|
50
|
-
|
51
|
-
|
52
|
-
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
53
65
|
requirements:
|
54
|
-
- -
|
66
|
+
- - ~>
|
55
67
|
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
|
68
|
+
hash: 27
|
69
|
+
segments:
|
70
|
+
- 1
|
71
|
+
- 3
|
72
|
+
- 0
|
73
|
+
version: 1.3.0
|
74
|
+
type: :runtime
|
75
|
+
version_requirements: *id002
|
58
76
|
- !ruby/object:Gem::Dependency
|
59
77
|
name: ZenTest
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ~>
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 35
|
85
|
+
segments:
|
86
|
+
- 4
|
87
|
+
- 7
|
88
|
+
- 0
|
89
|
+
version: 4.7.0
|
60
90
|
type: :runtime
|
61
|
-
|
62
|
-
|
91
|
+
version_requirements: *id003
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: minitest
|
94
|
+
prerelease: false
|
95
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ~>
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
hash: 1
|
101
|
+
segments:
|
102
|
+
- 3
|
103
|
+
- 3
|
104
|
+
version: "3.3"
|
105
|
+
type: :development
|
106
|
+
version_requirements: *id004
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
name: rdoc
|
109
|
+
prerelease: false
|
110
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
63
112
|
requirements:
|
64
|
-
- -
|
113
|
+
- - ~>
|
65
114
|
- !ruby/object:Gem::Version
|
66
|
-
|
67
|
-
|
115
|
+
hash: 19
|
116
|
+
segments:
|
117
|
+
- 3
|
118
|
+
- 10
|
119
|
+
version: "3.10"
|
120
|
+
type: :development
|
121
|
+
version_requirements: *id005
|
68
122
|
- !ruby/object:Gem::Dependency
|
69
123
|
name: hoe
|
70
|
-
|
71
|
-
|
72
|
-
|
124
|
+
prerelease: false
|
125
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
73
127
|
requirements:
|
74
|
-
- -
|
128
|
+
- - ~>
|
75
129
|
- !ruby/object:Gem::Version
|
76
|
-
|
77
|
-
|
130
|
+
hash: 7
|
131
|
+
segments:
|
132
|
+
- 3
|
133
|
+
- 0
|
134
|
+
version: "3.0"
|
135
|
+
type: :development
|
136
|
+
version_requirements: *id006
|
78
137
|
description: |-
|
79
|
-
Heckle is unit test sadism(tm) at
|
138
|
+
Heckle is unit test sadism(tm) at its core. Heckle is a mutation tester. It modifies your code and runs your tests to make sure they fail. The idea is that if code can be changed and your tests don't notice, either that code isn't being covered or it doesn't do anything.
|
80
139
|
|
81
140
|
It's like hiring a white-hat hacker to try to break into your server and making sure you detect it. You learn the most by trying to break things and watching the outcome in an act of unit test sadism.
|
82
141
|
email:
|
83
142
|
- ryand-ruby@zenspider.com
|
84
|
-
-
|
85
|
-
- kevin.clark@gmail.com
|
143
|
+
- pete@peterhiggins.org
|
86
144
|
executables:
|
87
145
|
- heckle
|
88
146
|
extensions: []
|
@@ -100,15 +158,23 @@ files:
|
|
100
158
|
- bin/heckle
|
101
159
|
- lib/autotest/heckle.rb
|
102
160
|
- lib/heckle.rb
|
161
|
+
- lib/heckle_runner.rb
|
162
|
+
- lib/minitest_heckler.rb
|
103
163
|
- lib/test_unit_heckler.rb
|
104
164
|
- sample/Rakefile
|
105
165
|
- sample/changes.log
|
106
|
-
- sample/lib/heckled.rb
|
107
166
|
- sample/test/test_heckled.rb
|
167
|
+
- test/fixtures/heckle_dummy.rb
|
108
168
|
- test/fixtures/heckled.rb
|
169
|
+
- test/fixtures/minitest_project/README.txt
|
170
|
+
- test/fixtures/minitest_project/Rakefile
|
171
|
+
- test/fixtures/minitest_project/lib/doubler.rb
|
172
|
+
- test/fixtures/minitest_project/test/test_doubler_with_a_number.rb
|
173
|
+
- test/fixtures/minitest_project/test/test_doubler_with_bad_input.rb
|
109
174
|
- test/test_heckle.rb
|
110
|
-
|
111
|
-
|
175
|
+
- test/test_heckle_runner.rb
|
176
|
+
- .gemtest
|
177
|
+
homepage: http://ruby.sadi.st/Heckle.html
|
112
178
|
licenses: []
|
113
179
|
|
114
180
|
post_install_message:
|
@@ -118,23 +184,32 @@ rdoc_options:
|
|
118
184
|
require_paths:
|
119
185
|
- lib
|
120
186
|
required_ruby_version: !ruby/object:Gem::Requirement
|
187
|
+
none: false
|
121
188
|
requirements:
|
122
189
|
- - ">="
|
123
190
|
- !ruby/object:Gem::Version
|
191
|
+
hash: 3
|
192
|
+
segments:
|
193
|
+
- 0
|
124
194
|
version: "0"
|
125
|
-
version:
|
126
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
|
+
none: false
|
127
197
|
requirements:
|
128
|
-
- - "
|
198
|
+
- - ">"
|
129
199
|
- !ruby/object:Gem::Version
|
130
|
-
|
131
|
-
|
200
|
+
hash: 25
|
201
|
+
segments:
|
202
|
+
- 1
|
203
|
+
- 3
|
204
|
+
- 1
|
205
|
+
version: 1.3.1
|
132
206
|
requirements: []
|
133
207
|
|
134
|
-
rubyforge_project:
|
135
|
-
rubygems_version: 1.
|
208
|
+
rubyforge_project: heckle
|
209
|
+
rubygems_version: 1.8.24
|
136
210
|
signing_key:
|
137
211
|
specification_version: 3
|
138
|
-
summary: Heckle is unit test sadism(tm) at
|
212
|
+
summary: Heckle is unit test sadism(tm) at its core
|
139
213
|
test_files:
|
140
214
|
- test/test_heckle.rb
|
215
|
+
- test/test_heckle_runner.rb
|
metadata.gz.sig
CHANGED
Binary file
|
data/sample/lib/heckled.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
class Heckled
|
2
|
-
attr_accessor :names
|
3
|
-
|
4
|
-
def initialize
|
5
|
-
@names = []
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.is_a_klass_method?
|
9
|
-
true
|
10
|
-
end
|
11
|
-
|
12
|
-
def uses_while
|
13
|
-
i = 1
|
14
|
-
while i < 10
|
15
|
-
i += 1
|
16
|
-
end
|
17
|
-
i
|
18
|
-
end
|
19
|
-
|
20
|
-
def uses_until
|
21
|
-
i = 1
|
22
|
-
until i >= 10
|
23
|
-
i += 1
|
24
|
-
end
|
25
|
-
i
|
26
|
-
end
|
27
|
-
|
28
|
-
def uses_numeric_literals
|
29
|
-
i = 1
|
30
|
-
i += 10
|
31
|
-
i -= 3.5
|
32
|
-
end
|
33
|
-
|
34
|
-
def uses_strings
|
35
|
-
@names << "Hello, Robert"
|
36
|
-
@names << "Hello, Jeff"
|
37
|
-
@names << "Hi, Frank"
|
38
|
-
end
|
39
|
-
|
40
|
-
def uses_different_types
|
41
|
-
i = 1
|
42
|
-
b = "Hello, Joe"
|
43
|
-
c = 3.3
|
44
|
-
end
|
45
|
-
|
46
|
-
def uses_the_same_literal
|
47
|
-
i = 1
|
48
|
-
i = 1
|
49
|
-
i = 1
|
50
|
-
end
|
51
|
-
|
52
|
-
def uses_if
|
53
|
-
if true
|
54
|
-
if false
|
55
|
-
return
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def uses_unless
|
61
|
-
unless true
|
62
|
-
if false
|
63
|
-
return
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def uses_masignment
|
69
|
-
one, two = [1, 2]
|
70
|
-
end
|
71
|
-
|
72
|
-
def uses_infinite_loop?
|
73
|
-
# Converts to a infinite loop actually
|
74
|
-
some_func until true
|
75
|
-
end
|
76
|
-
|
77
|
-
# placeholder
|
78
|
-
def some_func
|
79
|
-
end
|
80
|
-
end
|