striuct 0.3.3 → 0.3.4
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 +35 -34
- data/.travis.yml +6 -6
- data/Gemfile +12 -12
- data/History.rdoc +279 -273
- data/LICENSE +21 -21
- data/Manifest.txt +91 -90
- data/README.ja.old.rdoc +297 -297
- data/README.md +128 -128
- data/Rakefile +11 -11
- data/benchmark/basics.rb +56 -56
- data/example/README.rb +44 -44
- data/example/example.old.rdoc +187 -187
- data/example/example1.rb +233 -233
- data/example/example2.rb +22 -22
- data/example/see_trace.rb +32 -32
- data/lib/striuct/classmethods/README.md +5 -5
- data/lib/striuct/classmethods/adjustment.rb +32 -32
- data/lib/striuct/classmethods/constructor.rb +63 -63
- data/lib/striuct/classmethods/default.rb +27 -27
- data/lib/striuct/classmethods/enum.rb +48 -48
- data/lib/striuct/classmethods/inner.rb +91 -91
- data/lib/striuct/classmethods/length.rb +14 -14
- data/lib/striuct/classmethods/macro.rb +144 -144
- data/lib/striuct/classmethods/named.rb +113 -113
- data/lib/striuct/classmethods/object.rb +54 -54
- data/lib/striuct/classmethods/prevent_conflicts.rb +89 -89
- data/lib/striuct/classmethods/requiremnets.rb +11 -11
- data/lib/striuct/classmethods/to_struct.rb +23 -25
- data/lib/striuct/classmethods/validation.rb +55 -55
- data/lib/striuct/classmethods.rb +1 -1
- data/lib/striuct/instancemethods/README.md +5 -5
- data/lib/striuct/instancemethods/assign.rb +30 -30
- data/lib/striuct/instancemethods/cast.rb +34 -34
- data/lib/striuct/instancemethods/compare.rb +30 -30
- data/lib/striuct/instancemethods/default.rb +13 -13
- data/lib/striuct/instancemethods/delegate_class_methods.rb +28 -28
- data/lib/striuct/instancemethods/enum.rb +103 -103
- data/lib/striuct/instancemethods/hashy.rb +121 -121
- data/lib/striuct/instancemethods/inner.rb +60 -60
- data/lib/striuct/instancemethods/keyvalidatable.rb +14 -14
- data/lib/striuct/instancemethods/lock.rb +61 -61
- data/lib/striuct/instancemethods/object.rb +52 -52
- data/lib/striuct/instancemethods/requirements.rb +14 -14
- data/lib/striuct/instancemethods/safety.rb +11 -11
- data/lib/striuct/instancemethods/subscript.rb +55 -55
- data/lib/striuct/instancemethods/validation.rb +29 -25
- data/lib/striuct/instancemethods/values.rb +57 -57
- data/lib/striuct/instancemethods.rb +1 -1
- data/lib/striuct/requirements.rb +5 -5
- data/lib/striuct/singleton_class.rb +66 -66
- data/lib/striuct/specificcontainer.rb +19 -19
- data/lib/striuct/structs.rb +7 -7
- data/lib/striuct/version.rb +5 -5
- data/lib/striuct.rb +13 -13
- data/striuct.gemspec +24 -24
- data/test/helper.rb +5 -5
- data/test/test_striuct-singleton_class-define.rb +19 -19
- data/test/test_striuct-subclass-class-cloning.rb +20 -20
- data/test/test_striuct-subclass-class-close.rb +36 -36
- data/test/test_striuct-subclass-class-constructor.rb +82 -82
- data/test/test_striuct-subclass-class-freeze.rb +36 -36
- data/test/test_striuct-subclass-class-inheritable.rb +57 -57
- data/test/test_striuct-subclass-class-macro.rb +13 -13
- data/test/test_striuct-subclass-class-safety_naming.rb +72 -72
- data/test/test_striuct-subclass-class-validation.rb +26 -26
- data/test/test_striuct-subclass-feature-alias_member.rb +53 -53
- data/test/test_striuct-subclass-feature-to_struct.rb +61 -25
- data/test/test_striuct-subclass-feature-validation_util.rb +57 -0
- data/test/test_striuct-subclass-instance-accessor.rb +137 -137
- data/test/test_striuct-subclass-instance-adjuster.rb +94 -94
- data/test/test_striuct-subclass-instance-assign.rb +30 -30
- data/test/test_striuct-subclass-instance-basic.rb +32 -32
- data/test/test_striuct-subclass-instance-cloning.rb +22 -22
- data/test/test_striuct-subclass-instance-compare.rb +51 -51
- data/test/test_striuct-subclass-instance-default_value.rb +128 -128
- data/test/test_striuct-subclass-instance-enum.rb +92 -92
- data/test/test_striuct-subclass-instance-freeze.rb +19 -19
- data/test/test_striuct-subclass-instance-hashlike.rb +153 -153
- data/test/test_striuct-subclass-instance-keyvalidatable.rb +24 -24
- data/test/test_striuct-subclass-instance-lock.rb +39 -39
- data/test/test_striuct-subclass-instance-to_s_family.rb +25 -25
- data/test/test_striuct-subclass-instance-validation_functional_condition.rb +50 -50
- data/test/test_striuct-subclass-instance-validation_inference.rb +50 -50
- data/test/test_striuct-subclass-instance-validation_specific_conditions.rb +247 -247
- data/test/test_striuct-subclass-instance-validation_with_getter.rb +33 -33
- data/test/test_striuct-subclass-instance_names.rb +18 -18
- data/test/test_striuct-version.rb +10 -10
- metadata +4 -2
@@ -1,51 +1,51 @@
|
|
1
|
-
require_relative 'helper'
|
2
|
-
|
3
|
-
class Test_Striuct_Subclass_Instance_Inference < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def test_inference
|
6
|
-
klass = Striuct.define do
|
7
|
-
member :n, Numeric, inference: true
|
8
|
-
member :m, ANYTHING?, inference: true
|
9
|
-
end
|
10
|
-
|
11
|
-
sth, sth2 = klass.new, klass.new
|
12
|
-
|
13
|
-
assert_raises Validation::InvalidWritingError do
|
14
|
-
sth.n = '1'
|
15
|
-
end
|
16
|
-
|
17
|
-
sth.n = 1.1
|
18
|
-
|
19
|
-
assert_equal 1.1, sth.n
|
20
|
-
|
21
|
-
assert_raises Validation::InvalidWritingError do
|
22
|
-
sth.n = 1
|
23
|
-
end
|
24
|
-
|
25
|
-
assert_raises Validation::InvalidWritingError do
|
26
|
-
sth2.n = 1
|
27
|
-
end
|
28
|
-
|
29
|
-
sth.n = 2.1
|
30
|
-
|
31
|
-
assert_equal 2.1, sth.n
|
32
|
-
|
33
|
-
|
34
|
-
sth2.m = 1
|
35
|
-
|
36
|
-
assert_equal 1, sth2.m
|
37
|
-
|
38
|
-
assert_raises Validation::InvalidWritingError do
|
39
|
-
sth.m = 1.0
|
40
|
-
end
|
41
|
-
|
42
|
-
assert_raises Validation::InvalidWritingError do
|
43
|
-
sth2.m = 1.0
|
44
|
-
end
|
45
|
-
|
46
|
-
sth.m = 2
|
47
|
-
|
48
|
-
assert_equal 2, sth.m
|
49
|
-
end
|
50
|
-
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class Test_Striuct_Subclass_Instance_Inference < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_inference
|
6
|
+
klass = Striuct.define do
|
7
|
+
member :n, Numeric, inference: true
|
8
|
+
member :m, ANYTHING?, inference: true
|
9
|
+
end
|
10
|
+
|
11
|
+
sth, sth2 = klass.new, klass.new
|
12
|
+
|
13
|
+
assert_raises Validation::InvalidWritingError do
|
14
|
+
sth.n = '1'
|
15
|
+
end
|
16
|
+
|
17
|
+
sth.n = 1.1
|
18
|
+
|
19
|
+
assert_equal 1.1, sth.n
|
20
|
+
|
21
|
+
assert_raises Validation::InvalidWritingError do
|
22
|
+
sth.n = 1
|
23
|
+
end
|
24
|
+
|
25
|
+
assert_raises Validation::InvalidWritingError do
|
26
|
+
sth2.n = 1
|
27
|
+
end
|
28
|
+
|
29
|
+
sth.n = 2.1
|
30
|
+
|
31
|
+
assert_equal 2.1, sth.n
|
32
|
+
|
33
|
+
|
34
|
+
sth2.m = 1
|
35
|
+
|
36
|
+
assert_equal 1, sth2.m
|
37
|
+
|
38
|
+
assert_raises Validation::InvalidWritingError do
|
39
|
+
sth.m = 1.0
|
40
|
+
end
|
41
|
+
|
42
|
+
assert_raises Validation::InvalidWritingError do
|
43
|
+
sth2.m = 1.0
|
44
|
+
end
|
45
|
+
|
46
|
+
sth.m = 2
|
47
|
+
|
48
|
+
assert_equal 2, sth.m
|
49
|
+
end
|
50
|
+
|
51
51
|
end
|
@@ -1,247 +1,247 @@
|
|
1
|
-
require_relative 'helper'
|
2
|
-
|
3
|
-
class Test_Striuct_Subclass_Instance_SpecificConditions < Test::Unit::TestCase
|
4
|
-
|
5
|
-
Sth = Striuct.define do
|
6
|
-
member :list_only_int, GENERICS(Integer)
|
7
|
-
member :true_or_false, BOOL?
|
8
|
-
member :like_str, STRINGABLE?
|
9
|
-
member :has_foo, CAN(:foo)
|
10
|
-
member :has_foo_and_bar, CAN(:foo, :bar)
|
11
|
-
member :one_of_member, MEMBER_OF([1, 3])
|
12
|
-
member :has_ignore, AND(1..5, 3..10)
|
13
|
-
member :nand, NAND(1..5, 3..10)
|
14
|
-
member :all_pass, OR(1..5, 3..10)
|
15
|
-
member :catch_error, CATCH(NoMethodError){|v|v.no_name!}
|
16
|
-
member :no_exception, QUIET(->v{v.class})
|
17
|
-
member :not_integer, NOT(Integer)
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_not
|
21
|
-
sth = Sth.new
|
22
|
-
|
23
|
-
obj = Object.new
|
24
|
-
|
25
|
-
sth.not_integer = obj
|
26
|
-
assert_same obj, sth.not_integer
|
27
|
-
|
28
|
-
assert_raises Validation::InvalidWritingError do
|
29
|
-
sth.not_integer = 1
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
def test_still
|
35
|
-
sth = Sth.new
|
36
|
-
|
37
|
-
obj = Object.new
|
38
|
-
|
39
|
-
sth.no_exception = obj
|
40
|
-
assert_same obj, sth.no_exception
|
41
|
-
sth.no_exception = false
|
42
|
-
|
43
|
-
obj.singleton_class.class_eval do
|
44
|
-
undef_method :class
|
45
|
-
end
|
46
|
-
|
47
|
-
assert_raises Validation::InvalidWritingError do
|
48
|
-
sth.no_exception = obj
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_catch
|
53
|
-
sth = Sth.new
|
54
|
-
|
55
|
-
obj = Object.new
|
56
|
-
|
57
|
-
sth.catch_error = obj
|
58
|
-
assert_same obj, sth.catch_error
|
59
|
-
sth.catch_error = false
|
60
|
-
|
61
|
-
obj.singleton_class.class_eval do
|
62
|
-
def no_name!
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
assert_raises Validation::InvalidWritingError do
|
67
|
-
sth.catch_error = obj
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_or
|
72
|
-
sth = Sth.new
|
73
|
-
|
74
|
-
assert_raises Validation::InvalidWritingError do
|
75
|
-
sth.all_pass = 11
|
76
|
-
end
|
77
|
-
|
78
|
-
sth.all_pass = 1
|
79
|
-
assert_equal 1, sth.all_pass
|
80
|
-
sth.all_pass = 4
|
81
|
-
assert_equal 4, sth.all_pass
|
82
|
-
assert_equal true, sth.valid?(:all_pass)
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_and
|
86
|
-
sth = Sth.new
|
87
|
-
|
88
|
-
assert_raises Validation::InvalidWritingError do
|
89
|
-
sth.has_ignore = 1
|
90
|
-
end
|
91
|
-
|
92
|
-
assert_raises Validation::InvalidWritingError do
|
93
|
-
sth.has_ignore= 2
|
94
|
-
end
|
95
|
-
|
96
|
-
sth.has_ignore = 3
|
97
|
-
assert_equal 3, sth.has_ignore
|
98
|
-
assert_equal true, sth.valid?(:has_ignore)
|
99
|
-
|
100
|
-
assert_raises Validation::InvalidWritingError do
|
101
|
-
sth.has_ignore = []
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_nand
|
106
|
-
sth = Sth.new
|
107
|
-
|
108
|
-
assert_raises Validation::InvalidWritingError do
|
109
|
-
sth.nand = 4
|
110
|
-
end
|
111
|
-
|
112
|
-
assert_raises Validation::InvalidWritingError do
|
113
|
-
sth.nand = 4.5
|
114
|
-
end
|
115
|
-
|
116
|
-
sth.nand = 2
|
117
|
-
assert_equal 2, sth.nand
|
118
|
-
assert_equal true, sth.valid?(:nand)
|
119
|
-
sth.nand = []
|
120
|
-
assert_equal [], sth.nand
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_member_of
|
124
|
-
sth = Sth.new
|
125
|
-
|
126
|
-
assert_raises Validation::InvalidWritingError do
|
127
|
-
sth.one_of_member = 4
|
128
|
-
end
|
129
|
-
|
130
|
-
sth.one_of_member = 3
|
131
|
-
assert_equal 3, sth.one_of_member
|
132
|
-
assert_equal true, sth.valid?(:one_of_member)
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_generics
|
136
|
-
sth = Sth.new
|
137
|
-
|
138
|
-
assert_raises Validation::InvalidWritingError do
|
139
|
-
sth.list_only_int = [1, '2']
|
140
|
-
end
|
141
|
-
|
142
|
-
sth.list_only_int = [1, 2]
|
143
|
-
assert_equal [1, 2], sth.list_only_int
|
144
|
-
assert_equal true, sth.valid?(:list_only_int)
|
145
|
-
sth.list_only_int = []
|
146
|
-
assert_equal [], sth.list_only_int
|
147
|
-
assert_equal true, sth.valid?(:list_only_int)
|
148
|
-
sth.list_only_int << '2'
|
149
|
-
assert_equal false, sth.valid?(:list_only_int)
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_boolean
|
153
|
-
sth = Sth.new
|
154
|
-
|
155
|
-
assert_raises Validation::InvalidWritingError do
|
156
|
-
sth.true_or_false = nil
|
157
|
-
end
|
158
|
-
|
159
|
-
assert_equal false, sth.valid?(:true_or_false)
|
160
|
-
|
161
|
-
sth.true_or_false = true
|
162
|
-
assert_equal true, sth.true_or_false
|
163
|
-
assert_equal true, sth.valid?(:true_or_false)
|
164
|
-
sth.true_or_false = false
|
165
|
-
assert_equal false, sth.true_or_false
|
166
|
-
assert_equal true, sth.valid?(:true_or_false)
|
167
|
-
end
|
168
|
-
|
169
|
-
def test_stringable
|
170
|
-
sth = Sth.new
|
171
|
-
obj = Object.new
|
172
|
-
|
173
|
-
assert_raises Validation::InvalidWritingError do
|
174
|
-
sth.like_str = obj
|
175
|
-
end
|
176
|
-
|
177
|
-
sth.like_str = 'str'
|
178
|
-
assert_equal true, sth.valid?(:like_str)
|
179
|
-
sth.like_str = :sym
|
180
|
-
assert_equal true, sth.valid?(:like_str)
|
181
|
-
|
182
|
-
obj.singleton_class.class_eval do
|
183
|
-
def to_str
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
sth.like_str = obj
|
188
|
-
assert_equal true, sth.valid?(:like_str)
|
189
|
-
end
|
190
|
-
|
191
|
-
def test_responsible_arg1
|
192
|
-
sth = Sth.new
|
193
|
-
obj = Object.new
|
194
|
-
|
195
|
-
raise if obj.respond_to? :foo
|
196
|
-
|
197
|
-
assert_raises Validation::InvalidWritingError do
|
198
|
-
sth.has_foo = obj
|
199
|
-
end
|
200
|
-
|
201
|
-
obj.singleton_class.class_eval do
|
202
|
-
def foo
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
raise unless obj.respond_to? :foo
|
207
|
-
|
208
|
-
sth.has_foo = obj
|
209
|
-
assert_equal obj, sth.has_foo
|
210
|
-
assert_equal true, sth.valid?(:has_foo)
|
211
|
-
end
|
212
|
-
|
213
|
-
def test_responsible_arg2
|
214
|
-
sth = Sth.new
|
215
|
-
obj = Object.new
|
216
|
-
|
217
|
-
raise if obj.respond_to? :foo
|
218
|
-
raise if obj.respond_to? :bar
|
219
|
-
|
220
|
-
assert_raises Validation::InvalidWritingError do
|
221
|
-
sth.has_foo_and_bar = obj
|
222
|
-
end
|
223
|
-
|
224
|
-
obj.singleton_class.class_eval do
|
225
|
-
def foo
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
assert_raises Validation::InvalidWritingError do
|
230
|
-
sth.has_foo_and_bar = obj
|
231
|
-
end
|
232
|
-
|
233
|
-
raise unless obj.respond_to? :foo
|
234
|
-
|
235
|
-
obj.singleton_class.class_eval do
|
236
|
-
def bar
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
raise unless obj.respond_to? :bar
|
241
|
-
|
242
|
-
sth.has_foo_and_bar = obj
|
243
|
-
assert_equal obj, sth.has_foo_and_bar
|
244
|
-
assert_equal true, sth.valid?(:has_foo_and_bar)
|
245
|
-
end
|
246
|
-
|
247
|
-
end
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class Test_Striuct_Subclass_Instance_SpecificConditions < Test::Unit::TestCase
|
4
|
+
|
5
|
+
Sth = Striuct.define do
|
6
|
+
member :list_only_int, GENERICS(Integer)
|
7
|
+
member :true_or_false, BOOL?
|
8
|
+
member :like_str, STRINGABLE?
|
9
|
+
member :has_foo, CAN(:foo)
|
10
|
+
member :has_foo_and_bar, CAN(:foo, :bar)
|
11
|
+
member :one_of_member, MEMBER_OF([1, 3])
|
12
|
+
member :has_ignore, AND(1..5, 3..10)
|
13
|
+
member :nand, NAND(1..5, 3..10)
|
14
|
+
member :all_pass, OR(1..5, 3..10)
|
15
|
+
member :catch_error, CATCH(NoMethodError){|v|v.no_name!}
|
16
|
+
member :no_exception, QUIET(->v{v.class})
|
17
|
+
member :not_integer, NOT(Integer)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_not
|
21
|
+
sth = Sth.new
|
22
|
+
|
23
|
+
obj = Object.new
|
24
|
+
|
25
|
+
sth.not_integer = obj
|
26
|
+
assert_same obj, sth.not_integer
|
27
|
+
|
28
|
+
assert_raises Validation::InvalidWritingError do
|
29
|
+
sth.not_integer = 1
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def test_still
|
35
|
+
sth = Sth.new
|
36
|
+
|
37
|
+
obj = Object.new
|
38
|
+
|
39
|
+
sth.no_exception = obj
|
40
|
+
assert_same obj, sth.no_exception
|
41
|
+
sth.no_exception = false
|
42
|
+
|
43
|
+
obj.singleton_class.class_eval do
|
44
|
+
undef_method :class
|
45
|
+
end
|
46
|
+
|
47
|
+
assert_raises Validation::InvalidWritingError do
|
48
|
+
sth.no_exception = obj
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_catch
|
53
|
+
sth = Sth.new
|
54
|
+
|
55
|
+
obj = Object.new
|
56
|
+
|
57
|
+
sth.catch_error = obj
|
58
|
+
assert_same obj, sth.catch_error
|
59
|
+
sth.catch_error = false
|
60
|
+
|
61
|
+
obj.singleton_class.class_eval do
|
62
|
+
def no_name!
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
assert_raises Validation::InvalidWritingError do
|
67
|
+
sth.catch_error = obj
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_or
|
72
|
+
sth = Sth.new
|
73
|
+
|
74
|
+
assert_raises Validation::InvalidWritingError do
|
75
|
+
sth.all_pass = 11
|
76
|
+
end
|
77
|
+
|
78
|
+
sth.all_pass = 1
|
79
|
+
assert_equal 1, sth.all_pass
|
80
|
+
sth.all_pass = 4
|
81
|
+
assert_equal 4, sth.all_pass
|
82
|
+
assert_equal true, sth.valid?(:all_pass)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_and
|
86
|
+
sth = Sth.new
|
87
|
+
|
88
|
+
assert_raises Validation::InvalidWritingError do
|
89
|
+
sth.has_ignore = 1
|
90
|
+
end
|
91
|
+
|
92
|
+
assert_raises Validation::InvalidWritingError do
|
93
|
+
sth.has_ignore= 2
|
94
|
+
end
|
95
|
+
|
96
|
+
sth.has_ignore = 3
|
97
|
+
assert_equal 3, sth.has_ignore
|
98
|
+
assert_equal true, sth.valid?(:has_ignore)
|
99
|
+
|
100
|
+
assert_raises Validation::InvalidWritingError do
|
101
|
+
sth.has_ignore = []
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_nand
|
106
|
+
sth = Sth.new
|
107
|
+
|
108
|
+
assert_raises Validation::InvalidWritingError do
|
109
|
+
sth.nand = 4
|
110
|
+
end
|
111
|
+
|
112
|
+
assert_raises Validation::InvalidWritingError do
|
113
|
+
sth.nand = 4.5
|
114
|
+
end
|
115
|
+
|
116
|
+
sth.nand = 2
|
117
|
+
assert_equal 2, sth.nand
|
118
|
+
assert_equal true, sth.valid?(:nand)
|
119
|
+
sth.nand = []
|
120
|
+
assert_equal [], sth.nand
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_member_of
|
124
|
+
sth = Sth.new
|
125
|
+
|
126
|
+
assert_raises Validation::InvalidWritingError do
|
127
|
+
sth.one_of_member = 4
|
128
|
+
end
|
129
|
+
|
130
|
+
sth.one_of_member = 3
|
131
|
+
assert_equal 3, sth.one_of_member
|
132
|
+
assert_equal true, sth.valid?(:one_of_member)
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_generics
|
136
|
+
sth = Sth.new
|
137
|
+
|
138
|
+
assert_raises Validation::InvalidWritingError do
|
139
|
+
sth.list_only_int = [1, '2']
|
140
|
+
end
|
141
|
+
|
142
|
+
sth.list_only_int = [1, 2]
|
143
|
+
assert_equal [1, 2], sth.list_only_int
|
144
|
+
assert_equal true, sth.valid?(:list_only_int)
|
145
|
+
sth.list_only_int = []
|
146
|
+
assert_equal [], sth.list_only_int
|
147
|
+
assert_equal true, sth.valid?(:list_only_int)
|
148
|
+
sth.list_only_int << '2'
|
149
|
+
assert_equal false, sth.valid?(:list_only_int)
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_boolean
|
153
|
+
sth = Sth.new
|
154
|
+
|
155
|
+
assert_raises Validation::InvalidWritingError do
|
156
|
+
sth.true_or_false = nil
|
157
|
+
end
|
158
|
+
|
159
|
+
assert_equal false, sth.valid?(:true_or_false)
|
160
|
+
|
161
|
+
sth.true_or_false = true
|
162
|
+
assert_equal true, sth.true_or_false
|
163
|
+
assert_equal true, sth.valid?(:true_or_false)
|
164
|
+
sth.true_or_false = false
|
165
|
+
assert_equal false, sth.true_or_false
|
166
|
+
assert_equal true, sth.valid?(:true_or_false)
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_stringable
|
170
|
+
sth = Sth.new
|
171
|
+
obj = Object.new
|
172
|
+
|
173
|
+
assert_raises Validation::InvalidWritingError do
|
174
|
+
sth.like_str = obj
|
175
|
+
end
|
176
|
+
|
177
|
+
sth.like_str = 'str'
|
178
|
+
assert_equal true, sth.valid?(:like_str)
|
179
|
+
sth.like_str = :sym
|
180
|
+
assert_equal true, sth.valid?(:like_str)
|
181
|
+
|
182
|
+
obj.singleton_class.class_eval do
|
183
|
+
def to_str
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
sth.like_str = obj
|
188
|
+
assert_equal true, sth.valid?(:like_str)
|
189
|
+
end
|
190
|
+
|
191
|
+
def test_responsible_arg1
|
192
|
+
sth = Sth.new
|
193
|
+
obj = Object.new
|
194
|
+
|
195
|
+
raise if obj.respond_to? :foo
|
196
|
+
|
197
|
+
assert_raises Validation::InvalidWritingError do
|
198
|
+
sth.has_foo = obj
|
199
|
+
end
|
200
|
+
|
201
|
+
obj.singleton_class.class_eval do
|
202
|
+
def foo
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
raise unless obj.respond_to? :foo
|
207
|
+
|
208
|
+
sth.has_foo = obj
|
209
|
+
assert_equal obj, sth.has_foo
|
210
|
+
assert_equal true, sth.valid?(:has_foo)
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_responsible_arg2
|
214
|
+
sth = Sth.new
|
215
|
+
obj = Object.new
|
216
|
+
|
217
|
+
raise if obj.respond_to? :foo
|
218
|
+
raise if obj.respond_to? :bar
|
219
|
+
|
220
|
+
assert_raises Validation::InvalidWritingError do
|
221
|
+
sth.has_foo_and_bar = obj
|
222
|
+
end
|
223
|
+
|
224
|
+
obj.singleton_class.class_eval do
|
225
|
+
def foo
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
assert_raises Validation::InvalidWritingError do
|
230
|
+
sth.has_foo_and_bar = obj
|
231
|
+
end
|
232
|
+
|
233
|
+
raise unless obj.respond_to? :foo
|
234
|
+
|
235
|
+
obj.singleton_class.class_eval do
|
236
|
+
def bar
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
raise unless obj.respond_to? :bar
|
241
|
+
|
242
|
+
sth.has_foo_and_bar = obj
|
243
|
+
assert_equal obj, sth.has_foo_and_bar
|
244
|
+
assert_equal true, sth.valid?(:has_foo_and_bar)
|
245
|
+
end
|
246
|
+
|
247
|
+
end
|
@@ -1,33 +1,33 @@
|
|
1
|
-
require_relative 'helper'
|
2
|
-
|
3
|
-
class Test_Striuct_Subclass_Instance_GetterValidation < Test::Unit::TestCase
|
4
|
-
|
5
|
-
Sth = Striuct.define do
|
6
|
-
member :plus_getter, /./, getter_validation: true
|
7
|
-
member :only_getter, /./, getter_validation: true,
|
8
|
-
setter_validation: false
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_getter_validation
|
12
|
-
sth = Sth.new
|
13
|
-
|
14
|
-
assert_raises Validation::InvalidWritingError do
|
15
|
-
sth.plus_getter = ''
|
16
|
-
end
|
17
|
-
|
18
|
-
sth.plus_getter = 'abc'
|
19
|
-
assert_equal 'abc', sth.plus_getter
|
20
|
-
sth.plus_getter.clear
|
21
|
-
|
22
|
-
assert_raises Validation::InvalidReadingError do
|
23
|
-
sth.plus_getter
|
24
|
-
end
|
25
|
-
|
26
|
-
sth.only_getter = ''
|
27
|
-
|
28
|
-
assert_raises Validation::InvalidReadingError do
|
29
|
-
sth.only_getter
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class Test_Striuct_Subclass_Instance_GetterValidation < Test::Unit::TestCase
|
4
|
+
|
5
|
+
Sth = Striuct.define do
|
6
|
+
member :plus_getter, /./, getter_validation: true
|
7
|
+
member :only_getter, /./, getter_validation: true,
|
8
|
+
setter_validation: false
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_getter_validation
|
12
|
+
sth = Sth.new
|
13
|
+
|
14
|
+
assert_raises Validation::InvalidWritingError do
|
15
|
+
sth.plus_getter = ''
|
16
|
+
end
|
17
|
+
|
18
|
+
sth.plus_getter = 'abc'
|
19
|
+
assert_equal 'abc', sth.plus_getter
|
20
|
+
sth.plus_getter.clear
|
21
|
+
|
22
|
+
assert_raises Validation::InvalidReadingError do
|
23
|
+
sth.plus_getter
|
24
|
+
end
|
25
|
+
|
26
|
+
sth.only_getter = ''
|
27
|
+
|
28
|
+
assert_raises Validation::InvalidReadingError do
|
29
|
+
sth.only_getter
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|