striuct 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/.gitignore +35 -34
  2. data/.travis.yml +6 -6
  3. data/Gemfile +12 -12
  4. data/History.rdoc +279 -273
  5. data/LICENSE +21 -21
  6. data/Manifest.txt +91 -90
  7. data/README.ja.old.rdoc +297 -297
  8. data/README.md +128 -128
  9. data/Rakefile +11 -11
  10. data/benchmark/basics.rb +56 -56
  11. data/example/README.rb +44 -44
  12. data/example/example.old.rdoc +187 -187
  13. data/example/example1.rb +233 -233
  14. data/example/example2.rb +22 -22
  15. data/example/see_trace.rb +32 -32
  16. data/lib/striuct/classmethods/README.md +5 -5
  17. data/lib/striuct/classmethods/adjustment.rb +32 -32
  18. data/lib/striuct/classmethods/constructor.rb +63 -63
  19. data/lib/striuct/classmethods/default.rb +27 -27
  20. data/lib/striuct/classmethods/enum.rb +48 -48
  21. data/lib/striuct/classmethods/inner.rb +91 -91
  22. data/lib/striuct/classmethods/length.rb +14 -14
  23. data/lib/striuct/classmethods/macro.rb +144 -144
  24. data/lib/striuct/classmethods/named.rb +113 -113
  25. data/lib/striuct/classmethods/object.rb +54 -54
  26. data/lib/striuct/classmethods/prevent_conflicts.rb +89 -89
  27. data/lib/striuct/classmethods/requiremnets.rb +11 -11
  28. data/lib/striuct/classmethods/to_struct.rb +23 -25
  29. data/lib/striuct/classmethods/validation.rb +55 -55
  30. data/lib/striuct/classmethods.rb +1 -1
  31. data/lib/striuct/instancemethods/README.md +5 -5
  32. data/lib/striuct/instancemethods/assign.rb +30 -30
  33. data/lib/striuct/instancemethods/cast.rb +34 -34
  34. data/lib/striuct/instancemethods/compare.rb +30 -30
  35. data/lib/striuct/instancemethods/default.rb +13 -13
  36. data/lib/striuct/instancemethods/delegate_class_methods.rb +28 -28
  37. data/lib/striuct/instancemethods/enum.rb +103 -103
  38. data/lib/striuct/instancemethods/hashy.rb +121 -121
  39. data/lib/striuct/instancemethods/inner.rb +60 -60
  40. data/lib/striuct/instancemethods/keyvalidatable.rb +14 -14
  41. data/lib/striuct/instancemethods/lock.rb +61 -61
  42. data/lib/striuct/instancemethods/object.rb +52 -52
  43. data/lib/striuct/instancemethods/requirements.rb +14 -14
  44. data/lib/striuct/instancemethods/safety.rb +11 -11
  45. data/lib/striuct/instancemethods/subscript.rb +55 -55
  46. data/lib/striuct/instancemethods/validation.rb +29 -25
  47. data/lib/striuct/instancemethods/values.rb +57 -57
  48. data/lib/striuct/instancemethods.rb +1 -1
  49. data/lib/striuct/requirements.rb +5 -5
  50. data/lib/striuct/singleton_class.rb +66 -66
  51. data/lib/striuct/specificcontainer.rb +19 -19
  52. data/lib/striuct/structs.rb +7 -7
  53. data/lib/striuct/version.rb +5 -5
  54. data/lib/striuct.rb +13 -13
  55. data/striuct.gemspec +24 -24
  56. data/test/helper.rb +5 -5
  57. data/test/test_striuct-singleton_class-define.rb +19 -19
  58. data/test/test_striuct-subclass-class-cloning.rb +20 -20
  59. data/test/test_striuct-subclass-class-close.rb +36 -36
  60. data/test/test_striuct-subclass-class-constructor.rb +82 -82
  61. data/test/test_striuct-subclass-class-freeze.rb +36 -36
  62. data/test/test_striuct-subclass-class-inheritable.rb +57 -57
  63. data/test/test_striuct-subclass-class-macro.rb +13 -13
  64. data/test/test_striuct-subclass-class-safety_naming.rb +72 -72
  65. data/test/test_striuct-subclass-class-validation.rb +26 -26
  66. data/test/test_striuct-subclass-feature-alias_member.rb +53 -53
  67. data/test/test_striuct-subclass-feature-to_struct.rb +61 -25
  68. data/test/test_striuct-subclass-feature-validation_util.rb +57 -0
  69. data/test/test_striuct-subclass-instance-accessor.rb +137 -137
  70. data/test/test_striuct-subclass-instance-adjuster.rb +94 -94
  71. data/test/test_striuct-subclass-instance-assign.rb +30 -30
  72. data/test/test_striuct-subclass-instance-basic.rb +32 -32
  73. data/test/test_striuct-subclass-instance-cloning.rb +22 -22
  74. data/test/test_striuct-subclass-instance-compare.rb +51 -51
  75. data/test/test_striuct-subclass-instance-default_value.rb +128 -128
  76. data/test/test_striuct-subclass-instance-enum.rb +92 -92
  77. data/test/test_striuct-subclass-instance-freeze.rb +19 -19
  78. data/test/test_striuct-subclass-instance-hashlike.rb +153 -153
  79. data/test/test_striuct-subclass-instance-keyvalidatable.rb +24 -24
  80. data/test/test_striuct-subclass-instance-lock.rb +39 -39
  81. data/test/test_striuct-subclass-instance-to_s_family.rb +25 -25
  82. data/test/test_striuct-subclass-instance-validation_functional_condition.rb +50 -50
  83. data/test/test_striuct-subclass-instance-validation_inference.rb +50 -50
  84. data/test/test_striuct-subclass-instance-validation_specific_conditions.rb +247 -247
  85. data/test/test_striuct-subclass-instance-validation_with_getter.rb +33 -33
  86. data/test/test_striuct-subclass-instance_names.rb +18 -18
  87. data/test/test_striuct-version.rb +10 -10
  88. metadata +4 -2
@@ -1,58 +1,58 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_Class_Inheritable < Test::Unit::TestCase
4
-
5
- Sth = Striuct.define do
6
- member :foo, String
7
- member :bar, OR(nil, Fixnum)
8
- end
9
-
10
- class SubSth < Sth
11
- member :hoge, OR(nil, 1..3)
12
- end
13
-
14
- class SubSubSth < SubSth
15
- member :rest, AND(/\d/, Symbol)
16
- end
17
-
18
- def test_inherit
19
- assert_equal [*Sth.members, :hoge], SubSth.members
20
- sth = Sth.new
21
- substh = SubSth.new
22
-
23
- assert_raises Validation::InvalidWritingError do
24
- substh.bar = 'str'
25
- end
26
-
27
- assert_raises Validation::InvalidWritingError do
28
- substh.hoge = 4
29
- end
30
-
31
- assert_raises NoMethodError do
32
- sth.hoge = 3
33
- end
34
-
35
- assert_raises NoMethodError do
36
- substh.rest = :a4
37
- end
38
-
39
- subsubsth = SubSubSth.new
40
-
41
- assert_raises Validation::InvalidWritingError do
42
- subsubsth.rest = 4
43
- end
44
-
45
- subsubsth.rest = :a4
46
-
47
- assert_equal :a4, subsubsth[:rest]
48
-
49
- assert_equal true, Sth.__send__(:closed?)
50
- assert_equal false, SubSth.__send__(:closed?)
51
- SubSth.__send__(:close)
52
- assert_equal true, SubSth.__send__(:closed?)
53
- assert_equal false, SubSubSth.__send__(:closed?)
54
- SubSubSth.__send__(:close)
55
- assert_equal true, SubSubSth.__send__(:closed?)
56
- end
57
-
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_Inheritable < Test::Unit::TestCase
4
+
5
+ Sth = Striuct.define do
6
+ member :foo, String
7
+ member :bar, OR(nil, Fixnum)
8
+ end
9
+
10
+ class SubSth < Sth
11
+ member :hoge, OR(nil, 1..3)
12
+ end
13
+
14
+ class SubSubSth < SubSth
15
+ member :rest, AND(/\d/, Symbol)
16
+ end
17
+
18
+ def test_inherit
19
+ assert_equal [*Sth.members, :hoge], SubSth.members
20
+ sth = Sth.new
21
+ substh = SubSth.new
22
+
23
+ assert_raises Validation::InvalidWritingError do
24
+ substh.bar = 'str'
25
+ end
26
+
27
+ assert_raises Validation::InvalidWritingError do
28
+ substh.hoge = 4
29
+ end
30
+
31
+ assert_raises NoMethodError do
32
+ sth.hoge = 3
33
+ end
34
+
35
+ assert_raises NoMethodError do
36
+ substh.rest = :a4
37
+ end
38
+
39
+ subsubsth = SubSubSth.new
40
+
41
+ assert_raises Validation::InvalidWritingError do
42
+ subsubsth.rest = 4
43
+ end
44
+
45
+ subsubsth.rest = :a4
46
+
47
+ assert_equal :a4, subsubsth[:rest]
48
+
49
+ assert_equal true, Sth.__send__(:closed?)
50
+ assert_equal false, SubSth.__send__(:closed?)
51
+ SubSth.__send__(:close)
52
+ assert_equal true, SubSth.__send__(:closed?)
53
+ assert_equal false, SubSubSth.__send__(:closed?)
54
+ SubSubSth.__send__(:close)
55
+ assert_equal true, SubSubSth.__send__(:closed?)
56
+ end
57
+
58
58
  end
@@ -1,13 +1,13 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_Class_Macro < Test::Unit::TestCase
4
-
5
- def test_add_members
6
- klass = Striuct.new :foo do
7
- add_members :aaa, 'bbb', :ccc
8
- end
9
-
10
- assert_equal [:foo, :aaa, :bbb, :ccc], klass.members
11
- end
12
-
13
- end
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_Macro < Test::Unit::TestCase
4
+
5
+ def test_add_members
6
+ klass = Striuct.new :foo do
7
+ add_members :aaa, 'bbb', :ccc
8
+ end
9
+
10
+ assert_equal [:foo, :aaa, :bbb, :ccc], klass.members
11
+ end
12
+
13
+ end
@@ -1,72 +1,72 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_Class_SafetyNaming < Test::Unit::TestCase
4
-
5
- def test_cname?
6
- klass = Striuct.new
7
- assert_same false, klass.cname?(Object)
8
- assert_same false, klass.cname?('m?')
9
- assert_same false, klass.cname?('__foo__')
10
- assert_same false, klass.cname?('a b')
11
- assert_same false, klass.cname?('object_id')
12
- assert_same false, klass.cname?('to_ary')
13
- assert_same true, klass.cname?('foo')
14
- klass.__send__ :protect_level, :warning
15
- assert_same false, klass.cname?('m?')
16
- assert_same false, klass.cname?('__foo__')
17
- assert_same false, klass.cname?('a b')
18
- assert_same false, klass.cname?('object_id')
19
- assert_same false, klass.cname?('to_ary')
20
- assert_same true, klass.cname?('foo')
21
- klass.__send__ :protect_level, :struct
22
- assert_same true, klass.cname?('m?')
23
- assert_same true, klass.cname?('__foo__')
24
- assert_same true, klass.cname?('a b')
25
- assert_same true, klass.cname?('object_id')
26
- assert_same true, klass.cname?('to_ary')
27
- assert_same true, klass.cname?('foo')
28
- end
29
-
30
- def test_protect
31
- klass = Striuct.new
32
- assert_raises NameError do
33
- klass.class_eval do
34
- member ''
35
- end
36
- end
37
-
38
- assert_raises NameError do
39
- klass.class_eval do
40
- member :'a b'
41
- end
42
- end
43
-
44
- assert_raises NameError do
45
- klass.class_eval do
46
- member :'__send__'
47
- end
48
- end
49
-
50
- assert_raises NameError do
51
- klass.class_eval do
52
- member :'__foo__'
53
- end
54
- end
55
-
56
- assert_raises NameError do
57
- klass.class_eval do
58
- member :'m?'
59
- end
60
- end
61
-
62
- assert_same false, klass.member?('m?')
63
-
64
- klass.class_eval do
65
- protect_level :struct
66
- member :'m?'
67
- end
68
-
69
- assert_same true, klass.member?('m?')
70
- end
71
-
72
- end
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_SafetyNaming < Test::Unit::TestCase
4
+
5
+ def test_cname?
6
+ klass = Striuct.new
7
+ assert_same false, klass.cname?(Object)
8
+ assert_same false, klass.cname?('m?')
9
+ assert_same false, klass.cname?('__foo__')
10
+ assert_same false, klass.cname?('a b')
11
+ assert_same false, klass.cname?('object_id')
12
+ assert_same false, klass.cname?('to_ary')
13
+ assert_same true, klass.cname?('foo')
14
+ klass.__send__ :protect_level, :warning
15
+ assert_same false, klass.cname?('m?')
16
+ assert_same false, klass.cname?('__foo__')
17
+ assert_same false, klass.cname?('a b')
18
+ assert_same false, klass.cname?('object_id')
19
+ assert_same false, klass.cname?('to_ary')
20
+ assert_same true, klass.cname?('foo')
21
+ klass.__send__ :protect_level, :struct
22
+ assert_same true, klass.cname?('m?')
23
+ assert_same true, klass.cname?('__foo__')
24
+ assert_same true, klass.cname?('a b')
25
+ assert_same true, klass.cname?('object_id')
26
+ assert_same true, klass.cname?('to_ary')
27
+ assert_same true, klass.cname?('foo')
28
+ end
29
+
30
+ def test_protect
31
+ klass = Striuct.new
32
+ assert_raises NameError do
33
+ klass.class_eval do
34
+ member ''
35
+ end
36
+ end
37
+
38
+ assert_raises NameError do
39
+ klass.class_eval do
40
+ member :'a b'
41
+ end
42
+ end
43
+
44
+ assert_raises NameError do
45
+ klass.class_eval do
46
+ member :'__send__'
47
+ end
48
+ end
49
+
50
+ assert_raises NameError do
51
+ klass.class_eval do
52
+ member :'__foo__'
53
+ end
54
+ end
55
+
56
+ assert_raises NameError do
57
+ klass.class_eval do
58
+ member :'m?'
59
+ end
60
+ end
61
+
62
+ assert_same false, klass.member?('m?')
63
+
64
+ klass.class_eval do
65
+ protect_level :struct
66
+ member :'m?'
67
+ end
68
+
69
+ assert_same true, klass.member?('m?')
70
+ end
71
+
72
+ end
@@ -1,26 +1,26 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_Class_Validation < Test::Unit::TestCase
4
-
5
- class User < Striuct.new
6
- member :id, Integer
7
- member :last_name, /\A\w+\z/
8
- member :family_name, /\A\w+\z/
9
- member :address, /\A((\w+) ?)+\z/
10
- member :age, ->age{(20..140).include? age}
11
- end
12
-
13
- def test_restrict?
14
- klass = Striuct.new :foo do
15
- member :var, //
16
- member :hoge
17
- member :moge, nil
18
- end
19
-
20
- assert_equal false, klass.restrict?(:foo)
21
- assert_equal true, klass.restrict?(:var)
22
- assert_equal false, klass.restrict?(:hoge)
23
- assert_equal true, klass.restrict?(:moge)
24
- end
25
-
26
- end
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_Validation < Test::Unit::TestCase
4
+
5
+ class User < Striuct.new
6
+ member :id, Integer
7
+ member :last_name, /\A\w+\z/
8
+ member :family_name, /\A\w+\z/
9
+ member :address, /\A((\w+) ?)+\z/
10
+ member :age, ->age{(20..140).include? age}
11
+ end
12
+
13
+ def test_restrict?
14
+ klass = Striuct.new :foo do
15
+ member :var, //
16
+ member :hoge
17
+ member :moge, nil
18
+ end
19
+
20
+ assert_equal false, klass.restrict?(:foo)
21
+ assert_equal true, klass.restrict?(:var)
22
+ assert_equal false, klass.restrict?(:hoge)
23
+ assert_equal true, klass.restrict?(:moge)
24
+ end
25
+
26
+ end
@@ -1,54 +1,54 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_AliasMember < Test::Unit::TestCase
4
-
5
- class Sth < Striuct.new
6
- member :foo, String
7
-
8
- member :bar, Integer do |v|
9
- v
10
- end
11
-
12
- member :hoge, Symbol
13
- default :hoge, :'Z'
14
- alias_member :abc, :bar
15
- default :abc, 8
16
- end
17
-
18
- def test_alias_member
19
- sth = Sth.new 'A'
20
- assert_equal [:foo, :bar, :hoge], sth.members
21
- assert_equal [:foo, :bar, :hoge], sth.autonyms
22
- assert_equal({abc: :bar}, sth.aliases)
23
- assert_equal [:foo, :bar, :hoge, :abc], sth.all_members
24
-
25
- assert_equal 8, sth[:abc]
26
- adjuster = Sth.__send__(:adjuster_for, :abc)
27
- assert_kind_of Proc, adjuster
28
- assert_same adjuster, Sth.__send__(:adjuster_for, :bar)
29
- assert_equal 8, sth.abc
30
- sth.abc = 5
31
- assert_equal 5, sth.bar
32
- sth[:abc] = 6
33
- assert_equal 6, sth.bar
34
-
35
- assert_raises Validation::InvalidWritingError do
36
- sth[:abc] = 'a'
37
- end
38
-
39
- assert_raises Validation::InvalidWritingError do
40
- sth.abc = 'a'
41
- end
42
-
43
- assert_raises Validation::InvalidWritingError do
44
- sth.bar = 'a'
45
- end
46
-
47
- assert_raises ArgumentError do
48
- Sth.class_eval do
49
- member :abc
50
- end
51
- end
52
- end
53
-
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_AliasMember < Test::Unit::TestCase
4
+
5
+ class Sth < Striuct.new
6
+ member :foo, String
7
+
8
+ member :bar, Integer do |v|
9
+ v
10
+ end
11
+
12
+ member :hoge, Symbol
13
+ default :hoge, :'Z'
14
+ alias_member :abc, :bar
15
+ default :abc, 8
16
+ end
17
+
18
+ def test_alias_member
19
+ sth = Sth.new 'A'
20
+ assert_equal [:foo, :bar, :hoge], sth.members
21
+ assert_equal [:foo, :bar, :hoge], sth.autonyms
22
+ assert_equal({abc: :bar}, sth.aliases)
23
+ assert_equal [:foo, :bar, :hoge, :abc], sth.all_members
24
+
25
+ assert_equal 8, sth[:abc]
26
+ adjuster = Sth.__send__(:adjuster_for, :abc)
27
+ assert_kind_of Proc, adjuster
28
+ assert_same adjuster, Sth.__send__(:adjuster_for, :bar)
29
+ assert_equal 8, sth.abc
30
+ sth.abc = 5
31
+ assert_equal 5, sth.bar
32
+ sth[:abc] = 6
33
+ assert_equal 6, sth.bar
34
+
35
+ assert_raises Validation::InvalidWritingError do
36
+ sth[:abc] = 'a'
37
+ end
38
+
39
+ assert_raises Validation::InvalidWritingError do
40
+ sth.abc = 'a'
41
+ end
42
+
43
+ assert_raises Validation::InvalidWritingError do
44
+ sth.bar = 'a'
45
+ end
46
+
47
+ assert_raises ArgumentError do
48
+ Sth.class_eval do
49
+ member :abc
50
+ end
51
+ end
52
+ end
53
+
54
54
  end
@@ -1,25 +1,61 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_to_Struct < Test::Unit::TestCase
4
-
5
- Sth = Striuct.define do
6
- member :name, String
7
- member :age, Integer
8
- end
9
-
10
- def test_to_struct_class
11
- klass = Sth.to_struct_class
12
- assert_equal 'Striuct::Structs::Sth', klass.to_s
13
- assert_same klass, Sth.to_struct_class
14
- assert_kind_of Struct, Sth.new.to_struct
15
- assert_kind_of Striuct::Structs::Sth, Sth.new.to_struct
16
-
17
- assert_raises RuntimeError do
18
- Striuct.new.new.to_struct
19
- end
20
-
21
- Striuct.new(:a, :b, :c).new.to_struct
22
- assert_equal 1, Striuct::Structs.constants.length
23
- end
24
-
25
- end
1
+ require_relative 'helper'
2
+
3
+ TopLevelSthForTest_to_Struct = Striuct.define do
4
+ member :name, String
5
+ member :age, Integer
6
+ end
7
+
8
+ class Test_Striuct_Subclass_to_Struct < Test::Unit::TestCase
9
+
10
+ NestedSth = Striuct.define do
11
+ member :name, String
12
+ member :age, Integer
13
+ end
14
+
15
+ def teardown
16
+ constants = Striuct::Structs.constants
17
+ constants.each do |cons|
18
+ Striuct::Structs.__send__ :remove_const, cons
19
+ end
20
+ end
21
+
22
+ alias_method :setup, :teardown
23
+
24
+ def test_raise
25
+ assert_raises RuntimeError do
26
+ Striuct.new.new.to_struct
27
+ end
28
+ end
29
+
30
+ def test_noname
31
+ assert_same 0, Striuct::Structs.constants.length
32
+ struct_cls = Striuct.new(:a, :b, :c).new.to_struct
33
+ assert_equal [:a, :b, :c], struct_cls.members
34
+ assert_same 0, Striuct::Structs.constants.length
35
+ end
36
+
37
+ def test_to_nested_struct
38
+ assert_same 0, Striuct::Structs.constants.length
39
+ struct_cls = NestedSth.to_struct_class
40
+ assert_same Struct, struct_cls.superclass
41
+ assert_equal [:name, :age], struct_cls.members
42
+ assert_same 1, Striuct::Structs.constants.length
43
+ assert_equal 'Striuct::Structs::NestedSth', struct_cls.name
44
+ assert_same struct_cls, NestedSth.to_struct_class
45
+ assert_kind_of Struct, NestedSth.new.to_struct
46
+ assert_instance_of Striuct::Structs::NestedSth, NestedSth.new.to_struct
47
+ end
48
+
49
+ def test_to_toplevel_struct
50
+ assert_same 0, Striuct::Structs.constants.length
51
+ struct_cls = TopLevelSthForTest_to_Struct.to_struct_class
52
+ assert_same Struct, struct_cls.superclass
53
+ assert_equal [:name, :age], struct_cls.members
54
+ assert_same 1, Striuct::Structs.constants.length
55
+ assert_equal 'Striuct::Structs::TopLevelSthForTest_to_Struct', struct_cls.name
56
+ assert_same struct_cls, TopLevelSthForTest_to_Struct.to_struct_class
57
+ assert_kind_of Struct, TopLevelSthForTest_to_Struct.new.to_struct
58
+ assert_instance_of Striuct::Structs::TopLevelSthForTest_to_Struct, TopLevelSthForTest_to_Struct.new.to_struct
59
+ end
60
+
61
+ end
@@ -0,0 +1,57 @@
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Validation_Util < Test::Unit::TestCase
4
+
5
+ ALWAYS_OCCUR_ERROR = ->_{raise Exception}
6
+ peep = nil
7
+
8
+ Foo = Striuct.define do
9
+ member :foo, nil
10
+ member :bar, ALWAYS_OCCUR_ERROR
11
+ member :hoge
12
+ peep = AND(String, /./)
13
+ member :some_str, peep
14
+ end
15
+
16
+ SOME_STR = peep
17
+
18
+ def test_predicate_restrict?
19
+ assert_same true, Foo.restrict?(:foo)
20
+ assert_same true, Foo.restrict?(:bar)
21
+ assert_same false, Foo.restrict?(:hoge)
22
+ assert_same true, Foo.new.restrict?(:foo)
23
+ assert_same true, Foo.new.restrict?(:bar)
24
+ assert_same false, Foo.new.restrict?(:hoge)
25
+ end
26
+
27
+ def test_predicate_has_condition?
28
+ assert_same true, Foo.has_condition?(:foo)
29
+ assert_same true, Foo.has_condition?(:bar)
30
+ assert_same false, Foo.has_condition?(:hoge)
31
+ assert_same true, Foo.new.has_condition?(:foo)
32
+ assert_same true, Foo.new.has_condition?(:bar)
33
+ assert_same false, Foo.new.has_condition?(:hoge)
34
+ end
35
+
36
+ def test_predicate_instance_sufficient?
37
+ foo = Foo.new
38
+ assert_same true, foo.sufficient?(:foo)
39
+ assert_same false, foo.sufficient?(:bar)
40
+ assert_same true, foo.sufficient?(:hoge)
41
+ assert_same false, foo.sufficient?(:some_str)
42
+ foo.some_str = ':)'
43
+ assert_same true, foo.sufficient?(:some_str)
44
+ foo.some_str.clear
45
+ assert_same false, foo.sufficient?(:some_str)
46
+ end
47
+
48
+ def test_condition_for
49
+ foo = Foo.new
50
+ assert_same nil, foo.condition_for(:foo)
51
+ assert_same ALWAYS_OCCUR_ERROR, foo.condition_for(:bar)
52
+ assert_same nil, foo.condition_for(:hoge)
53
+ assert_same SOME_STR, foo.condition_for(:some_str)
54
+ end
55
+
56
+
57
+ end