Source

rubypython / spec / pythonerror_spec.rb

require File.dirname(__FILE__) + '/spec_helper.rb'

describe RubyPython::PythonError do
  def cause_error
    RubyPython::Python.PyImport_ImportModule("wat")
  end

  describe "#error?" do
    it "should return false when no error has occured" do
      described_class.error?.should be_false
    end

    it "should return true when an error has occured" do
      cause_error
      described_class.error?.should be_true
    end
  end

  describe "#clear" do
    it "should reset the Python error flag" do
      cause_error
      described_class.clear
      described_class.error?.should be_false
    end

    it "should not barf when there is no error" do
      lambda {described_class.clear}.should_not raise_exception
    end
  end

  describe "#fetch" do
    it "should make availible Python error type" do
      cause_error
      rbType, rbValue, rbTraceback = described_class.fetch
      rbType.getAttr("__name__").rubify.should == "ImportError"
    end
  end

  describe ".last_traceback" do
    it "should make availble the Python traceback of the last error" do
      traceback = RubyPython.import 'traceback'
      errors = RubyPython.import 'errors'
      begin
        errors.nested_error
      rescue RubyPython::PythonError => exc
        tb = exc.traceback
        list = traceback.format_tb(tb)
        list.rubify[0].should =~ /1 \/ 0/
      end
    end
  end
end