striuct 0.3.5.1 → 0.4.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.
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