striuct 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- 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,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
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
Striuct.
|
19
|
-
end
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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
|