[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
  • Mysql
  • Glassfish
  • Jruby
  • Rails
  • Nblogo
Terms of Use; Privacy Policy;
© 2010, Oracle Corporation and/or its affiliates
(revision 20120518.3c65429)
 
 
Close
loading
Please Confirm
Close