Even more JavaField features fixed.
[jruby.git] / spec / java_integration / reflection / field_spec.rb
blob4a06efe28e237323dcd863ea91d749e2d7029560
1 require File.dirname(__FILE__) + "/../spec_helper"
3 import java.lang.reflect.Field
4 import "java_integration.fixtures.PrivateField"
5 import "java_integration.fixtures.ProtectedField"
6 import "java_integration.fixtures.PublicField"
7 import "java_integration.fixtures.PackageField"
9 describe "A JavaClass" do
10   it "should provide a look up for fields using a Java formatted name" do
11     PrivateField.java_class.declared_field(:strField).should_not == nil
12     ProtectedField.java_class.declared_field(:strField).should_not == nil
13     PublicField.java_class.declared_field(:strField).should_not == nil
14     PackageField.java_class.declared_field(:strField).should_not == nil
15   end
17   it "should provide a look up for a fields using a Ruby formatted name" do
18     PrivateField.java_class.declared_field(:str_field).should_not == nil
19     ProtectedField.java_class.declared_field(:str_field).should_not == nil
20     PublicField.java_class.declared_field(:str_field).should_not == nil
21     PackageField.java_class.declared_field(:str_field).should_not == nil
22   end
23 end
25 describe "A JavaField" do
26   describe "given a partially unwrapped Java object" do
27     describe "with a private field" do
28       before(:each) do
29         @obj = PrivateField.new
30         @field = PrivateField.java_class.declared_field :strField
31         @field.accessible = true
32       end
34       it "should set Ruby values" do
35         lambda { @field.set_value @obj.java_object, "42" }.should_not raise_error
36         lambda { @field.set_value @obj.java_object, nil }.should_not raise_error
37       end
39       it "should set Java values" do
40         lambda { @field.set_value @obj.java_object, Java.ruby_to_java("42") }.should_not raise_error
41         lambda { @field.set_value @obj.java_object, Java.ruby_to_java(nil) }.should_not raise_error
42       end
44       it "should get Ruby values" do 
45         @field.set_value @obj.java_object, "42"
46         @field.value(@obj.java_object).should == "42"
48         @field.set_value @obj.java_object, nil
49         @field.value(@obj.java_object).should be_nil
50       end
51     end
52     
53     describe "with a protected field" do
54       before(:each) do
55         @obj = ProtectedField.new
56         @field = ProtectedField.java_class.declared_field :strField
57         @field.accessible = true
58       end
60       it "should set Ruby values" do
61         lambda { @field.set_value @obj.java_object, "42" }.should_not raise_error
62         lambda { @field.set_value @obj.java_object, nil }.should_not raise_error
63       end
65       it "should set Java values" do
66         lambda { @field.set_value @obj.java_object, Java.ruby_to_java("42") }.should_not raise_error
67         lambda { @field.set_value @obj.java_object, Java.ruby_to_java(nil) }.should_not raise_error
68       end
70       it "should get Ruby values" do 
71         @field.set_value @obj.java_object, "42"
72         @field.value(@obj.java_object).should == "42"
74         @field.set_value @obj.java_object, nil
75         @field.value(@obj.java_object).should be_nil
76       end
77     end
78     
79     describe "with a public field" do
80       before(:each) do
81         @obj = PublicField.new
82         @field = PublicField.java_class.declared_field :strField
83       end
85       it "should set Ruby values" do
86         lambda { @field.set_value @obj.java_object, "42" }.should_not raise_error
87         lambda { @field.set_value @obj.java_object, nil }.should_not raise_error
88       end
90       it "should set Java values" do
91         lambda { @field.set_value @obj.java_object, Java.ruby_to_java("42") }.should_not raise_error
92         lambda { @field.set_value @obj.java_object, Java.ruby_to_java(nil) }.should_not raise_error
93       end
96       it "should get Ruby values" do 
97         @field.set_value @obj.java_object, "42"
98         @field.value(@obj.java_object).should == "42"
100         @field.set_value @obj.java_object, nil
101         @field.value(@obj.java_object).should be_nil
102       end
103     end
104     
105     describe "with a package field" do
106       before(:each) do
107         @obj = PackageField.new
108         @field = PackageField.java_class.declared_field :strField
109         @field.accessible = true
110       end
112       it "should set Ruby values" do
113         lambda { @field.set_value @obj.java_object, "42" }.should_not raise_error
114         lambda { @field.set_value @obj.java_object, nil }.should_not raise_error
115       end
117       it "should set Java values" do
118         lambda { @field.set_value @obj.java_object, Java.ruby_to_java("42") }.should_not raise_error
119         lambda { @field.set_value @obj.java_object, Java.ruby_to_java(nil) }.should_not raise_error
120       end
122       it "should get Ruby values" do 
123         @field.set_value @obj.java_object, "42"
124         @field.value(@obj.java_object).should == "42"
126         @field.set_value @obj.java_object, nil
127         @field.value(@obj.java_object).should be_nil
128       end
129     end
130   end
131   
132   describe "given a Ruby-wrapped Java object" do
133     describe "with a private field" do
134       before(:each) do
135         @obj = PrivateField.new
136         @field = PrivateField.java_class.declared_field :strField
137         @field.accessible = true
138       end
140       it "should set Ruby values" do
141         lambda { @field.set_value @obj, "42" }.should_not raise_error
142         lambda { @field.set_value @obj, nil }.should_not raise_error
143       end
145       it "should set Java values" do
146         lambda { @field.set_value @obj, Java.ruby_to_java("42") }.should_not raise_error
147         lambda { @field.set_value @obj, Java.ruby_to_java(nil) }.should_not raise_error
148       end
150       it "should get Ruby values" do 
151         @field.set_value @obj, "42"
152         @field.value(@obj).should == "42"
154         @field.set_value @obj, nil
155         @field.value(@obj).should be_nil
156       end
157     end
158     
159     describe "with a protected field" do
160       before(:each) do
161         @obj = ProtectedField.new
162         @field = ProtectedField.java_class.declared_field :strField
163         @field.accessible = true
164       end
166       it "should set Ruby values" do
167         lambda { @field.set_value @obj, "42" }.should_not raise_error
168         lambda { @field.set_value @obj, nil }.should_not raise_error
169       end
171       it "should set Java values" do
172         lambda { @field.set_value @obj, Java.ruby_to_java("42") }.should_not raise_error
173         lambda { @field.set_value @obj, Java.ruby_to_java(nil) }.should_not raise_error
174       end
176       it "should get Ruby values" do 
177         @field.set_value @obj, "42"
178         @field.value(@obj).should == "42"
180         @field.set_value @obj, nil
181         @field.value(@obj).should be_nil
182       end
183     end
184     
185     describe "with a public field" do
186       before(:each) do
187         @obj = PublicField.new
188         @field = PublicField.java_class.declared_field :strField
189       end
191       it "should set Ruby values" do
192         lambda { @field.set_value @obj, "42" }.should_not raise_error
193         lambda { @field.set_value @obj, nil }.should_not raise_error
194       end
196       it "should set Java values" do
197         lambda { @field.set_value @obj, Java.ruby_to_java("42") }.should_not raise_error
198         lambda { @field.set_value @obj, Java.ruby_to_java(nil) }.should_not raise_error
199       end
201       it "should get Ruby values" do 
202         @field.set_value @obj, "42"
203         @field.value(@obj).should == "42"
205         @field.set_value @obj, nil
206         @field.value(@obj).should be_nil
207       end
208     end
209     
210     describe "with a package field" do
211       before(:each) do
212         @obj = PackageField.new
213         @field = PackageField.java_class.declared_field :strField
214         @field.accessible = true
215       end
217       it "should set Ruby values" do
218         lambda { @field.set_value @obj, "42" }.should_not raise_error
219         lambda { @field.set_value @obj, nil }.should_not raise_error
220       end
222       it "should set Java values" do
223         lambda { @field.set_value @obj, Java.ruby_to_java("42") }.should_not raise_error
224         lambda { @field.set_value @obj, Java.ruby_to_java(nil) }.should_not raise_error
225       end
227       it "should get Ruby values" do 
228         @field.set_value @obj, "42"
229         @field.value(@obj).should == "42"
231         @field.set_value @obj, nil
232         @field.value(@obj).should be_nil
233       end
234     end
235   end