must 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README +4 -1
- data/Rakefile +17 -43
- data/init.rb +3 -0
- data/install.rb +1 -0
- data/lib/must.rb +6 -2
- data/tasks/expectation_tasks.rake +4 -0
- data/test/must_test.rb +87 -0
- metadata +14 -10
data/README
CHANGED
@@ -15,7 +15,7 @@ Testing Methods
|
|
15
15
|
===============
|
16
16
|
|
17
17
|
be : check whether object equals to the argument
|
18
|
-
kind_of : check whether object is a kind of the
|
18
|
+
kind_of : check whether object is a kind of the arguments
|
19
19
|
coerced : check whether object can be coerced to the argument
|
20
20
|
blank : check whether object is blank?
|
21
21
|
exist : check whether object is not nil (NOTE: false is ok)
|
@@ -62,6 +62,9 @@ false.must.exist # => false
|
|
62
62
|
[].must.be.kind_of(Integer, Array) # => []
|
63
63
|
1.must.be.kind_of(String, Array) # Must::Invalid: expected String/Array but got Fixnum
|
64
64
|
|
65
|
+
# must(*args) is a syntax sugar for kind_of
|
66
|
+
1.must(Integer) # same as "1.must.be.kind_of(Integer)"
|
67
|
+
|
65
68
|
# coercing : looks like kind_of except converting its value if possible
|
66
69
|
1.must.be.coerced(Integer, String => proc{|val| val.to_i}) # => 1
|
67
70
|
"1".must.be.coerced(Integer, String => proc{|val| val.to_i}) # => 1
|
data/Rakefile
CHANGED
@@ -1,48 +1,22 @@
|
|
1
|
-
require '
|
2
|
-
require 'rake/
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rdoc/task'
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
EMAIL = "maiha@wota.jp"
|
7
|
-
HOMEPAGE = "http://github.com/maiha/must"
|
8
|
-
SUMMARY = "constraint plugin"
|
9
|
-
GEM_VERSION = "0.2.1"
|
5
|
+
desc 'Default: run unit tests.'
|
6
|
+
task :default => :test
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
s.platform = Gem::Platform::RUBY
|
17
|
-
s.has_rdoc = true
|
18
|
-
s.extra_rdoc_files = ["README"]
|
19
|
-
s.summary = SUMMARY
|
20
|
-
s.description = s.summary
|
21
|
-
s.author = AUTHOR
|
22
|
-
s.email = EMAIL
|
23
|
-
s.homepage = HOMEPAGE
|
24
|
-
s.require_path = 'lib'
|
25
|
-
s.files = %w(README Rakefile) + Dir.glob("{lib,spec,app,public,stubs}/**/*")
|
8
|
+
desc 'Test the must plugin.'
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << 'lib'
|
11
|
+
t.pattern = 'test/**/*_test.rb'
|
12
|
+
t.verbose = true
|
26
13
|
end
|
27
14
|
|
28
|
-
|
29
|
-
|
15
|
+
desc 'Generate documentation for the must plugin.'
|
16
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
17
|
+
rdoc.rdoc_dir = 'rdoc'
|
18
|
+
rdoc.title = 'Must'
|
19
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
20
|
+
rdoc.rdoc_files.include('README')
|
21
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
30
22
|
end
|
31
|
-
|
32
|
-
desc "Install the gem"
|
33
|
-
task :install do
|
34
|
-
Merb::RakeHelper.install(GEM_NAME, :version => GEM_VERSION)
|
35
|
-
end
|
36
|
-
|
37
|
-
desc "Uninstall the gem"
|
38
|
-
task :uninstall do
|
39
|
-
Merb::RakeHelper.uninstall(GEM_NAME, :version => GEM_VERSION)
|
40
|
-
end
|
41
|
-
|
42
|
-
desc "Create a gemspec file"
|
43
|
-
task :gemspec do
|
44
|
-
File.open("#{GEM_NAME}.gemspec", "w") do |file|
|
45
|
-
file.puts spec.to_ruby
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
data/init.rb
ADDED
data/install.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# Install hook code here
|
data/lib/must.rb
CHANGED
data/test/must_test.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
require File.join(File.dirname(__FILE__), '../init')
|
4
|
+
|
5
|
+
class MustTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_must_be
|
8
|
+
assert_nothing_raised {1.must.be 1}
|
9
|
+
assert_nothing_raised {[1,2,3].must.be [1,2,3]}
|
10
|
+
assert_nothing_raised {{:a=>1, "b"=>2}.must.be({:a=>1, "b"=>2})}
|
11
|
+
assert_nothing_raised {String.must.be String}
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_must_be_error
|
15
|
+
assert_raises(Invalid) {1.must.be 2}
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_must_be_with_block
|
19
|
+
assert_equal :error, 1.must.be(2) {:error}
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_must_not_be_blank
|
23
|
+
if Object.instance_methods.include?("blank?")
|
24
|
+
assert_equal "ok", "ok".must.not.be.blank
|
25
|
+
assert_equal "ok", "ok".must.not.be.blank {"ng"}
|
26
|
+
assert_equal "ng", "".must.not.be.blank {"ng"}
|
27
|
+
assert_raises(Invalid) {"".must.not.be.blank}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_must_accepts_args_as_kind_of
|
32
|
+
assert_equal "ok", "ok".must(String)
|
33
|
+
assert_raises(Invalid) {"ok".must(Integer)}
|
34
|
+
assert_equal "ok", "ok".must(Integer, String)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
class CoercedTest < Test::Unit::TestCase
|
40
|
+
def test_is_a_feature
|
41
|
+
assert_equal 1, 1.must.be.coerced(Integer)
|
42
|
+
assert_equal 1, 1.must.be.coerced(Integer, String)
|
43
|
+
assert_equal 1, 1.must.be.coerced(String, Numeric)
|
44
|
+
|
45
|
+
assert_raises(Invalid) { "1".must.be.coerced(Integer) }
|
46
|
+
assert_raises(Invalid) { "1".must.be.coerced(Integer, Range) }
|
47
|
+
assert_raises(NotImplementedError) { "1".must.be.coerced(Integer){raise NotImplementedError} }
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_coecing_succeeded
|
51
|
+
assert_equal 1, 1.must.be.coerced(Integer, String=>proc{|i|i.to_i})
|
52
|
+
assert_equal 1, "1".must.be.coerced(Integer, String=>proc{|i|i.to_i})
|
53
|
+
assert_equal 1, "1".must.be.coerced(Integer, String=>proc{|i|i.to_i}, Range=>proc{|i|i.first})
|
54
|
+
assert_equal 1, "1".must.be.coerced(Integer, Range, String=>proc{|i|i.to_i}, Range=>proc{|i|i.first})
|
55
|
+
assert_equal 1, "1".must.be.coerced(File, Integer, Range, String=>proc{|i|i.to_i}, Range=>proc{|i|i.first})
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_coecing_failed
|
59
|
+
assert_raises(Invalid) { "1".must.be.coerced(Integer, String=>proc{|i| /a/}) }
|
60
|
+
assert_raises(NotImplementedError) { "1".must.be.coerced(Integer, String=>proc{|i| /a/}){raise NotImplementedError} }
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_cascaded_coecing_succeeded
|
64
|
+
assert_equal 1, 1.must.be.coerced(Integer, Symbol=>:to_s, String=>:to_i)
|
65
|
+
assert_equal 1, "1".must.be.coerced(Integer, Symbol=>:to_s, String=>:to_i)
|
66
|
+
assert_equal 1, :"1".must.be.coerced(Integer, Symbol=>:to_s, String=>:to_i)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_detect_livelock
|
70
|
+
assert_raises(Invalid){ "1".must.be.coerced(Integer, Symbol=>:to_s, String=>:intern)}
|
71
|
+
assert_raises(Invalid){:"1".must.be.coerced(Integer, Symbol=>:to_s, String=>:intern)}
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
class MatchTest < Test::Unit::TestCase
|
78
|
+
def test_match_range
|
79
|
+
# succeeded
|
80
|
+
assert_equal 1, 1.must.match(0..3)
|
81
|
+
assert_equal 'b', 'b'.must.match('a'..'c')
|
82
|
+
|
83
|
+
# failed
|
84
|
+
assert_raises(Invalid) { 1.must.match(2..3) }
|
85
|
+
assert_raises(Invalid) { 'a'.must.match('y'..'z') }
|
86
|
+
end
|
87
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: must
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- maiha
|
@@ -15,23 +15,27 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-01-25 00:00:00 +09:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
22
|
-
description:
|
22
|
+
description: ""
|
23
23
|
email: maiha@wota.jp
|
24
24
|
executables: []
|
25
25
|
|
26
26
|
extensions: []
|
27
27
|
|
28
|
-
extra_rdoc_files:
|
29
|
-
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
30
|
files:
|
31
31
|
- README
|
32
32
|
- Rakefile
|
33
|
-
-
|
33
|
+
- init.rb
|
34
|
+
- install.rb
|
34
35
|
- lib/must.rb
|
36
|
+
- lib/must/rule.rb
|
37
|
+
- tasks/expectation_tasks.rake
|
38
|
+
- test/must_test.rb
|
35
39
|
has_rdoc: true
|
36
40
|
homepage: http://github.com/maiha/must
|
37
41
|
licenses: []
|
@@ -61,10 +65,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
61
65
|
version: "0"
|
62
66
|
requirements: []
|
63
67
|
|
64
|
-
rubyforge_project:
|
68
|
+
rubyforge_project:
|
65
69
|
rubygems_version: 1.3.7
|
66
70
|
signing_key:
|
67
71
|
specification_version: 3
|
68
|
-
summary:
|
72
|
+
summary: ""
|
69
73
|
test_files: []
|
70
74
|
|