1begin 2 require 'win32ole' 3rescue LoadError 4end 5require 'test/unit' 6require 'fileutils' 7 8def ado_csv_installed? 9 installed = false 10 if defined?(WIN32OLE) 11 db = nil 12 begin 13 db = WIN32OLE.new('ADODB.Connection') 14 db.connectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=.;" 15 db.open 16 db.close 17 db = nil 18 installed = true 19 rescue 20 end 21 end 22 installed 23end 24 25if defined?(WIN32OLE_VARIANT) 26 class TestWIN32OLE_VARIANT_OUTARG < Test::Unit::TestCase 27 module ADO 28 end 29 CONNSTR="Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=.;" 30 def setup 31 return if !ado_csv_installed? 32 33 FileUtils.cp(File.dirname(__FILE__) + '/orig_data.csv', './data.csv') 34 @db = WIN32OLE.new('ADODB.Connection') 35 if !defined?(ADO::AdStateOpen) 36 WIN32OLE.const_load(@db, ADO) 37 end 38 @db.connectionString = CONNSTR 39 @db.open 40 end 41 42 def test_variant_ref_and_argv 43 if !ado_csv_installed? 44 skip("ActiveX Data Object Library not found") 45 end 46 sql = "INSERT INTO data.csv VALUES (5, 'E')" 47 @db.execute(sql, -1) 48 c = WIN32OLE::ARGV[1] 49 assert_equal(1, WIN32OLE::ARGV[1]) 50 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_VARIANT|WIN32OLE::VARIANT::VT_BYREF) 51 assert_equal(nil, obj.value) 52 @db.execute(sql , obj) 53 assert_equal(1, obj.value) 54 obj = WIN32OLE_VARIANT.new(-100, WIN32OLE::VARIANT::VT_VARIANT|WIN32OLE::VARIANT::VT_BYREF) 55 assert_equal(-100, obj.value) 56 @db.execute(sql, obj) 57 assert_equal(1, obj.value) 58 end 59 60 def teardown 61 return if !ado_csv_installed? 62 if @db && @db.state == ADO::AdStateOpen 63 @db.close 64 end 65 File.unlink("data.csv") 66 end 67 end 68end 69