summaryrefslogtreecommitdiff
path: root/test/win32ole
diff options
context:
space:
mode:
authorsuke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-04 12:52:56 +0000
committersuke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-04 12:52:56 +0000
commit2906d58a10af920b88fe783647e70706fe2e400f (patch)
tree7003feee18c5bdc293a5ea124e9d35cc9268b615 /test/win32ole
parent0a77122622e36906525032ef738ff68fe4a08e1f (diff)
* test/win32ole/test_win32ole_record.rb: add for WIN32OLE_RECORD
test(need .NET Framework 3.5 to run test). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47062 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/win32ole')
-rw-r--r--test/win32ole/test_win32ole_record.rb313
1 files changed, 313 insertions, 0 deletions
diff --git a/test/win32ole/test_win32ole_record.rb b/test/win32ole/test_win32ole_record.rb
new file mode 100644
index 0000000..265feb8
--- /dev/null
+++ b/test/win32ole/test_win32ole_record.rb
@@ -0,0 +1,313 @@
+# coding: us-ascii
+
+begin
+ require 'win32ole'
+rescue LoadError
+end
+require 'test/unit'
+
+PROGID_CLR='System.Runtime.Serialization.FormatterConverter'
+PROGID_RBCOMTEST='RbComTest.ComSrvTest'
+
+=begin
+RbComTest.ComSrvTest is following VB.NET COM server(RbComTest solution).
+
+Imports System.Runtime.InteropServices
+Public Class ComSrvTest
+ <StructLayout(LayoutKind.Sequential)> _
+ Public Structure Book
+ <MarshalAs(UnmanagedType.BStr)> _
+ Public title As String
+ Public cost As Integer
+ End Structure
+
+ Public Function getBook() As Book
+ Dim book As New Book
+ book.title = "The Ruby Book"
+ book.cost = 20
+ Return book
+ End Function
+
+ Public Function getBooks() As Book()
+ Dim book() As Book = {New Book, New Book}
+ book(0).title = "The CRuby Book"
+ book(0).cost = 30
+ book(1).title = "The JRuby Book"
+ book(1).cost = 40
+ Return book
+ End Function
+
+ Public Sub getBookByRefObject(ByRef obj As Object)
+ Dim book As New Book
+ book.title = "The Ruby Reference Book"
+ book.cost = 50
+ obj = book
+ End Sub
+
+ Public Function getVer2BookByValBook(<MarshalAs(UnmanagedType.Struct)> ByVal book As Book) As Book
+ Dim ret As New Book
+ ret.title = book.title + " ver2"
+ ret.cost = book.cost * 1.1
+ Return ret
+ End Function
+
+ Public Sub getBookByRefBook(<MarshalAs(UnmanagedType.LPStruct)> ByRef book As Book)
+ book.title = "The Ruby Reference Book2"
+ book.cost = 44
+ End Sub
+
+ Public Sub getVer3BookByRefBook(<MarshalAs(UnmanagedType.LPStruct)> ByRef book As Book)
+ book.title += " ver3"
+ book.cost *= 1.2
+ End Sub
+End Class
+=end
+
+
+if defined?(WIN32OLE_RECORD)
+ def rbcomtest_exist?
+ exist = false
+ begin
+ obj = WIN32OLE.new(PROGID_RBCOMTEST)
+ exist = true
+ rescue WIN32OLERuntimeError
+ exist = false
+ end
+ exist
+ end
+
+ class TestWIN32OLE_RECORD_BY_RBCOMTEST < Test::Unit::TestCase
+ unless rbcomtest_exist?
+ def test_dummy_for_skip_message
+ skip "#{PROGID_RBCOMTEST} for WIN32OLE_RECORD test is not installed"
+ end
+ else
+ def setup
+ @obj = WIN32OLE.new(PROGID_RBCOMTEST)
+ end
+
+ def test_s_new_from_win32ole
+ rec = WIN32OLE_RECORD.new('Book', @obj)
+ assert(rec)
+ assert_instance_of(WIN32OLE_RECORD, rec)
+ end
+
+ def test_s_new_from_win32ole_typelib
+ tlib = @obj.ole_typelib
+ rec = WIN32OLE_RECORD.new('Book', tlib)
+ assert(rec)
+ assert_instance_of(WIN32OLE_RECORD, rec)
+ end
+
+ def test_s_new_raise
+ assert_raise(WIN32OLERuntimeError) {
+ rec = WIN32OLE_RECORD.new('NonExistRecordName', @obj)
+ }
+ assert_raise(ArgumentError) {
+ rec = WIN32OLE_RECORD.new
+ }
+ assert_raise(ArgumentError) {
+ rec = WIN32OLE_RECORD.new('NonExistRecordName')
+ }
+ end
+
+ def test_to_h
+ rec = WIN32OLE_RECORD.new('Book', @obj)
+ assert_equal({'title'=>nil, 'cost'=>nil}, rec.to_h)
+ end
+
+ def test_typename
+ rec = WIN32OLE_RECORD.new('Book', @obj)
+ assert_equal('Book', rec.typename)
+ end
+
+ def test_method_missing_getter
+ rec = WIN32OLE_RECORD.new('Book', @obj)
+ assert_equal(nil, rec.title)
+ assert_raise(KeyError) {
+ rec.non_exist_name
+ }
+ end
+
+ def test_method_missing_setter
+ rec = WIN32OLE_RECORD.new('Book', @obj)
+ rec.title = "Ruby Book"
+ assert_equal("Ruby Book", rec.title)
+ end
+
+ def test_get_record_from_comserver
+ rec = @obj.getBook
+ assert_instance_of(WIN32OLE_RECORD, rec)
+ assert_equal("The Ruby Book", rec.title)
+ assert_equal(20, rec.cost)
+ end
+
+ def test_get_record_array_from_comserver
+ rec = @obj.getBooks
+ assert_instance_of(Array, rec)
+ assert_equal(2, rec.size)
+ assert_instance_of(WIN32OLE_RECORD, rec[0])
+ assert_equal("The CRuby Book", rec[0].title)
+ assert_equal(30, rec[0].cost)
+ assert_instance_of(WIN32OLE_RECORD, rec[1])
+ assert_equal("The JRuby Book", rec[1].title)
+ assert_equal(40, rec[1].cost)
+ end
+
+ def test_pass_record_parameter
+ rec = WIN32OLE_RECORD.new('Book', @obj)
+ rec.title = "Ruby Book"
+ rec.cost = 60
+ book = @obj.getVer2BookByValBook(rec)
+ assert_equal("Ruby Book ver2", book.title)
+ assert_equal(66, book.cost)
+ end
+
+ def test_pass_variant_parameter_byref
+ obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_VARIANT|WIN32OLE::VARIANT::VT_BYREF)
+ @obj.getBookByRefBook(obj)
+ assert_instance_of(WIN32OLE_RECORD, obj.value)
+ book = obj.value
+ assert_equal("The Ruby Reference Book2", book.title)
+ assert_equal(44, book.cost)
+ end
+
+ def test_pass_record_parameter_byref
+ book = WIN32OLE_RECORD.new('Book', @obj)
+ @obj.getBookByRefBook(book)
+ assert_equal("The Ruby Reference Book2", book.title)
+ assert_equal(44, book.cost)
+ end
+
+ def test_pass_and_get_record_parameter_byref
+ book = WIN32OLE_RECORD.new('Book', @obj)
+ book.title = "Ruby Book"
+ book.cost = 60
+ @obj.getVer3BookByRefBook(book)
+ assert_equal("Ruby Book ver3", book.title)
+ assert_equal(72, book.cost)
+ end
+
+ def test_ole_instance_variable_get
+ obj = WIN32OLE_RECORD.new('ComObject', @obj)
+ assert_equal(nil, obj.ole_instance_variable_get(:object_id))
+ assert_equal(nil, obj.ole_instance_variable_get('object_id'))
+ end
+
+ def test_ole_instance_variable_set
+ book = WIN32OLE_RECORD.new('Book', @obj)
+ book.ole_instance_variable_set(:title, "Ruby Book")
+ assert_equal("Ruby Book", book.title)
+ book.ole_instance_variable_set('title', "Ruby Book2")
+ assert_equal("Ruby Book2", book.title)
+ end
+
+ def test_inspect
+ book = WIN32OLE_RECORD.new('Book', @obj)
+ assert_equal(%q[#<WIN32OLE_RECORD(Book) {"title"=>nil, "cost"=>nil}>], book.inspect)
+ end
+ end
+ end
+
+ def clr_exist?
+ exist = false
+ begin
+ obj = WIN32OLE.new(PROGID_CLR)
+ exist = true
+ rescue WIN32OLERuntimeError
+ exist = false
+ end
+ exist
+ end
+
+ class TestWIN32OLE_CLR < Test::Unit::TestCase
+ unless clr_exist?
+ def test_dummy_for_skip_message
+ skip "#{PROGID_CLR}(.Net Framework 3.5) not found."
+ end
+ else
+ def setup
+ @obj = WIN32OLE.new(PROGID_CLR)
+ end
+
+ def test_s_new_from_win32ole
+ rec = WIN32OLE_RECORD.new('Decimal', @obj)
+ assert(rec)
+ assert_instance_of(WIN32OLE_RECORD, rec)
+ end
+
+ def test_s_new_from_win32ole_typelib
+ tlib = @obj.ole_typelib
+ rec = WIN32OLE_RECORD.new('Decimal', tlib)
+ assert(rec)
+ assert_instance_of(WIN32OLE_RECORD, rec)
+ end
+
+ def test_s_new_raise
+ assert_raise(WIN32OLERuntimeError) {
+ rec = WIN32OLE_RECORD.new('NonExistRecordName', @obj)
+ }
+ assert_raise(ArgumentError) {
+ rec = WIN32OLE_RECORD.new
+ }
+ assert_raise(ArgumentError) {
+ rec = WIN32OLE_RECORD.new('NonExistRecordName')
+ }
+ end
+
+ def test_to_h
+ rec = WIN32OLE_RECORD.new('Decimal', @obj)
+ assert_equal({'lo'=>nil, 'mid'=>nil, 'hi'=>nil, 'flags'=>nil}, rec.to_h)
+ end
+
+ def test_typename
+ rec = WIN32OLE_RECORD.new('Decimal', @obj)
+ assert_equal('Decimal', rec.typename)
+ end
+
+ def test_method_missing_getter
+ rec = WIN32OLE_RECORD.new('Decimal', @obj)
+ assert_equal(nil, rec.lo)
+ assert_raise(KeyError) {
+ rec.non_exist_name
+ }
+ end
+
+ def test_method_missing_setter
+ rec = WIN32OLE_RECORD.new('Decimal', @obj)
+ rec.lo = 1
+ assert_equal(1, rec.lo)
+ end
+
+ def test_pass_record_parameter
+ rec = WIN32OLE_RECORD.new('Decimal', @obj)
+ rec.lo = 0
+ rec.mid = 1
+ rec.hi = 0
+ rec.flags = false
+ assert_equal(2**32, @obj.ToInt64(rec))
+ end
+
+ def test_ole_instance_variable_get
+ obj = WIN32OLE_RECORD.new('Decimal', @obj)
+ assert_equal(nil, obj.ole_instance_variable_get(:lo))
+ assert_equal(nil, obj.ole_instance_variable_get('lo'))
+ end
+
+ def test_ole_instance_variable_set
+ rec = WIN32OLE_RECORD.new('Decimal', @obj)
+ rec.ole_instance_variable_set(:lo, 1)
+ assert_equal(1, rec.lo)
+ rec.ole_instance_variable_set('lo', 2)
+ assert_equal(2, rec.lo)
+ end
+
+ def test_inspect
+ rec = WIN32OLE_RECORD.new('Decimal', @obj)
+ assert_equal(%q[#<WIN32OLE_RECORD(Decimal) {"flags"=>nil, "hi"=>nil, "lo"=>nil, "mid"=>nil}>], rec.inspect)
+ end
+
+ end
+ end
+
+end