Ruby default values patch
Summary: Submitted by Dan Sully, reviewed by Kevin Clark
Reviewed By: dreiss
Test Plan: New ruby generated code with default vals, and new test scripts
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665418 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/test/rb/Makefile b/test/rb/Makefile
index 8b3cb98..5ea5305 100644
--- a/test/rb/Makefile
+++ b/test/rb/Makefile
@@ -9,10 +9,14 @@
# Tools
THRIFT = ../../compiler/cpp/thrift
-all: stubs
+all: stubs tests
-stubs: ../ThriftTest.thrift
+stubs: ../ThriftTest.thrift ../SmallTest.thrift
$(THRIFT) --rb ../ThriftTest.thrift
+ $(THRIFT) --rb ../SmallTest.thrift
+
+tests: stubs
+ ruby TestSuite.rb
clean:
rm -fr gen-rb
diff --git a/test/rb/TestClient.rb b/test/rb/TestClient.rb
deleted file mode 100755
index 1adb5c7..0000000
--- a/test/rb/TestClient.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env ruby
-
-$:.push('gen-rb')
-$:.push('../../lib/rb/lib')
-
-require 'thrift/transport/tsocket'
-require 'thrift/protocol/tbinaryprotocol'
-require 'ThriftTest'
-
-s = TSocket.new('localhost', 9090)
-p = TBinaryProtocol.new(s)
-c = Thrift::Test::ThriftTest::Client.new(p)
-
-s.open()
-
-puts c.testString('string')
-puts c.testByte(8)
-puts c.testByte(-8)
-puts c.testI32(32)
-puts c.testI32(-32)
-puts c.testI64(64)
-puts c.testI64(-64)
-puts c.testDouble(3.14)
-puts c.testDouble(-3.14)
-puts c.testMap({1 => 1, 2 => 2, 3 => 3})
-puts c.testList([1,2,3,4,5])
-puts c.testSet({1 => true, 2 => true, 3 => true})
-struct = Thrift::Test::Xtruct.new({'string_thing' => 'hi!', 'i32_thing' => 4 })
-puts c.testStruct(struct)
-puts c.testNest(Thrift::Test::Xtruct2.new({'struct_thing' => struct, 'i32_thing' => 10}))
-insane = Thrift::Test::Insanity.new({'userMap' => { Thrift::Test::Numberz::ONE => 44 }, 'xtructs' => [struct, Thrift::Test::Xtruct.new({'string_thing' => 'hi again', 'i32_thing' => 12})]})
-puts c.testInsanity(insane)
-puts c.testMapMap(4).inspect
-
-s.close()
-
-
diff --git a/test/rb/TestHandler.rb b/test/rb/TestHandler.rb
new file mode 100644
index 0000000..2a42541
--- /dev/null
+++ b/test/rb/TestHandler.rb
@@ -0,0 +1,73 @@
+#!/usr/bin/env ruby
+
+$:.push('gen-rb')
+$:.push('../../lib/rb/lib')
+
+require 'ThriftTest'
+
+class TestHandler
+ def testVoid
+ end
+
+ def testString(thing)
+ return thing
+ end
+
+ def testByte(thing)
+ return thing
+ end
+
+ def testI32(thing)
+ return thing
+ end
+
+ def testI64(thing)
+ return thing
+ end
+
+ def testDouble(thing)
+ return thing
+ end
+
+ def testStruct(thing)
+ return thing
+ end
+
+ def testMap(thing)
+ return thing
+ end
+
+ def testSet(thing)
+ return thing
+ end
+
+ def testList(thing)
+ return thing
+ end
+
+ def testNest(thing)
+ return thing
+ end
+
+ def testInsanity(thing)
+ num, uid = thing.userMap.find { true }
+ return {uid => {num => thing}}
+ end
+
+ def testMapMap(thing)
+ return {thing => {thing => thing}}
+ end
+
+ def testEnum(thing)
+ return thing
+ end
+
+ def testTypedef(thing)
+ return thing
+ end
+
+ def testException(thing)
+ raise Thrift::Test::Xception, 'error'
+ end
+
+end
diff --git a/test/rb/TestServer.rb b/test/rb/TestServer.rb
deleted file mode 100755
index 16fe5f6..0000000
--- a/test/rb/TestServer.rb
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/env ruby
-
-$:.push('gen-rb')
-$:.push('../../lib/rb/lib')
-
-require 'thrift/transport/tsocket'
-require 'thrift/protocol/tbinaryprotocol'
-require 'thrift/server/tserver'
-require 'ThriftTest'
-
-class TestHandler
- def testVoid()
- print "testVoid()\n"
- end
-
- def testString(thing)
- print "testString(#{thing})\n"
- return thing
- end
-
- def testByte(thing)
- print "testByte(#{thing})\n"
- return thing
- end
-
- def testI32(thing)
- print "testI32(#{thing})\n"
- return thing
- end
-
- def testI64(thing)
- print "testI64(#{thing})\n"
- return thing
- end
-
- def testDouble(thing)
- print "testDouble(#{thing})\n"
- return thing
- end
-
- def testStruct(thing)
- print "testStruct(#{thing})\n"
- print " with attrs: #{thing.string_thing}, #{thing.byte_thing}, #{thing.i32_thing}"
- return thing
- end
-
- def testMap(thing)
- print "testMap(#{thing})\n"
- return thing
- end
-
- def testSet(thing)
- print "testSet(#{thing})\n"
- return thing
- end
-
- def testList(thing)
- print "testList(#{thing})\n"
- return thing
- end
-
- def testNest(thing)
- print "testNest(#{thing})\n"
- puts " i32_thing: #{thing.i32_thing}"
- puts " with struct: "
- %w{ string_thing byte_thing i32_thing }.each do |t|
- puts " #{t}: #{thing.struct_thing.send(t)}"
- end
- return thing
- end
-
- def testInsanity(thing)
- puts "insanity:"
- puts " #{thing.inspect}"
- num, uid = thing.userMap.find { true }
- return {uid => {num => thing}}
- end
-
- def testMapMap(thing)
- puts "got: #{thing}"
- return {thing => {thing => thing}}
- end
-
- def testEnum(thing)
- puts "testEnum(#{thing})"
- return thing
- end
-
- def testTypedef(thing)
- puts "testTypedef(#{thing})"
- return thing
- end
-
-end
-
-handler = TestHandler.new()
-processor = Thrift::Test::ThriftTest::Processor.new(handler)
-transport = TServerSocket.new(9090)
-server = TSimpleServer.new(processor, transport)
-server.serve()
diff --git a/test/rb/TestSmallService.rb b/test/rb/TestSmallService.rb
new file mode 100644
index 0000000..9ac287a
--- /dev/null
+++ b/test/rb/TestSmallService.rb
@@ -0,0 +1,32 @@
+#!/usr/bin/env ruby
+
+$:.push('gen-rb')
+$:.push('../../lib/rb/lib')
+
+require 'SmallService'
+require 'rubygems'
+require 'test/unit'
+
+class TestSmallService < Test::Unit::TestCase
+
+ def test_default_value
+ hello = Hello.new
+
+ assert_kind_of(Hello, hello)
+ assert_nil(hello.complexer)
+
+ assert_equal(hello.simple, 53)
+ assert_equal(hello.words, 'words')
+
+ assert_kind_of(Goodbyez, hello.thinz)
+ assert_equal(hello.thinz.val, 36632)
+
+ assert_kind_of(Hash, hello.complex)
+ assert_equal(hello.complex, { 6243 => 632, 2355 => 532, 23 => 532})
+ end
+
+ def test_goodbyez
+ assert_equal(Goodbyez.new.val, 325)
+ end
+
+end
diff --git a/test/rb/TestSuite.rb b/test/rb/TestSuite.rb
new file mode 100644
index 0000000..04a4e2b
--- /dev/null
+++ b/test/rb/TestSuite.rb
@@ -0,0 +1,5 @@
+#!/usr/bin/env ruby
+
+require 'test/unit'
+require 'TestThrift'
+require 'TestSmallService'
diff --git a/test/rb/TestThrift.rb b/test/rb/TestThrift.rb
new file mode 100644
index 0000000..2b59fa9
--- /dev/null
+++ b/test/rb/TestThrift.rb
@@ -0,0 +1,168 @@
+#!/usr/bin/env ruby
+
+$:.push('gen-rb')
+$:.push('../../lib/rb/lib')
+
+require 'thrift/transport/tsocket'
+require 'thrift/protocol/tbinaryprotocol'
+require 'thrift/server/tserver'
+require 'ThriftTest'
+require 'TestHandler'
+
+require 'rubygems'
+require 'test/unit'
+
+class TestThrift < Test::Unit::TestCase
+
+ @@INIT = nil
+
+ def setup
+ if @@INIT.nil?
+ # Initialize the server
+ @handler = TestHandler.new()
+ @processor = Thrift::Test::ThriftTest::Processor.new(@handler)
+ @transport = TServerSocket.new(9090)
+ @server = TThreadedServer.new(@processor, @transport)
+
+ @thread = Thread.new { @server.serve }
+
+ # And the Client
+ @socket = TSocket.new('localhost', 9090)
+ @protocol = TBinaryProtocol.new(@socket)
+ @client = Thrift::Test::ThriftTest::Client.new(@protocol)
+ @socket.open
+ end
+ end
+
+ def test_string
+ assert_equal(@client.testString('string'), 'string')
+ end
+
+ def test_byte
+ val = 8
+ assert_equal(@client.testByte(val), val)
+ assert_equal(@client.testByte(-val), -val)
+ end
+
+ def test_i32
+ val = 32
+ assert_equal(@client.testI32(val), val)
+ assert_equal(@client.testI32(-val), -val)
+ end
+
+ def test_i64
+ val = 64
+ assert_equal(@client.testI64(val), val)
+ assert_equal(@client.testI64(-val), -val)
+ end
+
+ def test_double
+ val = 3.14
+ assert_equal(@client.testDouble(val), val)
+ assert_equal(@client.testDouble(-val), -val)
+ assert_kind_of(Float, @client.testDouble(val))
+ end
+
+ def test_map
+ val = {1 => 1, 2 => 2, 3 => 3}
+ assert_equal(@client.testMap(val), val)
+ assert_kind_of(Hash, @client.testMap(val))
+ end
+
+ def test_list
+ val = [1,2,3,4,5]
+ assert_equal(@client.testList(val), val)
+ assert_kind_of(Array, @client.testList(val))
+ end
+
+ def test_enum
+ val = Thrift::Test::Numberz::SIX
+ ret = @client.testEnum(val)
+
+ assert_equal(ret, 6)
+ assert_kind_of(Fixnum, ret)
+ end
+
+ def test_typedef
+ #UserId testTypedef(1: UserId thing),
+ true
+ end
+
+ def test_set
+ val = {1 => true, 2 => true, 3 => true}
+ assert_equal(@client.testSet(val), val)
+ assert_kind_of(Hash, @client.testSet(val))
+ end
+
+ def get_struct
+ Thrift::Test::Xtruct.new({'string_thing' => 'hi!', 'i32_thing' => 4 })
+ end
+
+ def test_struct
+ ret = @client.testStruct(get_struct)
+
+ assert_nil(ret.byte_thing, nil)
+ assert_nil(ret.i64_thing, nil)
+ assert_equal(ret.string_thing, 'hi!')
+ assert_equal(ret.i32_thing, 4)
+ assert_kind_of(Thrift::Test::Xtruct, ret)
+ end
+
+ def test_nest
+ struct2 = Thrift::Test::Xtruct2.new({'struct_thing' => get_struct, 'i32_thing' => 10})
+
+ ret = @client.testNest(struct2)
+
+ assert_nil(ret.struct_thing.byte_thing, nil)
+ assert_nil(ret.struct_thing.i64_thing, nil)
+ assert_equal(ret.struct_thing.string_thing, 'hi!')
+ assert_equal(ret.struct_thing.i32_thing, 4)
+ assert_equal(ret.i32_thing, 10)
+
+ assert_kind_of(Thrift::Test::Xtruct, ret.struct_thing)
+ assert_kind_of(Thrift::Test::Xtruct2, ret)
+ end
+
+ def test_insane
+ insane = Thrift::Test::Insanity.new({
+ 'userMap' => { Thrift::Test::Numberz::ONE => 44 },
+ 'xtructs' => [get_struct,
+ Thrift::Test::Xtruct.new({
+ 'string_thing' => 'hi again',
+ 'i32_thing' => 12
+ })
+ ]
+ })
+
+ ret = @client.testInsanity(insane)
+
+ assert_not_nil(ret[44])
+ assert_not_nil(ret[44][1])
+
+ struct = ret[44][1]
+
+ assert_equal(struct.userMap[Thrift::Test::Numberz::ONE], 44)
+ assert_equal(struct.xtructs[1].string_thing, 'hi again')
+ assert_equal(struct.xtructs[1].i32_thing, 12)
+
+ assert_kind_of(Hash, struct.userMap)
+ assert_kind_of(Array, struct.xtructs)
+ assert_kind_of(Thrift::Test::Insanity, struct)
+ end
+
+ def test_map_map
+ ret = @client.testMapMap(4)
+ assert_kind_of(Hash, ret)
+ assert_equal(ret, { 4 => { 4 => 4}})
+ end
+
+ def test_exception
+ assert_raise Thrift::Test::Xception do
+ @client.testException('foo')
+ end
+ end
+
+ def teardown
+ end
+
+end