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.
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