tryouts 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +5 -0
- data/README.rdoc +3 -7
- data/bin/tryouts +1 -1
- data/lib/tryouts/cli/run.rb +39 -9
- data/lib/tryouts/drill/response.rb +2 -2
- data/lib/tryouts/drill.rb +1 -1
- data/lib/tryouts/tryout.rb +19 -19
- data/lib/tryouts.rb +10 -6
- data/tryouts/mockoutcli_dreams.rb +4 -4
- data/tryouts/mockoutcli_tryouts.rb +1 -0
- data/tryouts.gemspec +1 -1
- metadata +1 -1
data/CHANGES.txt
CHANGED
data/README.rdoc
CHANGED
@@ -1,11 +1,7 @@
|
|
1
|
-
= Tryouts - v0.
|
1
|
+
= Tryouts - v0.4 BETA
|
2
2
|
|
3
3
|
Tryouts is a high-level testing library for your command-line applications and Ruby codes.
|
4
4
|
|
5
|
-
*WORK IN PROGRESS*
|
6
|
-
|
7
|
-
2009-05-24 - A BBQ started nearby as I was writing this documentation. It's incomplete and I'm sorry about that but I can tell you that this BBQ smells really, really good.
|
8
|
-
|
9
5
|
|
10
6
|
== Terminology
|
11
7
|
|
@@ -27,7 +23,7 @@ The tryout definition would look like this:
|
|
27
23
|
|
28
24
|
command :executable, "path/2/executable"
|
29
25
|
|
30
|
-
tryout "Common Usage"
|
26
|
+
tryout "Common Usage" do
|
31
27
|
drill "No Command"
|
32
28
|
drill "YAML Output", :f, 'yaml'
|
33
29
|
end
|
@@ -56,7 +52,7 @@ Tryouts employs the same approach for testing Ruby codes. The return value of th
|
|
56
52
|
|
57
53
|
library :caesars, LIBRARY_PATH
|
58
54
|
|
59
|
-
tryout "Common Usage"
|
55
|
+
tryout "Common Usage" do
|
60
56
|
dream "Some Maths", 3
|
61
57
|
drill "Some Maths" do
|
62
58
|
12 / 4
|
data/bin/tryouts
CHANGED
data/lib/tryouts/cli/run.rb
CHANGED
@@ -29,25 +29,31 @@ class Tryouts; module CLI
|
|
29
29
|
|
30
30
|
def run
|
31
31
|
if @global.verbose > 0
|
32
|
-
puts "
|
32
|
+
puts "#{Tryouts.sysinfo.to_s} (#{RUBY_VERSION})"
|
33
33
|
end
|
34
34
|
|
35
35
|
load_available_tryouts_files
|
36
36
|
|
37
|
-
|
37
|
+
passed, failed = 0, 0
|
38
38
|
Tryouts.instances.each_pair do |group,tryouts_inst|
|
39
|
-
puts '', '
|
40
|
-
puts group
|
39
|
+
puts '', ' %-60s'.att(:reverse) % group
|
41
40
|
puts " #{tryouts_inst.paths.join("\n ")}" if @global.verbose > 0
|
42
41
|
tryouts_inst.tryouts.each_pair do |name,to|
|
43
42
|
to.run
|
44
43
|
to.report
|
45
44
|
STDOUT.flush
|
46
|
-
|
45
|
+
passed += to.passed
|
46
|
+
failed += to.failed
|
47
47
|
end
|
48
48
|
end
|
49
|
-
unless
|
50
|
-
|
49
|
+
unless @global.quiet
|
50
|
+
if failed == 0
|
51
|
+
puts MOOKIE if @global.verbose > 5
|
52
|
+
puts $/, " All #{passed+failed} dreams came true ".att(:reverse).color(:green)
|
53
|
+
else
|
54
|
+
puts $/, " #{passed} of #{passed+failed} dreams came true ".att(:reverse).color(:red)
|
55
|
+
end
|
56
|
+
|
51
57
|
end
|
52
58
|
end
|
53
59
|
|
@@ -87,8 +93,32 @@ class Tryouts; module CLI
|
|
87
93
|
end
|
88
94
|
end
|
89
95
|
@tryouts_files.uniq! # Don't load the same file twice
|
96
|
+
@tryouts_files.each { |f| puts "LOADING: #{f}"} if @global.verbose > 0
|
90
97
|
@tryouts_files.each { |file| Tryouts.parse_file file }
|
91
|
-
puts @tryouts_files if @global.verbose > 0
|
92
98
|
end
|
93
99
|
end
|
94
|
-
end; end
|
100
|
+
end; end
|
101
|
+
|
102
|
+
MOOKIE = %q{
|
103
|
+
__,-----._ ,-.
|
104
|
+
,' ,-. \`---. ,-----<._/
|
105
|
+
(,.-. o:.` )),"\\\-._ ,' `.
|
106
|
+
('"-` .\ \`:_ )\ `-;'-._ \
|
107
|
+
,,-. \` ; : \( `-' ) -._ : `:
|
108
|
+
( \ `._\\\ ` ; ; ` : )
|
109
|
+
\`. `-. __ , / \ ;, (
|
110
|
+
`.`-.___--' `- / ; | : |
|
111
|
+
`-' `-.`--._ ' ; |
|
112
|
+
(`--._`. ; /\ |
|
113
|
+
\ ' \ , ) :
|
114
|
+
| `--::---- \' ; ;|
|
115
|
+
\ .__,- ( ) : :|
|
116
|
+
\ : `------; \ | | ;
|
117
|
+
\ : / , ) | | (
|
118
|
+
-hrr- \ \ `-^-| | / , ,\
|
119
|
+
) ) | -^- ; `-^-^'
|
120
|
+
_,' _ ; | |
|
121
|
+
/ , , ,' /---. :
|
122
|
+
`-^-^' ( : :,'
|
123
|
+
`-^--'
|
124
|
+
}
|
@@ -54,8 +54,8 @@ class Tryouts::Drill
|
|
54
54
|
return false
|
55
55
|
end
|
56
56
|
|
57
|
-
# The matching statement will be the return value.
|
58
|
-
if dream.format.nil?
|
57
|
+
# The matching statement will be the return value.
|
58
|
+
if dream.format.nil? || (dream.class == reality.class)
|
59
59
|
dream.output == reality.output
|
60
60
|
elsif reality.respond_to? dream.format
|
61
61
|
reality.output.send(dream.format) == dream.output
|
data/lib/tryouts/drill.rb
CHANGED
@@ -58,7 +58,7 @@ class Tryouts
|
|
58
58
|
@reality.emsg, @reality.backtrace = ex.message, ex.backtrace
|
59
59
|
end
|
60
60
|
note = @dream ? discrepency.join(', ') : 'nodream'
|
61
|
-
puts self.success? ? "PASS" : "FAIL (#{note})"
|
61
|
+
puts self.success? ? "PASS".color(:green) : "FAIL (#{note})".color(:red)
|
62
62
|
self.success?
|
63
63
|
end
|
64
64
|
|
data/lib/tryouts/tryout.rb
CHANGED
@@ -9,26 +9,24 @@ class Tryouts
|
|
9
9
|
|
10
10
|
# The name of this tryout
|
11
11
|
attr_reader :name
|
12
|
-
|
13
|
-
# A Hash of Dream objects for this Tryout. The keys are drill names.
|
14
|
-
attr_accessor :dreams
|
15
|
-
|
16
|
-
# An Array of Drill objects
|
17
|
-
attr_reader :drills
|
18
|
-
|
19
12
|
# A default value for Drill.dtype
|
20
13
|
attr_reader :dtype
|
21
|
-
|
22
|
-
# For drill type :cli, this is the name of the command to test. It
|
23
|
-
# should be a valid method available to a Rye::Box object.
|
24
|
-
# For drill type :api, this attribute is ignored.
|
25
|
-
attr_reader :command
|
26
|
-
|
27
14
|
# A block to executed one time before starting the drills
|
28
15
|
attr_reader :setup
|
29
|
-
|
30
16
|
# A block to executed one time before starting the drills
|
31
17
|
attr_reader :clean
|
18
|
+
# An Array of Drill objects
|
19
|
+
attr_reader :drills
|
20
|
+
# The number of dreams that came true (successful drills)
|
21
|
+
attr_reader :passed
|
22
|
+
# The number of dreams that did not come true (failed drills)
|
23
|
+
attr_reader :failed
|
24
|
+
# For drill type :cli, this is the name of the command to test. It
|
25
|
+
# should be a valid method available to a Rye::Box object.
|
26
|
+
# For drill type :api, this attribute is ignored.
|
27
|
+
attr_reader :command
|
28
|
+
# A Hash of Dream objects for this Tryout. The keys are drill names.
|
29
|
+
attr_accessor :dreams
|
32
30
|
|
33
31
|
@@valid_dtypes = [:cli, :api]
|
34
32
|
|
@@ -42,8 +40,8 @@ class Tryouts
|
|
42
40
|
raise "Must supply command for dtype :cli" if dtype == :cli && command.nil?
|
43
41
|
raise "#{dtype} is not a valid drill type" if !@@valid_dtypes.member?(dtype)
|
44
42
|
@name, @dtype, @command = name, dtype, command
|
45
|
-
@drills = []
|
46
|
-
@
|
43
|
+
@drills, @dreams = [], {}
|
44
|
+
@passed, @failed = 0, 0
|
47
45
|
end
|
48
46
|
|
49
47
|
## --------------------------------------- EXTERNAL API -----
|
@@ -59,9 +57,10 @@ class Tryouts
|
|
59
57
|
def run
|
60
58
|
update_drills! # Ensure all drills have all known dreams
|
61
59
|
DrillContext.class_eval &setup if setup.is_a?(Proc)
|
62
|
-
puts Tryouts::TRYOUT_MSG % @name
|
60
|
+
puts Tryouts::TRYOUT_MSG.bright % @name
|
63
61
|
@drills.each do |drill|
|
64
62
|
drill.run(DrillContext.new) # Returns true or false
|
63
|
+
drill.success? ? @passed += 1 : @failed += 1
|
65
64
|
end
|
66
65
|
DrillContext.class_eval &clean if clean.is_a?(Proc)
|
67
66
|
end
|
@@ -71,8 +70,8 @@ class Tryouts
|
|
71
70
|
return true if success?
|
72
71
|
failed = @drills.select { |d| !d.success? }
|
73
72
|
failed.each_with_index do |drill,index|
|
74
|
-
|
75
|
-
puts '
|
73
|
+
title = ' %-59s' % %Q{ERROR #{index+1}/#{failed.size} in "#{drill.name}"}
|
74
|
+
puts $/, ' ' << title.color(:red).att(:reverse)
|
76
75
|
|
77
76
|
if drill.dream
|
78
77
|
puts '%24s: %s (expected %s)' % ["response code", drill.reality.rcode, drill.dream.rcode]
|
@@ -94,6 +93,7 @@ class Tryouts
|
|
94
93
|
puts '%24s: ' % ["backtrace"]
|
95
94
|
puts drill.reality.backtrace, $/
|
96
95
|
end
|
96
|
+
|
97
97
|
end
|
98
98
|
false
|
99
99
|
end
|
data/lib/tryouts.rb
CHANGED
@@ -30,7 +30,7 @@ class Tryouts
|
|
30
30
|
# Raised when there is a problem loading or parsing a Tryouts::Drill::Dream object
|
31
31
|
class BadDreams < Exception; end
|
32
32
|
|
33
|
-
VERSION = "0.4.
|
33
|
+
VERSION = "0.4.1"
|
34
34
|
|
35
35
|
require 'tryouts/mixins'
|
36
36
|
require 'tryouts/tryout'
|
@@ -40,13 +40,20 @@ class Tryouts
|
|
40
40
|
HASH_TYPE = (RUBY_VERSION =~ /1.9/) ? ::Hash : Tryouts::OrderedHash
|
41
41
|
|
42
42
|
TRYOUT_MSG = "\n %s "
|
43
|
-
DRILL_MSG = '
|
44
|
-
DRILL_ERR = '
|
43
|
+
DRILL_MSG = ' %-50s '
|
44
|
+
DRILL_ERR = ' %s: '
|
45
45
|
|
46
46
|
# An Array of +_tryouts.rb+ file paths that have been loaded.
|
47
47
|
@@loaded_files = []
|
48
48
|
# An Hash of Tryouts instances stored under the name of the Tryouts subclass.
|
49
49
|
@@instances = HASH_TYPE.new
|
50
|
+
# An instance of SysInfo
|
51
|
+
@@sysinfo = SysInfo.new
|
52
|
+
|
53
|
+
# Returns +@@instances+
|
54
|
+
def self.instances; @@instances; end
|
55
|
+
# Returns +@@sysinfo+
|
56
|
+
def self.sysinfo; @@sysinfo; end
|
50
57
|
|
51
58
|
# The name of this group of Tryout objects
|
52
59
|
attr_accessor :group
|
@@ -66,9 +73,6 @@ class Tryouts
|
|
66
73
|
attr_accessor :library
|
67
74
|
# The name of the most recent dreams group (see self.dream)
|
68
75
|
attr_accessor :dream_pointer
|
69
|
-
|
70
|
-
# Returns +@@instances+
|
71
|
-
def self.instances; @@instances; end
|
72
76
|
|
73
77
|
def initialize(group=nil)
|
74
78
|
@group = group || "Default Group"
|
@@ -2,13 +2,13 @@
|
|
2
2
|
dreams "Common Usage" do
|
3
3
|
dream "No args" do
|
4
4
|
output inline(%Q{
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
Date: 2009-02-16
|
6
|
+
Owners: greg, rupaul, telly, prince kinko
|
7
|
+
Players: d-bam, alberta, birds, condor man
|
8
8
|
})
|
9
9
|
end
|
10
10
|
dream "YAML Output" do
|
11
|
-
format :
|
11
|
+
format :to_yaml
|
12
12
|
output ({
|
13
13
|
"Date" => "2009-02-16",
|
14
14
|
"Players" => ["d-bam", "alberta", "birds", "condor man"],
|
data/tryouts.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
@spec = Gem::Specification.new do |s|
|
2
2
|
s.name = "tryouts"
|
3
3
|
s.rubyforge_project = "tryouts"
|
4
|
-
s.version = "0.4.
|
4
|
+
s.version = "0.4.1"
|
5
5
|
s.summary = "Tryouts are high-level tests for your Ruby code. May all your dreams come true!"
|
6
6
|
s.description = s.summary
|
7
7
|
s.author = "Delano Mandelbaum"
|