win32-file 0.6.9 → 0.7.0
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.
- checksums.yaml +4 -4
- data/CHANGES +10 -4
- data/MANIFEST +6 -6
- data/README +30 -63
- data/Rakefile +3 -21
- data/lib/win32/file.rb +347 -1154
- data/lib/win32/file/constants.rb +27 -0
- data/lib/win32/file/functions.rb +49 -0
- data/lib/win32/file/structs.rb +24 -0
- data/test/test_win32_file_link.rb +141 -0
- data/test/test_win32_file_misc.rb +16 -0
- data/test/test_win32_file_path.rb +42 -35
- data/test/test_win32_file_stat.rb +275 -105
- data/win32-file.gemspec +5 -4
- metadata +19 -26
- data/test/test_win32_file_attributes.rb +0 -285
- data/test/test_win32_file_constants.rb +0 -46
- data/test/test_win32_file_encryption.rb +0 -44
- data/test/test_win32_file_security.rb +0 -66
@@ -2,113 +2,283 @@
|
|
2
2
|
# test_win32_file_stat.rb
|
3
3
|
#
|
4
4
|
# Test case for stat related methods of win32-file. You should run
|
5
|
-
# this via the 'rake test' or 'rake
|
5
|
+
# this via the 'rake test' or 'rake test:stat' task.
|
6
6
|
#####################################################################
|
7
|
-
require '
|
8
|
-
|
9
|
-
|
10
|
-
require 'test/unit'
|
7
|
+
require 'test-unit'
|
8
|
+
require 'fileutils'
|
11
9
|
require 'win32/file'
|
10
|
+
require 'win32/security'
|
11
|
+
require 'ffi'
|
12
12
|
|
13
13
|
class TC_Win32_File_Stat < Test::Unit::TestCase
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
14
|
+
extend FFI::Library
|
15
|
+
ffi_lib :kernel32
|
16
|
+
|
17
|
+
attach_function :GetDriveTypeA, [:string], :uint
|
18
|
+
|
19
|
+
def self.startup
|
20
|
+
@@txt_file = File.join(Dir.pwd, 'stat_test.txt')
|
21
|
+
@@exe_file = File.join(Dir.pwd, 'stat_test.exe')
|
22
|
+
@@sys_file = "C:/pagefile.sys"
|
23
|
+
|
24
|
+
Dir.chdir(File.expand_path(File.dirname(__FILE__)))
|
25
|
+
File.open(@@txt_file, 'w'){ |fh| fh.puts "This is a test." }
|
26
|
+
|
27
|
+
FileUtils.touch(@@exe_file)
|
28
|
+
|
29
|
+
@@java = RUBY_PLATFORM == 'java'
|
30
|
+
@@block_dev = nil
|
31
|
+
@@elevated = Win32::Security.elevated_security?
|
32
|
+
|
33
|
+
# Find a block device
|
34
|
+
'A'.upto('Z'){ |volume|
|
35
|
+
volume += ":\\"
|
36
|
+
if [2,5,6].include?(GetDriveTypeA(volume))
|
37
|
+
@@block_dev = volume
|
38
|
+
break
|
39
|
+
end
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
def setup
|
44
|
+
@blksize = 4096 # Most likely
|
45
|
+
end
|
46
|
+
|
47
|
+
test "File::Stat class returned is from win32-file-stat library" do
|
48
|
+
assert_respond_to(File, :stat)
|
49
|
+
assert_kind_of(File::Stat, File.stat(@@txt_file))
|
50
|
+
assert_nothing_raised{ File.stat(@@txt_file).hidden? }
|
51
|
+
end
|
52
|
+
|
53
|
+
test "blksize basic functionality" do
|
54
|
+
assert_respond_to(File, :blksize)
|
55
|
+
assert_kind_of(Fixnum, File.blksize(@@txt_file))
|
56
|
+
end
|
57
|
+
|
58
|
+
test "blksize returns the expected value" do
|
59
|
+
assert_equal(@blksize, File.blksize(@@txt_file))
|
60
|
+
assert_equal(@blksize, File.blksize("C:/"))
|
61
|
+
end
|
62
|
+
|
63
|
+
test "blksize requires a single argument" do
|
64
|
+
assert_raises(ArgumentError){ File.blksize }
|
65
|
+
assert_raises(ArgumentError){ File.blksize(@@txt_file, 'foo') }
|
66
|
+
end
|
67
|
+
|
68
|
+
test "blockdev? basic functionality" do
|
69
|
+
assert_respond_to(File, :blockdev?)
|
70
|
+
assert_nothing_raised{ File.blockdev?("C:\\") }
|
71
|
+
assert_boolean(File.blockdev?('NUL'))
|
72
|
+
end
|
73
|
+
|
74
|
+
test "blockdev? returns false for non-block devices" do
|
75
|
+
assert_false(File.blockdev?(@@txt_file))
|
76
|
+
assert_false(File.blockdev?('NUL'))
|
77
|
+
assert_false(File.blockdev?('bogus'))
|
78
|
+
end
|
79
|
+
|
80
|
+
test "blockdev? returns true for block devices" do
|
81
|
+
omit_unless(@@block_dev)
|
82
|
+
omit_unless(File.exists?(@@block_dev), "No media in device - skipping")
|
83
|
+
assert_true(File.blockdev?(@@block_dev))
|
84
|
+
end
|
85
|
+
|
86
|
+
test "blockdev? requires a single argument" do
|
87
|
+
assert_raises(ArgumentError){ File.blockdev? }
|
88
|
+
assert_raises(ArgumentError){ File.blockdev?(@@txt_file, 'foo') }
|
89
|
+
end
|
90
|
+
|
91
|
+
test "chardev? basic functionality" do
|
92
|
+
assert_respond_to(File, :chardev?)
|
93
|
+
assert_nothing_raised{ File.chardev?("NUL") }
|
94
|
+
assert_boolean(File.chardev?(@@txt_file))
|
95
|
+
end
|
96
|
+
|
97
|
+
test "chardev? method returns the expected result for regular files" do
|
98
|
+
assert_false(File.chardev?(@@txt_file))
|
99
|
+
assert_false(File.chardev?('bogus'))
|
100
|
+
end
|
101
|
+
|
102
|
+
test "chardev? method returns the expected result for character devices" do
|
103
|
+
omit_if(@@java)
|
104
|
+
assert_true(File.chardev?('NUL'))
|
105
|
+
end
|
106
|
+
|
107
|
+
test "chardev? requires a single argument" do
|
108
|
+
assert_raises(ArgumentError){ File.chardev? }
|
109
|
+
assert_raises(ArgumentError){ File.chardev?(@@txt_file, 'foo') }
|
110
|
+
end
|
111
|
+
|
112
|
+
test "lstat is an alias for stat" do
|
113
|
+
assert_respond_to(File, :lstat)
|
114
|
+
assert_alias_method(File, :stat, :lstat)
|
115
|
+
end
|
116
|
+
|
117
|
+
test "directory? method basic functionality" do
|
118
|
+
assert_respond_to(File, :directory?)
|
119
|
+
assert_nothing_raised{ File.directory?(Dir.pwd) }
|
120
|
+
assert_boolean(File.directory?(Dir.pwd))
|
121
|
+
end
|
122
|
+
|
123
|
+
test "directory? method returns expected results" do
|
124
|
+
assert_true(File.directory?(Dir.pwd))
|
125
|
+
assert_false(File.directory?(@@txt_file))
|
126
|
+
assert_false(File.directory?('NUL'))
|
127
|
+
assert_false(File.directory?('bogus'))
|
128
|
+
end
|
129
|
+
|
130
|
+
test "executable? method basic functionality" do
|
131
|
+
assert_respond_to(File, :executable?)
|
132
|
+
assert_nothing_raised{ File.executable?(Dir.pwd) }
|
133
|
+
assert_boolean(File.executable?(Dir.pwd))
|
134
|
+
end
|
135
|
+
|
136
|
+
test "executable? method returns expected results" do
|
137
|
+
assert_true(File.executable?(@@exe_file))
|
138
|
+
assert_false(File.executable?(@@txt_file))
|
139
|
+
assert_false(File.directory?('NUL'))
|
140
|
+
assert_false(File.directory?('bogus'))
|
141
|
+
end
|
142
|
+
|
143
|
+
test "file? method basic functionality" do
|
144
|
+
assert_respond_to(File, :file?)
|
145
|
+
assert_nothing_raised{ File.file?(Dir.pwd) }
|
146
|
+
assert_boolean(File.file?(Dir.pwd))
|
147
|
+
end
|
148
|
+
|
149
|
+
test "file? method returns expected results" do
|
150
|
+
assert_true(File.file?(@@txt_file))
|
151
|
+
assert_true(File.file?(Dir.pwd))
|
152
|
+
assert_false(File.file?('NUL'))
|
153
|
+
assert_false(File.file?('bogus'))
|
154
|
+
end
|
155
|
+
|
156
|
+
test "ftype method basic functionality" do
|
157
|
+
assert_respond_to(File, :ftype)
|
158
|
+
assert_nothing_raised{ File.ftype(Dir.pwd) }
|
159
|
+
assert_kind_of(String, File.ftype(Dir.pwd))
|
160
|
+
end
|
161
|
+
|
162
|
+
test "ftype returns the expected string" do
|
163
|
+
assert_equal('file', File.ftype(@@txt_file))
|
164
|
+
assert_equal('directory', File.ftype(Dir.pwd))
|
165
|
+
assert_equal('characterSpecial', File.ftype('NUL'))
|
166
|
+
end
|
167
|
+
|
168
|
+
test "grpowned? method basic functionality" do
|
169
|
+
assert_respond_to(File, :grpowned?)
|
170
|
+
assert_nothing_raised{ File.grpowned?(Dir.pwd) }
|
171
|
+
assert_boolean(File.grpowned?(Dir.pwd))
|
172
|
+
end
|
173
|
+
|
174
|
+
test "grpowned? returns expected results" do
|
175
|
+
assert_true(File.grpowned?(@@txt_file))
|
176
|
+
assert_false(File.grpowned?('NUL'))
|
177
|
+
assert_false(File.grpowned?('bogus'))
|
178
|
+
end
|
179
|
+
|
180
|
+
test "owned? method basic functionality" do
|
181
|
+
assert_respond_to(File, :owned?)
|
182
|
+
assert_nothing_raised{ File.owned?(Dir.pwd) }
|
183
|
+
assert_boolean(File.owned?(Dir.pwd))
|
184
|
+
end
|
185
|
+
|
186
|
+
test "owned? returns expected results" do
|
187
|
+
if @@elevated
|
188
|
+
assert_false(File.owned?(@@txt_file))
|
189
|
+
else
|
190
|
+
assert_true(File.owned?(@@txt_file))
|
191
|
+
end
|
192
|
+
assert_false(File.owned?('NUL'))
|
193
|
+
assert_false(File.owned?('bogus'))
|
194
|
+
end
|
195
|
+
|
196
|
+
test "pipe? method basic functionality" do
|
197
|
+
assert_respond_to(File, :pipe?)
|
198
|
+
assert_nothing_raised{ File.pipe?(Dir.pwd) }
|
199
|
+
assert_boolean(File.pipe?(Dir.pwd))
|
200
|
+
end
|
201
|
+
|
202
|
+
test "pipe? returns expected results" do
|
203
|
+
assert_false(File.pipe?(@@txt_file))
|
204
|
+
assert_false(File.pipe?(Dir.pwd))
|
205
|
+
assert_false(File.pipe?('NUL'))
|
206
|
+
assert_false(File.pipe?('bogus'))
|
207
|
+
end
|
208
|
+
|
209
|
+
test "readable? basic functionality" do
|
210
|
+
assert_respond_to(File, :readable?)
|
211
|
+
assert_boolean(File.readable?(@@txt_file))
|
212
|
+
end
|
213
|
+
|
214
|
+
test "readable? returns expected value" do
|
215
|
+
assert_true(File.readable?(@@txt_file))
|
216
|
+
assert_true(File::Stat.new(Dir.pwd).readable?)
|
217
|
+
assert_false(File::Stat.new(@@sys_file).readable?)
|
218
|
+
end
|
219
|
+
|
220
|
+
test "readable_real? basic functionality" do
|
221
|
+
assert_respond_to(File, :readable_real?)
|
222
|
+
assert_boolean(File.readable_real?(@@txt_file))
|
223
|
+
end
|
224
|
+
|
225
|
+
test "readable_real? returns expected value" do
|
226
|
+
assert_true(File.readable_real?(@@txt_file))
|
227
|
+
end
|
228
|
+
|
229
|
+
test "socket? is an alias for pipe?" do
|
230
|
+
assert_respond_to(File, :socket?)
|
231
|
+
assert_alias_method(File, :socket?, :pipe?)
|
232
|
+
end
|
233
|
+
|
234
|
+
test "world_readable? basic functionality" do
|
235
|
+
assert_respond_to(File, :world_readable?)
|
236
|
+
assert_boolean(File.world_readable?(@@txt_file))
|
237
|
+
end
|
238
|
+
|
239
|
+
test "world_writable? returns expected value" do
|
240
|
+
assert_false(File.world_writable?(@@txt_file))
|
241
|
+
end
|
242
|
+
|
243
|
+
test "writable? basic functionality" do
|
244
|
+
assert_respond_to(File, :writable?)
|
245
|
+
assert_boolean(File.writable?(@@txt_file))
|
246
|
+
end
|
247
|
+
|
248
|
+
test "writable? returns expected value" do
|
249
|
+
assert_true(File.writable?(@@txt_file))
|
250
|
+
assert_true(File::Stat.new(Dir.pwd).writable?)
|
251
|
+
assert_false(File::Stat.new(@@sys_file).writable?)
|
252
|
+
end
|
253
|
+
|
254
|
+
test "writable_real? basic functionality" do
|
255
|
+
assert_respond_to(File, :writable_real?)
|
256
|
+
assert_boolean(File.writable_real?(@@txt_file))
|
257
|
+
end
|
258
|
+
|
259
|
+
test "writable_real? returns expected value" do
|
260
|
+
assert_true(File.writable_real?(@@txt_file))
|
261
|
+
end
|
262
|
+
|
263
|
+
test "check underlying custom stat attributes" do
|
264
|
+
File.open(@@txt_file){ |f|
|
265
|
+
assert_respond_to(f, :stat)
|
266
|
+
assert_kind_of(File::Stat, f.stat)
|
267
|
+
assert_false(f.stat.hidden?)
|
268
|
+
}
|
269
|
+
end
|
270
|
+
|
271
|
+
def teardown
|
272
|
+
@blksize = nil
|
273
|
+
end
|
274
|
+
|
275
|
+
def self.shutdown
|
276
|
+
File.delete(@@txt_file) if File.exists?(@@txt_file)
|
277
|
+
File.delete(@@exe_file) if File.exists?(@@exe_file)
|
278
|
+
@@txt_file = nil
|
279
|
+
@@exe_file = nil
|
280
|
+
@@elevated = nil
|
281
|
+
@@block_dev = nil
|
282
|
+
@@java = nil
|
283
|
+
end
|
114
284
|
end
|
data/win32-file.gemspec
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'win32-file'
|
5
|
-
spec.version = '0.
|
5
|
+
spec.version = '0.7.0'
|
6
6
|
spec.authors = ['Daniel J. Berger', 'Park Heesob']
|
7
7
|
spec.license = 'Artistic 2.0'
|
8
8
|
spec.email = 'djberg96@gmail.com'
|
@@ -13,13 +13,14 @@ Gem::Specification.new do |spec|
|
|
13
13
|
|
14
14
|
spec.rubyforge_project = 'win32utils'
|
15
15
|
spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
|
16
|
+
spec.required_ruby_version = ">= 1.9.0"
|
16
17
|
|
17
|
-
spec.add_dependency('
|
18
|
-
spec.add_dependency('win32-file-stat', '>= 1.
|
19
|
-
spec.add_dependency('windows-pr', '>= 1.2.0')
|
18
|
+
spec.add_dependency('ffi')
|
19
|
+
spec.add_dependency('win32-file-stat', '>= 1.4.0')
|
20
20
|
|
21
21
|
spec.add_development_dependency('rake')
|
22
22
|
spec.add_development_dependency('test-unit')
|
23
|
+
spec.add_development_dependency('win32-security')
|
23
24
|
|
24
25
|
spec.description = <<-EOF
|
25
26
|
The win32-file library adds several methods to the core File class which
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32-file
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -9,30 +9,27 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-12-
|
12
|
+
date: 2013-12-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: ffi
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: '0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - '>='
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: win32-file-stat
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - '>='
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 1.3.6
|
35
|
-
- - <
|
36
33
|
- !ruby/object:Gem::Version
|
37
34
|
version: 1.4.0
|
38
35
|
type: :runtime
|
@@ -40,27 +37,24 @@ dependencies:
|
|
40
37
|
version_requirements: !ruby/object:Gem::Requirement
|
41
38
|
requirements:
|
42
39
|
- - '>='
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: 1.3.6
|
45
|
-
- - <
|
46
40
|
- !ruby/object:Gem::Version
|
47
41
|
version: 1.4.0
|
48
42
|
- !ruby/object:Gem::Dependency
|
49
|
-
name:
|
43
|
+
name: rake
|
50
44
|
requirement: !ruby/object:Gem::Requirement
|
51
45
|
requirements:
|
52
46
|
- - '>='
|
53
47
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
55
|
-
type: :
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
52
|
requirements:
|
59
53
|
- - '>='
|
60
54
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
55
|
+
version: '0'
|
62
56
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
57
|
+
name: test-unit
|
64
58
|
requirement: !ruby/object:Gem::Requirement
|
65
59
|
requirements:
|
66
60
|
- - '>='
|
@@ -74,7 +68,7 @@ dependencies:
|
|
74
68
|
- !ruby/object:Gem::Version
|
75
69
|
version: '0'
|
76
70
|
- !ruby/object:Gem::Dependency
|
77
|
-
name:
|
71
|
+
name: win32-security
|
78
72
|
requirement: !ruby/object:Gem::Requirement
|
79
73
|
requirements:
|
80
74
|
- - '>='
|
@@ -102,15 +96,16 @@ extra_rdoc_files:
|
|
102
96
|
- MANIFEST
|
103
97
|
files:
|
104
98
|
- CHANGES
|
99
|
+
- lib/win32/file/constants.rb
|
100
|
+
- lib/win32/file/functions.rb
|
101
|
+
- lib/win32/file/structs.rb
|
105
102
|
- lib/win32/file.rb
|
106
103
|
- MANIFEST
|
107
104
|
- Rakefile
|
108
105
|
- README
|
109
|
-
- test/
|
110
|
-
- test/
|
111
|
-
- test/test_win32_file_encryption.rb
|
106
|
+
- test/test_win32_file_link.rb
|
107
|
+
- test/test_win32_file_misc.rb
|
112
108
|
- test/test_win32_file_path.rb
|
113
|
-
- test/test_win32_file_security.rb
|
114
109
|
- test/test_win32_file_stat.rb
|
115
110
|
- win32-file.gemspec
|
116
111
|
homepage: http://github.com/djberg96/win32-file
|
@@ -125,7 +120,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
120
|
requirements:
|
126
121
|
- - '>='
|
127
122
|
- !ruby/object:Gem::Version
|
128
|
-
version:
|
123
|
+
version: 1.9.0
|
129
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
125
|
requirements:
|
131
126
|
- - '>='
|
@@ -138,9 +133,7 @@ signing_key:
|
|
138
133
|
specification_version: 4
|
139
134
|
summary: Extra or redefined methods for the File class on Windows.
|
140
135
|
test_files:
|
141
|
-
- test/
|
142
|
-
- test/
|
143
|
-
- test/test_win32_file_encryption.rb
|
136
|
+
- test/test_win32_file_link.rb
|
137
|
+
- test/test_win32_file_misc.rb
|
144
138
|
- test/test_win32_file_path.rb
|
145
|
-
- test/test_win32_file_security.rb
|
146
139
|
- test/test_win32_file_stat.rb
|