difects 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/CREDITS ADDED
@@ -0,0 +1,21 @@
1
+ %#----------------------------------------------------------------------------
2
+ ## AUTHORS
3
+ %#----------------------------------------------------------------------------
4
+
5
+ Suraj N. Kurapati
6
+
7
+ %#----------------------------------------------------------------------------
8
+ ## CREDITS
9
+ %#----------------------------------------------------------------------------
10
+
11
+ François Beausoleil,
12
+ Gavin Sinclair,
13
+ Iñaki Baz Castillo,
14
+ Sean O'Halpin
15
+
16
+ %#----------------------------------------------------------------------------
17
+ ## LICENSE
18
+ %#----------------------------------------------------------------------------
19
+
20
+ %# See the file named "LICENSE".
21
+ %< "LICENSE"
data/LICENSE ADDED
@@ -0,0 +1,15 @@
1
+ (the ISC license)
2
+
3
+ Copyright 2009 Suraj N. Kurapati <sunaku@gmail.com>
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
data/bin/difects ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'difects'
4
+
5
+ if ARGV.delete('-h') or ARGV.delete('--help')
6
+ # try to display UNIX version of help manual
7
+ man_path = File.join(DIFECTS::INSTDIR, 'man')
8
+ unless system 'man', '-M', man_path, '-a', 'difects'
9
+ # try to display HTML version of help manual
10
+ man_html = man_path + '.html'
11
+ unless %w[$BROWSER open start].any? {|b| system "#{b} #{man_html}" }
12
+ # no luck; direct user to project website
13
+ puts "See #{DIFECTS::WEBSITE}"
14
+ end
15
+ end
16
+ exit
17
+ elsif ARGV.delete('-v') or ARGV.delete('--version')
18
+ puts DIFECTS::VERSION
19
+ exit
20
+ end
21
+
22
+ DIFECTS.debug = ARGV.delete('-d') || ARGV.delete('--debug')
23
+
24
+ require 'difects/auto'
25
+ ARGV.each {|glob| Dir[glob].each {|test| load test } }
@@ -0,0 +1,17 @@
1
+ # Provides painless, automatic configuration of DIFECTS.
2
+ #
3
+ # Simply require() this file and DIFECTS will be available for use anywhere
4
+ # in your program and will execute all tests before your program exits.
5
+
6
+ require 'difects'
7
+ include DIFECTS
8
+
9
+ at_exit do
10
+ DIFECTS.start
11
+
12
+ # reflect number of failures in exit status
13
+ stats = DIFECTS.stats
14
+ fails = stats[:fail] + stats[:error]
15
+
16
+ exit [fails, 255].min
17
+ end
@@ -0,0 +1,93 @@
1
+ module DIFECTS
2
+
3
+ ##
4
+ # Official name of this project.
5
+ #
6
+ PROJECT = 'DIFECTS'
7
+
8
+ ##
9
+ # Short single-line description of this project.
10
+ #
11
+ TAGLINE = 'Assertion testing library for Ruby'
12
+
13
+ ##
14
+ # Address of this project's official home page.
15
+ #
16
+ WEBSITE = 'http://snk.tuxfamily.org/lib/difects/'
17
+
18
+ ##
19
+ # Number of this release of this project.
20
+ #
21
+ VERSION = '3.0.0'
22
+
23
+ ##
24
+ # Date of this release of this project.
25
+ #
26
+ RELDATE = '2010-07-24'
27
+
28
+ ##
29
+ # Description of this release of this project.
30
+ #
31
+ def self.inspect
32
+ "#{PROJECT} #{VERSION} (#{RELDATE})"
33
+ end
34
+
35
+ ##
36
+ # Location of this release of this project.
37
+ #
38
+ INSTDIR = File.expand_path('../../..', __FILE__)
39
+
40
+ ##
41
+ # RubyGems required by this project during runtime.
42
+ #
43
+ # @example
44
+ #
45
+ # RUNTIME = {
46
+ # # this project needs exactly version 1.2.3 of the "an_example" gem
47
+ # "an_example" => [ "1.2.3" ],
48
+ #
49
+ # # this project needs at least version 1.2 (but not
50
+ # # version 1.2.4 or newer) of the "another_example" gem
51
+ # "another_example" => [ ">= 1.2" , "< 1.2.4" ],
52
+ #
53
+ # # this project needs any version of the "yet_another_example" gem
54
+ # "yet_another_example" => [],
55
+ # }
56
+ #
57
+ RUNTIME = {}
58
+
59
+ ##
60
+ # RubyGems required by this project during development.
61
+ #
62
+ # @example
63
+ #
64
+ # DEVTIME = {
65
+ # # this project needs exactly version 1.2.3 of the "an_example" gem
66
+ # "an_example" => [ "1.2.3" ],
67
+ #
68
+ # # this project needs at least version 1.2 (but not
69
+ # # version 1.2.4 or newer) of the "another_example" gem
70
+ # "another_example" => [ ">= 1.2" , "< 1.2.4" ],
71
+ #
72
+ # # this project needs any version of the "yet_another_example" gem
73
+ # "yet_another_example" => [],
74
+ # }
75
+ #
76
+ DEVTIME = {
77
+ 'inochi' => [ '>= 3.0.0', '< 4' ],
78
+ }
79
+
80
+ # establish gem version dependencies
81
+ if respond_to? :gem
82
+ [RUNTIME, DEVTIME].each do |deps|
83
+ deps.each do |gem_name, gem_version|
84
+ begin
85
+ gem gem_name, *Array(gem_version)
86
+ rescue LoadError => error
87
+ warn "#{self.inspect}: #{error}"
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ end
@@ -0,0 +1,25 @@
1
+ # Provides long name aliases for DIFECTS's default abbreviated vocabulary.
2
+
3
+ require 'difects'
4
+
5
+ module DIFECTS
6
+ short_to_long = {
7
+ 'D' => 'Describe',
8
+ 'T' => 'True',
9
+ 'F' => 'False',
10
+ 'E' => 'Error',
11
+ 'C' => 'Catch',
12
+ 'S' => 'Share',
13
+ 'I' => 'Inform',
14
+ }
15
+
16
+ short_to_long.each do |src, dst|
17
+ instance_methods(false).grep(/^#{src}\b/).each do |short|
18
+ long = short.to_s.sub(src, dst)
19
+ alias_method long, short
20
+ end
21
+ end
22
+
23
+ # for hooks
24
+ Describe = D
25
+ end
@@ -0,0 +1,92 @@
1
+ # MiniTest emulation layer.
2
+
3
+ require 'difects'
4
+ require 'difects/spec'
5
+ require 'difects/unit'
6
+
7
+ module DIFECTS
8
+ instance_methods(false).each do |meth|
9
+ if meth =~ /^assert_not/
10
+ alias_method 'refute' + $', meth
11
+ end
12
+ end
13
+ end
14
+
15
+ {
16
+ :must => '::DIFECTS.assert',
17
+ :wont => '::DIFECTS.refute',
18
+ }.
19
+ each do |outer, inner|
20
+ #
21
+ # XXX: using eval() because Ruby 1.8 does
22
+ # not support default values and
23
+ # block parameters in define_method()
24
+ #
25
+ file, line = __FILE__, __LINE__ ; eval %{
26
+ class Object
27
+ def #{outer}_be_close_to other, message = nil
28
+ #{inner}_in_delta self, other, nil, message
29
+ end
30
+
31
+ def #{outer}_be_empty message = nil
32
+ #{inner}_empty self, message
33
+ end
34
+
35
+ def #{outer}_be_instance_of klass, message = nil
36
+ #{inner}_instance_of klass, self, message
37
+ end
38
+
39
+ def #{outer}_be_kind_of klass, message = nil
40
+ #{inner}_kind_of klass, self, message
41
+ end
42
+
43
+ def #{outer}_be_nil message = nil
44
+ #{inner}_nil self, message
45
+ end
46
+
47
+ def #{outer}_be_same_as other, message = nil
48
+ #{inner}_same self, other, message
49
+ end
50
+
51
+ def #{outer}_be_within_delta other, delta = nil, message = nil
52
+ #{inner}_in_delta self, other, delta, message
53
+ end
54
+
55
+ alias #{outer}_be_within_epsilon #{outer}_be_within_delta
56
+
57
+ def #{outer}_equal expected, message = nil
58
+ #{inner}_equal expected, self, message
59
+ end
60
+
61
+ def #{outer}_include item, message = nil
62
+ #{inner}_include item, self, message
63
+ end
64
+
65
+ def #{outer}_match pattern, message = nil
66
+ #{inner}_match pattern, self, message
67
+ end
68
+
69
+ def #{outer}_raise *args, &block
70
+ #{inner}_raise(*args, &block)
71
+ end
72
+
73
+ def #{outer}_respond_to query, message = nil
74
+ #{inner}_respond_to self, query, message
75
+ end
76
+
77
+ def #{outer}_send query, *args
78
+ #{inner}_send self, query, *args
79
+ end
80
+ end
81
+
82
+ class Proc
83
+ def #{outer}_raise *args
84
+ #{inner}_raise(*args, &self)
85
+ end
86
+
87
+ def #{outer}_throw symbol, message = nil
88
+ #{inner}_throw symbol, message, &self
89
+ end
90
+ end
91
+ }, TOPLEVEL_BINDING, file, line
92
+ end
@@ -0,0 +1,31 @@
1
+ # RSpec emulation layer.
2
+
3
+ require 'difects'
4
+
5
+ module DIFECTS
6
+ alias describe D
7
+ alias context D
8
+ alias it D
9
+
10
+ def before what, &block
11
+ meth =
12
+ case what
13
+ when :each then :<
14
+ when :all then :<<
15
+ else raise ArgumentError, what
16
+ end
17
+
18
+ send meth, &block
19
+ end
20
+
21
+ def after what, &block
22
+ meth =
23
+ case what
24
+ when :each then :>
25
+ when :all then :>>
26
+ else raise ArgumentError, what
27
+ end
28
+
29
+ send meth, &block
30
+ end
31
+ end
@@ -0,0 +1,101 @@
1
+ # Test::Unit emulation layer.
2
+
3
+ require 'difects'
4
+
5
+ module DIFECTS
6
+ alias test D
7
+ alias setup <
8
+ alias setup! <<
9
+ alias teardown >
10
+ alias teardown! >>
11
+
12
+ [
13
+ [:assert, nil, nil ],
14
+ [:assert_not, '!', 'not '],
15
+ ].
16
+ each do |prefix, polarity, action|
17
+ #
18
+ # XXX: using eval() because Ruby 1.8 does
19
+ # not support default values and
20
+ # block parameters in define_method()
21
+ #
22
+ file, line = __FILE__, __LINE__ ; module_eval %{
23
+ alias #{prefix} T#{polarity}
24
+ alias #{prefix} T#{polarity}
25
+
26
+ def #{prefix}_empty collection, message = nil
27
+ message ||= 'collection must #{action}be empty'
28
+ T#{polarity}(message) { collection.empty? }
29
+ end
30
+
31
+ def #{prefix}_equal expected, actual, message = nil
32
+ message ||= 'actual must #{action}equal expected'
33
+ T#{polarity}(message) { actual == expected }
34
+ end
35
+
36
+ def #{prefix}_in_delta expected, actual, delta = nil, message = nil
37
+ message ||= 'actual must #{action}be within delta of expected'
38
+ delta ||= 0.001
39
+
40
+ T#{polarity}(message) do
41
+ Math.abs(expected - actual) <= Math.abs(delta)
42
+ end
43
+ end
44
+
45
+ alias #{prefix}_in_epsilon #{prefix}_in_delta
46
+
47
+ def #{prefix}_include item, collection, message = nil
48
+ message ||= 'collection must #{action}include item'
49
+ T#{polarity}(messsage) { collection.include? item }
50
+ end
51
+
52
+ def #{prefix}_instance_of klass, object, message = nil
53
+ message ||= 'object must #{action}be an instance of class'
54
+ T#{polarity}(message) { object.instance_of? klass }
55
+ end
56
+
57
+ def #{prefix}_kind_of klass, object, message = nil
58
+ message ||= 'object must #{action}be a kind of class'
59
+ T#{polarity}(message) { object.kind_of? klass }
60
+ end
61
+
62
+ def #{prefix}_nil object, message = nil
63
+ message ||= 'object must #{action}be nil'
64
+ T#{polarity}(message) { object == nil }
65
+ end
66
+
67
+ def #{prefix}_match pattern, string, message = nil
68
+ message ||= 'string must #{action}match pattern'
69
+ T#{polarity}(message) { string =~ pattern }
70
+ end
71
+
72
+ def #{prefix}_same expected, actual, message = nil
73
+ message ||= 'actual must #{action}be same as expected'
74
+ T#{polarity}(message) { actual.equal? expected }
75
+ end
76
+
77
+ def #{prefix}_operator object, operator, operand, message = nil
78
+ message ||= 'object must #{action}support operator with operand'
79
+ T#{polarity} { object.__send__ operator, operand }
80
+ end
81
+
82
+ def #{prefix}_raise *args, &block
83
+ E#{polarity}(args.pop, *args, &block)
84
+ end
85
+
86
+ def #{prefix}_respond_to object, query, message = nil
87
+ message ||= 'object must #{action}respond to query'
88
+ T#{polarity}(message) { object.respond_to? query }
89
+ end
90
+
91
+ def #{prefix}_throw symbol, message = nil, &block
92
+ C#{polarity}(message, symbol, &block)
93
+ end
94
+
95
+ def #{prefix}_send object, query, *args
96
+ response = object.__send__(query, *args)
97
+ T#{polarity} { response }
98
+ end
99
+ }, file, line
100
+ end
101
+ end