safer 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/safer.rb CHANGED
@@ -15,5 +15,5 @@
15
15
  class Safer
16
16
  ##
17
17
  # Current release of Safer.
18
- VERSION = "0.3.1"
18
+ VERSION = "0.4.0"
19
19
  end
@@ -8,40 +8,40 @@ class TC_SaferHashProtocol < Test::Unit::TestCase
8
8
  @all_hash = { :foo => nil, :bar => nil, :baz => nil }
9
9
  @fail_hash = { :blubby => nil }
10
10
  @has_key = SHP::HasKey.create(*@all_hash.keys)
11
+
12
+ @any = SHP::Any.new(*@has_key)
13
+ @not_any = SHP::Not.new(@any)
14
+ @all = SHP::All.new(*@has_key)
15
+ @not_all = SHP::Not.new(@all)
16
+ @only = SHP::Only.new(@any)
17
+ @all_plus = @all_hash.merge(@fail_hash)
11
18
  end
12
19
  def teardown
13
20
  end
14
21
 
15
- def test_any
16
- any = SHP::Any.new(*@has_key)
17
- not_any = SHP::Not.new(any)
18
- assert(any === @any_hash)
19
- assert(! (not_any === @any_hash))
20
- assert(any === @all_hash)
21
- assert(! (not_any === @all_hash))
22
- assert(! (any === @fail_hash))
23
- assert(not_any === @fail_hash)
22
+ def test_anyFromAllKeysShouldMatchAllButFailHash
23
+ assert(@any === @any_hash)
24
+ assert(! (@not_any === @any_hash))
25
+ assert(@any === @all_hash)
26
+ assert(! (@not_any === @all_hash))
27
+ assert(! (@any === @fail_hash))
28
+ assert(@not_any === @fail_hash)
24
29
  end
25
30
 
26
- def test_all
27
- all = SHP::All.new(*@has_key)
28
- not_all = SHP::Not.new(all)
29
-
30
- assert(! (all === @any_hash))
31
- assert(not_all === @any_hash)
32
- assert(all === @all_hash)
33
- assert(! (not_all === @all_hash))
34
- assert(! (all === @fail_hash))
35
- assert(not_all === @fail_hash)
31
+ def test_allFromAllKeysShouldMatchOnlyAllHash
32
+ assert(! (@all === @any_hash))
33
+ assert(@not_all === @any_hash)
34
+ assert(@all === @all_hash)
35
+ assert(! (@not_all === @all_hash))
36
+ assert(! (@all === @fail_hash))
37
+ assert(@not_all === @fail_hash)
36
38
  end
37
39
 
38
- def test_only
39
- any = SHP::Any.new(*@has_key)
40
- only = SHP::Only.new(any)
41
- all_plus = @all_hash.merge(@fail_hash)
42
- assert(only === @all_hash)
43
- assert(any === @all_hash)
44
- assert(! (only === all_plus))
45
- assert(any === all_plus)
40
+ def test_onlyAnyFromAllKeysShouldMatchAll
41
+ assert(@only === @all_hash)
42
+ end
43
+ def test_onlyAnyFromAllKeysShouldFailWithExtraKey
44
+ assert(! (@only === @all_plus))
45
+ assert(@any === @all_plus)
46
46
  end
47
47
  end
@@ -1,58 +1,42 @@
1
1
  require 'safer/ivar'
2
2
  require 'test/unit'
3
3
 
4
- module Root
5
- class Test
6
- class Instance
7
- Safer::IVar.instance_variable(self, :instance)
8
- end
9
- class Reader
10
- Safer::IVar.instance_variable(self, :instance)
11
- Safer::IVar.export_reader(self, :instance)
12
- end
13
- class Writer
14
- Safer::IVar.instance_variable(self, :instance)
15
- Safer::IVar.export_writer(self, :instance)
16
- end
17
- class Accessor
18
- Safer::IVar.instance_variable(self, :instance)
19
- Safer::IVar.export_accessor(self, :instance)
4
+ class TC_SaferIVar < Test::Unit::TestCase
5
+ module Root
6
+ class Test
7
+ class Instance
8
+ Safer::IVar.instance_variable(self, :instance)
9
+ end
10
+ class Reader
11
+ Safer::IVar.instance_variable(self, :instance)
12
+ Safer::IVar.export_reader(self, :instance)
13
+ end
14
+ class Writer
15
+ Safer::IVar.instance_variable(self, :instance)
16
+ Safer::IVar.export_writer(self, :instance)
17
+ end
18
+ class Accessor
19
+ Safer::IVar.instance_variable(self, :instance)
20
+ Safer::IVar.export_accessor(self, :instance)
21
+ end
20
22
  end
21
23
  end
22
- end
23
24
 
24
- class TC_SaferIVar < Test::Unit::TestCase
25
25
  def setup
26
26
  end
27
27
  def teardown
28
28
  end
29
29
 
30
30
  def assert_no_respond_to(object, method, message="")
31
- _wrap_assertion do
32
- full_message =
33
- build_message(
34
- nil,
35
- "<?>\ngiven as the method name argument to #assert_no_respond_to " +
36
- "must be a Symbol or #respond_to\\?(:to_str).",
37
- method
38
- )
39
-
40
- assert_block(full_message) do
41
- method.kind_of?(Symbol) || method.respond_to?(:to_str)
42
- end
43
- full_message =
44
- build_message(
45
- message, "<?>\nof type <?>\nnot expected to respond_to\\\\?<?>.\n",
46
- object, object.class, method
47
- )
48
- assert_block(full_message) { not object.respond_to?(method) }
49
- end
31
+ assert method.kind_of?(Symbol)
32
+ msg = "#{object} of type #{object.class} not expected to respond_to? #{method}\n#{message}"
33
+ assert((not object.respond_to?(method)), msg)
50
34
  end
51
35
 
52
36
  def test_class_symbol_prefix
53
- assert_equal("root", Safer::IVar.class_symbol_prefix(Root))
54
- assert_equal("root_test", Safer::IVar.class_symbol_prefix(Root::Test))
55
- assert_equal("root_test_instance", Safer::IVar.class_symbol_prefix(Root::Test::Instance))
37
+ assert_equal("tc_saferivar_root", Safer::IVar.class_symbol_prefix(Root))
38
+ assert_equal("tc_saferivar_root_test", Safer::IVar.class_symbol_prefix(Root::Test))
39
+ assert_equal("tc_saferivar_root_test_instance", Safer::IVar.class_symbol_prefix(Root::Test::Instance))
56
40
  k = Root.class_eval("$k = Class.new(Root::Test::Instance)")
57
41
  assert_same(nil, Safer::IVar.class_symbol_prefix(k))
58
42
  b = k.class_eval("class Blah ; end ; Blah")
@@ -73,7 +57,7 @@ class TC_SaferIVar < Test::Unit::TestCase
73
57
  end
74
58
  end
75
59
  ti = Root::Test::Instance.new
76
- assert_respond_to(ti, :root_test_instance__instance)
60
+ assert_respond_to(ti, :tc_saferivar_root_test_instance__instance)
77
61
  test_accessors.call(ti, false, false)
78
62
  tr = Root::Test::Reader.new
79
63
  test_accessors.call(tr, true, false)
@@ -0,0 +1,77 @@
1
+ require 'safer/ivar'
2
+ require 'test/unit'
3
+
4
+ class TC_SaferIVarRun < Test::Unit::TestCase
5
+ module Root
6
+ class Test
7
+ class Instance
8
+ Safer::IVar.run(self) do |iv|
9
+ iv.ivar(:instance)
10
+ end
11
+ end
12
+ class Reader
13
+ Safer::IVar.run(self) do |iv|
14
+ iv.ivar(:instance)
15
+ iv.reader(:instance)
16
+ end
17
+ end
18
+ class Writer
19
+ Safer::IVar.run(self) do |iv|
20
+ iv.ivar(:instance)
21
+ iv.writer(:instance)
22
+ end
23
+ end
24
+ class Accessor
25
+ Safer::IVar.run(self) do |iv|
26
+ iv.ivar(:instance)
27
+ iv.accessor(:instance)
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ def setup
34
+ end
35
+ def teardown
36
+ end
37
+
38
+ def assert_no_respond_to(object, method, message="")
39
+ assert method.kind_of?(Symbol)
40
+ msg = "#{object} of type #{object.class} not expected to respond_to? #{method}\n#{message}"
41
+ assert((not object.respond_to?(method)), msg)
42
+ end
43
+
44
+ def test_class_symbol_prefix
45
+ assert_equal("tc_saferivarrun_root", Safer::IVar.class_symbol_prefix(Root))
46
+ assert_equal("tc_saferivarrun_root_test", Safer::IVar.class_symbol_prefix(Root::Test))
47
+ assert_equal("tc_saferivarrun_root_test_instance", Safer::IVar.class_symbol_prefix(Root::Test::Instance))
48
+ k = Root.class_eval("$k = Class.new(Root::Test::Instance)")
49
+ assert_same(nil, Safer::IVar.class_symbol_prefix(k))
50
+ b = k.class_eval("class Blah ; end ; Blah")
51
+ assert_equal("blah", Safer::IVar.class_symbol_prefix(b))
52
+ end
53
+
54
+ def test_instance
55
+ test_accessors = proc do |obj, expectRead, expectWrite|
56
+ if expectRead
57
+ assert_respond_to(obj, :instance)
58
+ else
59
+ assert_no_respond_to(obj, :instance)
60
+ end
61
+ if expectWrite
62
+ assert_respond_to(obj, :instance=)
63
+ else
64
+ assert_no_respond_to(obj, :instance=)
65
+ end
66
+ end
67
+ ti = Root::Test::Instance.new
68
+ assert_respond_to(ti, :tc_saferivarrun_root_test_instance__instance)
69
+ test_accessors.call(ti, false, false)
70
+ tr = Root::Test::Reader.new
71
+ test_accessors.call(tr, true, false)
72
+ tw = Root::Test::Writer.new
73
+ test_accessors.call(tw, false, true)
74
+ ta = Root::Test::Accessor.new
75
+ test_accessors.call(ta, true, true)
76
+ end
77
+ end
@@ -0,0 +1,36 @@
1
+ require 'test/unit'
2
+ require 'safer/ivarfactory'
3
+
4
+ class TC_SaferIVarFactory < Test::Unit::TestCase
5
+ module Root
6
+ class Test
7
+ class Instance
8
+ end
9
+ class Reader
10
+ end
11
+ class Writer
12
+ end
13
+ class Accessor
14
+ end
15
+ end
16
+ end
17
+
18
+ def setup
19
+ end
20
+ def teardown
21
+ end
22
+
23
+ def test_fullPrefix
24
+ assert_equal(
25
+ Safer::IVarFactory::Prefix::Full.class_symbol_prefix(Root::Test),
26
+ 'tc_saferivarfactory_root_test')
27
+ end
28
+ def test_lastPrefix
29
+ assert_equal(
30
+ Safer::IVarFactory::Prefix::Last.class_symbol_prefix(Root::Test),
31
+ 'test')
32
+ assert_equal(
33
+ Safer::IVarFactory::Prefix::Last.class_symbol_prefix(Root),
34
+ 'root')
35
+ end
36
+ end
@@ -12,7 +12,9 @@ module ArityModule
12
12
  end
13
13
  def arity_2_any(one, two, *args)
14
14
  end
15
- METHODS = %w(empty 1 2 any 2_any).map do |suffix| "arity_#{suffix}".to_sym end
15
+ METHODS = self.instance_methods.find_all do |meth|
16
+ /^arity_/ === meth.to_s
17
+ end
16
18
  end
17
19
 
18
20
  class TestArityClass
@@ -78,7 +80,9 @@ class TC_SaferProtocol < Test::Unit::TestCase
78
80
  assert_equal(@both_protocol.class_signature, @class_protocol.class_signature)
79
81
  assert_equal(@both_protocol.instance_signature, @instance_protocol.instance_signature)
80
82
  assert_equal(@class_protocol.class_signature, @instance_protocol.instance_signature)
81
- arity_methods = ArityModule::METHODS.map do |meth| meth.to_s end.sort
83
+ arity_methods = ArityModule.instance_methods.find_all do |meth|
84
+ ArityModule::METHODS.include?(meth)
85
+ end.sort
82
86
  assert_equal(@class_protocol.class_signature.table.keys.sort, arity_methods)
83
87
  end
84
88
 
@@ -109,7 +113,8 @@ class TC_SaferProtocol < Test::Unit::TestCase
109
113
  assert_same(methods[:get_object].call(@error_instance), violations.error_object)
110
114
  assert_same(@instance_protocol, violations.protocol)
111
115
  assert_same(nil, violations.class_violations)
112
- assert_equal({ 'arity_empty' => 1 }, violations.instance_violations.table)
116
+ keysym = ArityModule::METHODS.find do |name| name.to_s == 'arity_empty' end
117
+ assert_equal({ keysym => 1 }, violations.instance_violations.table)
113
118
  begin
114
119
  @instance_protocol.send(methods[:conforms], methods[:get_object].call(@error_instance))
115
120
  flunk("Expected exception.")
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safer
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 1
10
- version: 0.3.1
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Aidan Cully
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-21 00:00:00 -05:00
18
+ date: 2011-10-29 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -73,12 +73,11 @@ extensions: []
73
73
  extra_rdoc_files:
74
74
  - History.txt
75
75
  - Manifest.txt
76
- - README.txt
77
76
  files:
78
77
  - .autotest
79
78
  - History.txt
80
79
  - Manifest.txt
81
- - README.txt
80
+ - README.rdoc
82
81
  - Rakefile
83
82
  - lib/safer.rb
84
83
  - lib/safer/ivar.rb
@@ -87,6 +86,8 @@ files:
87
86
  - test/test_safer_ivar.rb
88
87
  - test/test_safer_protocol.rb
89
88
  - test/test_safer_hashprotocol.rb
89
+ - test/test_safer_ivar_run.rb
90
+ - test/test_safer_ivarfactory.rb
90
91
  has_rdoc: true
91
92
  homepage: http://safer.rubyforge.org
92
93
  licenses: []
@@ -94,7 +95,7 @@ licenses: []
94
95
  post_install_message:
95
96
  rdoc_options:
96
97
  - --main
97
- - README.txt
98
+ - README.rdoc
98
99
  require_paths:
99
100
  - lib
100
101
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -125,4 +126,6 @@ summary: Safer is an umbrella library, with components designed to make it simpl
125
126
  test_files:
126
127
  - test/test_safer_hashprotocol.rb
127
128
  - test/test_safer_ivar.rb
129
+ - test/test_safer_ivar_run.rb
130
+ - test/test_safer_ivarfactory.rb
128
131
  - test/test_safer_protocol.rb