striuct 0.3.5.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. data/.travis.yml +3 -0
  2. data/.yardopts +1 -1
  3. data/LICENSE +1 -1
  4. data/README.md +7 -3
  5. data/example/example1.rb +5 -4
  6. data/lib/striuct/classmethods/README.md +9 -4
  7. data/lib/striuct/classmethods/adjustment.rb +4 -15
  8. data/lib/striuct/{attributes.rb → classmethods/attributes.rb} +15 -17
  9. data/lib/striuct/classmethods/{prevent_conflicts.rb → conflict_management.rb} +37 -14
  10. data/lib/striuct/classmethods/constructor.rb +2 -4
  11. data/lib/striuct/classmethods/copy.rb +2 -2
  12. data/lib/striuct/classmethods/default.rb +9 -18
  13. data/lib/striuct/classmethods/enum.rb +3 -5
  14. data/lib/striuct/classmethods/inner.rb +6 -10
  15. data/lib/striuct/classmethods/macro.rb +33 -48
  16. data/lib/striuct/classmethods/names.rb +75 -0
  17. data/lib/striuct/classmethods/predicate.rb +128 -0
  18. data/lib/striuct/classmethods/{requiremnets.rb → requirements.rb} +6 -3
  19. data/lib/striuct/classmethods/validation.rb +5 -43
  20. data/lib/striuct/instancemethods/README.md +4 -4
  21. data/lib/striuct/instancemethods/assign.rb +11 -13
  22. data/lib/striuct/instancemethods/cast.rb +5 -8
  23. data/lib/striuct/instancemethods/compare.rb +6 -6
  24. data/lib/striuct/instancemethods/default.rb +28 -6
  25. data/lib/striuct/instancemethods/delegate_class_methods.rb +21 -21
  26. data/lib/striuct/instancemethods/enum.rb +3 -9
  27. data/lib/striuct/instancemethods/getter.rb +47 -0
  28. data/lib/striuct/instancemethods/hashy.rb +2 -6
  29. data/lib/striuct/instancemethods/keyvalidatable.rb +0 -5
  30. data/lib/striuct/instancemethods/lock.rb +35 -43
  31. data/lib/striuct/instancemethods/object.rb +3 -26
  32. data/lib/striuct/instancemethods/requirements.rb +16 -2
  33. data/lib/striuct/instancemethods/safety.rb +1 -1
  34. data/lib/striuct/instancemethods/setter.rb +58 -0
  35. data/lib/striuct/instancemethods/to_s.rb +2 -2
  36. data/lib/striuct/instancemethods/validation.rb +13 -7
  37. data/lib/striuct/instancemethods/values.rb +8 -7
  38. data/lib/striuct/requirements.rb +2 -5
  39. data/lib/striuct/{hashdeepdupulicatable.rb → singleton_class/hashdeepdupulicatable.rb} +2 -2
  40. data/lib/striuct/singleton_class.rb +3 -4
  41. data/striuct.gemspec +7 -4
  42. data/test/test_sglc-constructor.rb +36 -0
  43. data/test/test_subc-c-constructor.rb +88 -0
  44. data/test/{test_striuct-subclass-class-safety_naming.rb → test_subc-c-safety_naming.rb} +6 -5
  45. data/test/test_subc-f-enum.rb +139 -0
  46. data/test/test_subc-f-predicate.rb +647 -0
  47. data/test/{test_striuct-subclass-feature-validation_util.rb → test_subc-f-validation_util.rb} +10 -8
  48. data/test/test_subc-f_name.rb +525 -0
  49. data/test/{test_striuct-subclass-instance-accessor.rb → test_subc-i-accessor.rb} +3 -2
  50. data/test/test_subc-i-assign.rb +49 -0
  51. data/test/test_subc-i-cast.rb +27 -0
  52. data/test/{test_striuct-subclass-instance-default_value.rb → test_subc-i-default_value.rb} +2 -2
  53. data/test/{test_striuct-subclass-instance-hashlike.rb → test_subc-i-hashlike.rb} +0 -9
  54. data/test/{test_striuct-subclass-instance-lock.rb → test_subc-i-lock.rb} +8 -8
  55. data/test/{test_striuct-subclass-instance-to_s_family.rb → test_subc-i-to_s_family.rb} +1 -1
  56. data/test/{test_striuct-subclass-instance-validation_specific_conditions.rb → test_subc-i-validation_specific_conditions.rb} +50 -0
  57. data/test/test_version.rb +14 -0
  58. metadata +124 -80
  59. data/Manifest.txt +0 -97
  60. data/README.ja.old.rdoc +0 -298
  61. data/example/example.old.rdoc +0 -188
  62. data/lib/striuct/classmethods/hashy.rb +0 -22
  63. data/lib/striuct/classmethods/named.rb +0 -126
  64. data/lib/striuct/classmethods.rb +0 -1
  65. data/lib/striuct/instancemethods/inner_accessor.rb +0 -53
  66. data/lib/striuct/instancemethods/subscript.rb +0 -27
  67. data/lib/striuct/instancemethods.rb +0 -1
  68. data/lib/striuct/version.rb +0 -5
  69. data/test/test_striuct-singleton_class-define.rb +0 -19
  70. data/test/test_striuct-subclass-class-constructor.rb +0 -82
  71. data/test/test_striuct-subclass-class-validation.rb +0 -26
  72. data/test/test_striuct-subclass-instance-assign.rb +0 -30
  73. data/test/test_striuct-subclass-instance-enum.rb +0 -93
  74. data/test/test_striuct-subclass-instance-validation_functional_condition.rb +0 -51
  75. data/test/test_striuct-subclass-instance_names.rb +0 -18
  76. data/test/test_striuct-version.rb +0 -11
  77. /data/{History.rdoc → History.old(~0.3.n).rdoc} +0 -0
  78. /data/test/{test_striuct-subclass-class-macro.rb → test_subc-c-add_members.rb} +0 -0
  79. /data/test/{test_striuct-subclass-class-close.rb → test_subc-c-close_member.rb} +0 -0
  80. /data/test/{test_striuct-subclass-class-copy.rb → test_subc-c-copy.rb} +0 -0
  81. /data/test/{test_striuct-subclass-class-freeze.rb → test_subc-c-freeze.rb} +0 -0
  82. /data/test/{test_striuct-subclass-class-inheritable.rb → test_subc-c-inheritable.rb} +0 -0
  83. /data/test/{test_striuct-subclass-feature-alias_member.rb → test_subc-f-alias_member.rb} +0 -0
  84. /data/test/{test_striuct-subclass-feature-to_struct.rb → test_subc-f-to_struct.rb} +0 -0
  85. /data/test/{test_striuct-subclass-instance-adjuster.rb → test_subc-i-adjuster.rb} +0 -0
  86. /data/test/{test_striuct-subclass-instance-basic.rb → test_subc-i-basic.rb} +0 -0
  87. /data/test/{test_striuct-subclass-instance-compare.rb → test_subc-i-compare.rb} +0 -0
  88. /data/test/{test_striuct-subclass-instance-copy.rb → test_subc-i-copy.rb} +0 -0
  89. /data/test/{test_striuct-subclass-instance-freeze.rb → test_subc-i-freeze.rb} +0 -0
  90. /data/test/{test_striuct-subclass-instance-keyvalidatable.rb → test_subc-i-keyvalidatable.rb} +0 -0
  91. /data/test/{test_striuct-subclass-instance-validation_inference.rb → test_subc-i-validation_inference.rb} +0 -0
  92. /data/test/{test_striuct-subclass-instance-validation_with_getter.rb → test_subc-i-validation_with_getter.rb} +0 -0
@@ -0,0 +1,525 @@
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Name < Test::Unit::TestCase
4
+
5
+ # for peep
6
+ origin_autonyms = nil
7
+ origin_aliases = nil
8
+
9
+ Subclass = Striuct.define do
10
+ origin_autonyms = @autonyms
11
+ origin_aliases = @aliases
12
+
13
+ member :foo
14
+ member :bar
15
+ alias_member :als_foo, :foo
16
+
17
+ close_member
18
+ end.freeze
19
+
20
+ INSTANCE = Subclass.new.freeze
21
+
22
+ TYPE_PAIRS = {
23
+ Class: Subclass,
24
+ Instance: INSTANCE
25
+ }.freeze
26
+
27
+ [:_autonyms].each do |callee|
28
+ TYPE_PAIRS.each_pair do |type, reciever|
29
+ define_method :"test_#{type}_#{callee}" do
30
+ assert_same true, reciever.private_methods.include?(callee)
31
+
32
+ assert_raises NoMethodError do
33
+ reciever.public_send(callee)
34
+ end
35
+
36
+ assert_same origin_autonyms, reciever.__send__(callee)
37
+ end
38
+ end
39
+ end
40
+
41
+ [:autonyms, :members].each do |callee|
42
+ TYPE_PAIRS.each_pair do |type, reciever|
43
+ define_method :"test_#{type}_#{callee}" do
44
+ assert_same true, reciever.public_methods.include?(callee)
45
+ ret = reciever.public_send(callee)
46
+ assert_not_same origin_autonyms, ret
47
+ assert_equal origin_autonyms, ret
48
+
49
+ 10.times do
50
+ ret2 = reciever.public_send(callee)
51
+ assert_not_same ret, ret2
52
+ assert_equal ret, ret2
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ [:all_members].each do |callee|
59
+ TYPE_PAIRS.each_pair do |type, reciever|
60
+ define_method :"test_#{type}_#{callee}" do
61
+ assert_same true, reciever.public_methods.include?(callee)
62
+ ret = reciever.public_send(callee)
63
+ assert_equal [*origin_autonyms, :als_foo], ret
64
+
65
+ 10.times do
66
+ ret2 = reciever.public_send(callee)
67
+ assert_not_same ret, ret2
68
+ assert_equal ret, ret2
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ [:aliases].each do |callee|
75
+ TYPE_PAIRS.each_pair do |type, reciever|
76
+ define_method :"test_#{type}_#{callee}" do
77
+ assert_same true, reciever.public_methods.include?(callee)
78
+ ret = reciever.public_send(callee)
79
+ assert_not_same(origin_aliases, ret)
80
+ assert_equal({:als_foo => :foo}, ret)
81
+
82
+ 10.times do
83
+ ret2 = reciever.public_send(callee)
84
+ assert_not_same(origin_aliases, ret2)
85
+ assert_not_same ret, ret2
86
+ assert_equal ret, ret2
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+ [:autonym_for_alias].each do |callee|
93
+ TYPE_PAIRS.each_pair do |type, reciever|
94
+ define_method :"test_#{type}_#{callee}" do
95
+ assert_same true, reciever.public_methods.include?(callee)
96
+
97
+ assert_raises NoMethodError, TypeError do
98
+ reciever.public_send(callee, BasicObject.new)
99
+ end
100
+
101
+ assert_raises TypeError do
102
+ reciever.public_send(callee, Object.new)
103
+ end
104
+
105
+ assert_raises NameError do
106
+ reciever.public_send(callee, :foo)
107
+ end
108
+
109
+ assert_same :foo, reciever.public_send(callee, :als_foo)
110
+
111
+
112
+ assert_raises NameError do
113
+ reciever.public_send(callee, 'foo')
114
+ end
115
+
116
+ assert_same :foo, reciever.public_send(callee, 'als_foo')
117
+
118
+ assert_raises TypeError do
119
+ reciever.public_send(callee, 0)
120
+ end
121
+
122
+ assert_raises TypeError do
123
+ reciever.public_send(callee, 0.9)
124
+ end
125
+
126
+ assert_raises NameError do
127
+ reciever.public_send(callee, :bar)
128
+ end
129
+
130
+ assert_raises NameError do
131
+ reciever.public_send(callee, :als_bar)
132
+ end
133
+
134
+ assert_raises NameError do
135
+ reciever.public_send(callee, 'bar')
136
+ end
137
+
138
+ assert_raises NameError do
139
+ reciever.public_send(callee, 'als_bar')
140
+ end
141
+
142
+ assert_raises TypeError do
143
+ reciever.public_send(callee, 1)
144
+ end
145
+
146
+ assert_raises TypeError do
147
+ reciever.public_send(callee, 1.9)
148
+ end
149
+
150
+ assert_raises NameError do
151
+ reciever.public_send(callee, :none)
152
+ end
153
+
154
+ assert_raises NameError do
155
+ reciever.public_send(callee, :als_none)
156
+ end
157
+
158
+ assert_raises NameError do
159
+ reciever.public_send(callee, 'none')
160
+ end
161
+
162
+ assert_raises NameError do
163
+ reciever.public_send(callee, 'als_none')
164
+ end
165
+
166
+ assert_raises TypeError do
167
+ reciever.public_send(callee, 2)
168
+ end
169
+
170
+ assert_raises TypeError do
171
+ reciever.public_send(callee, 2.9)
172
+ end
173
+ end
174
+ end
175
+ end
176
+
177
+ [:autonym_for_member].each do |callee|
178
+ TYPE_PAIRS.each_pair do |type, reciever|
179
+ define_method :"test_#{type}_#{callee}" do
180
+ assert_same true, reciever.public_methods.include?(callee)
181
+
182
+ assert_raises NoMethodError, TypeError do
183
+ reciever.public_send(callee, BasicObject.new)
184
+ end
185
+
186
+ assert_raises TypeError do
187
+ reciever.public_send(callee, Object.new)
188
+ end
189
+
190
+ assert_same :foo, reciever.public_send(callee, :foo)
191
+ assert_same :foo, reciever.public_send(callee, :als_foo)
192
+ assert_same :foo, reciever.public_send(callee, 'foo')
193
+ assert_same :foo, reciever.public_send(callee, 'als_foo')
194
+
195
+ assert_raises TypeError do
196
+ reciever.public_send(callee, 0)
197
+ end
198
+
199
+ assert_raises TypeError do
200
+ reciever.public_send(callee, 0.9)
201
+ end
202
+
203
+ assert_same :bar, reciever.public_send(callee, :bar)
204
+
205
+ assert_raises NameError do
206
+ reciever.public_send(callee, :als_bar)
207
+ end
208
+
209
+ assert_same :bar, reciever.public_send(callee, 'bar')
210
+
211
+ assert_raises NameError do
212
+ reciever.public_send(callee, 'als_bar')
213
+ end
214
+
215
+ assert_raises TypeError do
216
+ reciever.public_send(callee, 1)
217
+ end
218
+
219
+ assert_raises TypeError do
220
+ reciever.public_send(callee, 1.9)
221
+ end
222
+
223
+ assert_raises NameError do
224
+ reciever.public_send(callee, :none)
225
+ end
226
+
227
+ assert_raises NameError do
228
+ reciever.public_send(callee, :als_none)
229
+ end
230
+
231
+ assert_raises NameError do
232
+ reciever.public_send(callee, 'none')
233
+ end
234
+
235
+ assert_raises NameError do
236
+ reciever.public_send(callee, 'als_none')
237
+ end
238
+
239
+ assert_raises TypeError do
240
+ reciever.public_send(callee, 2)
241
+ end
242
+
243
+ assert_raises TypeError do
244
+ reciever.public_send(callee, 2.9)
245
+ end
246
+ end
247
+ end
248
+ end
249
+
250
+
251
+ [:autonym_for_index].each do |callee|
252
+ TYPE_PAIRS.each_pair do |type, reciever|
253
+ define_method :"test_#{type}_#{callee}" do
254
+ assert_same true, reciever.public_methods.include?(callee)
255
+
256
+ assert_raises NoMethodError, TypeError do
257
+ reciever.public_send(callee, BasicObject.new)
258
+ end
259
+
260
+ assert_raises TypeError do
261
+ reciever.public_send(callee, Object.new)
262
+ end
263
+
264
+ assert_raises TypeError do
265
+ reciever.public_send(callee, :foo)
266
+ end
267
+
268
+ assert_raises TypeError do
269
+ reciever.public_send(callee, :als_foo)
270
+ end
271
+
272
+ assert_raises TypeError do
273
+ reciever.public_send(callee, 'foo')
274
+ end
275
+
276
+ assert_raises TypeError do
277
+ reciever.public_send(callee, 'als_foo')
278
+ end
279
+
280
+ assert_same :foo, reciever.public_send(callee, 0)
281
+ assert_same :foo, reciever.public_send(callee, 0.9)
282
+ assert_same :foo, reciever.public_send(callee, -2)
283
+ assert_same :foo, reciever.public_send(callee, -2.9)
284
+
285
+ assert_raises TypeError do
286
+ reciever.public_send(callee, :bar)
287
+ end
288
+
289
+ assert_raises TypeError do
290
+ reciever.public_send(callee, :als_bar)
291
+ end
292
+
293
+ assert_raises TypeError do
294
+ reciever.public_send(callee, 'bar')
295
+ end
296
+
297
+ assert_raises TypeError do
298
+ reciever.public_send(callee, 'als_bar')
299
+ end
300
+
301
+ assert_same :bar, reciever.public_send(callee, 1)
302
+ assert_same :bar, reciever.public_send(callee, 1.9)
303
+ assert_same :bar, reciever.public_send(callee, -1)
304
+ assert_same :bar, reciever.public_send(callee, -1.9)
305
+
306
+ assert_raises TypeError do
307
+ reciever.public_send(callee, :none)
308
+ end
309
+
310
+ assert_raises TypeError do
311
+ reciever.public_send(callee, :als_none)
312
+ end
313
+
314
+ assert_raises TypeError do
315
+ reciever.public_send(callee, 'none')
316
+ end
317
+
318
+ assert_raises TypeError do
319
+ reciever.public_send(callee, 'als_none')
320
+ end
321
+
322
+ assert_raises IndexError do
323
+ reciever.public_send(callee, 2)
324
+ end
325
+
326
+ assert_raises IndexError do
327
+ reciever.public_send(callee, 2.9)
328
+ end
329
+
330
+ assert_raises IndexError do
331
+ reciever.public_send(callee, -3)
332
+ end
333
+
334
+ assert_raises IndexError do
335
+ reciever.public_send(callee, -3.9)
336
+ end
337
+ end
338
+ end
339
+ end
340
+
341
+ [:autonym_for_key].each do |callee|
342
+ TYPE_PAIRS.each_pair do |type, reciever|
343
+ define_method :"test_#{type}_#{callee}" do
344
+ assert_same true, reciever.public_methods.include?(callee)
345
+
346
+ assert_raises KeyError do
347
+ reciever.public_send(callee, BasicObject.new)
348
+ end
349
+
350
+ assert_raises KeyError do
351
+ reciever.public_send(callee, Object.new)
352
+ end
353
+
354
+ assert_same :foo, reciever.public_send(callee, :foo)
355
+ assert_same :foo, reciever.public_send(callee, :als_foo)
356
+ assert_same :foo, reciever.public_send(callee, 'foo')
357
+ assert_same :foo, reciever.public_send(callee, 'als_foo')
358
+ assert_same :foo, reciever.public_send(callee, 0)
359
+ assert_same :foo, reciever.public_send(callee, 0.9)
360
+ assert_same :foo, reciever.public_send(callee, -2)
361
+ assert_same :foo, reciever.public_send(callee, -2.9)
362
+
363
+ assert_same :bar, reciever.public_send(callee, :bar)
364
+
365
+ assert_raises KeyError do
366
+ assert_same :bar, reciever.public_send(callee, :als_bar)
367
+ end
368
+
369
+ assert_same :bar, reciever.public_send(callee, 'bar')
370
+
371
+ assert_raises KeyError do
372
+ assert_same :bar, reciever.public_send(callee, 'als_bar')
373
+ end
374
+
375
+ assert_same :bar, reciever.public_send(callee, 1)
376
+ assert_same :bar, reciever.public_send(callee, 1.9)
377
+ assert_same :bar, reciever.public_send(callee, -1)
378
+ assert_same :bar, reciever.public_send(callee, -1.9)
379
+
380
+ assert_raises KeyError do
381
+ reciever.public_send(callee, :none)
382
+ end
383
+
384
+ assert_raises KeyError do
385
+ reciever.public_send(callee, :als_none)
386
+ end
387
+
388
+ assert_raises KeyError do
389
+ reciever.public_send(callee, 'none')
390
+ end
391
+
392
+ assert_raises KeyError do
393
+ reciever.public_send(callee, 'als_none')
394
+ end
395
+
396
+ assert_raises KeyError do
397
+ reciever.public_send(callee, 2)
398
+ end
399
+
400
+ assert_raises KeyError do
401
+ reciever.public_send(callee, 2.9)
402
+ end
403
+
404
+ assert_raises KeyError do
405
+ reciever.public_send(callee, -3)
406
+ end
407
+
408
+ assert_raises KeyError do
409
+ reciever.public_send(callee, -3.9)
410
+ end
411
+ end
412
+ end
413
+ end
414
+
415
+ [:aliases_for_autonym].each do |callee|
416
+ TYPE_PAIRS.each_pair do |type, reciever|
417
+ define_method :"test_#{type}_#{callee}" do
418
+ assert_same true, reciever.public_methods.include?(callee)
419
+
420
+ assert_raises NoMethodError, TypeError do
421
+ reciever.public_send(callee, BasicObject.new)
422
+ end
423
+
424
+ assert_raises TypeError do
425
+ reciever.public_send(callee, Object.new)
426
+ end
427
+
428
+ assert_equal [:als_foo], reciever.public_send(callee, :foo)
429
+
430
+ assert_raises NameError do
431
+ reciever.public_send(callee, :als_foo)
432
+ end
433
+
434
+ assert_equal [:als_foo], reciever.public_send(callee, 'foo')
435
+
436
+ assert_raises NameError do
437
+ reciever.public_send(callee, 'als_foo')
438
+ end
439
+
440
+ assert_raises TypeError do
441
+ reciever.public_send(callee, 0)
442
+ end
443
+
444
+ assert_raises TypeError do
445
+ reciever.public_send(callee, 0.9)
446
+ end
447
+
448
+ assert_raises NameError do
449
+ reciever.public_send(callee, :bar)
450
+ end
451
+
452
+ assert_raises NameError do
453
+ reciever.public_send(callee, :als_bar)
454
+ end
455
+
456
+ assert_raises NameError do
457
+ reciever.public_send(callee, 'bar')
458
+ end
459
+
460
+ assert_raises NameError do
461
+ reciever.public_send(callee, 'als_bar')
462
+ end
463
+
464
+ assert_raises TypeError do
465
+ reciever.public_send(callee, 1)
466
+ end
467
+
468
+ assert_raises TypeError do
469
+ reciever.public_send(callee, 1.9)
470
+ end
471
+
472
+ assert_raises NameError do
473
+ reciever.public_send(callee, :none)
474
+ end
475
+
476
+ assert_raises NameError do
477
+ reciever.public_send(callee, :als_none)
478
+ end
479
+
480
+ assert_raises NameError do
481
+ reciever.public_send(callee, 'none')
482
+ end
483
+
484
+ assert_raises NameError do
485
+ reciever.public_send(callee, 'als_none')
486
+ end
487
+
488
+ assert_raises TypeError do
489
+ reciever.public_send(callee, 2)
490
+ end
491
+
492
+ assert_raises TypeError do
493
+ reciever.public_send(callee, 2.9)
494
+ end
495
+ end
496
+ end
497
+ end
498
+
499
+ aliase_for_autonym_ext_pairs = {}.tap {|h|
500
+ h[:Class] = Striuct.define do
501
+ member :foo
502
+ alias_member :als1_foo, :foo
503
+ member :bar
504
+ alias_member :als1_bar, :bar
505
+ alias_member :als2_foo, :foo
506
+ alias_member :als3_foo, :foo
507
+ member :xyz
508
+ end.freeze
509
+
510
+ h[:Instance] = h[:Class].new.freeze
511
+ }.freeze
512
+
513
+ [:aliases_for_autonym].each do |callee|
514
+ aliase_for_autonym_ext_pairs.each_pair do |type, reciever|
515
+ define_method :"test_#{type}_#{callee}_2" do
516
+ assert_equal [:als1_foo, :als2_foo, :als3_foo], reciever.public_send(callee, 'foo')
517
+ assert_equal [:als1_bar], reciever.public_send(callee, 'bar')
518
+ assert_raises NameError do
519
+ reciever.public_send(callee, 'xyz')
520
+ end
521
+ end
522
+ end
523
+ end
524
+
525
+ end
@@ -92,8 +92,9 @@ class Test_Striuct_Subclass_Instance_Accsessor < Test::Unit::TestCase
92
92
  class Sth < Striuct.new
93
93
  member :bool, OR(true, false)
94
94
  member :sth
95
- protect_level :struct
96
- member :lambda, OR(->v{v % 3 == 2}, ->v{v.kind_of? Float})
95
+ conflict_management :struct do
96
+ member :lambda, OR(->v{v % 3 == 2}, ->v{v.kind_of? Float})
97
+ end
97
98
  end
98
99
 
99
100
  def setup
@@ -0,0 +1,49 @@
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Instance_Assign < Test::Unit::TestCase
4
+
5
+ Sth = Striuct.new do
6
+ member :foo
7
+ end
8
+
9
+ [:unassign, :delete_at].each do |callee|
10
+ define_method :"test_#{callee}" do
11
+ sth = Sth.new
12
+ assert_equal false, sth.assign?(:foo)
13
+ sth.foo = nil
14
+ assert_equal true, sth.assign?(:foo)
15
+ sth.public_send callee, :foo
16
+ assert_equal false, sth.assign?(:foo)
17
+ sth.foo = nil
18
+ assert_equal true, sth.assign?(:foo)
19
+ sth.public_send callee, 0
20
+ assert_equal false, sth.assign?(:foo)
21
+
22
+ assert_raises KeyError do
23
+ sth.public_send callee, :var
24
+ end
25
+
26
+ assert_raises KeyError do
27
+ sth.public_send callee, 1
28
+ end
29
+ end
30
+ end
31
+
32
+ def test_empty?
33
+ cls = Striuct.new :foo, :bar
34
+ sth = cls.new
35
+
36
+ assert_same true, sth.empty?
37
+
38
+ sth.foo = nil
39
+ assert_same false, sth.empty?
40
+ sth.bar = true
41
+ assert_same false, sth.empty?
42
+ sth.unassign :foo
43
+ assert_same false, sth.empty?
44
+ sth.unassign :bar
45
+
46
+ assert_same true, sth.empty?
47
+ end
48
+
49
+ end
@@ -0,0 +1,27 @@
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Instance_Cast < Test::Unit::TestCase
4
+
5
+ Sth = Striuct.new :foo, :bar, :hoge
6
+
7
+ def test_to_h
8
+ sth = Sth.new
9
+ assert_equal({foo: nil, bar: nil, hoge: nil}, sth.to_h)
10
+ assert_equal({foo: nil, bar: nil, hoge: nil}, sth.to_h(true))
11
+ assert_equal({}, sth.to_h(false))
12
+
13
+ sth.bar = :BAR
14
+ assert_equal({foo: nil, bar: :BAR, hoge: nil}, sth.to_h)
15
+ assert_equal({foo: nil, bar: :BAR, hoge: nil}, sth.to_h(true))
16
+ assert_equal({bar: :BAR}, sth.to_h(false))
17
+ end
18
+
19
+ def test_to_a
20
+ sth = Sth.new
21
+ assert_equal([nil, nil, nil], sth.to_a)
22
+
23
+ sth.bar = :BAR
24
+ assert_equal([nil, :BAR, nil], sth.to_a)
25
+ end
26
+
27
+ end
@@ -107,7 +107,7 @@ class Test_Striuct_Subclass_Instance_DefaultValue_Under_MemberMacro < Test::Unit
107
107
  seef = nil
108
108
  klass = Striuct.define do
109
109
 
110
- scope.assert_raises ArgumentError do
110
+ scope.assert_raises OptionalArgument::KeyConflictError do
111
111
  member :lank, Integer, default: '10', default_proc: ->own,name{rand}
112
112
  end
113
113
 
@@ -126,4 +126,4 @@ class Test_Striuct_Subclass_Instance_DefaultValue_Under_MemberMacro < Test::Unit
126
126
  assert_equal seef, klass.new
127
127
  end
128
128
 
129
- end
129
+ end
@@ -3,15 +3,6 @@ require_relative 'helper'
3
3
  class Test_Striuct_Subclass_Instance_HashLike < Test::Unit::TestCase
4
4
 
5
5
  Sth = Striuct.new :foo, :bar, :hoge
6
-
7
- def test_empty?
8
- sth = Sth[hoge: 7, foo: 8]
9
- assert_equal false, sth.empty?
10
- sth.each_member{|name|sth[name] = nil}
11
- assert_equal false, sth.empty?
12
- sth.each_member{|name|sth.unassign name}
13
- assert_equal true, sth.empty?
14
- end
15
6
 
16
7
  def test_has_value?
17
8
  sth = Sth[hoge: 7, foo: 8]
@@ -7,11 +7,11 @@ class Test_Striuct_Subclass_Instance_Lock < Test::Unit::TestCase
7
7
 
8
8
  def test_lock
9
9
  sth = Sth.new
10
- assert_equal false, sth.lock?(:foo)
11
- assert_equal false, sth.lock?(:bar)
10
+ assert_equal false, sth.locked?(:foo)
11
+ assert_equal false, sth.locked?(:bar)
12
12
  assert_equal false, sth.secure?
13
13
  sth.lock :bar
14
- assert_equal true, sth.lock?(:bar)
14
+ assert_equal true, sth.locked?(:bar)
15
15
  assert_equal false, sth.secure?
16
16
 
17
17
  assert_raises RuntimeError do
@@ -20,15 +20,15 @@ class Test_Striuct_Subclass_Instance_Lock < Test::Unit::TestCase
20
20
 
21
21
  sth.__send__ :unlock, :bar
22
22
 
23
- assert_equal false, sth.lock?(:bar)
23
+ assert_equal false, sth.locked?(:bar)
24
24
 
25
25
  sth.bar = 1
26
26
  assert_equal 1, sth.bar
27
27
 
28
- sth.lock
29
- assert_equal true, sth.lock?(:foo)
30
- assert_equal true, sth.lock?(:bar)
31
- assert_equal true, sth.lock?
28
+ sth.lock_all
29
+ assert_equal true, sth.locked?(:foo)
30
+ assert_equal true, sth.locked?(:bar)
31
+ assert_equal true, sth.all_locked?
32
32
 
33
33
  assert_raises RuntimeError do
34
34
  sth.foo = 1
@@ -18,7 +18,7 @@ class Test_Striuct_Subclass_Instance_to_s_Family < Test::Unit::TestCase
18
18
 
19
19
  def test_inspect
20
20
  user = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
21
- assert_equal %q!#<struct' Test_Striuct_Subclass_Instance_to_s_Family::User strict?:true id=9999(valid?:true, lock?:false), last_name="taro"(valid?:true, lock?:false), family_name="yamada"(valid?:true, lock?:false), address="Tokyo Japan"(valid?:true, lock?:false), age=30(valid?:true, lock?:false)>!,
21
+ assert_equal %q!#<struct' Test_Striuct_Subclass_Instance_to_s_Family::User strict?:true id=9999(valid?:true, locked?:false), last_name="taro"(valid?:true, locked?:false), family_name="yamada"(valid?:true, locked?:false), address="Tokyo Japan"(valid?:true, locked?:false), age=30(valid?:true, locked?:false)>!,
22
22
  user.inspect
23
23
  end
24
24