win32-file-attributes 1.0.1 → 1.0.2

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.
@@ -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