minitest-predicates 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.
@@ -0,0 +1,12 @@
|
|
1
|
+
# require 'minitest/predicates' will automatically include
|
2
|
+
# predicate support into MiniTest::Unit::TestCase classes and
|
3
|
+
# include predicate support on Object.
|
4
|
+
#
|
5
|
+
# To manually include this functionality, require 'minitest/predicates/core'
|
6
|
+
# and include the modules manually.
|
7
|
+
|
8
|
+
require 'minitest/unit'
|
9
|
+
require 'minitest/predicates/core'
|
10
|
+
|
11
|
+
MiniTestPredicates.enable_assert_syntax!
|
12
|
+
MiniTestPredicates.enable_spec_syntax!
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'minitest-predicates/version'
|
2
|
+
|
3
|
+
module MiniTestPredicates
|
4
|
+
|
5
|
+
# Includes MiniTestPredicates::Unit into MiniTest::Unit::TestCase so
|
6
|
+
# must_be_foo @object and wont_be_foo @object
|
7
|
+
def self.enable_assert_syntax!
|
8
|
+
MiniTest::Unit::TestCase.send :include, MiniTestPredicates::Unit
|
9
|
+
end
|
10
|
+
|
11
|
+
# Includes MiniTestPredicates::Spec into Object so
|
12
|
+
# @object.must_be_foo and @object.wont_be_foo will work.
|
13
|
+
def self.enable_spec_syntax!
|
14
|
+
Object.send :include, MiniTestPredicates::Spec
|
15
|
+
end
|
16
|
+
|
17
|
+
# @private
|
18
|
+
def self.make_assertion! options
|
19
|
+
args = options[:args]
|
20
|
+
|
21
|
+
# Given the name of the method called and the prefaces for
|
22
|
+
# positive and negative assertions, get the name of the
|
23
|
+
# predicate method and whether this is an assert or a refute.
|
24
|
+
positive = nil
|
25
|
+
predicate_method = nil
|
26
|
+
case options[:name].to_s
|
27
|
+
when *options[:positive]
|
28
|
+
positive = true
|
29
|
+
predicate_method = $1
|
30
|
+
when *options[:negative]
|
31
|
+
positive = false
|
32
|
+
predicate_method = $1
|
33
|
+
else
|
34
|
+
return :super
|
35
|
+
end
|
36
|
+
|
37
|
+
# Get the value of the predicate method.
|
38
|
+
# We try calling the method instead of checking is the
|
39
|
+
# object respond_to? the method to support objects like
|
40
|
+
# OpenStruct where method_missing is implemented but not respond_to?
|
41
|
+
value = nil
|
42
|
+
begin
|
43
|
+
value = options[:object].send predicate_method + '?', *args
|
44
|
+
rescue NoMethodError
|
45
|
+
return :super
|
46
|
+
end
|
47
|
+
|
48
|
+
# Check the value, based on whether we're checking for negative or positive, and make the real assertion!
|
49
|
+
if (positive and value == false) or (not positive and value == true)
|
50
|
+
if args.empty?
|
51
|
+
message = "Expected #{options[:object].inspect} to#{positive ? '' : ' not'} be #{predicate_method.sub(/\?$/, '')}"
|
52
|
+
else
|
53
|
+
formatted_args = args.map(&:inspect).join(', ')
|
54
|
+
message = "Expected #{options[:object].inspect} to#{positive ? '' : ' not'} #{predicate_method.sub(/\?$/, '')} #{formatted_args}"
|
55
|
+
end
|
56
|
+
MiniTest::Spec.current.assert false, message
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
module Unit
|
61
|
+
def method_missing name, *args
|
62
|
+
result = MiniTestPredicates.make_assertion! :name => name,
|
63
|
+
:object => args.pop,
|
64
|
+
:args => args,
|
65
|
+
:positive => [/^assert_(.+)$/],
|
66
|
+
:negative => [/^refute_(.+)$/]
|
67
|
+
result == :super ? super : result
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
module Spec
|
72
|
+
def method_missing name, *args
|
73
|
+
result = MiniTestPredicates.make_assertion! :name => name,
|
74
|
+
:object => self,
|
75
|
+
:args => args,
|
76
|
+
:positive => [/^must_be_(.+)$/, /^must_(.+)$/],
|
77
|
+
:negative => [/^wont_be_(.+)$/, /^wont_(.+)$/]
|
78
|
+
result == :super ? super : result
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: minitest-predicates
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- remi
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-08-06 00:00:00.000000000 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
description: Adds support for .predicate? methods to MiniTest (via method_missing)
|
16
|
+
email: remi@remitaylor.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/minitest/predicates/core.rb
|
22
|
+
- lib/minitest/predicates.rb
|
23
|
+
- lib/minitest-predicates/core.rb
|
24
|
+
- lib/minitest-predicates/version.rb
|
25
|
+
- lib/minitest-predicates.rb
|
26
|
+
has_rdoc: true
|
27
|
+
homepage: http://github.com/remi/minitest-assertions
|
28
|
+
licenses: []
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
require_paths:
|
32
|
+
- lib
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubyforge_project:
|
47
|
+
rubygems_version: 1.6.2
|
48
|
+
signing_key:
|
49
|
+
specification_version: 3
|
50
|
+
summary: Adds support for .predicate? methods
|
51
|
+
test_files: []
|