ns-options 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.
- data/.gitignore +17 -0
- data/Gemfile +8 -0
- data/README.markdown +151 -0
- data/Rakefile +5 -0
- data/lib/ns-options/has_options.rb +36 -0
- data/lib/ns-options/helper.rb +34 -0
- data/lib/ns-options/namespace.rb +136 -0
- data/lib/ns-options/namespaces.rb +22 -0
- data/lib/ns-options/option/boolean.rb +27 -0
- data/lib/ns-options/option.rb +70 -0
- data/lib/ns-options/options.rb +65 -0
- data/lib/ns-options/version.rb +3 -0
- data/lib/ns-options.rb +9 -0
- data/ns-options.gemspec +19 -0
- data/test/helper.rb +14 -0
- data/test/integration/app_test.rb +63 -0
- data/test/integration/user_test.rb +57 -0
- data/test/support/app.rb +12 -0
- data/test/support/user.rb +13 -0
- data/test/unit/ns-options/has_options_test.rb +67 -0
- data/test/unit/ns-options/helper_test.rb +63 -0
- data/test/unit/ns-options/namespace_test.rb +232 -0
- data/test/unit/ns-options/namespaces_test.rb +55 -0
- data/test/unit/ns-options/option/boolean_test.rb +67 -0
- data/test/unit/ns-options/option_test.rb +191 -0
- data/test/unit/ns-options/options_test.rb +227 -0
- metadata +117 -0
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
class User
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "the User class"
|
7
|
+
setup do
|
8
|
+
@class = User
|
9
|
+
end
|
10
|
+
subject{ @class }
|
11
|
+
|
12
|
+
should have_instance_methods :options, :preferences
|
13
|
+
end
|
14
|
+
|
15
|
+
class ClassPreferencesTest < BaseTest
|
16
|
+
desc "preferences"
|
17
|
+
subject{ @class.preferences }
|
18
|
+
|
19
|
+
should have_instance_methods :namespace, :option, :define, :options, :metaclass
|
20
|
+
should have_accessors :home_url, :show_messages, :font_size
|
21
|
+
end
|
22
|
+
|
23
|
+
class InstanceTest < BaseTest
|
24
|
+
desc "instance"
|
25
|
+
setup do
|
26
|
+
@instance = @class.new
|
27
|
+
end
|
28
|
+
subject{ @instance }
|
29
|
+
|
30
|
+
should have_instance_methods :preferences
|
31
|
+
end
|
32
|
+
|
33
|
+
class PreferencesTest < InstanceTest
|
34
|
+
desc "preferences"
|
35
|
+
setup do
|
36
|
+
@preferences = @instance.preferences
|
37
|
+
@preferences.home_url = "/home"
|
38
|
+
@preferences.show_messages = false
|
39
|
+
@preferences.font_size = 15
|
40
|
+
end
|
41
|
+
subject{ @preferences }
|
42
|
+
|
43
|
+
should have_instance_methods :namespace, :option, :define, :options, :metaclass
|
44
|
+
should have_accessors :home_url, :show_messages, :font_size
|
45
|
+
|
46
|
+
should "have set the home_url" do
|
47
|
+
assert_equal "/home", subject.home_url
|
48
|
+
end
|
49
|
+
should "have set show_messages" do
|
50
|
+
assert_equal false, subject.show_messages
|
51
|
+
end
|
52
|
+
should "have set the font_size" do
|
53
|
+
assert_equal 15, subject.font_size
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
data/test/support/app.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
class User
|
2
|
+
include NsOptions::HasOptions
|
3
|
+
options(:preferences, 'user-preferences') do
|
4
|
+
option :home_url
|
5
|
+
option :show_messages, NsOptions::Option::Boolean, :require => true
|
6
|
+
option :font_size, Integer, :default => 12
|
7
|
+
end
|
8
|
+
|
9
|
+
def preferences_key
|
10
|
+
"user_#{self.object_id}"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
module NsOptions::HasOptions
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "NsOptions::HasOptions"
|
7
|
+
setup do
|
8
|
+
@class = Class.new do
|
9
|
+
include NsOptions::HasOptions
|
10
|
+
|
11
|
+
def configs_key
|
12
|
+
"random_class_#{self.object_id}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
@instance = @class.new
|
16
|
+
end
|
17
|
+
subject{ @instance }
|
18
|
+
|
19
|
+
should have_class_methods :options
|
20
|
+
end
|
21
|
+
|
22
|
+
class OptionsTest < BaseTest
|
23
|
+
desc "options method"
|
24
|
+
|
25
|
+
class WithAKeyTest < OptionsTest
|
26
|
+
desc "with a key"
|
27
|
+
setup do
|
28
|
+
@key = "configs-key"
|
29
|
+
@class.options(:configs, @key) do
|
30
|
+
option :something
|
31
|
+
end
|
32
|
+
@instance = @class.new
|
33
|
+
end
|
34
|
+
subject{ @instance }
|
35
|
+
|
36
|
+
should have_class_method :configs
|
37
|
+
should have_instance_method :configs
|
38
|
+
|
39
|
+
should "have used the provided key when creating the namespace" do
|
40
|
+
assert_kind_of NsOptions::Namespace, subject.class.configs
|
41
|
+
assert_kind_of NsOptions::Namespace, subject.configs
|
42
|
+
assert_equal @key, subject.class.configs.options.key
|
43
|
+
assert_match @key, subject.configs.options.key
|
44
|
+
end
|
45
|
+
should "have used the provided block to define the namespace" do
|
46
|
+
assert_respond_to :something, subject.configs
|
47
|
+
assert_respond_to :something=, subject.configs
|
48
|
+
assert subject.configs.options.fetch(:something)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
class WithoutAKeyTest < OptionsTest
|
52
|
+
desc "without a key"
|
53
|
+
setup do
|
54
|
+
@name = "configs"
|
55
|
+
@class.options(@name.to_sym)
|
56
|
+
@instance = @class.new
|
57
|
+
end
|
58
|
+
subject{ @instance }
|
59
|
+
|
60
|
+
should "have used the name for the key when creating the namespace" do
|
61
|
+
assert_equal @name, subject.class.configs.options.key
|
62
|
+
assert_match @name, subject.configs.options.key
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
module NsOptions::Helper
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "NsOptions::Helper"
|
7
|
+
setup do
|
8
|
+
@module = NsOptions::Helper
|
9
|
+
end
|
10
|
+
subject{ @module }
|
11
|
+
|
12
|
+
should have_instance_methods :new_namespace, :new_child_namespace, :fetch_and_define_option
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
class NewNamespaceTest < BaseTest
|
17
|
+
desc "new_namespace method"
|
18
|
+
setup do
|
19
|
+
@parent = @module.new_namespace("parent")
|
20
|
+
@child = @module.new_namespace("child", @parent) do
|
21
|
+
option :something
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
should "have created a parent namespace" do
|
26
|
+
assert_equal "parent", @parent.options.key
|
27
|
+
end
|
28
|
+
should "have created a child namespace" do
|
29
|
+
assert_equal "child", @child.options.key
|
30
|
+
assert_equal @parent, @child.options.parent
|
31
|
+
assert @child.options[:something]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class NewChildNamespaceTest < BaseTest
|
36
|
+
desc "new_child_namespace method"
|
37
|
+
setup do
|
38
|
+
@parent = @module.new_namespace("parent")
|
39
|
+
@mock_class = mock()
|
40
|
+
@mock_class.stubs(:super_settings).returns(@parent)
|
41
|
+
@first_owner = mock()
|
42
|
+
@first_owner.stubs({ :class => @mock_class })
|
43
|
+
@first = @module.new_child_namespace(@first_owner, "super_settings") do
|
44
|
+
option :something
|
45
|
+
end
|
46
|
+
@second_owner = User.new
|
47
|
+
@second = @module.new_child_namespace(@second_owner, "preferences")
|
48
|
+
end
|
49
|
+
|
50
|
+
should "have created a child namespace" do
|
51
|
+
class_name = @mock_class.to_s.split('::').last.downcase
|
52
|
+
key = "#{@parent.options.key}:#{class_name}_#{@first_owner.object_id}"
|
53
|
+
assert_equal key, @first.options.key
|
54
|
+
assert_equal @parent, @first.options.parent
|
55
|
+
assert @first.options[:something]
|
56
|
+
end
|
57
|
+
should "have created a second child namespace" do
|
58
|
+
key = "#{@second.options.parent.options.key}:#{@second_owner.preferences_key}"
|
59
|
+
assert_equal key, @second.options.key
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,232 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
class NsOptions::Namespace
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "NsOptions::Namespace"
|
7
|
+
setup do
|
8
|
+
@key = "options"
|
9
|
+
@namespace = NsOptions::Namespace.new(@key)
|
10
|
+
end
|
11
|
+
subject{ @namespace }
|
12
|
+
|
13
|
+
should have_accessors :metaclass, :options
|
14
|
+
should have_instance_methods :option, :namespace, :required_set?, :define
|
15
|
+
|
16
|
+
should "have set it's metaclass accessor" do
|
17
|
+
assert subject.metaclass
|
18
|
+
end
|
19
|
+
should "have created a new options collection and set it's options accessor" do
|
20
|
+
assert subject.options
|
21
|
+
assert_kind_of NsOptions::Options, subject.options
|
22
|
+
assert_equal @key, subject.options.key
|
23
|
+
assert_nil subject.options.parent
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class OptionTest < BaseTest
|
28
|
+
desc "option method"
|
29
|
+
setup do
|
30
|
+
@name = :something
|
31
|
+
@type = NsOptions::Option::Boolean
|
32
|
+
@rules = { :default => true }
|
33
|
+
@namespace.option(@name, @type, @rules)
|
34
|
+
end
|
35
|
+
subject{ @namespace }
|
36
|
+
|
37
|
+
should "have added the option to the namespace's options collection" do
|
38
|
+
assert(option = subject.options[@name])
|
39
|
+
assert_equal @name.to_s, option.name
|
40
|
+
assert_equal @type, option.type_class
|
41
|
+
assert_equal @rules, option.rules
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class OptionWithNoTypeTest < BaseTest
|
46
|
+
desc "option method with no type specified"
|
47
|
+
setup do
|
48
|
+
@name = :something
|
49
|
+
@namespace.option(@name)
|
50
|
+
end
|
51
|
+
subject{ @namespace }
|
52
|
+
|
53
|
+
should "default the type to String" do
|
54
|
+
assert(option = subject.options[@name])
|
55
|
+
assert_equal String, option.type_class
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class OptionMethodsTest < OptionTest
|
60
|
+
desc "defined methods"
|
61
|
+
|
62
|
+
should have_instance_methods :something, :something=
|
63
|
+
|
64
|
+
should "be writable through the defined writer" do
|
65
|
+
assert_nothing_raised{ subject.something = false }
|
66
|
+
assert_equal false, subject.something
|
67
|
+
end
|
68
|
+
should "be writable through the reader with args" do
|
69
|
+
assert_nothing_raised{ subject.something true }
|
70
|
+
assert_equal true, subject.something
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class NamespaceTest < BaseTest
|
75
|
+
desc "namespace method"
|
76
|
+
setup do
|
77
|
+
@namespace.namespace(:something) do
|
78
|
+
option :something_else
|
79
|
+
end
|
80
|
+
@namespace.namespace(:another, "special_key")
|
81
|
+
end
|
82
|
+
subject{ @namespace }
|
83
|
+
|
84
|
+
should "have added a namespace to the namespace's options collection" do
|
85
|
+
assert(namespace = subject.options.namespaces[:something])
|
86
|
+
assert_equal "#{subject.options.key}:something", namespace.options.key
|
87
|
+
assert_equal subject, namespace.options.parent
|
88
|
+
assert namespace.options[:something_else]
|
89
|
+
end
|
90
|
+
should "allow passing a special key to the namespace" do
|
91
|
+
assert(namespace = subject.options.namespaces[:another])
|
92
|
+
assert_equal "#{subject.options.key}:special_key", namespace.options.key
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class NamespaceMethodsTest < NamespaceTest
|
97
|
+
desc "defined methods"
|
98
|
+
|
99
|
+
should have_instance_methods :something
|
100
|
+
|
101
|
+
should "be return the namespace using the reader" do
|
102
|
+
assert_equal subject.options.namespaces[:something], subject.something
|
103
|
+
end
|
104
|
+
should "define the namespace with the reader and a block" do
|
105
|
+
subject.something do
|
106
|
+
option :another
|
107
|
+
end
|
108
|
+
assert subject.something.options[:another]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
class DefineTest < BaseTest
|
113
|
+
desc "define method"
|
114
|
+
|
115
|
+
class BlockWithoutArityTest < BaseTest
|
116
|
+
desc "with a block with no arity"
|
117
|
+
|
118
|
+
should "instance eval the block in the scope of the namespace" do
|
119
|
+
scope = nil
|
120
|
+
subject.define do
|
121
|
+
scope = self
|
122
|
+
end
|
123
|
+
assert_equal subject, scope
|
124
|
+
end
|
125
|
+
end
|
126
|
+
class BlockWithArityTest < BaseTest
|
127
|
+
desc "with a block with arity"
|
128
|
+
|
129
|
+
should "yield the namespace to the block" do
|
130
|
+
yielded = nil
|
131
|
+
subject.define do |namespace|
|
132
|
+
yielded = namespace
|
133
|
+
end
|
134
|
+
assert_equal subject, yielded
|
135
|
+
end
|
136
|
+
end
|
137
|
+
class NoBlockTest < BaseTest
|
138
|
+
desc "with no block"
|
139
|
+
|
140
|
+
should "return the namespace" do
|
141
|
+
assert_equal subject, subject.define
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
class MethodMissingTest < BaseTest
|
147
|
+
desc "method missing"
|
148
|
+
setup do
|
149
|
+
@parent = @namespace
|
150
|
+
@parent.options.add(:something)
|
151
|
+
@parent.options.set(:something, "amazing")
|
152
|
+
@namespace = NsOptions::Namespace.new("child", @parent)
|
153
|
+
end
|
154
|
+
|
155
|
+
class ReaderForAKnownOptionTest < MethodMissingTest
|
156
|
+
desc "as a reader for a known option"
|
157
|
+
setup do
|
158
|
+
@result = @namespace.something
|
159
|
+
end
|
160
|
+
|
161
|
+
should "have defined the option on the namespace" do
|
162
|
+
defined_methods = subject.metaclass.public_instance_methods(false).map(&:to_sym)
|
163
|
+
assert_includes :something, defined_methods
|
164
|
+
assert_includes :something=, defined_methods
|
165
|
+
assert_equal "amazing", @result
|
166
|
+
end
|
167
|
+
end
|
168
|
+
class WriterForAKnownOptionTest < MethodMissingTest
|
169
|
+
desc "as a reader for a known option"
|
170
|
+
setup do
|
171
|
+
@namespace.something = "even more amazing"
|
172
|
+
end
|
173
|
+
|
174
|
+
should "have defined the option on the namespace" do
|
175
|
+
defined_methods = subject.metaclass.public_instance_methods(false).map(&:to_sym)
|
176
|
+
assert_includes :something, defined_methods
|
177
|
+
assert_includes :something=, defined_methods
|
178
|
+
assert_equal "even more amazing", subject.something
|
179
|
+
end
|
180
|
+
end
|
181
|
+
class DynamicWriterTest < MethodMissingTest
|
182
|
+
desc "with a writer for an unknown option"
|
183
|
+
setup do
|
184
|
+
@namespace.something_not_defined = "you know it"
|
185
|
+
@namespace.another_not_defined = true
|
186
|
+
@namespace.even_more_not_defined = 12
|
187
|
+
end
|
188
|
+
|
189
|
+
should "have defined the accessors and added the option" do
|
190
|
+
defined_methods = subject.metaclass.public_instance_methods(false).map(&:to_sym)
|
191
|
+
assert subject.options[:something_not_defined]
|
192
|
+
assert_includes :something_not_defined, defined_methods
|
193
|
+
assert_includes :something_not_defined=, defined_methods
|
194
|
+
assert_equal "you know it", subject.something_not_defined
|
195
|
+
end
|
196
|
+
should "use the class of the value for the option's type class" do
|
197
|
+
assert_equal String, subject.options[:something_not_defined].type_class
|
198
|
+
assert_equal Integer, subject.options[:even_more_not_defined].type_class
|
199
|
+
assert_equal NsOptions::Option::Boolean, subject.options[:another_not_defined].type_class
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
class RespondToTest < BaseTest
|
205
|
+
desc "respond to"
|
206
|
+
setup do
|
207
|
+
@namespace.options.add(:something)
|
208
|
+
end
|
209
|
+
|
210
|
+
should "return true when the reader of an option is requested without the reader defined" do
|
211
|
+
assert_not_includes :something, subject.class.public_instance_methods(false).map(&:to_sym)
|
212
|
+
assert_not_includes :something, subject.metaclass.public_instance_methods(false).map(&:to_sym)
|
213
|
+
assert_equal true, subject.respond_to?(:something)
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
class WithAParentTest < BaseTest
|
218
|
+
desc "with a parent"
|
219
|
+
setup do
|
220
|
+
@key = "options"
|
221
|
+
@parent = @namespace
|
222
|
+
@namespace = NsOptions::Namespace.new(@key, @parent)
|
223
|
+
end
|
224
|
+
subject{ @namespace }
|
225
|
+
|
226
|
+
should "have set it's options accessor and stored it's parent on it" do
|
227
|
+
assert subject.options
|
228
|
+
assert_equal @parent, subject.options.parent
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
class NsOptions::Namespaces
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "NsOptions::Namespaces"
|
7
|
+
setup do
|
8
|
+
@namespaces = NsOptions::Namespaces.new
|
9
|
+
end
|
10
|
+
subject{ @namespaces }
|
11
|
+
|
12
|
+
should have_instance_methods :add, :get
|
13
|
+
|
14
|
+
should "be a kind of a hash" do
|
15
|
+
assert_kind_of Hash, subject
|
16
|
+
end
|
17
|
+
should "only use symbols for keys" do
|
18
|
+
subject["string_key"] = true
|
19
|
+
subject[:symbol_key] = true
|
20
|
+
|
21
|
+
assert_includes :string_key, subject.keys
|
22
|
+
assert_includes :symbol_key, subject.keys
|
23
|
+
assert_not_includes "string_key", subject.keys
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class AddTest < BaseTest
|
28
|
+
desc "add method"
|
29
|
+
setup do
|
30
|
+
@parent = NsOptions::Namespace.new(:parent)
|
31
|
+
@namespaces.add(:a_name, "a-key", @parent) do
|
32
|
+
option :an_option
|
33
|
+
end
|
34
|
+
end
|
35
|
+
subject{ @namespaces }
|
36
|
+
|
37
|
+
should "have created a new namespace and added it to itself" do
|
38
|
+
assert(namespace = subject[:a_name])
|
39
|
+
assert_kind_of NsOptions::Namespace, namespace
|
40
|
+
assert_equal "a-key", namespace.options.key
|
41
|
+
assert_equal @parent, namespace.options.parent
|
42
|
+
assert namespace.options[:an_option]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class GetTest < AddTest
|
47
|
+
desc "get method"
|
48
|
+
|
49
|
+
should "return the namespace matching the name" do
|
50
|
+
assert(namespace = subject.get("a_name"))
|
51
|
+
assert_equal subject[:a_name], namespace
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
class NsOptions::Option::Boolean
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "NsOptions::Option::Boolean"
|
7
|
+
setup do
|
8
|
+
@boolean = NsOptions::Option::Boolean.new(true)
|
9
|
+
end
|
10
|
+
subject{ @boolean }
|
11
|
+
|
12
|
+
should have_accessors :actual
|
13
|
+
end
|
14
|
+
|
15
|
+
class WithTruthyValuesTest < BaseTest
|
16
|
+
desc "with truthy values"
|
17
|
+
setup do
|
18
|
+
@boolean = NsOptions::Option::Boolean.new(false)
|
19
|
+
end
|
20
|
+
|
21
|
+
should "have set actual to true with true" do
|
22
|
+
subject.actual = true
|
23
|
+
assert_equal true, subject.actual
|
24
|
+
end
|
25
|
+
should "have set actual to true with 'true'" do
|
26
|
+
subject.actual = 'true'
|
27
|
+
assert_equal true, subject.actual
|
28
|
+
end
|
29
|
+
should "have set actual to true with 1" do
|
30
|
+
subject.actual = 1
|
31
|
+
assert_equal true, subject.actual
|
32
|
+
end
|
33
|
+
should "have set actual to true with '1'" do
|
34
|
+
subject.actual = '1'
|
35
|
+
assert_equal true, subject.actual
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class WithFalsyValuesTest < BaseTest
|
40
|
+
desc "with falsy values"
|
41
|
+
setup do
|
42
|
+
@boolean = NsOptions::Option::Boolean.new(true)
|
43
|
+
end
|
44
|
+
|
45
|
+
should "have set actual to false with false" do
|
46
|
+
subject.actual = false
|
47
|
+
assert_equal false, subject.actual
|
48
|
+
end
|
49
|
+
should "have set actual to false with 'false'" do
|
50
|
+
subject.actual = 'false'
|
51
|
+
assert_equal false, subject.actual
|
52
|
+
end
|
53
|
+
should "have set actual to false with 0" do
|
54
|
+
subject.actual = 0
|
55
|
+
assert_equal false, subject.actual
|
56
|
+
end
|
57
|
+
should "have set actual to false with '0'" do
|
58
|
+
subject.actual = '0'
|
59
|
+
assert_equal false, subject.actual
|
60
|
+
end
|
61
|
+
should "have set actual to false with nil" do
|
62
|
+
subject.actual = nil
|
63
|
+
assert_equal false, subject.actual
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|