[jruby~main:93dcb708] add specs for synchronized classes
- From: MenTaLguY@kenai.com
- To: commits@jruby.kenai.com
- Subject: [jruby~main:93dcb708] add specs for synchronized classes
- Date: Sat, 27 Mar 2010 22:08:03 +0000
Project: jruby
Repository: main
Revision: 93dcb708f51da895918c36d51de994e2e4be1575
Author: MenTaLguY
Date: 2010-03-27 22:06:28 UTC
Link:
Log Message:
------------
add specs for synchronized classes
Revisions:
----------
93dcb708f51da895918c36d51de994e2e4be1575
Added Paths:
------------
spec/java_integration/addons/synchronized_class_spec.rb
Diffs:
------
diff --git a/spec/java_integration/addons/synchronized_class_spec.rb
b/spec/java_integration/addons/synchronized_class_spec.rb
new file mode 100644
index 0000000..a680e9c
--- /dev/null
+++ b/spec/java_integration/addons/synchronized_class_spec.rb
@@ -0,0 +1,68 @@
+require 'jruby'
+require 'jruby/synchronized'
+
+describe "JRuby::Synchronized" do
+ before(:each) do
+ @cls = Class.new do
+ include Spec::Matchers
+
+ def call_wait
+ JRuby.reference(self).wait(1)
+ end
+
+ def expect_synchronized
+ lambda { call_wait }.should_not raise_error
+ end
+
+ def expect_unsynchronized
+ lambda { call_wait }.should
raise_error(java.lang.IllegalMonitorStateException)
+ end
+ end
+ end
+
+ it "should make methods on instances of synchronized classes synchronized"
do
+ @cls.new.expect_unsynchronized
+ @cls.class_eval { include JRuby::Synchronized }
+ @cls.new.expect_synchronized
+ end
+
+ it "should also affect subclasses" do
+ subcls = Class.new(@cls)
+ subcls.new.expect_unsynchronized
+ subcls.class_eval { include JRuby::Synchronized }
+ subcls.new.expect_synchronized
+ end
+
+ it "should not affect superclasses" do
+ @cls.new.expect_unsynchronized
+ subcls = Class.new(@cls) { include JRuby::Synchronized }
+ @cls.new.expect_unsynchronized
+ end
+
+ it "should affect existing instances" do
+ instance = @cls.new
+ instance.expect_unsynchronized
+ @cls.class_eval { include JRuby::Synchronized }
+ instance.expect_synchronized
+ end
+
+ it "should affect existing subclass instances" do
+ subcls = Class.new(@cls)
+ instance = subcls.new
+ instance.expect_unsynchronized
+ @cls.class_eval { include JRuby::Synchronized }
+ instance.expect_synchronized
+ end
+
+ it "should work for singleton classes" do
+ instance = @cls.new
+ instance.expect_unsynchronized
+ instance.extend JRuby::Synchronized
+ instance.expect_synchronized
+ end
+
+ it "should be includable only in classes" do
+ mod = Module.new
+ lambda { mod.class_eval { include JRuby::Synchronized } }.should
raise_error(TypeError)
+ end
+end
|
[jruby~main:93dcb708] add specs for synchronized classes |
MenTaLguY | 03/27/2010 |





