зеркало из https://github.com/github/ruby.git
70 строки
1.8 KiB
Ruby
70 строки
1.8 KiB
Ruby
# frozen_string_literal: false
|
|
begin
|
|
require 'win32ole'
|
|
rescue LoadError
|
|
end
|
|
require 'test/unit'
|
|
require 'fileutils'
|
|
|
|
def ado_csv_installed?
|
|
installed = false
|
|
if defined?(WIN32OLE)
|
|
db = nil
|
|
begin
|
|
db = WIN32OLE.new('ADODB.Connection')
|
|
db.connectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=.;"
|
|
db.open
|
|
db.close
|
|
db = nil
|
|
installed = true
|
|
rescue
|
|
end
|
|
end
|
|
installed
|
|
end
|
|
|
|
if defined?(WIN32OLE_VARIANT)
|
|
class TestWIN32OLE_VARIANT_OUTARG < Test::Unit::TestCase
|
|
module ADO
|
|
end
|
|
CONNSTR="Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=.;"
|
|
def setup
|
|
return if !ado_csv_installed?
|
|
|
|
FileUtils.cp(File.dirname(__FILE__) + '/orig_data.csv', './data.csv')
|
|
@db = WIN32OLE.new('ADODB.Connection')
|
|
if !defined?(ADO::AdStateOpen)
|
|
WIN32OLE.const_load(@db, ADO)
|
|
end
|
|
@db.connectionString = CONNSTR
|
|
@db.open
|
|
end
|
|
|
|
def test_variant_ref_and_argv
|
|
if !ado_csv_installed?
|
|
skip("ActiveX Data Object Library not found")
|
|
end
|
|
sql = "INSERT INTO data.csv VALUES (5, 'E')"
|
|
@db.execute(sql, -1)
|
|
c = WIN32OLE::ARGV[1]
|
|
assert_equal(1, c)
|
|
obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_VARIANT|WIN32OLE::VARIANT::VT_BYREF)
|
|
assert_equal(nil, obj.value)
|
|
@db.execute(sql , obj)
|
|
assert_equal(1, obj.value)
|
|
obj = WIN32OLE_VARIANT.new(-100, WIN32OLE::VARIANT::VT_VARIANT|WIN32OLE::VARIANT::VT_BYREF)
|
|
assert_equal(-100, obj.value)
|
|
@db.execute(sql, obj)
|
|
assert_equal(1, obj.value)
|
|
end
|
|
|
|
def teardown
|
|
return if !ado_csv_installed?
|
|
if @db && @db.state == ADO::AdStateOpen
|
|
@db.close
|
|
end
|
|
File.unlink("data.csv")
|
|
end
|
|
end
|
|
end
|