win32-file 0.5.5 → 0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +10 -1
- data/MANIFEST +6 -6
- data/Rakefile +13 -12
- data/lib/win32/file.rb +52 -40
- data/test/{tc_file_attributes.rb → test_win32_file_attributes.rb} +95 -64
- data/test/{tc_file_constants.rb → test_win32_file_constants.rb} +1 -1
- data/test/{tc_file_encryption.rb → test_win32_file_encryption.rb} +20 -9
- data/test/{tc_file_path.rb → test_win32_file_path.rb} +60 -31
- data/test/test_win32_file_security.rb +66 -0
- data/test/{tc_file_stat.rb → test_win32_file_stat.rb} +42 -23
- data/win32-file.gemspec +5 -3
- metadata +28 -19
- data/test/sometestfile.txt +0 -1
- data/test/tc_file_security.rb +0 -51
data/CHANGES
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
== 0.5.6 - 30-Sep-2008
|
2
|
+
* The File.long_path and File.short_path methods now return the full path
|
3
|
+
instead of just the basename of the path. I really have no idea why I was
|
4
|
+
doing that before, but it's fixed now.
|
5
|
+
* Fixed error handling in the File#compressed= and File#sparse= methods.
|
6
|
+
* All tests were renamed and refactored to use test-unix 2.x, which is now
|
7
|
+
a pre-requisite for this library.
|
8
|
+
* Some gemspec updates, including a rubyforge project.
|
9
|
+
|
1
10
|
== 0.5.5 - 22-Nov-2007
|
2
11
|
* Fixed a bug in the File.dirname method with regards to relative paths.
|
3
12
|
Thanks go to an Laust Rud for the spot.
|
@@ -136,4 +145,4 @@
|
|
136
145
|
* Documentation additions
|
137
146
|
|
138
147
|
== 0.1.0 - 29-Oct-2003
|
139
|
-
* Initial release
|
148
|
+
* Initial release
|
data/MANIFEST
CHANGED
@@ -5,9 +5,9 @@
|
|
5
5
|
* win32-file.gemspec
|
6
6
|
* lib/win32/file.rb
|
7
7
|
* test/sometestfile.txt
|
8
|
-
* test/
|
9
|
-
* test/
|
10
|
-
* test/
|
11
|
-
* test/
|
12
|
-
* test/
|
13
|
-
* test/
|
8
|
+
* test/test_win32_file_attributes.rb
|
9
|
+
* test/test_win32_file_constants.rb
|
10
|
+
* test/test_win32_file_encryption.rb
|
11
|
+
* test/test_win32_file_path.rb
|
12
|
+
* test/test_win32_file_security.rb
|
13
|
+
* test/test_win32_file_stat.rb
|
data/Rakefile
CHANGED
@@ -3,11 +3,14 @@ require 'rake/testtask'
|
|
3
3
|
require 'rbconfig'
|
4
4
|
include Config
|
5
5
|
|
6
|
+
desc 'Clean any text files that may have been left over from tests'
|
6
7
|
task :clean do
|
7
|
-
|
8
|
+
Dir['test/*'].each{ |file|
|
9
|
+
rm file if File.extname(file) == '.txt'
|
10
|
+
}
|
8
11
|
end
|
9
12
|
|
10
|
-
desc 'Install the win32-file
|
13
|
+
desc 'Install the win32-file library (non-gem)'
|
11
14
|
task :install do
|
12
15
|
sitelibdir = CONFIG['sitelibdir']
|
13
16
|
installdir = File.join(sitelibdir, 'win32')
|
@@ -17,7 +20,7 @@ task :install do
|
|
17
20
|
FileUtils.cp(file, installdir, :verbose => true)
|
18
21
|
end
|
19
22
|
|
20
|
-
desc 'Install the win32-file
|
23
|
+
desc 'Install the win32-file library as a gem'
|
21
24
|
task :install_gem => [:clean] do
|
22
25
|
ruby 'win32-file.gemspec'
|
23
26
|
file = Dir['win32-file*.gem'].first
|
@@ -25,44 +28,42 @@ task :install_gem => [:clean] do
|
|
25
28
|
end
|
26
29
|
|
27
30
|
Rake::TestTask.new("test") do |t|
|
28
|
-
t.libs << 'test'
|
29
31
|
t.verbose = true
|
30
32
|
t.warning = true
|
31
|
-
t.test_files = FileList['test/tc*']
|
32
33
|
end
|
33
34
|
|
34
35
|
Rake::TestTask.new("test_attributes") do |t|
|
35
36
|
t.verbose = true
|
36
37
|
t.warning = true
|
37
|
-
t.test_files = FileList['test/
|
38
|
+
t.test_files = FileList['test/test_win32_file_attributes.rb']
|
38
39
|
end
|
39
40
|
|
40
41
|
Rake::TestTask.new("test_constants") do |t|
|
41
42
|
t.verbose = true
|
42
43
|
t.warning = true
|
43
|
-
t.test_files = FileList['test/
|
44
|
+
t.test_files = FileList['test/test_win32_file_constants.rb']
|
44
45
|
end
|
45
46
|
|
46
47
|
Rake::TestTask.new("test_encryption") do |t|
|
47
48
|
t.verbose = true
|
48
49
|
t.warning = true
|
49
|
-
t.test_files = FileList['test/
|
50
|
+
t.test_files = FileList['test/test_win32_file_encryption.rb']
|
50
51
|
end
|
51
52
|
|
52
53
|
Rake::TestTask.new("test_path") do |t|
|
53
54
|
t.verbose = true
|
54
55
|
t.warning = true
|
55
|
-
t.test_files = FileList['test/
|
56
|
+
t.test_files = FileList['test/test_win32_file_path.rb']
|
56
57
|
end
|
57
58
|
|
58
59
|
Rake::TestTask.new("test_security") do |t|
|
59
60
|
t.verbose = true
|
60
61
|
t.warning = true
|
61
|
-
t.test_files = FileList['test/
|
62
|
+
t.test_files = FileList['test/test_win32_file_security.rb']
|
62
63
|
end
|
63
64
|
|
64
65
|
Rake::TestTask.new("test_stat") do |t|
|
65
66
|
t.verbose = true
|
66
67
|
t.warning = true
|
67
|
-
t.test_files = FileList['test/
|
68
|
-
end
|
68
|
+
t.test_files = FileList['test/test_win32_file_stat.rb']
|
69
|
+
end
|
data/lib/win32/file.rb
CHANGED
@@ -3,12 +3,13 @@ require 'windows/limits'
|
|
3
3
|
require 'win32/file/stat'
|
4
4
|
|
5
5
|
class File
|
6
|
-
# Some of these are courtesy of win32-file-stat
|
7
6
|
include Windows::Error
|
8
7
|
include Windows::File
|
9
8
|
include Windows::Security
|
10
9
|
include Windows::Limits
|
11
10
|
include Windows::DeviceIO
|
11
|
+
include Windows::Handle
|
12
|
+
|
12
13
|
extend Windows::Error
|
13
14
|
extend Windows::File
|
14
15
|
extend Windows::Path
|
@@ -16,10 +17,11 @@ class File
|
|
16
17
|
extend Windows::MSVCRT::Buffer
|
17
18
|
extend Windows::Limits
|
18
19
|
|
19
|
-
|
20
|
-
|
20
|
+
# The version of the win32-file library
|
21
|
+
VERSION = '0.5.6'
|
21
22
|
|
22
23
|
# Abbreviated attribute constants for convenience
|
24
|
+
|
23
25
|
ARCHIVE = FILE_ATTRIBUTE_ARCHIVE
|
24
26
|
COMPRESSED = FILE_ATTRIBUTE_COMPRESSED
|
25
27
|
HIDDEN = FILE_ATTRIBUTE_HIDDEN
|
@@ -32,6 +34,7 @@ class File
|
|
32
34
|
CONTENT_INDEXED = 0x0002000
|
33
35
|
|
34
36
|
# Custom Security rights
|
37
|
+
|
35
38
|
FULL = STANDARD_RIGHTS_ALL | FILE_READ_DATA | FILE_WRITE_DATA |
|
36
39
|
FILE_APPEND_DATA | FILE_READ_EA | FILE_WRITE_EA | FILE_EXECUTE |
|
37
40
|
FILE_DELETE_CHILD | FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES
|
@@ -313,9 +316,9 @@ class File
|
|
313
316
|
memcpy(ace_buf, ace_ptr.unpack('L').first, ace_buf.size)
|
314
317
|
|
315
318
|
if ace_buf.unpack('CCS').first == ACCESS_ALLOWED_ACE_TYPE
|
316
|
-
name = 0.chr *
|
319
|
+
name = 0.chr * MAXPATH
|
317
320
|
name_size = [name.size].pack('L')
|
318
|
-
domain = 0.chr *
|
321
|
+
domain = 0.chr * MAXPATH
|
319
322
|
domain_size = [domain.size].pack('L')
|
320
323
|
snu_ptr = 0.chr * 4
|
321
324
|
|
@@ -488,7 +491,7 @@ class File
|
|
488
491
|
file
|
489
492
|
end
|
490
493
|
|
491
|
-
# Returns +
|
494
|
+
# Returns +path+ in long format. For example, if 'SOMEFI~1.TXT'
|
492
495
|
# was the argument provided, and the short representation for
|
493
496
|
# 'somefile.txt', then this method would return 'somefile.txt'.
|
494
497
|
#
|
@@ -496,23 +499,23 @@ class File
|
|
496
499
|
# from working as expected. In that case, you will get back the file
|
497
500
|
# name in 8.3 format.
|
498
501
|
#
|
499
|
-
def long_path(
|
500
|
-
buf = 0.chr *
|
501
|
-
if GetLongPathName(
|
502
|
+
def long_path(path)
|
503
|
+
buf = 0.chr * MAXPATH
|
504
|
+
if GetLongPathName(path, buf, buf.size) == 0
|
502
505
|
raise ArgumentError, get_last_error
|
503
506
|
end
|
504
|
-
|
507
|
+
buf.split(0.chr).first
|
505
508
|
end
|
506
509
|
|
507
|
-
# Returns
|
510
|
+
# Returns +path+ in 8.3 format. For example, 'c:\documentation.doc'
|
508
511
|
# would be returned as 'c:\docume~1.doc'.
|
509
512
|
#
|
510
|
-
def short_path(
|
511
|
-
buf = 0.chr *
|
512
|
-
if GetShortPathName(
|
513
|
+
def short_path(path)
|
514
|
+
buf = 0.chr * MAXPATH
|
515
|
+
if GetShortPathName(path, buf, buf.size) == 0
|
513
516
|
raise ArgumentError, get_last_error
|
514
517
|
end
|
515
|
-
|
518
|
+
buf.split(0.chr).first
|
516
519
|
end
|
517
520
|
|
518
521
|
# Splits the given string into a directory and a file component and
|
@@ -796,6 +799,7 @@ class File
|
|
796
799
|
in_buf = [in_buf].pack('L')
|
797
800
|
bytes = [0].pack('L')
|
798
801
|
|
802
|
+
# We can't use get_osfhandle here because we need specific attributes
|
799
803
|
handle = CreateFile(
|
800
804
|
self.path,
|
801
805
|
FILE_READ_DATA | FILE_WRITE_DATA,
|
@@ -809,20 +813,24 @@ class File
|
|
809
813
|
if handle == INVALID_HANDLE_VALUE
|
810
814
|
raise ArgumentError, get_last_error
|
811
815
|
end
|
816
|
+
|
817
|
+
begin
|
818
|
+
bool = DeviceIoControl(
|
819
|
+
handle,
|
820
|
+
FSCTL_SET_COMPRESSION(),
|
821
|
+
in_buf,
|
822
|
+
in_buf.length,
|
823
|
+
0,
|
824
|
+
0,
|
825
|
+
bytes,
|
826
|
+
0
|
827
|
+
)
|
812
828
|
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
0,
|
819
|
-
0,
|
820
|
-
bytes,
|
821
|
-
0
|
822
|
-
)
|
823
|
-
|
824
|
-
if val == 0
|
825
|
-
raise ArgumentError, get_last_error
|
829
|
+
unless bool
|
830
|
+
raise ArgumentError, get_last_error
|
831
|
+
end
|
832
|
+
ensure
|
833
|
+
CloseHandle(handle)
|
826
834
|
end
|
827
835
|
|
828
836
|
self
|
@@ -969,19 +977,23 @@ class File
|
|
969
977
|
raise ArgumentError, get_last_error
|
970
978
|
end
|
971
979
|
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
|
980
|
+
begin
|
981
|
+
bool = DeviceIoControl(
|
982
|
+
handle,
|
983
|
+
FSCTL_SET_SPARSE(),
|
984
|
+
0,
|
985
|
+
0,
|
986
|
+
0,
|
987
|
+
0,
|
988
|
+
bytes,
|
989
|
+
0
|
990
|
+
)
|
982
991
|
|
983
|
-
|
984
|
-
|
992
|
+
unless bool == 0
|
993
|
+
raise ArgumentError, get_last_error
|
994
|
+
end
|
995
|
+
ensure
|
996
|
+
CloseHandle(handle)
|
985
997
|
end
|
986
998
|
|
987
999
|
self
|
@@ -1,63 +1,72 @@
|
|
1
1
|
#############################################################################
|
2
|
-
#
|
2
|
+
# test_win32_file_attributes.rb
|
3
3
|
#
|
4
4
|
# Test case for the attribute related methods of win32-file. You should run
|
5
5
|
# this via the 'rake test' or 'rake test_attributes' task.
|
6
6
|
#############################################################################
|
7
|
+
require 'rubygems'
|
8
|
+
gem 'test-unit'
|
9
|
+
|
7
10
|
require 'test/unit'
|
8
11
|
require 'win32/file'
|
9
12
|
|
10
13
|
class TC_Win32_File_Attributes < Test::Unit::TestCase
|
11
14
|
include Windows::File
|
15
|
+
extend Windows::File
|
16
|
+
|
17
|
+
def self.startup
|
18
|
+
Dir.chdir('test') unless File.basename(Dir.pwd) == 'test'
|
19
|
+
@@file = File.join(Dir.pwd, 'test_file.txt')
|
20
|
+
File.open(@@file, 'w'){ |fh| fh.puts "This is a test." }
|
21
|
+
end
|
22
|
+
|
12
23
|
def setup
|
13
|
-
@
|
14
|
-
@
|
15
|
-
@fh = File.open(@file)
|
16
|
-
@attr = GetFileAttributes(@file)
|
24
|
+
@fh = File.open(@@file)
|
25
|
+
@attr = GetFileAttributes(@@file)
|
17
26
|
end
|
18
27
|
|
19
28
|
def test_version
|
20
|
-
assert_equal('0.5.
|
29
|
+
assert_equal('0.5.6', File::VERSION)
|
21
30
|
end
|
22
31
|
|
23
32
|
def test_temporary
|
24
33
|
assert_respond_to(File, :temporary?)
|
25
|
-
assert_nothing_raised{ File.temporary?(
|
26
|
-
assert_equal(false, File.temporary?(
|
34
|
+
assert_nothing_raised{ File.temporary?(@@file) }
|
35
|
+
assert_equal(false, File.temporary?(@@file))
|
27
36
|
end
|
28
37
|
|
29
38
|
def test_temporary_instance
|
30
39
|
assert_respond_to(@fh, :temporary=)
|
31
40
|
assert_nothing_raised{ @fh.temporary = true }
|
32
|
-
assert(File.temporary?(
|
41
|
+
assert(File.temporary?(@@file))
|
33
42
|
end
|
34
43
|
|
35
44
|
def test_temporary_expected_errors
|
36
45
|
assert_raises(ArgumentError){ File.temporary? }
|
37
|
-
assert_raises(ArgumentError){ File.temporary?(
|
46
|
+
assert_raises(ArgumentError){ File.temporary?(@@file, 'foo') }
|
38
47
|
end
|
39
48
|
|
40
49
|
def test_system
|
41
50
|
assert_respond_to(File, :system?)
|
42
|
-
assert_nothing_raised{ File.system?(
|
43
|
-
assert_equal(false, File.system?(
|
51
|
+
assert_nothing_raised{ File.system?(@@file) }
|
52
|
+
assert_equal(false, File.system?(@@file))
|
44
53
|
end
|
45
54
|
|
46
55
|
def test_system_instance
|
47
56
|
assert_respond_to(@fh, :system=)
|
48
57
|
assert_nothing_raised{ @fh.system = true }
|
49
|
-
assert(File.system?(
|
58
|
+
assert(File.system?(@@file))
|
50
59
|
end
|
51
60
|
|
52
61
|
def test_system_expected_errors
|
53
62
|
assert_raises(ArgumentError){ File.system? }
|
54
|
-
assert_raises(ArgumentError){ File.system?(
|
63
|
+
assert_raises(ArgumentError){ File.system?(@@file, 'foo') }
|
55
64
|
end
|
56
65
|
|
57
66
|
def test_sparse
|
58
67
|
assert_respond_to(File, :sparse?)
|
59
|
-
assert_nothing_raised{ File.sparse?(
|
60
|
-
assert_equal(false, File.sparse?(
|
68
|
+
assert_nothing_raised{ File.sparse?(@@file) }
|
69
|
+
assert_equal(false, File.sparse?(@@file))
|
61
70
|
end
|
62
71
|
|
63
72
|
# I don't actually test assignment here since making a file a sparse
|
@@ -68,181 +77,203 @@ class TC_Win32_File_Attributes < Test::Unit::TestCase
|
|
68
77
|
|
69
78
|
def test_sparse_file_expected_errors
|
70
79
|
assert_raises(ArgumentError){ File.sparse? }
|
71
|
-
assert_raises(ArgumentError){ File.sparse?(
|
80
|
+
assert_raises(ArgumentError){ File.sparse?(@@file, 'foo') }
|
72
81
|
end
|
73
82
|
|
74
83
|
def test_reparse_point
|
75
84
|
assert_respond_to(File, :reparse_point?)
|
76
|
-
assert_nothing_raised{ File.reparse_point?(
|
77
|
-
assert_equal(false, File.reparse_point?(
|
85
|
+
assert_nothing_raised{ File.reparse_point?(@@file) }
|
86
|
+
assert_equal(false, File.reparse_point?(@@file))
|
78
87
|
end
|
79
88
|
|
80
89
|
def test_reparse_point_expected_errors
|
81
90
|
assert_raises(ArgumentError){ File.reparse_point? }
|
82
|
-
assert_raises(ArgumentError){ File.reparse_point?(
|
91
|
+
assert_raises(ArgumentError){ File.reparse_point?(@@file, 'foo') }
|
83
92
|
end
|
84
93
|
|
85
94
|
def test_readonly
|
86
95
|
assert_respond_to(File, :readonly?)
|
87
|
-
|
88
|
-
|
89
|
-
|
96
|
+
assert_nothing_raised{ File.readonly?(@@file) }
|
97
|
+
assert_equal(false, File.readonly?(@@file))
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_read_only_alias
|
101
|
+
assert_respond_to(File, :read_only?)
|
102
|
+
assert_equal(true, File.method(:readonly?) == File.method(:read_only?))
|
90
103
|
end
|
91
104
|
|
92
105
|
def test_readonly_instance
|
93
106
|
assert_respond_to(@fh, :readonly=)
|
94
107
|
assert_nothing_raised{ @fh.readonly = true }
|
95
|
-
assert(File.readonly?(
|
108
|
+
assert(File.readonly?(@@file))
|
96
109
|
end
|
97
110
|
|
98
111
|
def test_read_only_expected_errors
|
99
112
|
assert_raises(ArgumentError){ File.read_only? }
|
100
|
-
assert_raises(ArgumentError){ File.read_only?(
|
113
|
+
assert_raises(ArgumentError){ File.read_only?(@@file, 'foo') }
|
101
114
|
end
|
102
115
|
|
103
116
|
def test_offline
|
104
117
|
assert_respond_to(File, :offline?)
|
105
|
-
assert_nothing_raised{ File.offline?(
|
106
|
-
assert_equal(false, File.offline?(
|
118
|
+
assert_nothing_raised{ File.offline?(@@file) }
|
119
|
+
assert_equal(false, File.offline?(@@file))
|
107
120
|
end
|
108
121
|
|
109
122
|
def test_offline_instance
|
110
123
|
assert_respond_to(@fh, :offline=)
|
111
124
|
assert_nothing_raised{ @fh.offline = true }
|
112
|
-
assert(File.offline?(
|
125
|
+
assert(File.offline?(@@file))
|
113
126
|
end
|
114
127
|
|
115
128
|
def test_offline_expected_errors
|
116
129
|
assert_raises(ArgumentError){ File.offline? }
|
117
|
-
assert_raises(ArgumentError){ File.offline?(
|
130
|
+
assert_raises(ArgumentError){ File.offline?(@@file, 'foo') }
|
118
131
|
end
|
119
132
|
|
120
133
|
def test_normal
|
121
134
|
assert_respond_to(File, :normal?)
|
122
|
-
assert_nothing_raised{ File.normal?(
|
123
|
-
assert_equal(false, File.normal?(
|
135
|
+
assert_nothing_raised{ File.normal?(@@file) }
|
136
|
+
assert_equal(false, File.normal?(@@file))
|
124
137
|
end
|
125
138
|
|
126
139
|
def test_normal_instance
|
127
140
|
assert_respond_to(@fh, :normal=)
|
128
141
|
assert_nothing_raised{ @fh.normal = true }
|
129
|
-
assert(File.normal?(
|
142
|
+
assert(File.normal?(@@file))
|
130
143
|
end
|
131
144
|
|
132
145
|
def test_normal_expected_errors
|
133
146
|
assert_raises(ArgumentError){ File.normal? }
|
134
|
-
assert_raises(ArgumentError){ File.normal?(
|
147
|
+
assert_raises(ArgumentError){ File.normal?(@@file, 'foo') }
|
135
148
|
assert_raises(ArgumentError){ @fh.normal = false }
|
136
149
|
end
|
137
150
|
|
138
151
|
def test_hidden
|
139
152
|
assert_respond_to(File, :hidden?)
|
140
|
-
assert_nothing_raised{ File.hidden?(
|
141
|
-
assert_equal(false, File.hidden?(
|
153
|
+
assert_nothing_raised{ File.hidden?(@@file) }
|
154
|
+
assert_equal(false, File.hidden?(@@file))
|
142
155
|
end
|
143
156
|
|
144
157
|
def test_hidden_instance
|
145
158
|
assert_respond_to(@fh, :hidden=)
|
146
159
|
assert_nothing_raised{ @fh.hidden = true }
|
147
|
-
assert(File.hidden?(
|
160
|
+
assert(File.hidden?(@@file))
|
148
161
|
end
|
149
162
|
|
150
163
|
def test_hidden_expected_errors
|
151
164
|
assert_raises(ArgumentError){ File.hidden? }
|
152
|
-
assert_raises(ArgumentError){ File.hidden?(
|
165
|
+
assert_raises(ArgumentError){ File.hidden?(@@file, 'foo') }
|
153
166
|
end
|
154
167
|
|
155
168
|
def test_encrypted
|
156
169
|
assert_respond_to(File, :encrypted?)
|
157
|
-
assert_nothing_raised{ File.encrypted?(
|
158
|
-
assert_equal(false, File.encrypted?(
|
170
|
+
assert_nothing_raised{ File.encrypted?(@@file) }
|
171
|
+
assert_equal(false, File.encrypted?(@@file))
|
159
172
|
end
|
160
173
|
|
161
174
|
def test_encrypted_expected_errors
|
162
175
|
assert_raises(ArgumentError){ File.encrypted? }
|
163
|
-
assert_raises(ArgumentError){ File.encrypted?(
|
176
|
+
assert_raises(ArgumentError){ File.encrypted?(@@file, 'foo') }
|
164
177
|
end
|
165
178
|
|
166
179
|
def test_indexed
|
167
180
|
assert_respond_to(File, :indexed?)
|
181
|
+
assert_nothing_raised{ File.indexed?(@@file) }
|
182
|
+
assert_equal(true, File.indexed?(@@file))
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_content_indexed_alias
|
168
186
|
assert_respond_to(File, :content_indexed?)
|
169
|
-
|
170
|
-
assert_equal(true, File.indexed?(@file))
|
187
|
+
assert(File.method(:content_indexed?) == File.method(:indexed?))
|
171
188
|
end
|
172
189
|
|
173
190
|
def test_indexed_instance
|
174
191
|
assert_respond_to(@fh, :indexed=)
|
175
192
|
assert_nothing_raised{ @fh.indexed = true }
|
176
|
-
assert(File.indexed?(
|
193
|
+
assert(File.indexed?(@@file))
|
177
194
|
end
|
178
195
|
|
179
196
|
def test_indexed_expected_errors
|
180
197
|
assert_raises(ArgumentError){ File.indexed? }
|
181
|
-
assert_raises(ArgumentError){ File.indexed?(
|
198
|
+
assert_raises(ArgumentError){ File.indexed?(@@file, 'foo') }
|
182
199
|
end
|
183
200
|
|
184
201
|
def test_compressed
|
185
202
|
assert_respond_to(File, :compressed?)
|
186
|
-
assert_nothing_raised{ File.compressed?(
|
187
|
-
assert_equal(false, File.compressed?(
|
203
|
+
assert_nothing_raised{ File.compressed?(@@file) }
|
204
|
+
assert_equal(false, File.compressed?(@@file))
|
188
205
|
end
|
189
206
|
|
190
207
|
# We have to explicitly reset the compressed attribute to false as
|
191
208
|
# the last of these assertions.
|
192
209
|
def test_compressed_instance
|
193
210
|
assert_respond_to(@fh, :compressed=)
|
211
|
+
assert_equal(false, File.compressed?(@@file))
|
212
|
+
|
194
213
|
assert_nothing_raised{ @fh.compressed = true }
|
195
|
-
|
214
|
+
assert_equal(true, File.compressed?(@@file))
|
215
|
+
|
196
216
|
assert_nothing_raised{ @fh.compressed = false }
|
197
|
-
assert_equal(false, File.compressed?(
|
217
|
+
assert_equal(false, File.compressed?(@@file))
|
198
218
|
end
|
199
219
|
|
200
220
|
def test_compressed_expected_errors
|
201
221
|
assert_raises(ArgumentError){ File.compressed? }
|
202
|
-
assert_raises(ArgumentError){ File.compressed?(
|
222
|
+
assert_raises(ArgumentError){ File.compressed?(@@file, 'foo') }
|
203
223
|
end
|
204
224
|
|
205
225
|
def test_archive
|
206
226
|
assert_respond_to(File, :archive?)
|
207
|
-
assert_nothing_raised{ File.archive?(
|
208
|
-
assert_equal(true, File.archive?(
|
227
|
+
assert_nothing_raised{ File.archive?(@@file) }
|
228
|
+
assert_equal(true, File.archive?(@@file))
|
209
229
|
end
|
210
230
|
|
211
231
|
def test_archive_instance
|
212
232
|
assert_respond_to(@fh, :archive=)
|
213
233
|
assert_nothing_raised{ @fh.archive = false }
|
214
|
-
assert_equal(false, File.archive?(
|
234
|
+
assert_equal(false, File.archive?(@@file))
|
215
235
|
end
|
216
236
|
|
217
237
|
def test_archive_expected_errors
|
218
238
|
assert_raises(ArgumentError){ File.archive? }
|
219
|
-
assert_raises(ArgumentError){ File.archive?(
|
239
|
+
assert_raises(ArgumentError){ File.archive?(@@file, 'foo') }
|
220
240
|
end
|
221
241
|
|
222
242
|
def test_attributes
|
223
243
|
assert_respond_to(File, :attributes)
|
224
|
-
assert_kind_of(Array, File.attributes(
|
225
|
-
assert_equal(['archive', 'indexed'], File.attributes(
|
244
|
+
assert_kind_of(Array, File.attributes(@@file))
|
245
|
+
assert_equal(['archive', 'indexed'], File.attributes(@@file))
|
226
246
|
end
|
227
247
|
|
228
248
|
def test_set_attributes
|
229
249
|
assert_respond_to(File, :set_attributes)
|
230
|
-
|
231
|
-
|
232
|
-
|
250
|
+
assert_nothing_raised{ File.set_attributes(@@file, File::HIDDEN) }
|
251
|
+
assert(File.hidden?(@@file))
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_set_attr_alias
|
255
|
+
assert_respond_to(File, :set_attr)
|
256
|
+
assert(File.method(:set_attr) == File.method(:set_attributes))
|
233
257
|
end
|
234
258
|
|
235
259
|
def test_remove_attributes
|
236
260
|
assert_respond_to(File, :remove_attributes)
|
237
|
-
|
238
|
-
|
239
|
-
assert_equal(false, File.archive?(@file))
|
261
|
+
assert_nothing_raised{ File.remove_attributes(@@file, File::ARCHIVE) }
|
262
|
+
assert_equal(false, File.archive?(@@file))
|
240
263
|
end
|
241
264
|
|
265
|
+
def test_unset_attr_alias
|
266
|
+
assert_respond_to(File, :unset_attr)
|
267
|
+
assert(File.method(:unset_attr) == File.method(:remove_attributes))
|
268
|
+
end
|
269
|
+
|
242
270
|
def teardown
|
243
|
-
SetFileAttributes(
|
244
|
-
@file = nil
|
245
|
-
@dir = nil
|
271
|
+
SetFileAttributes(@@file, @attr)
|
246
272
|
@fh.close
|
247
273
|
end
|
274
|
+
|
275
|
+
def self.shutdown
|
276
|
+
File.delete(@@file)
|
277
|
+
@@file = nil
|
278
|
+
end
|
248
279
|
end
|
@@ -1,33 +1,44 @@
|
|
1
1
|
#############################################################################
|
2
|
-
#
|
2
|
+
# test_win32_file_encryption.rb
|
3
3
|
#
|
4
4
|
# Test case for the encryption related methods of win32-file. You should
|
5
5
|
# run this test via the 'rake test' or 'rake test_encryption' task.
|
6
6
|
#
|
7
7
|
# Note: These tests may fail based on the security setup of your system.
|
8
8
|
#############################################################################
|
9
|
+
require 'rubygems'
|
10
|
+
gem 'test-unit'
|
11
|
+
|
9
12
|
require 'test/unit'
|
10
13
|
require 'win32/file'
|
11
14
|
|
12
15
|
class TC_Win32_File_Encryption < Test::Unit::TestCase
|
16
|
+
def self.startup
|
17
|
+
Dir.chdir('test') unless File.basename(Dir.pwd) == 'test'
|
18
|
+
@@file = File.join(Dir.pwd, 'encryption_test.txt')
|
19
|
+
File.open(@@file, 'w'){ |fh| fh.puts "This is an encryption test." }
|
20
|
+
end
|
21
|
+
|
13
22
|
def setup
|
14
|
-
@
|
15
|
-
@file = File.join(@dir, 'sometestfile.txt')
|
16
|
-
@msg = '=> Ignore. May not work due to security setup of your system.'
|
23
|
+
@msg = '=> Ignore. May not work due to security setup of your system.'
|
17
24
|
end
|
18
25
|
|
19
26
|
def test_encrypt
|
20
27
|
assert_respond_to(File, :encrypt)
|
21
|
-
assert_nothing_raised(@msg){ File.encrypt(
|
28
|
+
assert_nothing_raised(@msg){ File.encrypt(@@file) }
|
22
29
|
end
|
23
30
|
|
24
31
|
def test_decrypt
|
25
32
|
assert_respond_to(File, :decrypt)
|
26
|
-
assert_nothing_raised(@msg){ File.decrypt(
|
33
|
+
assert_nothing_raised(@msg){ File.decrypt(@@file) }
|
27
34
|
end
|
28
35
|
|
29
36
|
def teardown
|
30
|
-
@
|
31
|
-
|
37
|
+
@msg = nil
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.shutdown
|
41
|
+
File.delete(@@file) if File.exists?(@@file)
|
42
|
+
@@file = nil
|
32
43
|
end
|
33
|
-
end
|
44
|
+
end
|
@@ -1,25 +1,34 @@
|
|
1
1
|
#############################################################################
|
2
|
-
#
|
2
|
+
# test_win32_file_path.rb
|
3
3
|
#
|
4
4
|
# Test case for the path related methods of win32-file. You should run this
|
5
5
|
# test via the 'rake test' or 'rake test_path' task.
|
6
6
|
#############################################################################
|
7
|
+
require 'rubygems'
|
8
|
+
gem 'test-unit'
|
9
|
+
|
7
10
|
require 'test/unit'
|
8
11
|
require 'win32/file'
|
9
12
|
|
10
13
|
class TC_Win32_File_Path < Test::Unit::TestCase
|
14
|
+
def self.startup
|
15
|
+
Dir.chdir('test') unless File.basename(Dir.pwd) == 'test'
|
16
|
+
@@file = File.join(Dir.pwd, 'path_test.txt')
|
17
|
+
File.open(@@file, 'w'){ |fh| fh.puts "This is a path test." }
|
18
|
+
end
|
19
|
+
|
11
20
|
def setup
|
12
|
-
@
|
13
|
-
@
|
14
|
-
@short_file = File.join(@dir, 'SOMETE~1.TXT')
|
21
|
+
@long_file = File.join(Dir.pwd, 'path_test.txt')
|
22
|
+
@short_file = File.join(Dir.pwd, 'PATH_T~1.TXT')
|
15
23
|
end
|
16
24
|
|
17
|
-
def
|
25
|
+
def test_basename_basic
|
18
26
|
assert_respond_to(File, :basename)
|
19
27
|
assert_nothing_raised{ File.basename("C:\\foo") }
|
20
28
|
assert_kind_of(String, File.basename("C:\\foo"))
|
29
|
+
end
|
21
30
|
|
22
|
-
|
31
|
+
def test_basename_standard_paths
|
23
32
|
assert_equal("baz.txt", File.basename("C:\\foo\\bar\\baz.txt"))
|
24
33
|
assert_equal("baz", File.basename("C:\\foo\\bar\\baz.txt", ".txt"))
|
25
34
|
assert_equal("baz.txt", File.basename("C:\\foo\\bar\\baz.txt", ".zip"))
|
@@ -27,14 +36,16 @@ class TC_Win32_File_Path < Test::Unit::TestCase
|
|
27
36
|
assert_equal("bar", File.basename("C:\\foo\\bar\\"))
|
28
37
|
assert_equal("foo", File.basename("C:\\foo"))
|
29
38
|
assert_equal("C:\\", File.basename("C:\\"))
|
39
|
+
end
|
30
40
|
|
31
|
-
|
41
|
+
def test_basename_unc_paths
|
32
42
|
assert_equal("baz.txt", File.basename("\\\\foo\\bar\\baz.txt"))
|
33
43
|
assert_equal("baz", File.basename("\\\\foo\\bar\\baz"))
|
34
44
|
assert_equal("\\\\foo", File.basename("\\\\foo"))
|
35
45
|
assert_equal("\\\\foo\\bar", File.basename("\\\\foo\\bar"))
|
46
|
+
end
|
36
47
|
|
37
|
-
|
48
|
+
def test_basename_unix_style_paths
|
38
49
|
assert_equal("bar", File.basename("/foo/bar"))
|
39
50
|
assert_equal("bar.txt", File.basename("/foo/bar.txt"))
|
40
51
|
assert_equal("bar.txt", File.basename("bar.txt"))
|
@@ -43,21 +54,24 @@ class TC_Win32_File_Path < Test::Unit::TestCase
|
|
43
54
|
assert_equal("baz", File.basename("//foo/bar/baz"))
|
44
55
|
assert_equal("//foo", File.basename("//foo"))
|
45
56
|
assert_equal("//foo/bar", File.basename("//foo/bar"))
|
57
|
+
end
|
46
58
|
|
47
|
-
|
59
|
+
def test_basename_with_forward_slashes
|
48
60
|
assert_equal("bar", File.basename("C:/foo/bar"))
|
49
61
|
assert_equal("bar", File.basename("C:/foo/bar/"))
|
50
62
|
assert_equal("foo", File.basename("C:/foo"))
|
51
63
|
assert_equal("C:/", File.basename("C:/"))
|
52
64
|
assert_equal("bar", File.basename("C:/foo/bar\\\\"))
|
65
|
+
end
|
53
66
|
|
54
|
-
|
67
|
+
def test_basename_edge_cases
|
55
68
|
assert_equal("", File.basename(""))
|
56
69
|
assert_equal(".", File.basename("."))
|
57
70
|
assert_equal("..", File.basename(".."))
|
58
71
|
assert_equal("foo", File.basename("//foo/"))
|
72
|
+
end
|
59
73
|
|
60
|
-
|
74
|
+
def test_basename_with_suffixes
|
61
75
|
assert_equal("bar", File.basename("bar.txt", ".txt"))
|
62
76
|
assert_equal("bar", File.basename("/foo/bar.txt", ".txt"))
|
63
77
|
assert_equal("bar.txt", File.basename("bar.txt", ".exe"))
|
@@ -65,32 +79,36 @@ class TC_Win32_File_Path < Test::Unit::TestCase
|
|
65
79
|
assert_equal("bar.txt.exe", File.basename("bar.txt.exe", ".txt"))
|
66
80
|
assert_equal("bar", File.basename("bar.txt", ".*"))
|
67
81
|
assert_equal("bar.txt", File.basename("bar.txt.exe", ".*"))
|
82
|
+
end
|
68
83
|
|
69
|
-
|
84
|
+
def test_basename_does_not_modify_argument
|
70
85
|
path = "C:\\foo\\bar"
|
71
86
|
assert_nothing_raised{ File.basename(path) }
|
72
87
|
assert_equal("C:\\foo\\bar", path)
|
73
88
|
end
|
74
89
|
|
75
|
-
def
|
90
|
+
def test_dirname_basic
|
76
91
|
assert_respond_to(File, :dirname)
|
77
92
|
assert_nothing_raised{ File.dirname("C:\\foo") }
|
78
93
|
assert_kind_of(String, File.dirname("C:\\foo"))
|
94
|
+
end
|
79
95
|
|
80
|
-
|
96
|
+
def test_dirname_standard_paths
|
81
97
|
assert_equal("C:\\foo", File.dirname("C:\\foo\\bar.txt"))
|
82
98
|
assert_equal("C:\\foo", File.dirname("C:\\foo\\bar"))
|
83
99
|
assert_equal("C:\\", File.dirname("C:\\foo"))
|
84
100
|
assert_equal("C:\\", File.dirname("C:\\"))
|
85
101
|
assert_equal(".", File.dirname("foo"))
|
102
|
+
end
|
86
103
|
|
87
|
-
|
104
|
+
def test_dirname_unc_paths
|
88
105
|
assert_equal("\\\\foo\\bar", File.dirname("\\\\foo\\bar\\baz"))
|
89
106
|
assert_equal("\\\\foo\\bar", File.dirname("\\\\foo\\bar"))
|
90
107
|
assert_equal("\\\\foo", File.dirname("\\\\foo"))
|
91
108
|
assert_equal("\\\\", File.dirname("\\\\"))
|
109
|
+
end
|
92
110
|
|
93
|
-
|
111
|
+
def test_dirname_forward_slashes
|
94
112
|
assert_equal("C:/foo", File.dirname("C:/foo/bar.txt"))
|
95
113
|
assert_equal("C:/foo", File.dirname("C:/foo/bar"))
|
96
114
|
assert_equal("C:/", File.dirname("C:/foo"))
|
@@ -101,49 +119,57 @@ class TC_Win32_File_Path < Test::Unit::TestCase
|
|
101
119
|
assert_equal("//", File.dirname("//"))
|
102
120
|
assert_equal(".", File.dirname("./foo"))
|
103
121
|
assert_equal("./foo", File.dirname("./foo/bar"))
|
122
|
+
end
|
104
123
|
|
105
|
-
|
124
|
+
def test_dirname_edge_cases
|
106
125
|
assert_equal(".", File.dirname(""))
|
107
126
|
assert_equal(".", File.dirname("."))
|
108
127
|
assert_equal(".", File.dirname("."))
|
109
128
|
assert_equal(".", File.dirname("./"))
|
110
129
|
assert_raises(TypeError){ File.dirname(nil) }
|
130
|
+
end
|
111
131
|
|
112
|
-
|
132
|
+
def test_dirname_does_not_modify_argument
|
113
133
|
path = "C:\\foo\\bar"
|
114
134
|
assert_nothing_raised{ File.dirname(path) }
|
115
135
|
assert_equal("C:\\foo\\bar", path)
|
116
136
|
end
|
117
137
|
|
118
|
-
def
|
138
|
+
def test_split_basic
|
119
139
|
assert_respond_to(File, :split)
|
120
140
|
assert_nothing_raised{ File.split("C:\\foo\\bar") }
|
121
141
|
assert_kind_of(Array, File.split("C:\\foo\\bar"))
|
142
|
+
end
|
122
143
|
|
123
|
-
|
144
|
+
def test_split_standard_paths
|
124
145
|
assert_equal(["C:\\foo", "bar"], File.split("C:\\foo\\bar"))
|
125
146
|
assert_equal([".", "foo"], File.split("foo"))
|
147
|
+
end
|
126
148
|
|
127
|
-
|
149
|
+
def test_split_forward_slashes
|
128
150
|
assert_equal(["C:/foo", "bar"], File.split("C:/foo/bar"))
|
129
151
|
assert_equal([".", "foo"], File.split("foo"))
|
152
|
+
end
|
130
153
|
|
131
|
-
|
154
|
+
def test_split_unix_paths
|
132
155
|
assert_equal(["/foo","bar"], File.split("/foo/bar"))
|
133
156
|
assert_equal(["/", "foo"], File.split("/foo"))
|
134
157
|
assert_equal([".", "foo"], File.split("foo"))
|
158
|
+
end
|
135
159
|
|
136
|
-
|
160
|
+
def test_split_unc_paths
|
137
161
|
assert_equal(["\\\\foo\\bar", "baz"], File.split("\\\\foo\\bar\\baz"))
|
138
162
|
assert_equal(["\\\\foo\\bar", ""], File.split("\\\\foo\\bar"))
|
139
163
|
assert_equal(["\\\\foo", ""], File.split("\\\\foo"))
|
140
164
|
assert_equal(["\\\\", ""], File.split("\\\\"))
|
165
|
+
end
|
141
166
|
|
142
|
-
|
167
|
+
def test_split_edge_cases
|
143
168
|
assert_equal(["C:\\", ""], File.split("C:\\"))
|
144
169
|
assert_equal(["", ""], File.split(""))
|
170
|
+
end
|
145
171
|
|
146
|
-
|
172
|
+
def test_split_does_not_modify_arguments
|
147
173
|
path = "C:\\foo\\bar"
|
148
174
|
assert_nothing_raised{ File.split(path) }
|
149
175
|
assert_equal("C:\\foo\\bar", path)
|
@@ -151,19 +177,22 @@ class TC_Win32_File_Path < Test::Unit::TestCase
|
|
151
177
|
|
152
178
|
def test_long_path
|
153
179
|
assert_respond_to(File, :long_path)
|
154
|
-
assert_equal(
|
155
|
-
assert_equal('
|
180
|
+
assert_equal(@long_file, File.long_path(@short_file))
|
181
|
+
assert_equal('PATH_T~1.TXT', File.basename(@short_file))
|
156
182
|
end
|
157
183
|
|
158
184
|
def test_short_path
|
159
185
|
assert_respond_to(File, :short_path)
|
160
|
-
assert_equal('
|
161
|
-
assert_equal('sometestfile.txt', File.basename(@long_file))
|
186
|
+
assert_equal('path_test.txt', File.basename(@long_file))
|
162
187
|
end
|
163
188
|
|
164
189
|
def teardown
|
165
190
|
@short_file = nil
|
166
191
|
@long_file = nil
|
167
|
-
@dir = nil
|
168
192
|
end
|
169
|
-
|
193
|
+
|
194
|
+
def self.shutdown
|
195
|
+
File.delete(@@file) if File.exists?(@@file)
|
196
|
+
@@file = nil
|
197
|
+
end
|
198
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
##############################################################################
|
2
|
+
# test_win32_file_security.rb
|
3
|
+
#
|
4
|
+
# Test case for security related methods of win32-file. You should use the
|
5
|
+
# 'rake test' or 'rake test_security' task to run this.
|
6
|
+
#
|
7
|
+
# Note that I've removed some tests that looked for explicit security
|
8
|
+
# accounts, since it's impossible to determine how any given system is setup.
|
9
|
+
##############################################################################
|
10
|
+
require 'rubygems'
|
11
|
+
gem 'test-unit'
|
12
|
+
|
13
|
+
require 'test/unit'
|
14
|
+
require 'win32/file'
|
15
|
+
require 'socket'
|
16
|
+
|
17
|
+
class TC_Win32_File_Security < Test::Unit::TestCase
|
18
|
+
def self.startup
|
19
|
+
Dir.chdir('test') unless File.basename(Dir.pwd) == 'test'
|
20
|
+
@@host = Socket.gethostname
|
21
|
+
@@file = File.join(Dir.pwd, 'security_test.txt')
|
22
|
+
File.open(@@file, 'w'){ |fh| fh.puts "This is a security test." }
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup
|
26
|
+
@perms = nil
|
27
|
+
end
|
28
|
+
|
29
|
+
# This will fail if there is no "Users" builtin. Not to worry.
|
30
|
+
def test_get_permissions
|
31
|
+
assert_respond_to(File, :get_permissions)
|
32
|
+
assert_nothing_raised{ File.get_permissions(@@file) }
|
33
|
+
assert_kind_of(Hash, File.get_permissions(@@file))
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_get_permissions_with_host
|
37
|
+
assert_nothing_raised{ File.get_permissions(@@file, @@host) }
|
38
|
+
assert_kind_of(Hash, File.get_permissions(@@file))
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_set_permissions
|
42
|
+
assert_respond_to(File, :set_permissions)
|
43
|
+
assert_nothing_raised{ @perms = File.get_permissions(@@file) }
|
44
|
+
assert_nothing_raised{ File.set_permissions(@@file, @perms) }
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_securities
|
48
|
+
assert_respond_to(File, :securities)
|
49
|
+
assert_nothing_raised{ @perms = File.get_permissions(@@file) }
|
50
|
+
|
51
|
+
@perms.each{ |acct, mask|
|
52
|
+
assert_nothing_raised{ File.securities(mask) }
|
53
|
+
assert_kind_of(Array, File.securities(mask))
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
def teardown
|
58
|
+
@perms = nil
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.shutdown
|
62
|
+
File.delete(@@file) if File.exists?(@@file)
|
63
|
+
@@file = nil
|
64
|
+
@@host = nil
|
65
|
+
end
|
66
|
+
end
|
@@ -1,61 +1,79 @@
|
|
1
1
|
#####################################################################
|
2
|
-
#
|
2
|
+
# test_win32_file_stat.rb
|
3
3
|
#
|
4
4
|
# Test case for stat related methods of win32-file. You should run
|
5
5
|
# this via the 'rake test' or 'rake test_stat' task.
|
6
6
|
#####################################################################
|
7
|
+
require 'rubygems'
|
8
|
+
gem 'test-unit'
|
9
|
+
|
7
10
|
require 'test/unit'
|
8
11
|
require 'win32/file'
|
9
12
|
|
10
13
|
class TC_Win32_File_Stat < Test::Unit::TestCase
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
+
include Windows::Volume
|
15
|
+
extend Windows::Volume
|
16
|
+
|
17
|
+
def self.startup
|
18
|
+
Dir.chdir('test') unless File.basename(Dir.pwd) == 'test'
|
19
|
+
@@file = File.join(Dir.pwd, 'stat_test.txt')
|
20
|
+
File.open(@@file, 'w'){ |fh| fh.puts "This is a test." }
|
21
|
+
|
22
|
+
# Find a block device
|
23
|
+
'A'.upto('Z'){ |volume|
|
24
|
+
volume += ":\\"
|
25
|
+
case GetDriveType(volume)
|
26
|
+
when DRIVE_REMOVABLE, DRIVE_CDROM, DRIVE_RAMDISK
|
27
|
+
@@block_dev = volume
|
28
|
+
break
|
29
|
+
end
|
30
|
+
}
|
14
31
|
end
|
15
|
-
|
16
|
-
# Although I don't perform a test against a file
|
17
|
-
# don't feel like distributing a 2gb file), it works in my own tests.
|
32
|
+
|
33
|
+
# Although I don't perform a test against a file it works in my own tests.
|
18
34
|
def test_size
|
19
35
|
assert_respond_to(File, :size)
|
20
|
-
assert_equal(17, File.size(
|
36
|
+
assert_equal(17, File.size(@@file))
|
21
37
|
end
|
22
38
|
|
23
39
|
def test_blksize
|
24
40
|
msg = "+The blksize may be different - ignore+"
|
25
41
|
assert_respond_to(File, :blksize)
|
26
42
|
assert_kind_of(Fixnum, File.blksize("C:\\Program Files\\Windows NT"))
|
27
|
-
assert_kind_of(Fixnum, File.blksize(
|
28
|
-
assert_equal(4096, File.blksize(
|
43
|
+
assert_kind_of(Fixnum, File.blksize(@@file))
|
44
|
+
assert_equal(4096, File.blksize(@@file), msg)
|
29
45
|
end
|
30
46
|
|
31
47
|
def test_blksize_expected_errors
|
32
48
|
assert_raises(ArgumentError){ File.blksize }
|
33
|
-
assert_raises(ArgumentError){ File.blksize(
|
49
|
+
assert_raises(ArgumentError){ File.blksize(@@file, "foo") }
|
34
50
|
end
|
35
51
|
|
36
52
|
# The test for a block device will fail unless the D: drive is a CDROM.
|
37
53
|
def test_blockdev
|
38
54
|
assert_respond_to(File, :blockdev?)
|
39
55
|
assert_nothing_raised{ File.blockdev?("C:\\") }
|
40
|
-
assert_equal(true, File.blockdev?("D:\\"), '+Will fail unless CDROM+')
|
41
56
|
assert_equal(false, File.blockdev?("NUL"))
|
57
|
+
|
58
|
+
omit_unless(File.exists?("D:\\"), "No media in device - skipping")
|
59
|
+
assert_equal(true, File.blockdev?(@@block_dev))
|
42
60
|
end
|
43
61
|
|
44
62
|
def test_blockdev_expected_errors
|
45
63
|
assert_raises(ArgumentError){ File.blockdev? }
|
46
|
-
assert_raises(ArgumentError){ File.blockdev?(
|
64
|
+
assert_raises(ArgumentError){ File.blockdev?(@@file, "foo") }
|
47
65
|
end
|
48
66
|
|
49
67
|
def test_chardev
|
50
68
|
assert_respond_to(File, :chardev?)
|
51
69
|
assert_nothing_raised{ File.chardev?("NUL") }
|
52
70
|
assert_equal(true, File.chardev?("NUL"))
|
53
|
-
assert_equal(false, File.chardev?(
|
71
|
+
assert_equal(false, File.chardev?(@@file))
|
54
72
|
end
|
55
73
|
|
56
74
|
def test_chardev_expected_errors
|
57
75
|
assert_raises(ArgumentError){ File.chardev? }
|
58
|
-
assert_raises(ArgumentError){ File.chardev?(
|
76
|
+
assert_raises(ArgumentError){ File.chardev?(@@file, "foo") }
|
59
77
|
end
|
60
78
|
|
61
79
|
# Ensure that not only does the File class respond to the stat method,
|
@@ -64,8 +82,8 @@ class TC_Win32_File_Stat < Test::Unit::TestCase
|
|
64
82
|
#
|
65
83
|
def test_stat_class
|
66
84
|
assert_respond_to(File, :stat)
|
67
|
-
assert_kind_of(File::Stat, File.stat(
|
68
|
-
assert_equal(false, File.stat(
|
85
|
+
assert_kind_of(File::Stat, File.stat(@@file))
|
86
|
+
assert_equal(false, File.stat(@@file).hidden?)
|
69
87
|
end
|
70
88
|
|
71
89
|
# This was added after it was discovered that lstat is not aliased
|
@@ -73,20 +91,21 @@ class TC_Win32_File_Stat < Test::Unit::TestCase
|
|
73
91
|
#
|
74
92
|
def test_lstat_class
|
75
93
|
assert_respond_to(File, :lstat)
|
76
|
-
assert_kind_of(File::Stat, File.lstat(
|
77
|
-
assert_equal(false, File.stat(
|
94
|
+
assert_kind_of(File::Stat, File.lstat(@@file))
|
95
|
+
assert_equal(false, File.stat(@@file).hidden?)
|
78
96
|
end
|
79
97
|
|
80
98
|
def test_stat_instance
|
81
|
-
File.open(
|
99
|
+
File.open(@@file){ |f|
|
82
100
|
assert_respond_to(f, :stat)
|
83
101
|
assert_kind_of(File::Stat, f.stat)
|
84
102
|
assert_equal(false, f.stat.hidden?)
|
85
103
|
}
|
86
104
|
end
|
87
105
|
|
88
|
-
def
|
89
|
-
|
90
|
-
|
106
|
+
def self.shutdown
|
107
|
+
File.delete(@@file) if File.exists?(@@file)
|
108
|
+
@@file = nil
|
109
|
+
@@block_dev = nil
|
91
110
|
end
|
92
111
|
end
|
data/win32-file.gemspec
CHANGED
@@ -2,20 +2,22 @@ require "rubygems"
|
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |gem|
|
4
4
|
gem.name = "win32-file"
|
5
|
-
gem.version = "0.5.
|
6
|
-
gem.
|
5
|
+
gem.version = "0.5.6"
|
6
|
+
gem.authors = ["Daniel J. Berger", "Park Heesob"]
|
7
7
|
gem.email = "djberg96@gmail.com"
|
8
8
|
gem.homepage = "http://www.rubyforge.org/projects/win32utils"
|
9
9
|
gem.platform = Gem::Platform::RUBY
|
10
10
|
gem.summary = "Extra or redefined methods for the File class on Windows."
|
11
11
|
gem.description = "Extra or redefined methods for the File class on Windows."
|
12
|
-
gem.test_files = Dir["test/
|
12
|
+
gem.test_files = Dir["test/test*"]
|
13
13
|
gem.has_rdoc = true
|
14
14
|
gem.files = Dir["lib/win32/*.rb"] + Dir["test/*"] + Dir["[A-Z]*"]
|
15
15
|
gem.files.reject! { |fn| fn.include? "CVS" }
|
16
16
|
gem.require_path = "lib"
|
17
17
|
gem.extra_rdoc_files = ["README", "CHANGES"]
|
18
18
|
gem.add_dependency("win32-file-stat", ">= 1.2.0")
|
19
|
+
gem.add_dependency("test-unit", ">= 2.0.0")
|
20
|
+
gem.rubyforge_project = "win32utils"
|
19
21
|
end
|
20
22
|
|
21
23
|
if $0 == __FILE__
|
metadata
CHANGED
@@ -1,19 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32-file
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
8
|
+
- Park Heesob
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
12
|
|
12
|
-
date:
|
13
|
+
date: 2008-09-30 00:00:00 -06:00
|
13
14
|
default_executable:
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: win32-file-stat
|
18
|
+
type: :runtime
|
17
19
|
version_requirement:
|
18
20
|
version_requirements: !ruby/object:Gem::Requirement
|
19
21
|
requirements:
|
@@ -21,6 +23,16 @@ dependencies:
|
|
21
23
|
- !ruby/object:Gem::Version
|
22
24
|
version: 1.2.0
|
23
25
|
version:
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: test-unit
|
28
|
+
type: :runtime
|
29
|
+
version_requirement:
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 2.0.0
|
35
|
+
version:
|
24
36
|
description: Extra or redefined methods for the File class on Windows.
|
25
37
|
email: djberg96@gmail.com
|
26
38
|
executables: []
|
@@ -32,16 +44,13 @@ extra_rdoc_files:
|
|
32
44
|
- CHANGES
|
33
45
|
files:
|
34
46
|
- lib/win32/file.rb
|
35
|
-
- test/
|
36
|
-
- test/
|
37
|
-
- test/
|
38
|
-
- test/
|
39
|
-
- test/
|
40
|
-
- test/
|
41
|
-
- test/tc_file_security.rb
|
42
|
-
- test/tc_file_stat.rb
|
47
|
+
- test/test_win32_file_attributes.rb
|
48
|
+
- test/test_win32_file_constants.rb
|
49
|
+
- test/test_win32_file_encryption.rb
|
50
|
+
- test/test_win32_file_path.rb
|
51
|
+
- test/test_win32_file_security.rb
|
52
|
+
- test/test_win32_file_stat.rb
|
43
53
|
- CHANGES
|
44
|
-
- CVS
|
45
54
|
- lib
|
46
55
|
- MANIFEST
|
47
56
|
- Rakefile
|
@@ -69,15 +78,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
78
|
version:
|
70
79
|
requirements: []
|
71
80
|
|
72
|
-
rubyforge_project:
|
73
|
-
rubygems_version:
|
81
|
+
rubyforge_project: win32utils
|
82
|
+
rubygems_version: 1.3.0
|
74
83
|
signing_key:
|
75
84
|
specification_version: 2
|
76
85
|
summary: Extra or redefined methods for the File class on Windows.
|
77
86
|
test_files:
|
78
|
-
- test/
|
79
|
-
- test/
|
80
|
-
- test/
|
81
|
-
- test/
|
82
|
-
- test/
|
83
|
-
- test/
|
87
|
+
- test/test_win32_file_attributes.rb
|
88
|
+
- test/test_win32_file_constants.rb
|
89
|
+
- test/test_win32_file_encryption.rb
|
90
|
+
- test/test_win32_file_path.rb
|
91
|
+
- test/test_win32_file_security.rb
|
92
|
+
- test/test_win32_file_stat.rb
|
data/test/sometestfile.txt
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
This is a test.
|
data/test/tc_file_security.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
#####################################################################
|
2
|
-
# tc_file_security.rb
|
3
|
-
#
|
4
|
-
# Test case for security related methods of win32-file. You should
|
5
|
-
# use the 'rake test' or 'rake test_security' task to run this.
|
6
|
-
#####################################################################
|
7
|
-
require 'test/unit'
|
8
|
-
require 'win32/file'
|
9
|
-
require 'socket'
|
10
|
-
|
11
|
-
class TC_Win32_File_Security < Test::Unit::TestCase
|
12
|
-
def setup
|
13
|
-
@host = Socket.gethostname
|
14
|
-
@dir = File.dirname(File.expand_path(__FILE__))
|
15
|
-
@file = File.join(@dir, 'sometestfile.txt')
|
16
|
-
@perms = nil
|
17
|
-
end
|
18
|
-
|
19
|
-
# This will fail if there is no "Users" builtin. Not to worry.
|
20
|
-
def test_get_permissions
|
21
|
-
assert_respond_to(File, :get_permissions)
|
22
|
-
assert_nothing_raised{ File.get_permissions(@file) }
|
23
|
-
assert_nothing_raised{ File.get_permissions(@file, @host) }
|
24
|
-
assert_kind_of(Hash, File.get_permissions(@file))
|
25
|
-
assert(File.get_permissions(@file).has_key?('BUILTIN\\Users'))
|
26
|
-
assert(File.get_permissions(@file).has_key?('BUILTIN\\Administrators'))
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_set_permissions
|
30
|
-
assert_respond_to(File, :set_permissions)
|
31
|
-
assert_nothing_raised{ @perms = File.get_permissions(@file) }
|
32
|
-
assert_nothing_raised{ File.set_permissions(@file, @perms) }
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_securities
|
36
|
-
assert_respond_to(File, :securities)
|
37
|
-
assert_nothing_raised{ @perms = File.get_permissions(@file) }
|
38
|
-
|
39
|
-
@perms.each{ |acct, mask|
|
40
|
-
assert_nothing_raised{ File.securities(mask) }
|
41
|
-
assert_kind_of(Array, File.securities(mask))
|
42
|
-
}
|
43
|
-
end
|
44
|
-
|
45
|
-
def teardown
|
46
|
-
@file = nil
|
47
|
-
@host = nil
|
48
|
-
@perms = nil
|
49
|
-
@dir = nil
|
50
|
-
end
|
51
|
-
end
|