win32-file 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +126 -0
- data/MANIFEST +16 -0
- data/README +98 -0
- data/install.rb +11 -0
- data/lib/win32/file.rb +1037 -0
- data/test/sometestfile.txt +1 -0
- data/test/tc_file_attributes.rb +253 -0
- data/test/tc_file_constants.rb +53 -0
- data/test/tc_file_encryption.rb +36 -0
- data/test/tc_file_path.rb +171 -0
- data/test/tc_file_security.rb +56 -0
- data/test/tc_file_stat.rb +96 -0
- data/test/ts_all.rb +11 -0
- data/win32-file.gemspec +24 -0
- metadata +70 -0
@@ -0,0 +1 @@
|
|
1
|
+
This is a test.
|
@@ -0,0 +1,253 @@
|
|
1
|
+
#############################################################################
|
2
|
+
# tc_file_attributes.rb
|
3
|
+
#
|
4
|
+
# Test case for the attribute related methods of win32-file.
|
5
|
+
#############################################################################
|
6
|
+
base = File.basename(Dir.pwd)
|
7
|
+
|
8
|
+
if base == 'test' || base =~ /win32-file/
|
9
|
+
Dir.chdir('..') if base == 'test'
|
10
|
+
$LOAD_PATH.unshift(Dir.pwd + '/lib')
|
11
|
+
Dir.chdir('test') rescue nil
|
12
|
+
end
|
13
|
+
|
14
|
+
require "test/unit"
|
15
|
+
require "win32/file"
|
16
|
+
|
17
|
+
class TC_Win32_File_Attributes < Test::Unit::TestCase
|
18
|
+
include Windows::File
|
19
|
+
def setup
|
20
|
+
@file = 'sometestfile.txt'
|
21
|
+
@fh = File.open(@file)
|
22
|
+
@attr = GetFileAttributes(@file)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_version
|
26
|
+
assert_equal('0.5.3', File::VERSION)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_temporary
|
30
|
+
assert_respond_to(File, :temporary?)
|
31
|
+
assert_nothing_raised{ File.temporary?(@file) }
|
32
|
+
assert_equal(false, File.temporary?(@file))
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_temporary_instance
|
36
|
+
assert_respond_to(@fh, :temporary=)
|
37
|
+
assert_nothing_raised{ @fh.temporary = true }
|
38
|
+
assert(File.temporary?(@file))
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_temporary_expected_errors
|
42
|
+
assert_raises(ArgumentError){ File.temporary? }
|
43
|
+
assert_raises(ArgumentError){ File.temporary?(@file, 'foo') }
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_system
|
47
|
+
assert_respond_to(File, :system?)
|
48
|
+
assert_nothing_raised{ File.system?(@file) }
|
49
|
+
assert_equal(false, File.system?(@file))
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_system_instance
|
53
|
+
assert_respond_to(@fh, :system=)
|
54
|
+
assert_nothing_raised{ @fh.system = true }
|
55
|
+
assert(File.system?(@file))
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_system_expected_errors
|
59
|
+
assert_raises(ArgumentError){ File.system? }
|
60
|
+
assert_raises(ArgumentError){ File.system?(@file, 'foo') }
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_sparse
|
64
|
+
assert_respond_to(File, :sparse?)
|
65
|
+
assert_nothing_raised{ File.sparse?(@file) }
|
66
|
+
assert_equal(false, File.sparse?(@file))
|
67
|
+
end
|
68
|
+
|
69
|
+
# I don't actually test assignment here since making a file a sparse
|
70
|
+
# file can't be undone.
|
71
|
+
def test_sparse_instance
|
72
|
+
assert_respond_to(@fh, :sparse=)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_sparse_file_expected_errors
|
76
|
+
assert_raises(ArgumentError){ File.sparse? }
|
77
|
+
assert_raises(ArgumentError){ File.sparse?(@file, 'foo') }
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_reparse_point
|
81
|
+
assert_respond_to(File, :reparse_point?)
|
82
|
+
assert_nothing_raised{ File.reparse_point?(@file) }
|
83
|
+
assert_equal(false, File.reparse_point?(@file))
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_reparse_point_expected_errors
|
87
|
+
assert_raises(ArgumentError){ File.reparse_point? }
|
88
|
+
assert_raises(ArgumentError){ File.reparse_point?(@file, 'foo') }
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_readonly
|
92
|
+
assert_respond_to(File, :readonly?)
|
93
|
+
assert_respond_to(File, :read_only?) # alias
|
94
|
+
assert_nothing_raised{ File.read_only?(@file) }
|
95
|
+
assert_equal(false, File.read_only?(@file))
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_readonly_instance
|
99
|
+
assert_respond_to(@fh, :readonly=)
|
100
|
+
assert_nothing_raised{ @fh.readonly = true }
|
101
|
+
assert(File.readonly?(@file))
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_read_only_expected_errors
|
105
|
+
assert_raises(ArgumentError){ File.read_only? }
|
106
|
+
assert_raises(ArgumentError){ File.read_only?(@file, 'foo') }
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_offline
|
110
|
+
assert_respond_to(File, :offline?)
|
111
|
+
assert_nothing_raised{ File.offline?(@file) }
|
112
|
+
assert_equal(false, File.offline?(@file))
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_offline_instance
|
116
|
+
assert_respond_to(@fh, :offline=)
|
117
|
+
assert_nothing_raised{ @fh.offline = true }
|
118
|
+
assert(File.offline?(@file))
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_offline_expected_errors
|
122
|
+
assert_raises(ArgumentError){ File.offline? }
|
123
|
+
assert_raises(ArgumentError){ File.offline?(@file, 'foo') }
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_normal
|
127
|
+
assert_respond_to(File, :normal?)
|
128
|
+
assert_nothing_raised{ File.normal?(@file) }
|
129
|
+
assert_equal(false, File.normal?(@file))
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_normal_instance
|
133
|
+
assert_respond_to(@fh, :normal=)
|
134
|
+
assert_nothing_raised{ @fh.normal = true }
|
135
|
+
assert(File.normal?(@file))
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_normal_expected_errors
|
139
|
+
assert_raises(ArgumentError){ File.normal? }
|
140
|
+
assert_raises(ArgumentError){ File.normal?(@file, 'foo') }
|
141
|
+
assert_raises(ArgumentError){ @fh.normal = false }
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_hidden
|
145
|
+
assert_respond_to(File, :hidden?)
|
146
|
+
assert_nothing_raised{ File.hidden?(@file) }
|
147
|
+
assert_equal(false, File.hidden?(@file))
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_hidden_instance
|
151
|
+
assert_respond_to(@fh, :hidden=)
|
152
|
+
assert_nothing_raised{ @fh.hidden = true }
|
153
|
+
assert(File.hidden?(@file))
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_hidden_expected_errors
|
157
|
+
assert_raises(ArgumentError){ File.hidden? }
|
158
|
+
assert_raises(ArgumentError){ File.hidden?(@file, 'foo') }
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_encrypted
|
162
|
+
assert_respond_to(File, :encrypted?)
|
163
|
+
assert_nothing_raised{ File.encrypted?(@file) }
|
164
|
+
assert_equal(false, File.encrypted?(@file))
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_encrypted_expected_errors
|
168
|
+
assert_raises(ArgumentError){ File.encrypted? }
|
169
|
+
assert_raises(ArgumentError){ File.encrypted?(@file, 'foo') }
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_indexed
|
173
|
+
assert_respond_to(File, :indexed?)
|
174
|
+
assert_respond_to(File, :content_indexed?)
|
175
|
+
assert_nothing_raised{ File.indexed?(@file) }
|
176
|
+
assert_equal(true, File.indexed?(@file))
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_indexed_instance
|
180
|
+
assert_respond_to(@fh, :indexed=)
|
181
|
+
assert_nothing_raised{ @fh.indexed = true }
|
182
|
+
assert(File.indexed?(@file))
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_indexed_expected_errors
|
186
|
+
assert_raises(ArgumentError){ File.indexed? }
|
187
|
+
assert_raises(ArgumentError){ File.indexed?(@file, 'foo') }
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_compressed
|
191
|
+
assert_respond_to(File, :compressed?)
|
192
|
+
assert_nothing_raised{ File.compressed?(@file) }
|
193
|
+
assert_equal(false, File.compressed?(@file))
|
194
|
+
end
|
195
|
+
|
196
|
+
# We have to explicitly reset the compressed attribute to false as
|
197
|
+
# the last of these assertions.
|
198
|
+
def test_compressed_instance
|
199
|
+
assert_respond_to(@fh, :compressed=)
|
200
|
+
assert_nothing_raised{ @fh.compressed = true }
|
201
|
+
assert(File.compressed?(@file))
|
202
|
+
assert_nothing_raised{ @fh.compressed = false }
|
203
|
+
assert_equal(false, File.compressed?(@file))
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_compressed_expected_errors
|
207
|
+
assert_raises(ArgumentError){ File.compressed? }
|
208
|
+
assert_raises(ArgumentError){ File.compressed?(@file, 'foo') }
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_archive
|
212
|
+
assert_respond_to(File, :archive?)
|
213
|
+
assert_nothing_raised{ File.archive?(@file) }
|
214
|
+
assert_equal(true, File.archive?(@file))
|
215
|
+
end
|
216
|
+
|
217
|
+
def test_archive_instance
|
218
|
+
assert_respond_to(@fh, :archive=)
|
219
|
+
assert_nothing_raised{ @fh.archive = false }
|
220
|
+
assert_equal(false, File.archive?(@file))
|
221
|
+
end
|
222
|
+
|
223
|
+
def test_archive_expected_errors
|
224
|
+
assert_raises(ArgumentError){ File.archive? }
|
225
|
+
assert_raises(ArgumentError){ File.archive?(@file, 'foo') }
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_attributes
|
229
|
+
assert_respond_to(File, :attributes)
|
230
|
+
assert_kind_of(Array, File.attributes(@file))
|
231
|
+
assert_equal(['archive', 'indexed'], File.attributes(@file))
|
232
|
+
end
|
233
|
+
|
234
|
+
def test_set_attributes
|
235
|
+
assert_respond_to(File, :set_attributes)
|
236
|
+
assert_respond_to(File, :set_attr) # alias
|
237
|
+
assert_nothing_raised{ File.set_attributes(@file, File::HIDDEN) }
|
238
|
+
assert(File.hidden?(@file))
|
239
|
+
end
|
240
|
+
|
241
|
+
def test_remove_attributes
|
242
|
+
assert_respond_to(File, :remove_attributes)
|
243
|
+
assert_respond_to(File, :unset_attr) # alias
|
244
|
+
assert_nothing_raised{ File.remove_attributes(@file, File::ARCHIVE) }
|
245
|
+
assert_equal(false, File.archive?(@file))
|
246
|
+
end
|
247
|
+
|
248
|
+
def teardown
|
249
|
+
SetFileAttributes(@file, @attr)
|
250
|
+
@file = nil
|
251
|
+
@fh.close
|
252
|
+
end
|
253
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#############################################################################
|
2
|
+
# tc_file_constants.rb
|
3
|
+
#
|
4
|
+
# Test case for the path related methods of win32-file.
|
5
|
+
#############################################################################
|
6
|
+
base = File.basename(Dir.pwd)
|
7
|
+
|
8
|
+
if base == 'test' || base =~ /win32-file/
|
9
|
+
Dir.chdir('..') if base == 'test'
|
10
|
+
$LOAD_PATH.unshift(Dir.pwd + '/lib')
|
11
|
+
Dir.chdir('test') rescue nil
|
12
|
+
end
|
13
|
+
|
14
|
+
require "test/unit"
|
15
|
+
require "win32/file"
|
16
|
+
|
17
|
+
class TC_Win32_File_Constants < Test::Unit::TestCase
|
18
|
+
def test_file_attribute_constants
|
19
|
+
assert_not_nil(File::ARCHIVE)
|
20
|
+
assert_not_nil(File::HIDDEN)
|
21
|
+
assert_not_nil(File::NORMAL)
|
22
|
+
assert_not_nil(File::INDEXED)
|
23
|
+
assert_not_nil(File::OFFLINE)
|
24
|
+
assert_not_nil(File::READONLY)
|
25
|
+
assert_not_nil(File::SYSTEM)
|
26
|
+
assert_not_nil(File::TEMPORARY)
|
27
|
+
assert_not_nil(File::CONTENT_INDEXED) # alias for INDEXED
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_security_rights_constants
|
31
|
+
assert_not_nil(File::FULL)
|
32
|
+
assert_not_nil(File::DELETE)
|
33
|
+
assert_not_nil(File::READ_CONTROL)
|
34
|
+
assert_not_nil(File::WRITE_DAC)
|
35
|
+
assert_not_nil(File::WRITE_OWNER)
|
36
|
+
assert_not_nil(File::SYNCHRONIZE)
|
37
|
+
assert_not_nil(File::STANDARD_RIGHTS_REQUIRED)
|
38
|
+
assert_not_nil(File::STANDARD_RIGHTS_READ)
|
39
|
+
assert_not_nil(File::STANDARD_RIGHTS_WRITE)
|
40
|
+
assert_not_nil(File::STANDARD_RIGHTS_EXECUTE)
|
41
|
+
assert_not_nil(File::STANDARD_RIGHTS_ALL)
|
42
|
+
assert_not_nil(File::SPECIFIC_RIGHTS_ALL)
|
43
|
+
assert_not_nil(File::ACCESS_SYSTEM_SECURITY)
|
44
|
+
assert_not_nil(File::MAXIMUM_ALLOWED)
|
45
|
+
assert_not_nil(File::GENERIC_READ)
|
46
|
+
assert_not_nil(File::GENERIC_WRITE)
|
47
|
+
assert_not_nil(File::GENERIC_EXECUTE)
|
48
|
+
assert_not_nil(File::GENERIC_ALL)
|
49
|
+
assert_not_nil(File::READ)
|
50
|
+
assert_not_nil(File::CHANGE)
|
51
|
+
assert_not_nil(File::ADD)
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#############################################################################
|
2
|
+
# tc_file_encryption.rb
|
3
|
+
#
|
4
|
+
# Test case for the encryption related methods of win32-file.
|
5
|
+
#############################################################################
|
6
|
+
base = File.basename(Dir.pwd)
|
7
|
+
|
8
|
+
if base == 'test' || base =~ /win32-file/
|
9
|
+
Dir.chdir('..') if base == 'test'
|
10
|
+
$LOAD_PATH.unshift(Dir.pwd + '/lib')
|
11
|
+
Dir.chdir('test') rescue nil
|
12
|
+
end
|
13
|
+
|
14
|
+
require "test/unit"
|
15
|
+
require "win32/file"
|
16
|
+
|
17
|
+
class TC_Win32_File_Encryption < Test::Unit::TestCase
|
18
|
+
def setup
|
19
|
+
@file = 'sometestfile.txt'
|
20
|
+
@msg = 'IGNORE - may not work due to security setup of your system'
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_encrypt
|
24
|
+
assert_respond_to(File, :encrypt)
|
25
|
+
assert_nothing_raised(@msg){ File.encrypt(@file) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_decrypt
|
29
|
+
assert_respond_to(File, :decrypt)
|
30
|
+
assert_nothing_raised(@msg){ File.decrypt(@file) }
|
31
|
+
end
|
32
|
+
|
33
|
+
def teardown
|
34
|
+
@file = nil
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
#############################################################################
|
2
|
+
# tc_file_path.rb
|
3
|
+
#
|
4
|
+
# Test case for the path related methods of win32-file.
|
5
|
+
#############################################################################
|
6
|
+
base = File.basename(Dir.pwd)
|
7
|
+
|
8
|
+
if base == 'test' || base =~ /win32-file/
|
9
|
+
Dir.chdir('..') if base == 'test'
|
10
|
+
$LOAD_PATH.unshift(Dir.pwd + '/lib')
|
11
|
+
Dir.chdir('test') rescue nil
|
12
|
+
end
|
13
|
+
|
14
|
+
require "test/unit"
|
15
|
+
require "win32/file"
|
16
|
+
|
17
|
+
class TC_Win32_File_Path < Test::Unit::TestCase
|
18
|
+
def setup
|
19
|
+
@short_file = 'SOMETE~1.TXT'
|
20
|
+
@long_file = 'sometestfile.txt'
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_basename
|
24
|
+
assert_respond_to(File, :basename)
|
25
|
+
assert_nothing_raised{ File.basename("C:\\foo") }
|
26
|
+
assert_kind_of(String, File.basename("C:\\foo"))
|
27
|
+
|
28
|
+
# Standard paths
|
29
|
+
assert_equal("baz.txt", File.basename("C:\\foo\\bar\\baz.txt"))
|
30
|
+
assert_equal("baz", File.basename("C:\\foo\\bar\\baz.txt", ".txt"))
|
31
|
+
assert_equal("baz.txt", File.basename("C:\\foo\\bar\\baz.txt", ".zip"))
|
32
|
+
assert_equal("bar", File.basename("C:\\foo\\bar"))
|
33
|
+
assert_equal("bar", File.basename("C:\\foo\\bar\\"))
|
34
|
+
assert_equal("foo", File.basename("C:\\foo"))
|
35
|
+
assert_equal("C:\\", File.basename("C:\\"))
|
36
|
+
|
37
|
+
# UNC paths
|
38
|
+
assert_equal("baz.txt", File.basename("\\\\foo\\bar\\baz.txt"))
|
39
|
+
assert_equal("baz", File.basename("\\\\foo\\bar\\baz"))
|
40
|
+
assert_equal("\\\\foo", File.basename("\\\\foo"))
|
41
|
+
assert_equal("\\\\foo\\bar", File.basename("\\\\foo\\bar"))
|
42
|
+
|
43
|
+
# Unix style paths
|
44
|
+
assert_equal("bar", File.basename("/foo/bar"))
|
45
|
+
assert_equal("bar.txt", File.basename("/foo/bar.txt"))
|
46
|
+
assert_equal("bar.txt", File.basename("bar.txt"))
|
47
|
+
assert_equal("bar", File.basename("/bar"))
|
48
|
+
assert_equal("bar", File.basename("/bar/"))
|
49
|
+
assert_equal("baz", File.basename("//foo/bar/baz"))
|
50
|
+
assert_equal("//foo", File.basename("//foo"))
|
51
|
+
assert_equal("//foo/bar", File.basename("//foo/bar"))
|
52
|
+
|
53
|
+
# Forward slashes
|
54
|
+
assert_equal("bar", File.basename("C:/foo/bar"))
|
55
|
+
assert_equal("bar", File.basename("C:/foo/bar/"))
|
56
|
+
assert_equal("foo", File.basename("C:/foo"))
|
57
|
+
assert_equal("C:/", File.basename("C:/"))
|
58
|
+
assert_equal("bar", File.basename("C:/foo/bar\\\\"))
|
59
|
+
|
60
|
+
# Edge cases
|
61
|
+
assert_equal("", File.basename(""))
|
62
|
+
assert_equal(".", File.basename("."))
|
63
|
+
assert_equal("..", File.basename(".."))
|
64
|
+
assert_equal("foo", File.basename("//foo/"))
|
65
|
+
|
66
|
+
# Suffixes
|
67
|
+
assert_equal("bar", File.basename("bar.txt", ".txt"))
|
68
|
+
assert_equal("bar", File.basename("/foo/bar.txt", ".txt"))
|
69
|
+
assert_equal("bar.txt", File.basename("bar.txt", ".exe"))
|
70
|
+
assert_equal("bar.txt", File.basename("bar.txt.exe", ".exe"))
|
71
|
+
assert_equal("bar.txt.exe", File.basename("bar.txt.exe", ".txt"))
|
72
|
+
assert_equal("bar", File.basename("bar.txt", ".*"))
|
73
|
+
assert_equal("bar.txt", File.basename("bar.txt.exe", ".*"))
|
74
|
+
|
75
|
+
# Ensure original path not modified
|
76
|
+
path = "C:\\foo\\bar"
|
77
|
+
assert_nothing_raised{ File.basename(path) }
|
78
|
+
assert_equal("C:\\foo\\bar", path)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_dirname
|
82
|
+
assert_respond_to(File, :dirname)
|
83
|
+
assert_nothing_raised{ File.dirname("C:\\foo") }
|
84
|
+
assert_kind_of(String, File.dirname("C:\\foo"))
|
85
|
+
|
86
|
+
# Standard Paths
|
87
|
+
assert_equal("C:\\foo", File.dirname("C:\\foo\\bar.txt"))
|
88
|
+
assert_equal("C:\\foo", File.dirname("C:\\foo\\bar"))
|
89
|
+
assert_equal("C:\\", File.dirname("C:\\foo"))
|
90
|
+
assert_equal("C:\\", File.dirname("C:\\"))
|
91
|
+
assert_equal(".", File.dirname("foo"))
|
92
|
+
|
93
|
+
# UNC paths
|
94
|
+
assert_equal("\\\\foo\\bar", File.dirname("\\\\foo\\bar\\baz"))
|
95
|
+
assert_equal("\\\\foo\\bar", File.dirname("\\\\foo\\bar"))
|
96
|
+
assert_equal("\\\\foo", File.dirname("\\\\foo"))
|
97
|
+
assert_equal("\\\\", File.dirname("\\\\"))
|
98
|
+
|
99
|
+
# Forward slashes
|
100
|
+
assert_equal("C:/foo", File.dirname("C:/foo/bar.txt"))
|
101
|
+
assert_equal("C:/foo", File.dirname("C:/foo/bar"))
|
102
|
+
assert_equal("C:/", File.dirname("C:/foo"))
|
103
|
+
assert_equal("C:/", File.dirname("C:/"))
|
104
|
+
assert_equal("//foo/bar", File.dirname("//foo/bar/baz"))
|
105
|
+
assert_equal("//foo/bar", File.dirname("//foo/bar"))
|
106
|
+
assert_equal("//foo", File.dirname("//foo"))
|
107
|
+
assert_equal("//", File.dirname("//"))
|
108
|
+
|
109
|
+
# Edge cases
|
110
|
+
assert_equal(".", File.dirname(""))
|
111
|
+
assert_equal(".", File.dirname("."))
|
112
|
+
assert_equal(".", File.dirname("."))
|
113
|
+
assert_raises(TypeError){ File.dirname(nil) }
|
114
|
+
|
115
|
+
# Ensure original path not modified
|
116
|
+
path = "C:\\foo\\bar"
|
117
|
+
assert_nothing_raised{ File.dirname(path) }
|
118
|
+
assert_equal("C:\\foo\\bar", path)
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_split
|
122
|
+
assert_respond_to(File, :split)
|
123
|
+
assert_nothing_raised{ File.split("C:\\foo\\bar") }
|
124
|
+
assert_kind_of(Array, File.split("C:\\foo\\bar"))
|
125
|
+
|
126
|
+
# Standard Paths
|
127
|
+
assert_equal(["C:\\foo", "bar"], File.split("C:\\foo\\bar"))
|
128
|
+
assert_equal([".", "foo"], File.split("foo"))
|
129
|
+
|
130
|
+
# Forward slashes
|
131
|
+
assert_equal(["C:/foo", "bar"], File.split("C:/foo/bar"))
|
132
|
+
assert_equal([".", "foo"], File.split("foo"))
|
133
|
+
|
134
|
+
# Unix paths
|
135
|
+
assert_equal(["/foo","bar"], File.split("/foo/bar"))
|
136
|
+
assert_equal(["/", "foo"], File.split("/foo"))
|
137
|
+
assert_equal([".", "foo"], File.split("foo"))
|
138
|
+
|
139
|
+
# UNC paths
|
140
|
+
assert_equal(["\\\\foo\\bar", "baz"], File.split("\\\\foo\\bar\\baz"))
|
141
|
+
assert_equal(["\\\\foo\\bar", ""], File.split("\\\\foo\\bar"))
|
142
|
+
assert_equal(["\\\\foo", ""], File.split("\\\\foo"))
|
143
|
+
assert_equal(["\\\\", ""], File.split("\\\\"))
|
144
|
+
|
145
|
+
# Edge cases
|
146
|
+
assert_equal(["C:\\", ""], File.split("C:\\"))
|
147
|
+
assert_equal(["", ""], File.split(""))
|
148
|
+
|
149
|
+
# Ensure original path not modified
|
150
|
+
path = "C:\\foo\\bar"
|
151
|
+
assert_nothing_raised{ File.split(path) }
|
152
|
+
assert_equal("C:\\foo\\bar", path)
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_long_path
|
156
|
+
assert_respond_to(File, :long_path)
|
157
|
+
assert_equal('sometestfile.txt', File.long_path(@short_file))
|
158
|
+
assert_equal('SOMETE~1.TXT', @short_file)
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_short_path
|
162
|
+
assert_respond_to(File, :short_path)
|
163
|
+
assert_equal('SOMETE~1.TXT', File.short_path(@long_file))
|
164
|
+
assert_equal('sometestfile.txt', @long_file)
|
165
|
+
end
|
166
|
+
|
167
|
+
def teardown
|
168
|
+
@short_file = nil
|
169
|
+
@long_file = nil
|
170
|
+
end
|
171
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
#####################################################################
|
2
|
+
# tc_file_security.rb
|
3
|
+
#
|
4
|
+
# Test case for security related methods of win32-file.
|
5
|
+
#####################################################################
|
6
|
+
base = File.basename(Dir.pwd)
|
7
|
+
|
8
|
+
if base == 'test' || base =~ /win32-file/
|
9
|
+
Dir.chdir('..') if base == 'test'
|
10
|
+
$LOAD_PATH.unshift(Dir.pwd + '/lib')
|
11
|
+
Dir.chdir('test') rescue nil
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'test/unit'
|
15
|
+
require 'win32/file'
|
16
|
+
require 'socket'
|
17
|
+
|
18
|
+
class TC_Win32_File_Security < Test::Unit::TestCase
|
19
|
+
def setup
|
20
|
+
@host = Socket.gethostname
|
21
|
+
@file = 'sometestfile.txt'
|
22
|
+
@perms = nil
|
23
|
+
end
|
24
|
+
|
25
|
+
# This will fail if there is no "Users" builtin. Not to worry.
|
26
|
+
def test_get_permissions
|
27
|
+
assert_respond_to(File, :get_permissions)
|
28
|
+
assert_nothing_raised{ File.get_permissions(@file) }
|
29
|
+
assert_nothing_raised{ File.get_permissions(@file, @host) }
|
30
|
+
assert_kind_of(Hash, File.get_permissions(@file))
|
31
|
+
assert(File.get_permissions(@file).has_key?('BUILTIN\\Users'))
|
32
|
+
assert(File.get_permissions(@file).has_key?('BUILTIN\\Administrators'))
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_set_permissions
|
36
|
+
assert_respond_to(File, :set_permissions)
|
37
|
+
assert_nothing_raised{ @perms = File.get_permissions(@file) }
|
38
|
+
assert_nothing_raised{ File.set_permissions(@file, @perms) }
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_securities
|
42
|
+
assert_respond_to(File, :securities)
|
43
|
+
assert_nothing_raised{ @perms = File.get_permissions(@file) }
|
44
|
+
|
45
|
+
@perms.each{ |acct, mask|
|
46
|
+
assert_nothing_raised{ File.securities(mask) }
|
47
|
+
assert_kind_of(Array, File.securities(mask))
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
def teardown
|
52
|
+
@file = nil
|
53
|
+
@host = nil
|
54
|
+
@perms = nil
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#####################################################################
|
2
|
+
# tc_file_stat.rb
|
3
|
+
#
|
4
|
+
# Test case for stat related methods of win32-file.
|
5
|
+
#####################################################################
|
6
|
+
base = File.basename(Dir.pwd)
|
7
|
+
|
8
|
+
if base == 'test' || base =~ /win32-file/
|
9
|
+
Dir.chdir('..') if base == 'test'
|
10
|
+
$LOAD_PATH.unshift(Dir.pwd + '/lib')
|
11
|
+
Dir.chdir('test') rescue nil
|
12
|
+
end
|
13
|
+
|
14
|
+
require "test/unit"
|
15
|
+
require "win32/file"
|
16
|
+
|
17
|
+
class TC_Win32_File_Stat < Test::Unit::TestCase
|
18
|
+
def setup
|
19
|
+
@file = 'sometestfile.txt'
|
20
|
+
end
|
21
|
+
|
22
|
+
# Although I don't perform a test against a file > 2gb here (since I
|
23
|
+
# don't feel like distributing a 2gb file), it works in my own tests.
|
24
|
+
def test_size
|
25
|
+
assert_respond_to(File, :size)
|
26
|
+
assert_equal(17, File.size(@file))
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_blksize
|
30
|
+
msg = "+The blksize may be different - ignore+"
|
31
|
+
assert_respond_to(File, :blksize)
|
32
|
+
assert_kind_of(Fixnum, File.blksize("C:\\Program Files\\Windows NT"))
|
33
|
+
assert_kind_of(Fixnum, File.blksize(@file))
|
34
|
+
assert_equal(4096, File.blksize(@file), msg)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_blksize_expected_errors
|
38
|
+
assert_raises(ArgumentError){ File.blksize }
|
39
|
+
assert_raises(ArgumentError){ File.blksize(@file, "foo") }
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_blockdev
|
43
|
+
assert_respond_to(File, :blockdev?)
|
44
|
+
assert_nothing_raised{ File.blockdev?("C:\\") }
|
45
|
+
assert_equal(true, File.blockdev?("C:\\"))
|
46
|
+
assert_equal(false, File.blockdev?("NUL"))
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_blockdev_expected_errors
|
50
|
+
assert_raises(ArgumentError){ File.blockdev? }
|
51
|
+
assert_raises(ArgumentError){ File.blockdev?(@file, "foo") }
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_chardev
|
55
|
+
assert_respond_to(File, :chardev?)
|
56
|
+
assert_nothing_raised{ File.chardev?("NUL") }
|
57
|
+
assert_equal(true, File.chardev?("NUL"))
|
58
|
+
assert_equal(false, File.chardev?("C:\\"))
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_chardev_expected_errors
|
62
|
+
assert_raises(ArgumentError){ File.chardev? }
|
63
|
+
assert_raises(ArgumentError){ File.chardev?(@file, "foo") }
|
64
|
+
end
|
65
|
+
|
66
|
+
# Ensure that not only does the File class respond to the stat method,
|
67
|
+
# but also that it's returning the File::Stat class from the
|
68
|
+
# win32-file-stat package.
|
69
|
+
#
|
70
|
+
def test_stat_class
|
71
|
+
assert_respond_to(File, :stat)
|
72
|
+
assert_kind_of(File::Stat, File.stat(@file))
|
73
|
+
assert_equal(false, File.stat(@file).hidden?)
|
74
|
+
end
|
75
|
+
|
76
|
+
# This was added after it was discovered that lstat is not aliased
|
77
|
+
# to stat automatically on Windows.
|
78
|
+
#
|
79
|
+
def test_lstat_class
|
80
|
+
assert_respond_to(File, :lstat)
|
81
|
+
assert_kind_of(File::Stat, File.lstat(@file))
|
82
|
+
assert_equal(false, File.stat(@file).hidden?)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_stat_instance
|
86
|
+
File.open(@file){ |f|
|
87
|
+
assert_respond_to(f, :stat)
|
88
|
+
assert_kind_of(File::Stat, f.stat)
|
89
|
+
assert_equal(false, f.stat.hidden?)
|
90
|
+
}
|
91
|
+
end
|
92
|
+
|
93
|
+
def teardown
|
94
|
+
@file = nil
|
95
|
+
end
|
96
|
+
end
|
data/test/ts_all.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
$LOAD_PATH.unshift(Dir.pwd)
|
2
|
+
$LOAD_PATH.unshift(Dir.pwd + '/lib')
|
3
|
+
$LOAD_PATH.unshift(Dir.pwd + '/lib/win32')
|
4
|
+
$LOAD_PATH.unshift(Dir.pwd + '/test')
|
5
|
+
|
6
|
+
require 'tc_file_encryption'
|
7
|
+
require 'tc_file_path'
|
8
|
+
require 'tc_file_stat'
|
9
|
+
require 'tc_file_attributes'
|
10
|
+
require 'tc_file_security'
|
11
|
+
require 'tc_file_constants'
|