mrproper 0.0.1 → 0.0.2
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.
- data/README.md +9 -5
- data/lib/mrproper.rb +2 -1
- data/lib/mrproper/base.rb +4 -4
- data/lib/mrproper/dsl.rb +1 -1
- data/lib/mrproper/errors.rb +13 -0
- metadata +3 -2
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# MrProper
|
1
|
+
# MrProper [](http://travis-ci.org/porras/mrproper)
|
2
2
|
|
3
|
-
MrProper is a
|
3
|
+
MrProper is a Test::Unit-based library to do Property Based Testing a la [Haskell](http://haskell.org/haskellwiki/Haskell)'s [QuickCheck](http://hackage.haskell.org/package/QuickCheck).
|
4
4
|
|
5
5
|
Property Based Testing is an alternative approach to unit testing for testing functional style functions/methods. Instead of using examples and testing the return value of your function for each example, you:
|
6
6
|
|
@@ -24,7 +24,7 @@ In order to do so, MrProper provides a very simple DSL, with just three methods,
|
|
24
24
|
|
25
25
|
## Running the properties
|
26
26
|
|
27
|
-
After implementing `double` (we'll leave that as an exercise `;)`), we run the properties as a regular
|
27
|
+
After implementing `double` (we'll leave that as an exercise `;)`), we run the properties as a regular test file:
|
28
28
|
|
29
29
|
$ testrb double_properties.rb
|
30
30
|
Run options:
|
@@ -92,9 +92,13 @@ In case this is not enough, you can just use a block and do whatever you want to
|
|
92
92
|
rand > 0.5 ? Wadus.new(rand(9)) : FooBar.new(rand(9))
|
93
93
|
end
|
94
94
|
|
95
|
-
##
|
95
|
+
## Further reading
|
96
96
|
|
97
|
-
*
|
97
|
+
* [Slides](http://mrproper-railscamp.heroku.com/) of a quick and dirty pesentation about MrProper at [railscamp-es](https://rails-camp-es.jottit.com/) '2011. Those slides eventually became this README's first version
|
98
|
+
* [Chapter](http://book.realworldhaskell.org/read/testing-and-quality-assurance.html) of the book *“Real World Haskell”* talking about QuickCheck
|
99
|
+
* [RushCheck](https://github.com/IKEGAMIDaisuke/rushcheck), an old (and apparently abandoned) implementation of this idea in Ruby
|
100
|
+
* [rqc](https://github.com/seancribbs/rqc), a Ruby port of [QC.js](http://willowbend.cx/2009/12/05/qc-js-quickcheck-javascript/) (a property-based testing framework in Javascript)
|
101
|
+
* [ProTest](http://www.protest-project.eu/index.html), another implementation in Erlang
|
98
102
|
|
99
103
|
## License
|
100
104
|
|
data/lib/mrproper.rb
CHANGED
data/lib/mrproper/base.rb
CHANGED
@@ -3,8 +3,8 @@ module MrProper
|
|
3
3
|
def properties(name, &block)
|
4
4
|
dsl = MrProper::DSL.new
|
5
5
|
dsl.instance_eval(&block)
|
6
|
-
Class.new(
|
7
|
-
|
6
|
+
Class.new(Test::Unit::TestCase).class_eval do
|
7
|
+
eval("def self.name; #{name.inspect}; end")
|
8
8
|
dsl.properties.each do |message, test_block|
|
9
9
|
define_method "test_property: #{message.inspect}" do
|
10
10
|
dsl.data_blocks.each do |data_block|
|
@@ -12,8 +12,8 @@ module MrProper
|
|
12
12
|
data = data_block.call
|
13
13
|
begin
|
14
14
|
instance_exec(data, &test_block)
|
15
|
-
rescue MiniTest::Assertion => e
|
16
|
-
raise
|
15
|
+
rescue Test::Unit::AssertionFailedError, MiniTest::Assertion => e
|
16
|
+
raise FalsableProperty.new("Property #{message.inspect} is falsable for data #{data.inspect}\n#{e.message}")
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
data/lib/mrproper/dsl.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
module MrProper
|
2
|
+
class FalsableProperty < Exception; end
|
3
|
+
end
|
4
|
+
|
5
|
+
unless Test::Unit.const_defined?('AssertionFailedError')
|
6
|
+
class Test::Unit::AssertionFailedError < Exception; end
|
7
|
+
end
|
8
|
+
|
9
|
+
unless Object.const_defined?('MiniTest')
|
10
|
+
module MiniTest
|
11
|
+
class Assertion < Exception; end
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mrproper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-11-
|
13
|
+
date: 2011-11-09 00:00:00.000000000Z
|
14
14
|
dependencies: []
|
15
15
|
description:
|
16
16
|
email: sgilperez@gmail.com
|
@@ -23,6 +23,7 @@ files:
|
|
23
23
|
- lib/mrproper/base.rb
|
24
24
|
- lib/mrproper/core_extensions/string_extensions.rb
|
25
25
|
- lib/mrproper/dsl.rb
|
26
|
+
- lib/mrproper/errors.rb
|
26
27
|
- lib/mrproper.rb
|
27
28
|
homepage: http://github.com/porras/mrproper
|
28
29
|
licenses: []
|