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