From 0ff9e8c55e0161a90e336e82a7f4db09799b230a Mon Sep 17 00:00:00 2001 From: Kevin Clark Date: Wed, 18 Jun 2008 01:05:03 +0000 Subject: [PATCH] Spec out Thrift::Client git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@668941 13f79535-47bb-0310-9956-ffa450edef68 --- lib/rb/spec/client_spec.rb | 56 +++++++++++++++++++++++++++++++++++ lib/rb/spec/exception_spec.rb | 6 ++-- lib/rb/spec/spec_helper.rb | 8 +++++ 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 lib/rb/spec/client_spec.rb diff --git a/lib/rb/spec/client_spec.rb b/lib/rb/spec/client_spec.rb new file mode 100644 index 00000000..945d059f --- /dev/null +++ b/lib/rb/spec/client_spec.rb @@ -0,0 +1,56 @@ +require File.dirname(__FILE__) + '/spec_helper' + +class ThriftSpec < Spec::ExampleGroup + include Thrift + + class ClientSpec + include Thrift::Client + end + + before(:each) do + @prot = mock("MockProtocol") + @client = ClientSpec.new(@prot) + end + + describe "Client" do + it "should re-use iprot for oprot if not otherwise specified" do + @client.instance_variable_get(:'@iprot').should eql(@prot) + @client.instance_variable_get(:'@oprot').should eql(@prot) + end + + it "should send a test message" do + @prot.should_receive(:write_message_begin).with('testMessage', MessageTypes::CALL, 0) + mock_args = mock('#') + mock_args.should_receive(:foo=).with('foo') + mock_args.should_receive(:bar=).with(42) + mock_args.should_receive(:write).with(@prot) + @prot.should_receive(:write_message_end) + @prot.should_receive(:trans) do + mock('trans').tee do |trans| + trans.should_receive(:flush) + end + end + klass = stub("TestMessage_args", :new => mock_args) + @client.send_message('testMessage', klass, :foo => 'foo', :bar => 42) + end + + it "should receive a test message" do + @prot.should_receive(:read_message_begin).and_return [nil, MessageTypes::CALL, 0] + @prot.should_receive(:read_message_end) + mock_klass = mock("#") + mock_klass.should_receive(:read).with(@prot) + @client.receive_message(stub("MockClass", :new => mock_klass)) + end + + it "should handle received exceptions" do + @prot.should_receive(:read_message_begin).and_return [nil, MessageTypes::EXCEPTION, 0] + @prot.should_receive(:read_message_end) + ApplicationException.should_receive(:new).and_return do + StandardError.new.tee do |mock_exc| + mock_exc.should_receive(:read).with(@prot) + end + end + lambda { @client.receive_message(nil) }.should raise_error(StandardError) + end + end +end diff --git a/lib/rb/spec/exception_spec.rb b/lib/rb/spec/exception_spec.rb index d16c7f8f..c437a63c 100644 --- a/lib/rb/spec/exception_spec.rb +++ b/lib/rb/spec/exception_spec.rb @@ -1,15 +1,15 @@ require File.dirname(__FILE__) + '/spec_helper' -module Thrift +class ThriftSpec < Spec::ExampleGroup + include Thrift + describe Exception do it "should have an accessible message" do e = Exception.new("test message") e.message.should == "test message" end end -end -module Thrift describe ApplicationException do it "should inherit from Thrift::Exception" do ApplicationException.superclass.should == Exception diff --git a/lib/rb/spec/spec_helper.rb b/lib/rb/spec/spec_helper.rb index 1c67cb25..9a573fed 100644 --- a/lib/rb/spec/spec_helper.rb +++ b/lib/rb/spec/spec_helper.rb @@ -2,3 +2,11 @@ require 'rubygems' require 'spec' require File.dirname(__FILE__) + '/../lib/thrift' + +class Object + # tee is a useful method, so let's let our tests have it + def tee(&block) + block.call(self) + self + end +end -- 2.17.1