win32-file-attributes 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,39 +1,39 @@
1
- require 'ffi'
2
-
3
- module Windows
4
- module File
5
- module Functions
6
- extend FFI::Library
7
- typedef :ulong, :dword
8
- typedef :uintptr_t, :handle
9
-
10
- ffi_lib :kernel32
11
-
12
- attach_function :CloseHandle, [:handle], :bool
13
- attach_function :CreateFileW, [:buffer_in, :dword, :dword, :pointer, :dword, :dword, :handle], :handle
14
- attach_function :DeviceIoControl, [:handle, :dword, :pointer, :dword, :pointer, :dword, :pointer, :pointer], :bool
15
- attach_function :GetFileAttributesW, [:buffer_in], :dword
16
- attach_function :SetFileAttributesW, [:buffer_in, :dword], :bool
17
-
18
- def CTL_CODE(device, function, method, access)
19
- ((device) << 16) | ((access) << 14) | ((function) << 2) | (method)
20
- end
21
-
22
- def FSCTL_SET_COMPRESSION
23
- CTL_CODE(9, 16, 0, 3)
24
- end
25
-
26
- def FSCTL_SET_SPARSE
27
- CTL_CODE(9, 49, 0, 0)
28
- end
29
- end
30
- end
31
- end
32
-
33
- class String
34
- # Convenience method for converting strings to UTF-16LE for wide character
35
- # functions that require it.
36
- def wincode
37
- (self.tr(File::SEPARATOR, File::ALT_SEPARATOR) + 0.chr).encode('UTF-16LE')
38
- end
39
- end
1
+ require 'ffi'
2
+
3
+ module Windows
4
+ module File
5
+ module Functions
6
+ extend FFI::Library
7
+ typedef :ulong, :dword
8
+ typedef :uintptr_t, :handle
9
+
10
+ ffi_lib :kernel32
11
+
12
+ attach_function :CloseHandle, [:handle], :bool
13
+ attach_function :CreateFileW, [:buffer_in, :dword, :dword, :pointer, :dword, :dword, :handle], :handle
14
+ attach_function :DeviceIoControl, [:handle, :dword, :pointer, :dword, :pointer, :dword, :pointer, :pointer], :bool
15
+ attach_function :GetFileAttributesW, [:buffer_in], :dword
16
+ attach_function :SetFileAttributesW, [:buffer_in, :dword], :bool
17
+
18
+ def CTL_CODE(device, function, method, access)
19
+ ((device) << 16) | ((access) << 14) | ((function) << 2) | (method)
20
+ end
21
+
22
+ def FSCTL_SET_COMPRESSION
23
+ CTL_CODE(9, 16, 0, 3)
24
+ end
25
+
26
+ def FSCTL_SET_SPARSE
27
+ CTL_CODE(9, 49, 0, 0)
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ class String
34
+ # Convenience method for converting strings to UTF-16LE for wide character
35
+ # functions that require it.
36
+ def wincode
37
+ (self.tr(File::SEPARATOR, File::ALT_SEPARATOR) + 0.chr).encode('UTF-16LE')
38
+ end
39
+ end
@@ -1,25 +1,25 @@
1
- #############################################################################
2
- # test_win32_file_attribute_constants.rb
3
- #
4
- # Test cases for the "shortcut" constants for File attributes.
5
- #############################################################################
6
- require 'test-unit'
7
- require 'win32/file/attributes'
8
-
9
- class TC_Win32_File_Attribute_Constants < Test::Unit::TestCase
10
- test "shortcut constants are defined" do
11
- assert_not_nil(File::ARCHIVE)
12
- assert_not_nil(File::HIDDEN)
13
- assert_not_nil(File::NORMAL)
14
- assert_not_nil(File::INDEXED)
15
- assert_not_nil(File::OFFLINE)
16
- assert_not_nil(File::READONLY)
17
- assert_not_nil(File::SYSTEM)
18
- assert_not_nil(File::TEMPORARY)
19
- assert_not_nil(File::CONTENT_INDEXED)
20
- end
21
-
22
- test "CONTENT_INDEXED is identical to INDEXED" do
23
- assert_equal(File::INDEXED, File::CONTENT_INDEXED)
24
- end
25
- end
1
+ #############################################################################
2
+ # test_win32_file_attribute_constants.rb
3
+ #
4
+ # Test cases for the "shortcut" constants for File attributes.
5
+ #############################################################################
6
+ require 'test-unit'
7
+ require 'win32/file/attributes'
8
+
9
+ class TC_Win32_File_Attribute_Constants < Test::Unit::TestCase
10
+ test "shortcut constants are defined" do
11
+ assert_not_nil(File::ARCHIVE)
12
+ assert_not_nil(File::HIDDEN)
13
+ assert_not_nil(File::NORMAL)
14
+ assert_not_nil(File::INDEXED)
15
+ assert_not_nil(File::OFFLINE)
16
+ assert_not_nil(File::READONLY)
17
+ assert_not_nil(File::SYSTEM)
18
+ assert_not_nil(File::TEMPORARY)
19
+ assert_not_nil(File::CONTENT_INDEXED)
20
+ end
21
+
22
+ test "CONTENT_INDEXED is identical to INDEXED" do
23
+ assert_equal(File::INDEXED, File::CONTENT_INDEXED)
24
+ end
25
+ end
@@ -1,376 +1,386 @@
1
- #############################################################################
2
- # test_win32_file_attributes.rb
3
- #
4
- # Test case for the attribute related methods of win32-file. You should run
5
- # this via the 'rake test' or 'rake test_attributes' task.
6
- #############################################################################
7
- require 'ffi'
8
- require 'test-unit'
9
- require 'win32/file/attributes'
10
-
11
- class TC_Win32_File_Attributes < Test::Unit::TestCase
12
- extend FFI::Library
13
- ffi_lib :kernel32
14
-
15
- attach_function :GetFileAttributes, :GetFileAttributesA, [:string], :ulong
16
- attach_function :SetFileAttributes, :SetFileAttributesA, [:string, :ulong], :ulong
17
-
18
- def self.startup
19
- Dir.chdir(File.dirname(File.expand_path(File.basename(__FILE__))))
20
- @@file = File.join(Dir.pwd, 'test_file.txt')
21
- File.open(@@file, 'w'){ |fh| fh.puts "This is a test." }
22
- end
23
-
24
- def setup
25
- @fh = File.open(@@file)
26
- @attr = GetFileAttributes(@@file)
27
- end
28
-
29
- test "version is set to expected value" do
30
- assert_equal('1.0.1', File::WIN32_FILE_ATTRIBUTE_VERSION)
31
- end
32
-
33
- test "temporary? singleton method basic functionality" do
34
- assert_respond_to(File, :temporary?)
35
- assert_nothing_raised{ File.temporary?(@@file) }
36
- end
37
-
38
- test "temporary? singleton method returns expected value" do
39
- assert_false(File.temporary?(@@file))
40
- end
41
-
42
- test "temporary? singleton method requires a single argument" do
43
- assert_raises(ArgumentError){ File.temporary? }
44
- assert_raises(ArgumentError){ File.temporary?(@@file, 'foo') }
45
- end
46
-
47
- test "temporary? instance method basic functionality" do
48
- assert_respond_to(@fh, :temporary=)
49
- assert_nothing_raised{ @fh.temporary = true }
50
- end
51
-
52
- test "temporary? instance method works as expected" do
53
- assert_false(File.temporary?(@@file))
54
- @fh.temporary = true
55
- assert_true(File.temporary?(@@file))
56
- end
57
-
58
- test "system? singleton method basic functionality" do
59
- assert_respond_to(File, :system?)
60
- assert_nothing_raised{ File.system?(@@file) }
61
- end
62
-
63
- test "system? singleton method returns the expected value" do
64
- assert_false(File.system?(@@file))
65
- end
66
-
67
- test "system singleton method requires a single argument" do
68
- assert_raises(ArgumentError){ File.system? }
69
- assert_raises(ArgumentError){ File.system?(@@file, 'foo') }
70
- end
71
-
72
- test "system instance method basic functionality" do
73
- assert_respond_to(@fh, :system=)
74
- assert_nothing_raised{ @fh.system = true }
75
- end
76
-
77
- test "system instance method works as expected" do
78
- assert_false(File.system?(@@file))
79
- @fh.system = true
80
- assert_true(File.system?(@@file))
81
- end
82
-
83
- test "sparse? singleton method basic functionality" do
84
- assert_respond_to(File, :sparse?)
85
- assert_nothing_raised{ File.sparse?(@@file) }
86
- end
87
-
88
- test "sparse? singleton method returns expected value" do
89
- assert_false(File.sparse?(@@file))
90
- end
91
-
92
- test "sparse? singleton method requires one argument" do
93
- assert_raises(ArgumentError){ File.sparse? }
94
- assert_raises(ArgumentError){ File.sparse?(@@file, 'foo') }
95
- end
96
-
97
- # I don't actually test true assignment here since making a file a
98
- # sparse file can't be undone.
99
- test "sparse? instance method basic functionality" do
100
- assert_respond_to(@fh, :sparse=)
101
- assert_nothing_raised{ @fh.sparse= false }
102
- end
103
-
104
- test "reparse_point? singleton method basic functionality" do
105
- assert_respond_to(File, :reparse_point?)
106
- assert_nothing_raised{ File.reparse_point?(@@file) }
107
- end
108
-
109
- test "reparse_point? singleton method returns the expected value" do
110
- assert_false(File.reparse_point?(@@file))
111
- end
112
-
113
- test "reparse_point? singleton method requires a single argument" do
114
- assert_raises(ArgumentError){ File.reparse_point? }
115
- assert_raises(ArgumentError){ File.reparse_point?(@@file, 'foo') }
116
- end
117
-
118
- test "readonly? singleton method basic functionality" do
119
- assert_respond_to(File, :readonly?)
120
- assert_nothing_raised{ File.readonly?(@@file) }
121
- end
122
-
123
- test "readonly? singleton method returns expected result" do
124
- assert_false(File.readonly?(@@file))
125
- end
126
-
127
- test "readonly? singleton method requires a single argument" do
128
- assert_raises(ArgumentError){ File.read_only? }
129
- assert_raises(ArgumentError){ File.read_only?(@@file, 'foo') }
130
- end
131
-
132
- test "read_only? is an alias for readonly?" do
133
- assert_respond_to(File, :read_only?)
134
- assert_alias_method(File, :read_only?, :readonly?)
135
- end
136
-
137
- test "readonly? instance method basic functionality" do
138
- assert_respond_to(@fh, :readonly=)
139
- assert_nothing_raised{ @fh.readonly = true }
140
- end
141
-
142
- test "readonly? instance method returns expected value" do
143
- assert_false(File.readonly?(@@file))
144
- @fh.readonly = true
145
- assert_true(File.readonly?(@@file))
146
- end
147
-
148
- test "offline? singleton method basic functionality" do
149
- assert_respond_to(File, :offline?)
150
- assert_nothing_raised{ File.offline?(@@file) }
151
- end
152
-
153
- test "offline? singleton method returns expected result" do
154
- assert_false(File.offline?(@@file))
155
- end
156
-
157
- test "offline? singleton method requires a single argument" do
158
- assert_raises(ArgumentError){ File.offline? }
159
- assert_raises(ArgumentError){ File.offline?(@@file, 'foo') }
160
- end
161
-
162
- test "offline? instance method basic functionality" do
163
- assert_respond_to(@fh, :offline=)
164
- assert_nothing_raised{ @fh.offline = true }
165
- end
166
-
167
- test "offline? instance method returns expected value" do
168
- assert_false(File.offline?(@@file))
169
- @fh.offline = true
170
- assert_true(File.offline?(@@file))
171
- end
172
-
173
- test "normal? singleton method basic functionality" do
174
- assert_respond_to(File, :normal?)
175
- assert_nothing_raised{ File.normal?(@@file) }
176
- end
177
-
178
- test "normal? singleton method returns expected results" do
179
- assert_false(File.normal?(@@file))
180
- @fh.normal = true
181
- assert_true(File.normal?(@@file))
182
- end
183
-
184
- test "normal? singleton method requires a single argument" do
185
- assert_raises(ArgumentError){ File.normal? }
186
- assert_raises(ArgumentError){ File.normal?(@@file, 'foo') }
187
- end
188
-
189
- test "normal? instance method basic functionality" do
190
- assert_respond_to(@fh, :normal=)
191
- assert_nothing_raised{ @fh.normal = true }
192
- end
193
-
194
- test "normal? instance method setter does not accept false" do
195
- assert_raises(ArgumentError){ @fh.normal = false }
196
- end
197
-
198
- test "hidden? singleton method basic functionality" do
199
- assert_respond_to(File, :hidden?)
200
- assert_nothing_raised{ File.hidden?(@@file) }
201
- end
202
-
203
- test "hidden? singleton method returns the expected result" do
204
- assert_false(File.hidden?(@@file))
205
- @fh.hidden = true
206
- assert_true(File.hidden?(@@file))
207
- end
208
-
209
- test "hidden? singleton method requires a single argument" do
210
- assert_raises(ArgumentError){ File.hidden? }
211
- assert_raises(ArgumentError){ File.hidden?(@@file, 'foo') }
212
- end
213
-
214
- test "hidden? instance method basic functionality" do
215
- assert_respond_to(@fh, :hidden=)
216
- assert_nothing_raised{ @fh.hidden = true }
217
- end
218
-
219
- test "encrypted? singleton method basic functionality" do
220
- assert_respond_to(File, :encrypted?)
221
- assert_nothing_raised{ File.encrypted?(@@file) }
222
- end
223
-
224
- test "encrypted? singleton method returns the expected result" do
225
- assert_false(File.encrypted?(@@file))
226
- end
227
-
228
- test "encrypted? singleton method requires a single argument" do
229
- assert_raises(ArgumentError){ File.encrypted? }
230
- assert_raises(ArgumentError){ File.encrypted?(@@file, 'foo') }
231
- end
232
-
233
- test "indexed? singleton method basic functionality" do
234
- assert_respond_to(File, :indexed?)
235
- assert_nothing_raised{ File.indexed?(@@file) }
236
- end
237
-
238
- test "indexed? singleton method returns the expected results" do
239
- assert_true(File.indexed?(@@file))
240
- @fh.indexed = false
241
- assert_false(File.indexed?(@@file))
242
- end
243
-
244
- test "content_indexed? is an alias for indexed?" do
245
- assert_respond_to(File, :content_indexed?)
246
- assert_alias_method(File, :content_indexed?, :indexed?)
247
- end
248
-
249
- test "indexed? singleton method requires a single argument" do
250
- assert_raises(ArgumentError){ File.indexed? }
251
- assert_raises(ArgumentError){ File.indexed?(@@file, 'foo') }
252
- end
253
-
254
- test "indexed? instance method basic functionality" do
255
- assert_respond_to(@fh, :indexed=)
256
- assert_nothing_raised{ @fh.indexed = true }
257
- end
258
-
259
- test "indexed? instance method returns expected method" do
260
- assert_true(File.indexed?(@@file))
261
- @fh.indexed = false
262
- assert_false(File.indexed?(@@file))
263
- end
264
-
265
- test "compressed? singleton method basic functionality" do
266
- assert_respond_to(File, :compressed?)
267
- assert_nothing_raised{ File.compressed?(@@file) }
268
- end
269
-
270
- test "compressed? singleton method returns the expected result" do
271
- assert_false(File.compressed?(@@file))
272
- end
273
-
274
- test "compressed instance method setter basic functionality" do
275
- assert_respond_to(@fh, :compressed=)
276
- assert_false(File.compressed?(@@file))
277
- end
278
-
279
- test "compressed? singleton method requires a single argument" do
280
- assert_raises(ArgumentError){ File.compressed? }
281
- assert_raises(ArgumentError){ File.compressed?(@@file, 'foo') }
282
- end
283
-
284
- # We have to explicitly reset the compressed attribute to false as
285
- # the last of these assertions.
286
-
287
- test "compressed instance method setter works as expected" do
288
- assert_nothing_raised{ @fh.compressed = true }
289
- assert_true(File.compressed?(@@file))
290
- assert_nothing_raised{ @fh.compressed = false }
291
- assert_false(File.compressed?(@@file))
292
- end
293
-
294
- test "archive? singleton method basic functionality" do
295
- assert_respond_to(File, :archive?)
296
- assert_nothing_raised{ File.archive?(@@file) }
297
- end
298
-
299
- test "archive? singleton method returns the expected results" do
300
- assert_true(File.archive?(@@file))
301
- @fh.archive = false
302
- assert_false(File.archive?(@@file))
303
- end
304
-
305
- test "archive? singleton method requires a single argument" do
306
- assert_raises(ArgumentError){ File.archive? }
307
- assert_raises(ArgumentError){ File.archive?(@@file, 'foo') }
308
- end
309
-
310
- test "archive instance method setter basic functionality" do
311
- assert_respond_to(@fh, :archive=)
312
- assert_nothing_raised{ @fh.archive = false }
313
- end
314
-
315
- test "attributes singleton method basic functionality" do
316
- assert_respond_to(File, :attributes)
317
- assert_kind_of(Array, File.attributes(@@file))
318
- end
319
-
320
- test "attributes singleton method returns expected results" do
321
- assert_equal(['archive', 'indexed'], File.attributes(@@file))
322
- end
323
-
324
- test "set_attributes singleton method basic functionality" do
325
- assert_respond_to(File, :set_attributes)
326
- assert_nothing_raised{ File.set_attributes(@@file, File::FILE_ATTRIBUTE_HIDDEN) }
327
- end
328
-
329
- test "set_attributes singleton method works as expected" do
330
- assert_nothing_raised{ File.set_attributes(@@file, File::FILE_ATTRIBUTE_HIDDEN) }
331
- assert_true(File.attributes(@@file).include?('hidden'))
332
- end
333
-
334
- test "set_attr is an alias for set_attributes" do
335
- assert_respond_to(File, :set_attr)
336
- assert_alias_method(File, :set_attr, :set_attributes)
337
- end
338
-
339
- test "remove_attributes singleton method basic functionality" do
340
- assert_respond_to(File, :remove_attributes)
341
- assert_nothing_raised{ File.remove_attributes(@@file, File::FILE_ATTRIBUTE_ARCHIVE) }
342
- end
343
-
344
- test "remove_attributes works as expected" do
345
- assert_true(File.archive?(@@file))
346
- assert_nothing_raised{ File.remove_attributes(@@file, File::FILE_ATTRIBUTE_ARCHIVE) }
347
- assert_false(File.archive?(@@file))
348
- end
349
-
350
- test "unset_attr is an alias for remove_attributes" do
351
- assert_respond_to(File, :unset_attr)
352
- assert_alias_method(File, :unset_attr, :remove_attributes)
353
- end
354
-
355
- test "shorthand constants are defined" do
356
- assert_not_nil(File::ARCHIVE)
357
- assert_not_nil(File::HIDDEN)
358
- assert_not_nil(File::NORMAL)
359
- assert_not_nil(File::INDEXED)
360
- assert_not_nil(File::OFFLINE)
361
- assert_not_nil(File::READONLY)
362
- assert_not_nil(File::SYSTEM)
363
- assert_not_nil(File::TEMPORARY)
364
- assert_not_nil(File::CONTENT_INDEXED) # alias for INDEXED
365
- end
366
-
367
- def teardown
368
- SetFileAttributes(@@file, @attr)
369
- @fh.close
370
- end
371
-
372
- def self.shutdown
373
- File.delete(@@file)
374
- @@file = nil
375
- end
376
- end
1
+ #############################################################################
2
+ # test_win32_file_attributes.rb
3
+ #
4
+ # Test case for the attribute related methods of win32-file. You should run
5
+ # this via the 'rake test' or 'rake test_attributes' task.
6
+ #############################################################################
7
+ require 'ffi'
8
+ require 'test-unit'
9
+ require 'win32/file/attributes'
10
+ require 'pathname'
11
+
12
+ class TC_Win32_File_Attributes < Test::Unit::TestCase
13
+ extend FFI::Library
14
+ ffi_lib :kernel32
15
+
16
+ attach_function :GetFileAttributes, :GetFileAttributesA, [:string], :ulong
17
+ attach_function :SetFileAttributes, :SetFileAttributesA, [:string, :ulong], :ulong
18
+
19
+ def self.startup
20
+ Dir.chdir(File.dirname(File.expand_path(File.basename(__FILE__))))
21
+ @@file = File.join(Dir.pwd, 'test_file.txt')
22
+ File.open(@@file, 'w'){ |fh| fh.puts "This is a test." }
23
+ end
24
+
25
+ def setup
26
+ @fh = File.open(@@file)
27
+ @attr = GetFileAttributes(@@file)
28
+ end
29
+
30
+ test "version is set to expected value" do
31
+ assert_equal('1.0.2', File::WIN32_FILE_ATTRIBUTE_VERSION)
32
+ end
33
+
34
+ test "temporary? singleton method basic functionality" do
35
+ assert_respond_to(File, :temporary?)
36
+ assert_nothing_raised{ File.temporary?(@@file) }
37
+ end
38
+
39
+ test "temporary? singleton method returns expected value" do
40
+ assert_false(File.temporary?(@@file))
41
+ end
42
+
43
+ test "temporary? singleton method requires a single argument" do
44
+ assert_raises(ArgumentError){ File.temporary? }
45
+ assert_raises(ArgumentError){ File.temporary?(@@file, 'foo') }
46
+ end
47
+
48
+ test "temporary? instance method basic functionality" do
49
+ assert_respond_to(@fh, :temporary=)
50
+ assert_nothing_raised{ @fh.temporary = true }
51
+ end
52
+
53
+ test "temporary? instance method works as expected" do
54
+ assert_false(File.temporary?(@@file))
55
+ @fh.temporary = true
56
+ assert_true(File.temporary?(@@file))
57
+ end
58
+
59
+ test "system? singleton method basic functionality" do
60
+ assert_respond_to(File, :system?)
61
+ assert_nothing_raised{ File.system?(@@file) }
62
+ end
63
+
64
+ test "system? singleton method returns the expected value" do
65
+ assert_false(File.system?(@@file))
66
+ end
67
+
68
+ test "system singleton method requires a single argument" do
69
+ assert_raises(ArgumentError){ File.system? }
70
+ assert_raises(ArgumentError){ File.system?(@@file, 'foo') }
71
+ end
72
+
73
+ test "system instance method basic functionality" do
74
+ assert_respond_to(@fh, :system=)
75
+ assert_nothing_raised{ @fh.system = true }
76
+ end
77
+
78
+ test "system instance method works as expected" do
79
+ assert_false(File.system?(@@file))
80
+ @fh.system = true
81
+ assert_true(File.system?(@@file))
82
+ end
83
+
84
+ test "sparse? singleton method basic functionality" do
85
+ assert_respond_to(File, :sparse?)
86
+ assert_nothing_raised{ File.sparse?(@@file) }
87
+ end
88
+
89
+ test "sparse? singleton method returns expected value" do
90
+ assert_false(File.sparse?(@@file))
91
+ end
92
+
93
+ test "sparse? singleton method requires one argument" do
94
+ assert_raises(ArgumentError){ File.sparse? }
95
+ assert_raises(ArgumentError){ File.sparse?(@@file, 'foo') }
96
+ end
97
+
98
+ # I don't actually test true assignment here since making a file a
99
+ # sparse file can't be undone.
100
+ test "sparse? instance method basic functionality" do
101
+ assert_respond_to(@fh, :sparse=)
102
+ assert_nothing_raised{ @fh.sparse= false }
103
+ end
104
+
105
+ test "reparse_point? singleton method basic functionality" do
106
+ assert_respond_to(File, :reparse_point?)
107
+ assert_nothing_raised{ File.reparse_point?(@@file) }
108
+ end
109
+
110
+ test "reparse_point? singleton method returns the expected value" do
111
+ assert_false(File.reparse_point?(@@file))
112
+ end
113
+
114
+ test "reparse_point? singleton method requires a single argument" do
115
+ assert_raises(ArgumentError){ File.reparse_point? }
116
+ assert_raises(ArgumentError){ File.reparse_point?(@@file, 'foo') }
117
+ end
118
+
119
+ test "readonly? singleton method basic functionality" do
120
+ assert_respond_to(File, :readonly?)
121
+ assert_nothing_raised{ File.readonly?(@@file) }
122
+ end
123
+
124
+ test "readonly? singleton method returns expected result" do
125
+ assert_false(File.readonly?(@@file))
126
+ end
127
+
128
+ test "readonly? singleton method requires a single argument" do
129
+ assert_raises(ArgumentError){ File.read_only? }
130
+ assert_raises(ArgumentError){ File.read_only?(@@file, 'foo') }
131
+ end
132
+
133
+ test "read_only? is an alias for readonly?" do
134
+ assert_respond_to(File, :read_only?)
135
+ assert_alias_method(File, :read_only?, :readonly?)
136
+ end
137
+
138
+ test "readonly? instance method basic functionality" do
139
+ assert_respond_to(@fh, :readonly=)
140
+ assert_nothing_raised{ @fh.readonly = true }
141
+ end
142
+
143
+ test "readonly? instance method returns expected value" do
144
+ assert_false(File.readonly?(@@file))
145
+ @fh.readonly = true
146
+ assert_true(File.readonly?(@@file))
147
+ end
148
+
149
+ test "offline? singleton method basic functionality" do
150
+ assert_respond_to(File, :offline?)
151
+ assert_nothing_raised{ File.offline?(@@file) }
152
+ end
153
+
154
+ test "offline? singleton method returns expected result" do
155
+ assert_false(File.offline?(@@file))
156
+ end
157
+
158
+ test "offline? singleton method requires a single argument" do
159
+ assert_raises(ArgumentError){ File.offline? }
160
+ assert_raises(ArgumentError){ File.offline?(@@file, 'foo') }
161
+ end
162
+
163
+ test "offline? instance method basic functionality" do
164
+ assert_respond_to(@fh, :offline=)
165
+ assert_nothing_raised{ @fh.offline = true }
166
+ end
167
+
168
+ test "offline? instance method returns expected value" do
169
+ assert_false(File.offline?(@@file))
170
+ @fh.offline = true
171
+ assert_true(File.offline?(@@file))
172
+ end
173
+
174
+ test "normal? singleton method basic functionality" do
175
+ assert_respond_to(File, :normal?)
176
+ assert_nothing_raised{ File.normal?(@@file) }
177
+ end
178
+
179
+ test "normal? singleton method returns expected results" do
180
+ assert_false(File.normal?(@@file))
181
+ @fh.normal = true
182
+ assert_true(File.normal?(@@file))
183
+ end
184
+
185
+ test "normal? singleton method requires a single argument" do
186
+ assert_raises(ArgumentError){ File.normal? }
187
+ assert_raises(ArgumentError){ File.normal?(@@file, 'foo') }
188
+ end
189
+
190
+ test "normal? instance method basic functionality" do
191
+ assert_respond_to(@fh, :normal=)
192
+ assert_nothing_raised{ @fh.normal = true }
193
+ end
194
+
195
+ test "normal? instance method setter does not accept false" do
196
+ assert_raises(ArgumentError){ @fh.normal = false }
197
+ end
198
+
199
+ test "hidden? singleton method basic functionality" do
200
+ assert_respond_to(File, :hidden?)
201
+ assert_nothing_raised{ File.hidden?(@@file) }
202
+ end
203
+
204
+ test "hidden? singleton method returns the expected result" do
205
+ assert_false(File.hidden?(@@file))
206
+ @fh.hidden = true
207
+ assert_true(File.hidden?(@@file))
208
+ end
209
+
210
+ test "hidden? singleton method requires a single argument" do
211
+ assert_raises(ArgumentError){ File.hidden? }
212
+ assert_raises(ArgumentError){ File.hidden?(@@file, 'foo') }
213
+ end
214
+
215
+ test "hidden? instance method basic functionality" do
216
+ assert_respond_to(@fh, :hidden=)
217
+ assert_nothing_raised{ @fh.hidden = true }
218
+ end
219
+
220
+ test "encrypted? singleton method basic functionality" do
221
+ assert_respond_to(File, :encrypted?)
222
+ assert_nothing_raised{ File.encrypted?(@@file) }
223
+ end
224
+
225
+ test "encrypted? singleton method returns the expected result" do
226
+ assert_false(File.encrypted?(@@file))
227
+ end
228
+
229
+ test "encrypted? singleton method requires a single argument" do
230
+ assert_raises(ArgumentError){ File.encrypted? }
231
+ assert_raises(ArgumentError){ File.encrypted?(@@file, 'foo') }
232
+ end
233
+
234
+ test "indexed? singleton method basic functionality" do
235
+ assert_respond_to(File, :indexed?)
236
+ assert_nothing_raised{ File.indexed?(@@file) }
237
+ end
238
+
239
+ test "indexed? singleton method returns the expected results" do
240
+ assert_true(File.indexed?(@@file))
241
+ @fh.indexed = false
242
+ assert_false(File.indexed?(@@file))
243
+ end
244
+
245
+ test "content_indexed? is an alias for indexed?" do
246
+ assert_respond_to(File, :content_indexed?)
247
+ assert_alias_method(File, :content_indexed?, :indexed?)
248
+ end
249
+
250
+ test "indexed? singleton method requires a single argument" do
251
+ assert_raises(ArgumentError){ File.indexed? }
252
+ assert_raises(ArgumentError){ File.indexed?(@@file, 'foo') }
253
+ end
254
+
255
+ test "indexed? instance method basic functionality" do
256
+ assert_respond_to(@fh, :indexed=)
257
+ assert_nothing_raised{ @fh.indexed = true }
258
+ end
259
+
260
+ test "indexed? instance method returns expected method" do
261
+ assert_true(File.indexed?(@@file))
262
+ @fh.indexed = false
263
+ assert_false(File.indexed?(@@file))
264
+ end
265
+
266
+ test "compressed? singleton method basic functionality" do
267
+ assert_respond_to(File, :compressed?)
268
+ assert_nothing_raised{ File.compressed?(@@file) }
269
+ end
270
+
271
+ test "compressed? singleton method returns the expected result" do
272
+ assert_false(File.compressed?(@@file))
273
+ end
274
+
275
+ test "compressed instance method setter basic functionality" do
276
+ assert_respond_to(@fh, :compressed=)
277
+ assert_false(File.compressed?(@@file))
278
+ end
279
+
280
+ test "compressed? singleton method requires a single argument" do
281
+ assert_raises(ArgumentError){ File.compressed? }
282
+ assert_raises(ArgumentError){ File.compressed?(@@file, 'foo') }
283
+ end
284
+
285
+ # We have to explicitly reset the compressed attribute to false as
286
+ # the last of these assertions.
287
+
288
+ test "compressed instance method setter works as expected" do
289
+ assert_nothing_raised{ @fh.compressed = true }
290
+ assert_true(File.compressed?(@@file))
291
+ assert_nothing_raised{ @fh.compressed = false }
292
+ assert_false(File.compressed?(@@file))
293
+ end
294
+
295
+ test "archive? singleton method basic functionality" do
296
+ assert_respond_to(File, :archive?)
297
+ assert_nothing_raised{ File.archive?(@@file) }
298
+ end
299
+
300
+ test "archive? singleton method returns the expected results" do
301
+ assert_true(File.archive?(@@file))
302
+ @fh.archive = false
303
+ assert_false(File.archive?(@@file))
304
+ end
305
+
306
+ test "archive? singleton method requires a single argument" do
307
+ assert_raises(ArgumentError){ File.archive? }
308
+ assert_raises(ArgumentError){ File.archive?(@@file, 'foo') }
309
+ end
310
+
311
+ test "archive instance method setter basic functionality" do
312
+ assert_respond_to(@fh, :archive=)
313
+ assert_nothing_raised{ @fh.archive = false }
314
+ end
315
+
316
+ test "attributes singleton method basic functionality" do
317
+ assert_respond_to(File, :attributes)
318
+ assert_kind_of(Array, File.attributes(@@file))
319
+ end
320
+
321
+ test "attributes singleton method returns expected results" do
322
+ assert_equal(['archive', 'indexed'], File.attributes(@@file))
323
+ end
324
+
325
+ test "attributes singleton method accepts a pathname argument" do
326
+ assert_nothing_raised{ File.attributes(Pathname.new(@@file)) }
327
+ end
328
+
329
+ test "attribute singleton method requires a stringy argument" do
330
+ assert_raise(TypeError){ File.attributes(nil) }
331
+ assert_raise(TypeError){ File.attributes([]) }
332
+ end
333
+
334
+ test "set_attributes singleton method basic functionality" do
335
+ assert_respond_to(File, :set_attributes)
336
+ assert_nothing_raised{ File.set_attributes(@@file, File::FILE_ATTRIBUTE_HIDDEN) }
337
+ end
338
+
339
+ test "set_attributes singleton method works as expected" do
340
+ assert_nothing_raised{ File.set_attributes(@@file, File::FILE_ATTRIBUTE_HIDDEN) }
341
+ assert_true(File.attributes(@@file).include?('hidden'))
342
+ end
343
+
344
+ test "set_attr is an alias for set_attributes" do
345
+ assert_respond_to(File, :set_attr)
346
+ assert_alias_method(File, :set_attr, :set_attributes)
347
+ end
348
+
349
+ test "remove_attributes singleton method basic functionality" do
350
+ assert_respond_to(File, :remove_attributes)
351
+ assert_nothing_raised{ File.remove_attributes(@@file, File::FILE_ATTRIBUTE_ARCHIVE) }
352
+ end
353
+
354
+ test "remove_attributes works as expected" do
355
+ assert_true(File.archive?(@@file))
356
+ assert_nothing_raised{ File.remove_attributes(@@file, File::FILE_ATTRIBUTE_ARCHIVE) }
357
+ assert_false(File.archive?(@@file))
358
+ end
359
+
360
+ test "unset_attr is an alias for remove_attributes" do
361
+ assert_respond_to(File, :unset_attr)
362
+ assert_alias_method(File, :unset_attr, :remove_attributes)
363
+ end
364
+
365
+ test "shorthand constants are defined" do
366
+ assert_not_nil(File::ARCHIVE)
367
+ assert_not_nil(File::HIDDEN)
368
+ assert_not_nil(File::NORMAL)
369
+ assert_not_nil(File::INDEXED)
370
+ assert_not_nil(File::OFFLINE)
371
+ assert_not_nil(File::READONLY)
372
+ assert_not_nil(File::SYSTEM)
373
+ assert_not_nil(File::TEMPORARY)
374
+ assert_not_nil(File::CONTENT_INDEXED) # alias for INDEXED
375
+ end
376
+
377
+ def teardown
378
+ SetFileAttributes(@@file, @attr)
379
+ @fh.close
380
+ end
381
+
382
+ def self.shutdown
383
+ File.delete(@@file)
384
+ @@file = nil
385
+ end
386
+ end