require File.dirname(__FILE__) + '/spec_helper.rb' describe RubyPython do before do RubyPython.start end after do RubyPython.start end describe "#import" do it "handles multiple imports" do lambda do RubyPython.import 'cPickle' RubyPython.import 'urllib' end.should_not raise_exception end it "propagates Python errors" do lambda do RubyPython.import 'nonExistentModule' end.should raise_exception(RubyPython::PythonError) end it "returns a RubyPyModule" do RubyPython.import('urllib2').should be_a(RubyPython::RubyPyModule) end end end describe RubyPython, "#session" do it "starts interpreter" do RubyPython.session do cPickle = RubyPython.import "cPickle" cPickle.loads("(dp1\nS'a'\nS'n'\ns(I1\nS'2'\ntp2\nI4\ns.").rubify.should == {"a"=>"n", [1, "2"]=>4} end end it "stops the interpreter" do RubyPython.session do cPickle = RubyPython.import "cPickle" end RubyPython.stop.should be_false end end describe RubyPython, "#run" do it "starts interpreter" do RubyPython.run do cPickle = import "cPickle" cPickle.loads("(dp1\nS'a'\nS'n'\ns(I1\nS'2'\ntp2\nI4\ns.").rubify.should == {"a"=>"n", [1, "2"]=>4} end end it "stops the interpreter" do RubyPython.run do cPickle = import "cPickle" end RubyPython.stop.should be_false end end describe RubyPython, '#reload_library', :slow => true do it 'leaves RubyPython in a stable state' do lambda do RubyPython.instance_eval { reload_library } RubyPython.run {} end.should_not raise_exception end end describe RubyPython, '.configure', :slow => true do it 'allows python executable to be specified', :unless => `which python2.6`.empty? do RubyPython.configure :python_exe => 'python2.6' RubyPython.run do sys = RubyPython.import 'sys' sys.version.rubify.to_f.should == 2.6 end end after(:all) do RubyPython.clear_options RubyPython.instance_eval { reload_library } end end