Spurious "protected method [...] called for [...]" error with rspec-mocks
-------------------------------------------------------------------------
Key: JRUBY-5944
URL: https://jira.codehaus.org/browse/JRUBY-5944
Project: JRuby
Issue Type: Bug
Affects Versions: JRuby 1.6.3
Environment: jruby 1.6.3 (ruby-1.8.7-p330) (2011-07-07 965162f)
(OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]
Reporter: Stephen Lewis
Assignee: Thomas E Enebo
Attachments: test_protected_behaviour.rb
$ rvm use system
Now using system ruby.
$ ruby -v
ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]
$ rspec test_protected_behaviour.rb
.
Finished in 0.00055 seconds
1 example, 0 failures
$ rvm use jruby-1.6.3
Using /home/stephenl/.rvm/gems/jruby-1.6.3
$ ruby -v
jruby 1.6.3 (ruby-1.8.7-p330) (2011-07-07 965162f) (OpenJDK 64-Bit Server VM
1.6.0_22) [linux-amd64-java]
$ rspec test_protected_behaviour.rb
F
Failures:
1) A should let me say hello
Failure/Error: new_instance.say_hello_protected
NoMethodError:
protected method `say_hello_protected' called for #<A:0x15a4eb56>
# ./test_protected_behaviour.rb:8:in `say_hello_public'
# ./test_protected_behaviour.rb:28:in `(root)'
# org/jruby/RubyKernel.java:2061:in `instance_eval'
# org/jruby/RubyArray.java:2336:in `collect'
# org/jruby/RubyArray.java:2336:in `collect'
Finished in 0.017 seconds
1 example, 1 failure
Failed examples:
rspec ./test_protected_behaviour.rb:24 # A should let me say hello
Removing the "require 'yaml'" line in the attached file causes the test to
pass. This is because RSpec::Mocks::Serialization#fix_for(...) only extends its
target with RSpec::Mocks::Serialization::YAML if ::YAML is visible to it.
It looks like this inclusion is confusing
DynamicMethod.calculateProtectedClass(), I suspect because the mock (against
which the call to say_hello_protected is made) is a singleton, and the call to
cls.getSuperClass() is returning RSpec::Mocks::Serialization::YAML rather than
'A'. My understanding of rspec-mocks doesn't extend far enough for me to
understand exactly why, though.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email