nutrasuite 0.2.2 → 0.3.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.
- data/README.markdown +6 -6
- data/lib/nutrasuite/contexts.rb +8 -56
- data/lib/nutrasuite/version.rb +1 -1
- data/nutrasuite.gemspec +1 -0
- data/test/test_helper.rb +1 -0
- data/test/unit/activesupport_test.rb +114 -0
- data/test/unit/contexts_test.rb +11 -3
- metadata +16 -3
data/README.markdown
CHANGED
@@ -32,7 +32,7 @@ Nutrasuite is all about contexts. Write your tests like so:
|
|
32
32
|
require 'nutrasuite'
|
33
33
|
class SomeTest < MiniTest::Unit::TestCase
|
34
34
|
a "newly instantiated test object" do
|
35
|
-
|
35
|
+
before do
|
36
36
|
some_setup_stuff
|
37
37
|
end
|
38
38
|
|
@@ -40,19 +40,19 @@ Nutrasuite is all about contexts. Write your tests like so:
|
|
40
40
|
assert true
|
41
41
|
end
|
42
42
|
|
43
|
-
|
43
|
+
after do
|
44
44
|
some_teardown_stuff
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
All of your other minitest stuff should work normally. Context
|
50
|
-
|
50
|
+
before/after blocks are executed once for each test, so the randomization built into
|
51
51
|
minitest will still work as you'd expect.
|
52
52
|
|
53
|
-
`a`, `an`, `
|
54
|
-
readable sentences like "_a_ user _that_ has an expired password
|
55
|
-
address" or "_the_ singleton."
|
53
|
+
`a`, `an`, `and_also`, `the`, and `that` all define contexts, so you can build
|
54
|
+
readable sentences like "_a_ user _that_ has an expired password _and_also_ a bad
|
55
|
+
email address" or "_the_ singleton."
|
56
56
|
|
57
57
|
`it` defines tests; `it_eventually` defines tests that are to be skipped.
|
58
58
|
|
data/lib/nutrasuite/contexts.rb
CHANGED
@@ -20,10 +20,10 @@ module Nutrasuite
|
|
20
20
|
# ...tests...
|
21
21
|
# end
|
22
22
|
#
|
23
|
-
["a", "an", "
|
23
|
+
["a", "an", "and_also", "that", "the"].each do |article|
|
24
24
|
eval <<-HERE
|
25
25
|
def #{article}(name, &block)
|
26
|
-
name = "#{article} " << name
|
26
|
+
name = "#{article.gsub("_"," ")} " << name
|
27
27
|
Context.push(name, &block)
|
28
28
|
end
|
29
29
|
HERE
|
@@ -32,47 +32,13 @@ module Nutrasuite
|
|
32
32
|
# Public: use before to declare steps that need to be run before every test
|
33
33
|
# in a context.
|
34
34
|
def before(&block)
|
35
|
-
|
36
|
-
Context.current_context.setups << block
|
37
|
-
else
|
38
|
-
warn "Not in a context"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
# Deprecated: As much as I'd like to use setup and teardown, they screw up
|
43
|
-
# at times with ActiveSupport test cases. Better to use before and after.
|
44
|
-
#
|
45
|
-
# This method will be removed by 0.3.0. Please adjust your tests
|
46
|
-
# accordingly.
|
47
|
-
def setup(&block)
|
48
|
-
if Context.current_context?
|
49
|
-
Context.current_context.setups << block
|
50
|
-
else
|
51
|
-
warn "Not in a context"
|
52
|
-
end
|
35
|
+
Context.current_context.setups << block
|
53
36
|
end
|
54
37
|
|
55
38
|
# Public: use after to declare steps that need to be run after every test in
|
56
39
|
# a context.
|
57
40
|
def after(&block)
|
58
|
-
|
59
|
-
Context.current_context.teardowns << block
|
60
|
-
else
|
61
|
-
warn "Not in a context"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
# Deprecated: As mich as I'd like to use setup and teardown, they screw up
|
66
|
-
# at times with ActiveSupport test cases. Better to use before and after.
|
67
|
-
#
|
68
|
-
# This method will be removed by 0.3.0. Please adjust your tests
|
69
|
-
# accordingly.
|
70
|
-
def teardown(&block)
|
71
|
-
if Context.current_context?
|
72
|
-
Context.current_context.teardowns << block
|
73
|
-
else
|
74
|
-
warn "Not in a context"
|
75
|
-
end
|
41
|
+
Context.current_context.teardowns << block
|
76
42
|
end
|
77
43
|
|
78
44
|
# Public: defines a test to be executed. Will run any setup blocks on the
|
@@ -142,14 +108,6 @@ module Nutrasuite
|
|
142
108
|
end
|
143
109
|
end
|
144
110
|
end
|
145
|
-
|
146
|
-
# Internal: warn simply outputs a warning message for the user if they
|
147
|
-
# appear to be using Nutrasuite incorrectly.
|
148
|
-
#
|
149
|
-
def warn(message)
|
150
|
-
puts " * Warning: #{message}"
|
151
|
-
end
|
152
|
-
|
153
111
|
end
|
154
112
|
|
155
113
|
# Internal: The Context class represents each context that can go on the
|
@@ -202,7 +160,9 @@ module Nutrasuite
|
|
202
160
|
def self.build_test_name(name="")
|
203
161
|
full_name = "test "
|
204
162
|
context_stack.each do |context|
|
205
|
-
|
163
|
+
unless context.name.nil?
|
164
|
+
full_name << context.name << " "
|
165
|
+
end
|
206
166
|
end
|
207
167
|
full_name << name
|
208
168
|
end
|
@@ -228,7 +188,7 @@ module Nutrasuite
|
|
228
188
|
#
|
229
189
|
# Returns: an Array representing the context stack.
|
230
190
|
def self.context_stack
|
231
|
-
@context_stack ||= []
|
191
|
+
@context_stack ||= [Context.new(nil)]
|
232
192
|
end
|
233
193
|
|
234
194
|
# Internal: get the current context.
|
@@ -238,14 +198,6 @@ module Nutrasuite
|
|
238
198
|
def self.current_context
|
239
199
|
context_stack.last
|
240
200
|
end
|
241
|
-
|
242
|
-
# Internal: determine whether there is currently a context active.
|
243
|
-
#
|
244
|
-
# Returns: true if there is at least one context on the stack, false
|
245
|
-
# otherwise.
|
246
|
-
def self.current_context?
|
247
|
-
!context_stack.empty?
|
248
|
-
end
|
249
201
|
end
|
250
202
|
end
|
251
203
|
|
data/lib/nutrasuite/version.rb
CHANGED
data/nutrasuite.gemspec
CHANGED
data/test/test_helper.rb
CHANGED
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
# ActiveSupport does funny stuff with its test cases, so we have to be
|
4
|
+
# especially sure that nutrasuite plays nicely with it (and vice versa).
|
5
|
+
class ActivesupportTest < ActiveSupport::TestCase
|
6
|
+
|
7
|
+
before do
|
8
|
+
@root = "test"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "allows tests outside of any context" do
|
12
|
+
assert true
|
13
|
+
end
|
14
|
+
|
15
|
+
it "runs the before blocks at the root level" do
|
16
|
+
assert_equal "test", @root
|
17
|
+
end
|
18
|
+
|
19
|
+
it_eventually "allows tests to be skipped outside of any context" do
|
20
|
+
raise "This exception should never be thrown."
|
21
|
+
end
|
22
|
+
|
23
|
+
it "names tests correctly" do
|
24
|
+
assert_equal "test some name", Nutrasuite::Context.build_test_name("some name")
|
25
|
+
end
|
26
|
+
|
27
|
+
a "Context" do
|
28
|
+
before do
|
29
|
+
@a = 5
|
30
|
+
end
|
31
|
+
|
32
|
+
it "runs befores before tests" do
|
33
|
+
assert_equal @a, 5
|
34
|
+
assert_equal @root, "test"
|
35
|
+
end
|
36
|
+
|
37
|
+
it_eventually "passes its name onto its test" do
|
38
|
+
# TODO: figure out how to test this
|
39
|
+
end
|
40
|
+
|
41
|
+
it "doesn't run befores from nested contexts" do
|
42
|
+
assert_equal nil, @b
|
43
|
+
end
|
44
|
+
|
45
|
+
that "has a nested Context" do
|
46
|
+
before do
|
47
|
+
@b = 10
|
48
|
+
end
|
49
|
+
|
50
|
+
it "runs both befores" do
|
51
|
+
assert_equal @a, 5
|
52
|
+
assert_equal @b, 10
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
that "has a nested Context with multiple befores" do
|
57
|
+
before do
|
58
|
+
@b = 6
|
59
|
+
end
|
60
|
+
|
61
|
+
before do
|
62
|
+
@c = 7
|
63
|
+
@b = @b + 1
|
64
|
+
end
|
65
|
+
|
66
|
+
it "runs all befores in order" do
|
67
|
+
assert_equal @b, 7
|
68
|
+
assert_equal @b, @c
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
a "Second context" do
|
74
|
+
before do
|
75
|
+
@b = true
|
76
|
+
end
|
77
|
+
|
78
|
+
it "isn't affected by befores from other contexts" do
|
79
|
+
assert_equal true, @b
|
80
|
+
assert @a.nil?
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
the "'the' context" do
|
85
|
+
it "works" do
|
86
|
+
assert true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
an "'an' context" do
|
91
|
+
it "works" do
|
92
|
+
assert true
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
and_also "the 'and_also' context" do
|
97
|
+
it "works" do
|
98
|
+
assert true
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
a "'a' context" do
|
103
|
+
it "works" do
|
104
|
+
assert true
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
that "'that' context" do
|
109
|
+
it "works" do
|
110
|
+
assert true
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
data/test/unit/contexts_test.rb
CHANGED
@@ -1,11 +1,18 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class ContextsTest < Test::Unit::TestCase
|
4
|
+
before do
|
5
|
+
@root = "test"
|
6
|
+
end
|
4
7
|
|
5
8
|
it "allows tests outside of any context" do
|
6
9
|
assert true
|
7
10
|
end
|
8
11
|
|
12
|
+
it "runs the before blocks at the root level" do
|
13
|
+
assert_equal "test", @root
|
14
|
+
end
|
15
|
+
|
9
16
|
it_eventually "allows tests to be skipped outside of any context" do
|
10
17
|
raise "This exception should never be thrown."
|
11
18
|
end
|
@@ -21,6 +28,7 @@ class ContextsTest < Test::Unit::TestCase
|
|
21
28
|
|
22
29
|
it "runs befores before tests" do
|
23
30
|
assert_equal @a, 5
|
31
|
+
assert_equal @root, "test"
|
24
32
|
end
|
25
33
|
|
26
34
|
it_eventually "passes its name onto its tests" do
|
@@ -72,19 +80,19 @@ class ContextsTest < Test::Unit::TestCase
|
|
72
80
|
end
|
73
81
|
end
|
74
82
|
|
75
|
-
|
83
|
+
and_also "'and_also' context" do
|
76
84
|
it "works" do
|
77
85
|
assert true
|
78
86
|
end
|
79
87
|
end
|
80
88
|
|
81
|
-
|
89
|
+
an "'an' context" do
|
82
90
|
it "works" do
|
83
91
|
assert true
|
84
92
|
end
|
85
93
|
end
|
86
94
|
|
87
|
-
|
95
|
+
that "'that' context" do
|
88
96
|
it "works" do
|
89
97
|
assert true
|
90
98
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nutrasuite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,8 +10,19 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-03-
|
14
|
-
dependencies:
|
13
|
+
date: 2012-03-07 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activesupport
|
17
|
+
requirement: &70199395886180 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *70199395886180
|
15
26
|
description: Nutrasuite is a low-calorie syntax sweetener for minitest
|
16
27
|
email:
|
17
28
|
- tommy.morgan@gmail.com
|
@@ -29,6 +40,7 @@ files:
|
|
29
40
|
- lib/nutrasuite/version.rb
|
30
41
|
- nutrasuite.gemspec
|
31
42
|
- test/test_helper.rb
|
43
|
+
- test/unit/activesupport_test.rb
|
32
44
|
- test/unit/contexts_test.rb
|
33
45
|
homepage: http://github.com/duwanis/nutrasuite
|
34
46
|
licenses: []
|
@@ -56,5 +68,6 @@ specification_version: 3
|
|
56
68
|
summary: Nutrasuite is a low-calorie syntax sweetener for minitest
|
57
69
|
test_files:
|
58
70
|
- test/test_helper.rb
|
71
|
+
- test/unit/activesupport_test.rb
|
59
72
|
- test/unit/contexts_test.rb
|
60
73
|
has_rdoc:
|