win32-file 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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'
|