* transcode.c (econv_primitive_convert): add output_byteoffset
[ruby-svn.git] / test / win32ole / test_folderitem2_invokeverb.rb
blob07cb9802d682eb97dfc8cc08dcc7d9ca4ca0fff8
2 # This script check that Win32OLE can execute InvokeVerb method of FolderItem2.
5 begin
6   require 'win32ole'
7 rescue LoadError
8 end
9 require 'test/unit'
11 if defined?(WIN32OLE)
12   class TestInvokeVerb < Test::Unit::TestCase
13     def setup
14       #
15       # make dummy.txt file for InvokeVerb test.
16       #
18       @fso = WIN32OLE.new('Scripting.FileSystemObject')
19       @dummy_file = @fso.GetTempName
20       @cfolder = @fso.getFolder(".")
21       f = @cfolder.CreateTextFile(@dummy_file)
22       f.close
23       @dummy_path = @cfolder.path + "\\" + @dummy_file
25       @shell=WIN32OLE.new('Shell.Application')
26       @nsp = @shell.NameSpace(@cfolder.path)
27       @fi2 = @nsp.parseName(@dummy_file)
29       @shortcut = nil
31       #
32       # Search the 'Create Shortcut (&S)' string in Japanese.
33       # Yes, I know the string in the Windows 2000 Japanese Edition.
34       # But I do not know about the string in any other Windows.
35       # 
36       verbs = @fi2.verbs
37       verbs.extend(Enumerable)
38       @cp = WIN32OLE.codepage
39       begin
40         WIN32OLE.codepage = 932
41       rescue
42       end
43       @shortcut = verbs.collect{|verb| 
44         verb.name
45       }.find {|name|
46         name.unpack("C*") == [131, 86, 131, 135, 129, 91, 131, 103, 131, 74, 131, 98, 131, 103, 130, 204, 141, 236, 144, 172, 40, 38, 83, 41]
47         # /.*\(\&S\)$/ =~ name
48       }
49     end
51     def find_link(path)
52       arlink = []
53       @cfolder.files.each do |f|
54         if /\.lnk$/ =~ f.path
55           linkinfo = @nsp.parseName(f.name).getLink
56           arlink.push f if linkinfo.path == path
57         end
58       end
59       arlink
60     end
62     def test_invokeverb
63       links = find_link(@dummy_path)
64       assert(0, links.size)
66       assert(@shortcut)
68       # Now create shortcut to @dummy_path
69       arg = WIN32OLE_VARIANT.new(@shortcut)
70       @fi2.InvokeVerb(arg)
72       # Now search shortcut to @dummy_path
73       links = find_link(@dummy_path)
74       assert(1, links.size)
75       @lpath = links[0].path
76     end
78     def teardown
79       if @lpath
80         @fso.deleteFile(@lpath)
81       end
82       if @dummy_path
83         @fso.deleteFile(@dummy_path)
84       end
85       WIN32OLE.codepage = @cp
86     end
88   end
89 end