win32-file 0.5.5 → 0.5.6
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 +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
|