ruby-net-ldap/spec/unit/ber/core_ext/string_spec.rb

52 lines
1.6 KiB
Ruby

require 'spec_helper'
require 'metaid'
describe String, "when extended with BER core extensions" do
describe "<- #read_ber! (consuming read_ber method)" do
context "when passed an ldap bind request and some extra data" do
attr_reader :str, :result
before(:each) do
@str = "0$\002\001\001`\037\002\001\003\004\rAdministrator\200\vad_is_bogus UNCONSUMED"
@result = str.read_ber!(Net::LDAP::AsnSyntax)
end
it "should correctly parse the ber message" do
result.should == [1, [3, "Administrator", "ad_is_bogus"]]
end
it "should leave unconsumed part of message in place" do
str.should == " UNCONSUMED"
end
context "if an exception occurs during #read_ber" do
attr_reader :initial_value
before(:each) do
stub_exception_class = Class.new(StandardError)
@initial_value = "0$\002\001\001`\037\002\001\003\004\rAdministrator\200\vad_is_bogus"
@str = initial_value.dup
# Defines a string
io = StringIO.new(initial_value)
io.meta_def :read_ber do |syntax|
read
raise stub_exception_class
end
flexmock(StringIO).should_receive(:new).and_return(io)
begin
str.read_ber!(Net::LDAP::AsnSyntax)
rescue stub_exception_class
# EMPTY ON PURPOSE
else
raise "The stub code should raise an exception!"
end
end
it "should not modify string" do
str.should == initial_value
end
end
end
end
end