rubypython 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,16 +2,20 @@ require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
3
  include TestConstants
4
4
  describe RubyPython::Conversion do
5
- include RubyPythonStartStop
6
5
 
7
6
  subject { RubyPython::Conversion }
8
7
 
9
8
  before do
9
+ RubyPython.start
10
10
  sys = RubyPython.import 'sys'
11
11
  sys.path.append './spec/python_helpers'
12
12
  @objects = RubyPython.import 'objects'
13
13
  end
14
14
 
15
+ after do
16
+ RubyPython.stop
17
+ end
18
+
15
19
  context "when converting from Python to Ruby" do
16
20
  [
17
21
  ["an int", "an int", AnInt],
@@ -24,13 +28,13 @@ describe RubyPython::Conversion do
24
28
  ["python False", "false", false],
25
29
  ["python None", "nil", nil]
26
30
  ].each do |py_type, rb_type, output|
27
- it "should convert #{py_type} to #{rb_type}" do
31
+ it "converts #{py_type} to #{rb_type}" do
28
32
  py_object_ptr = @objects.__send__(py_type.sub(' ', '_')).pObject.pointer
29
33
  subject.ptorObject(py_object_ptr).should == output
30
34
  end
31
35
  end
32
36
 
33
- it "should return an FFI::Pointer when it cannot convert" do
37
+ it "returns an FFI::Pointer when it cannot convert" do
34
38
  unconvertable = @objects.RubyPythonMockObject.pObject.pointer
35
39
  subject.ptorObject(unconvertable).should be_a_kind_of(FFI::Pointer)
36
40
  end
@@ -47,20 +51,24 @@ describe RubyPython::Conversion do
47
51
  ["a dict", "a hash", AConvertedHash],
48
52
  ["python True", "true", true],
49
53
  ["python False", "false", false],
50
- ["python None", "nil", nil]
51
- ].each do |py_type, rb_type, input|
54
+ ["python None", "nil", nil],
55
+ ["a function", "a proc", AProc, true]
56
+ ].each do |py_type, rb_type, input, no_compare|
52
57
 
53
- it "should convert #{rb_type} to #{py_type}" do
58
+ it "converts #{rb_type} to #{py_type}" do
54
59
  py_object_ptr = subject.rtopObject(input)
55
- output = @objects.__send__(rb_type.sub(' ', '_')).pObject.pointer
56
- RubyPython::Python.PyObject_Compare(py_object_ptr, output).should == 0
60
+ unless no_compare
61
+ output = @objects.__send__(rb_type.sub(' ', '_')).pObject.pointer
62
+ RubyPython::Python.PyObject_Compare(py_object_ptr, output).should == 0
63
+ end
57
64
  end
58
65
  end
59
66
 
60
- it "should raise an exception when it cannot convert" do
67
+ it "raises an exception when it cannot convert" do
61
68
  lambda { subject.rtopObject(Class) }.should raise_exception(subject::UnsupportedConversion)
62
69
  end
63
70
 
64
71
  end
65
72
 
73
+
66
74
  end
data/spec/legacy_spec.rb CHANGED
@@ -3,7 +3,19 @@ require File.dirname(__FILE__) + '/spec_helper.rb'
3
3
  include TestConstants
4
4
 
5
5
  describe 'RubyPython Legacy Mode Module' do
6
- include RubyPythonStartStop
6
+
7
+ before do
8
+ RubyPython.start
9
+ sys = RubyPython.import 'sys'
10
+ path = sys.path
11
+ path.push './spec/python_helpers'
12
+ sys.path = path
13
+ @objects = RubyPython.import 'objects'
14
+ end
15
+
16
+ after do
17
+ RubyPython.stop
18
+ end
7
19
 
8
20
  before :all do
9
21
  require 'rubypython/legacy'
@@ -14,9 +26,36 @@ describe 'RubyPython Legacy Mode Module' do
14
26
  end
15
27
 
16
28
  describe "when required" do
17
- it "should enable legacy mode" do
29
+ it "enables legacy mode" do
18
30
  RubyPython.legacy_mode.should == true
19
31
  end
32
+
33
+ [
34
+ ["an int", "an int", AnInt],
35
+ ["a float", "a float", AFloat],
36
+ ["a string", "a string", AString],
37
+ ["a list", "an array", AnArray],
38
+ ["a tuple", "an array", AnArray],
39
+ ["a dict", "a hash", AConvertedHash],
40
+ ["python True", "true", true],
41
+ ["python False", "false", false],
42
+ ["python None", "nil", nil]
43
+ ].each do |py_type, rb_type, output|
44
+ it "implicitly converts #{py_type} to #{rb_type}" do
45
+ @objects.__send__(py_type.sub(' ', '_')).should == output
46
+ end
47
+ end
48
+
49
+ [
50
+ ["proc", AProc],
51
+ ["method", AMethod]
52
+ ].each do |rb_type, rb_obj|
53
+ it "raises an exception if a #{rb_type} callback is supplied" do
54
+ lambda do
55
+ @objects.apply_callback(rb_obj, [1, 1])
56
+ end.should raise_exception(RubyPython::Conversion::UnsupportedConversion)
57
+ end
58
+ end
20
59
  end
21
60
 
22
61
  end
@@ -2,23 +2,30 @@ require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
3
  describe RubyPython::PyMainClass do
4
4
  include TestConstants
5
- include RubyPythonStartStop
5
+
6
+ before do
7
+ RubyPython.start
8
+ end
9
+
10
+ after do
11
+ RubyPython.stop
12
+ end
6
13
 
7
14
  subject { RubyPython::PyMain }
8
15
 
9
- it "should delegate to builtins" do
16
+ it "delegates to builtins" do
10
17
  subject.float(AnInt).rubify.should == AnInt.to_f
11
18
  end
12
19
 
13
- it "should handle block syntax" do
20
+ it "handles block syntax" do
14
21
  subject.float(AnInt) {|f| f.rubify*2}.should == (AnInt.to_f * 2)
15
22
  end
16
23
 
17
- it "should allow attribute access" do
24
+ it "allows attribute access" do
18
25
  subject.main.__name__.rubify.should == '__main__'
19
26
  end
20
27
 
21
- it "should allow global variable setting" do
28
+ it "allows global variable modification" do
22
29
  subject.x = 2
23
30
  subject.x.rubify.should == 2
24
31
  end
@@ -1,9 +1,16 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
3
  describe RubyPython::PyObject do
4
- include RubyPythonStartStop
5
4
  include TestConstants
6
5
 
6
+ before do
7
+ RubyPython.start
8
+ end
9
+
10
+ after do
11
+ RubyPython.start
12
+ end
13
+
7
14
  before do
8
15
  @string = RubyPython.import('string').pObject
9
16
  @urllib2 = RubyPython.import('urllib2').pObject
@@ -23,7 +30,7 @@ describe RubyPython::PyObject do
23
30
  ["a hash", AHash]
24
31
  ].each do |title, obj|
25
32
 
26
- it "should wrap #{title}" do
33
+ it "wraps #{title}" do
27
34
  lambda { described_class.new(obj) }.should_not raise_exception
28
35
  end
29
36
  end
@@ -34,10 +41,10 @@ describe RubyPython::PyObject do
34
41
  "a list",
35
42
  "a dict",
36
43
  "a tuple"
37
- ].each do |title|
38
- it "should take #{title} from a Python pointer" do
44
+ ].each do |type|
45
+ it "accepts a Python pointer to a #{type}" do
39
46
  lambda do
40
- py_obj = @objects.__send__(title.gsub(' ','_')).pObject.pointer
47
+ py_obj = @objects.__send__(type.gsub(' ','_')).pObject.pointer
41
48
  described_class.new(py_obj)
42
49
  end.should_not raise_exception
43
50
  end
@@ -59,7 +66,7 @@ describe RubyPython::PyObject do
59
66
  type, input, output = arr
60
67
  output ||= input
61
68
 
62
- it "should faithfully unwrap #{type}" do
69
+ it "faithfully unwraps #{type}" do
63
70
  described_class.new(input).rubify.should == output
64
71
  end
65
72
 
@@ -68,35 +75,35 @@ describe RubyPython::PyObject do
68
75
  end #rubify
69
76
 
70
77
  describe "#hasAttr" do
71
- it "should return true when object has the requested attribute" do
78
+ it "is true when wrapped object has the requested attribute" do
72
79
  @string.hasAttr("ascii_letters").should be_true
73
80
  end
74
81
 
75
- it "should return false when object does not have the requested attribute" do
82
+ it "is false when wrapped object does not have the requested attribute" do
76
83
  @string.hasAttr("nonExistentThing").should be_false
77
84
  end
78
85
  end
79
86
 
80
87
  describe "#getAttr" do
81
- it "should fetch requested object attribute" do
88
+ it "fetchs a pointer to the requested object attribute" do
82
89
  ascii_letters = @string.getAttr "ascii_letters"
83
90
  ascii_letters.rubify.should == "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
84
91
  end
85
92
 
86
- it "should return a PyObject instance" do
93
+ it "returns a PyObject instance" do
87
94
  ascii_letters = @string.getAttr "ascii_letters"
88
95
  ascii_letters.should be_kind_of(described_class)
89
96
  end
90
97
  end
91
98
 
92
99
  describe "#setAttr" do
93
- it "should modify the specified attribute of the object" do
100
+ it "modifies the specified attribute of the object" do
94
101
  pyNewLetters = described_class.new "RbPy"
95
102
  @string.setAttr "ascii_letters", pyNewLetters
96
103
  @string.getAttr("ascii_letters").rubify.should == pyNewLetters.rubify
97
104
  end
98
105
 
99
- it "should create the requested attribute if it doesn't exist" do
106
+ it "creates the requested attribute if it doesn't exist" do
100
107
  pyNewString = described_class.new "python"
101
108
  @string.setAttr "ruby", pyNewString
102
109
  @string.getAttr("ruby").rubify.should == pyNewString.rubify
@@ -111,36 +118,36 @@ describe RubyPython::PyObject do
111
118
  @less_dup = described_class.new 5
112
119
  end
113
120
 
114
- it "should return 0 when objects are equal" do
121
+ it "returns 0 when objects are equal" do
115
122
  @less.cmp(@less_dup).should == 0
116
123
  end
117
124
 
118
- it "should change sign under interchange of arguments" do
125
+ it "changes sign under interchange of arguments" do
119
126
  @less.cmp(@greater).should == -@greater.cmp(@less)
120
127
  end
121
128
 
122
- it "should return -1 when first object is less than the second" do
129
+ it "returns -1 when first object is less than the second" do
123
130
  @less.cmp(@greater).should == -1
124
131
  end
125
132
 
126
- it "should return 1 when first object is greater than the second" do
133
+ it "returns 1 when first object is greater than the second" do
127
134
  @greater.cmp(@less).should == 1
128
135
  end
129
136
  end
130
137
 
131
138
  describe "#makeTuple" do
132
- it "should wrap single arguments in a tuple" do
139
+ it "wraps single arguments in a tuple" do
133
140
  arg = described_class.new AString
134
141
  described_class.makeTuple(arg).rubify.should == [AString]
135
142
  end
136
143
 
137
- it "should turn a Python list into a tuple" do
144
+ it "turns a Python list into a tuple" do
138
145
  arg = @objects.a_list.pObject
139
146
  converted = described_class.makeTuple(arg)
140
147
  converted.rubify.should == AnArray
141
148
  end
142
149
 
143
- it "should return the given argument if it is a tuple" do
150
+ it "returns the given argument if it is a tuple" do
144
151
  arg = @objects.a_tuple.pObject
145
152
  converted = described_class.makeTuple(arg)
146
153
  converted.pointer.address.should == arg.pointer.address
@@ -150,7 +157,7 @@ describe RubyPython::PyObject do
150
157
 
151
158
  describe "#callObject" do
152
159
  #Expand coverage types
153
- it "should execute wrapped object with supplied arguments" do
160
+ it "executes wrapped object with supplied arguments" do
154
161
  arg = described_class.new AnInt
155
162
  argt = described_class.buildArgTuple arg
156
163
 
@@ -161,7 +168,7 @@ describe RubyPython::PyObject do
161
168
  end
162
169
 
163
170
  describe "#newList" do
164
- it "should wrap supplied args in a Python list" do
171
+ it "wraps supplied args in a Python list" do
165
172
  args = AnArray.map do |obj|
166
173
  described_class.new obj
167
174
  end
@@ -171,21 +178,21 @@ describe RubyPython::PyObject do
171
178
 
172
179
  describe "#function_or_method?" do
173
180
 
174
- it "should be true for a method" do
181
+ it "is true for a method" do
175
182
  mockObjClass = @objects.RubyPythonMockObject.pObject
176
183
  mockObjClass.getAttr('square_elements').should be_a_function_or_method
177
184
  end
178
185
 
179
- it "should be true for a function" do
186
+ it "is true for a function" do
180
187
  @objects.pObject.getAttr('identity').should be_a_function_or_method
181
188
  end
182
189
 
183
- xit "should return true for a builtin function" do
190
+ it "is true for a builtin function" do
184
191
  any = @builtin.pObject.getAttr('any')
185
192
  any.should be_a_function_or_method
186
193
  end
187
194
 
188
- it "should return false for a class" do
195
+ it "is false for a class" do
189
196
  @objects.RubyPythonMockObject.pObject.should_not be_a_function_or_method
190
197
  end
191
198
 
@@ -193,20 +200,20 @@ describe RubyPython::PyObject do
193
200
 
194
201
  describe "#class?" do
195
202
 
196
- it "should return true if wrapped object is an old style class" do
203
+ it "is true if wrapped object is an old style class" do
197
204
  @objects.RubyPythonMockObject.pObject.should be_a_class
198
205
  end
199
206
 
200
- it "should return true if wrapped object is an new style class" do
207
+ it "is true if wrapped object is an new style class" do
201
208
  @objects.NewStyleClass.pObject.should be_a_class
202
209
  end
203
210
 
204
- it "should return true if wrapped object is a builtin class" do
211
+ it "is true if wrapped object is a builtin class" do
205
212
  strClass = @builtin.pObject.getAttr('str')
206
213
  strClass.should be_a_class
207
214
  end
208
215
 
209
- it "should return false for an object instance" do
216
+ it "is false for an object instance" do
210
217
  @objects.RubyPythonMockObject.new.pObject.should_not be_a_class
211
218
  end
212
219
 
@@ -214,25 +221,25 @@ describe RubyPython::PyObject do
214
221
 
215
222
  describe "#callable?" do
216
223
 
217
- it "should be true for a method" do
224
+ it "is true for a method" do
218
225
  mockObjClass = @objects.RubyPythonMockObject.pObject
219
226
  mockObjClass.getAttr('square_elements').should be_callable
220
227
  end
221
228
 
222
- it "should be true for a function" do
229
+ it "is true for a function" do
223
230
  @objects.pObject.getAttr('identity').should be_callable
224
231
  end
225
232
 
226
- it "should return true for a builtin function" do
233
+ it "is true for a builtin function" do
227
234
  any = @builtin.pObject.getAttr('any')
228
235
  any.should be_callable
229
236
  end
230
237
 
231
- it "should return true for a class" do
238
+ it "is true for a class" do
232
239
  @objects.RubyPythonMockObject.pObject.should be_callable
233
240
  end
234
241
 
235
- it "should return false for a non-callable instance" do
242
+ it "is false for a non-callable instance" do
236
243
  @objects.RubyPythonMockObject.new.pObject.should_not be_callable
237
244
  end
238
245
 
@@ -242,17 +249,17 @@ describe RubyPython::PyObject do
242
249
 
243
250
  describe ".convert" do
244
251
 
245
- it "should not modify PyObjects passed to it" do
252
+ it "does not modify PyObjects passed to it" do
246
253
  args = AnArray.map { |x| described_class.new(x) }
247
254
  described_class.convert(*args).should == args
248
255
  end
249
256
 
250
- it "should pull PyObjects out of RubyPyProxy instances" do
257
+ it "pulls PyObjects out of RubyPyProxy instances" do
251
258
  args = @objects.an_array.to_a
252
259
  described_class.convert(*args).should == args.map {|x| x.pObject}
253
260
  end
254
261
 
255
- it "should create new PyObject instances of simple Ruby types" do
262
+ it "creates new PyObject instances of simple Ruby types" do
256
263
  described_class.convert(*AnArray).each do |x|
257
264
  x.should be_a_kind_of described_class
258
265
  end
@@ -3,6 +3,9 @@
3
3
  def identity(object):
4
4
  return object
5
5
 
6
+ def apply_callback(callback, args):
7
+ return callback(*args)
8
+
6
9
  class RubyPythonMockObject:
7
10
  STRING = "STRING"
8
11
  STRING_LIST = ["STRING1", "STRING2"]
Binary file
@@ -1,38 +1,45 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
3
  describe RubyPython::PythonError do
4
- include RubyPythonStartStop
4
+
5
+ before do
6
+ RubyPython.start
7
+ end
8
+
9
+ after do
10
+ RubyPython.start
11
+ end
5
12
 
6
13
  def cause_error
7
14
  RubyPython::Python.PyImport_ImportModule("wat")
8
15
  end
9
16
 
10
17
  describe "#error?" do
11
- it "should return false when no error has occured" do
18
+ it "is false when no error has occured" do
12
19
  described_class.error?.should be_false
13
20
  end
14
21
 
15
- it "should return true when an error has occured" do
22
+ it "is true when an error has occured" do
16
23
  cause_error
17
24
  described_class.error?.should be_true
18
25
  end
19
26
  end
20
27
 
21
28
  describe "#clear" do
22
- it "should reset the Python error flag" do
29
+ it "resets the Python error flag" do
23
30
  cause_error
24
31
  described_class.clear
25
32
  described_class.error?.should be_false
26
33
  end
27
34
 
28
- it "should not barf when there is no error" do
35
+ it "doesn't barf when there is no error" do
29
36
  lambda {described_class.clear}.should_not raise_exception
30
37
  end
31
38
  end
32
39
 
33
40
 
34
41
  describe "#fetch" do
35
- it "should make availible Python error type" do
42
+ it "makes availible Python error type" do
36
43
  cause_error
37
44
  rbType, rbValue, rbTraceback = described_class.fetch
38
45
  rbType.getAttr("__name__").rubify.should == "ImportError"
data/spec/refcnt_spec.rb CHANGED
@@ -27,12 +27,12 @@ describe 'Reference Counting' do
27
27
  RubyPython.stop
28
28
  end
29
29
 
30
- it "should be one for a new object" do
30
+ it "is one for a new object" do
31
31
  pyObj = @objects.RubyPythonMockObject.new
32
32
  get_refcnt(pyObj).should == 1
33
33
  end
34
34
 
35
- it "should increase when a new reference is passed into Ruby" do
35
+ it "increases when a new reference is passed into Ruby" do
36
36
  pyObj = @objects.RubyPythonMockObject
37
37
  refcnt = get_refcnt(pyObj)
38
38
  pyObj2 = @objects.RubyPythonMockObject
@@ -42,7 +42,7 @@ describe 'Reference Counting' do
42
42
  describe RubyPython::PyObject do
43
43
 
44
44
  describe "#xIncref" do
45
- it "should increase the reference count" do
45
+ it "increases the reference count" do
46
46
  pyObj = @objects.RubyPythonMockObject.new
47
47
  refcnt = get_refcnt(pyObj)
48
48
  pyObj.pObject.xIncref
@@ -51,7 +51,7 @@ describe 'Reference Counting' do
51
51
  end
52
52
 
53
53
  describe "#xDecref" do
54
- it "should decrease the reference count" do
54
+ it "decreases the reference count" do
55
55
  pyObj = @objects.RubyPythonMockObject.new
56
56
  pyObj.pObject.xIncref
57
57
  refcnt = get_refcnt(pyObj)
@@ -1,10 +1,17 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
3
  describe RubyPython::RubyPyClass do
4
- include RubyPythonStartStop
4
+
5
+ before do
6
+ RubyPython.start
7
+ end
8
+
9
+ after do
10
+ RubyPython.start
11
+ end
5
12
 
6
13
  describe "#new" do
7
- it "should return a RubyPyInstance" do
14
+ it "returns a RubyPyInstance" do
8
15
  urllib2 = RubyPython.import 'urllib2'
9
16
  urllib2.Request.new('google.com').should be_a(RubyPython::RubyPyInstance)
10
17
  end