bfts 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,71 @@
1
+ require 'test/unit'
2
+ require 'rubicon_testcase'
3
+
4
+ class TestComparable < RubiconTestCase
5
+
6
+ class C
7
+ include Comparable
8
+ attr :val
9
+ def initialize(val)
10
+ @val = val
11
+ end
12
+ def <=>(other)
13
+ @val <=> other.val
14
+ end
15
+ end
16
+
17
+ def setup
18
+ @a = C.new(1)
19
+ @b = C.new(2)
20
+ @c = C.new(1)
21
+ @d = C.new(3)
22
+ end
23
+
24
+ def test_00sanity # ZenTest SKIP
25
+ assert_equal( 0, @a <=> @a)
26
+ assert_equal( 0, @a <=> @c)
27
+ assert_equal(-1, @a <=> @b)
28
+ assert_equal( 1, @b <=> @a)
29
+ end
30
+
31
+ def test_between_eh
32
+ assert( @a.between?(@a, @c))
33
+ assert(!@a.between?(@b, @c))
34
+ assert( @b.between?(@a, @b))
35
+ assert( @b.between?(@a, @d))
36
+ assert(!@d.between?(@a, @b))
37
+ assert(!@d.between?(@b, @b))
38
+ end
39
+
40
+ def test_equals2
41
+ assert( @a == @a)
42
+ assert( @a == @c)
43
+ assert(!(@a == @b))
44
+ assert( @a != @b)
45
+ end
46
+
47
+ def test_gt
48
+ assert(!(@a > @b))
49
+ assert(!(@a > @a))
50
+ assert( (@b > @a))
51
+ end
52
+
53
+ def test_gte
54
+ assert(!(@a >= @b))
55
+ assert( (@a >= @a))
56
+ assert( (@b >= @a))
57
+ end
58
+
59
+ def test_lt
60
+ assert( (@a < @b))
61
+ assert(!(@a < @a))
62
+ assert(!(@b < @a))
63
+ end
64
+
65
+ def test_lte
66
+ assert( (@a <= @b))
67
+ assert( (@a <= @a))
68
+ assert(!(@b <= @a))
69
+ end
70
+ end
71
+
@@ -0,0 +1,78 @@
1
+ require 'test/unit' if $0 == __FILE__
2
+ require 'rubicon_testcase'
3
+
4
+ class TestException < Test::Unit::TestCase
5
+
6
+ MSG = "duck"
7
+
8
+ def test_s_exception
9
+ e = Exception.exception
10
+ assert_equal(Exception, e.class)
11
+
12
+ e = Exception.exception(MSG)
13
+ assert_equal(MSG, e.message)
14
+ end
15
+
16
+ def test_backtrace
17
+ assert_nil(Exception.exception.backtrace)
18
+ begin
19
+ line=__LINE__; file=__FILE__; raise MSG
20
+ rescue RuntimeError => detail
21
+ assert_equal(RuntimeError, detail.class)
22
+ assert_equal(MSG, detail.message)
23
+ expected = "#{file}:#{line}:in `test_backtrace'"
24
+ assert_equal(expected, detail.backtrace[0])
25
+ end
26
+ end
27
+
28
+ def test_exception
29
+ e = IOError.new
30
+ assert_equal(IOError, e.class)
31
+ assert_equal(IOError, e.exception.class)
32
+ assert_equal(e, e.exception)
33
+
34
+ e = IOError.new
35
+ e1 = e.exception(MSG)
36
+ assert_equal(IOError, e1.class)
37
+ assert_equal(MSG, e1.message)
38
+ end
39
+
40
+ def test_message
41
+ e = IOError.new(MSG)
42
+ assert_equal(MSG, e.message)
43
+ end
44
+
45
+ def test_set_backtrace
46
+ e = IOError.new
47
+ a = %w( here there everywhere )
48
+ assert_equal(a, e.set_backtrace(a))
49
+ assert_equal(a, e.backtrace)
50
+ end
51
+
52
+ # FIX: this is retardedly complex
53
+ # exercise bug in Exception#set_backtrace, see [ruby-talk:96273].
54
+ class Problem # helper class for #test_set_backtrace2
55
+ STACK = %w(a:0:A b:1:B c:2:C)
56
+ def self.mk_problem
57
+ raise IOError, "got nuked"
58
+ rescue IOError => e
59
+ error = IOError.new("got nuked")
60
+ error.set_backtrace(STACK)
61
+ raise error
62
+ end
63
+ def self.mk_exception
64
+ begin
65
+ self.mk_problem
66
+ raise "should not happen"
67
+ rescue IOError => e
68
+ return e
69
+ end
70
+ end
71
+ end
72
+ def test_set_backtrace2
73
+ e = Problem.mk_exception
74
+ assert_equal("got nuked", e.message)
75
+ # this is how set_backtrace is suppose to work
76
+ assert_equal(Problem::STACK, e.backtrace)
77
+ end
78
+ end
@@ -0,0 +1,32 @@
1
+ require 'test/unit'
2
+ require 'rubicon_testcase'
3
+
4
+ class TestFalseClass < RubiconTestCase
5
+
6
+ def test_00sanity
7
+ assert_equal(false, FALSE)
8
+ end
9
+
10
+ def test_and
11
+ truth_table(false.method("&"), false, false)
12
+ end
13
+
14
+ def test_carat
15
+ truth_table(false.method("^"), false, true)
16
+ end
17
+
18
+ def test_or
19
+ truth_table(false.method("|"), false, true)
20
+ end
21
+
22
+ def test_to_s
23
+ assert_equal("false", false.to_s)
24
+ assert_equal("false", FALSE.to_s)
25
+ end
26
+
27
+ def test_type
28
+ assert_equal(FalseClass, false.class)
29
+ assert_equal(FalseClass, FALSE.class)
30
+ end
31
+
32
+ end
@@ -0,0 +1,372 @@
1
+ require 'test/unit'
2
+ require 'tempfile'
3
+ require 'socket'
4
+ require 'rubicon_testcase'
5
+
6
+ class TestFileTest < RubiconTestCase
7
+
8
+ def setup
9
+ @empty = Tempfile.new 'empty'
10
+
11
+ @full = Tempfile.new 'full'
12
+ @full << 'full'
13
+ @full.flush
14
+
15
+ nonexistent = Tempfile.new 'nonexistent'
16
+ @nonexistent_path = nonexistent.path
17
+ nonexistent.unlink
18
+
19
+ File.symlink @empty.path, @empty.path + '.symlink'
20
+ @symlink = File.open @empty.path + '.symlink'
21
+
22
+ socket_file = Tempfile.new 'socket'
23
+ socket_file.close true
24
+ @socket = UNIXServer.new socket_file.path
25
+
26
+ @pipe = Tempfile.new 'pipe'
27
+ @pipe.close true
28
+ system "mkfifo #{@pipe.path}"
29
+
30
+ @real_tmp = Dir.tmpdir
31
+ Dir.chdir '/' do
32
+ @real_tmp = File.symlink?(@real_tmp) ?
33
+ File.expand_path(File.readlink(@real_tmp)) :
34
+ @real_tmp
35
+ end
36
+ end
37
+
38
+ def teardown
39
+ File.unlink @symlink.path
40
+ @symlink.close
41
+
42
+ File.unlink @socket.path
43
+ @socket.close
44
+ end
45
+
46
+ def required_filetypes
47
+ return [
48
+ [:blockdev, '/dev/disk0'],
49
+ [:chardev, '/dev/rdisk0'],
50
+ [:directory, '/bin'],
51
+ [:empty, @empty.path],
52
+ [:full, @full.path],
53
+ [:nonexistent, @nonexistent_path],
54
+ [:pipe, @pipe.path],
55
+ [:setgid, '/usr/bin/write'],
56
+ [:setuid, '/sbin/ping'],
57
+ [:socket, @socket.path],
58
+ [:sticky_dir, @real_tmp],
59
+ ]
60
+ end
61
+
62
+ def util_test(method, filetypes)
63
+ required_filetypes.each do |filetype, path|
64
+ unless filetypes.include? filetype then
65
+ raise "Missing result for #{filetype.inspect}"
66
+ end
67
+ # TODO make this a def
68
+ assert_equal filetypes[filetype], FileTest.send(method, path),
69
+ "Mismatch for #{filetype.inspect} calling #{method.inspect}"
70
+ end
71
+ end
72
+
73
+ def test_class_blockdev_eh
74
+ util_test :blockdev?, :blockdev => true,
75
+ :chardev => false,
76
+ :directory => false,
77
+ :full => false,
78
+ :empty => false,
79
+ :nonexistent => false,
80
+ :pipe => false,
81
+ :setgid => false,
82
+ :setuid => false,
83
+ :socket => false,
84
+ :sticky_dir => false,
85
+ :symlink => true
86
+ end
87
+
88
+ def test_class_chardev_eh
89
+ util_test :chardev?, :blockdev => false,
90
+ :chardev => true,
91
+ :directory => false,
92
+ :empty => false,
93
+ :full => false,
94
+ :nonexistent => false,
95
+ :pipe => false,
96
+ :setgid => false,
97
+ :setuid => false,
98
+ :socket => false,
99
+ :sticky_dir => false,
100
+ :symlink => true
101
+ end
102
+
103
+ def test_class_directory_eh
104
+ util_test :directory?, :blockdev => false,
105
+ :chardev => false,
106
+ :directory => true,
107
+ :empty => false,
108
+ :full => false,
109
+ :nonexistent => false,
110
+ :pipe => false,
111
+ :setgid => false,
112
+ :setuid => false,
113
+ :socket => false,
114
+ :sticky_dir => true,
115
+ :symlink => true
116
+ end
117
+
118
+ def test_class_executable_eh
119
+ # HACK this test sucks, doesn't test uid vs euid, ugo
120
+ assert_equal false, FileTest.executable?(@empty.path)
121
+ @empty.chmod 0100
122
+ assert_equal true, FileTest.executable?(@empty.path)
123
+ end
124
+
125
+ def test_class_executable_real_eh
126
+ # HACK this test sucks, doesn't test uid vs euid, ugo
127
+ assert_equal false, FileTest.executable_real?(@empty.path)
128
+ @empty.chmod 0100
129
+ assert_equal true, FileTest.executable_real?(@empty.path)
130
+ end
131
+
132
+ def test_class_exist_eh
133
+ util_test :exist?, :blockdev => true,
134
+ :chardev => true,
135
+ :directory => true,
136
+ :empty => true,
137
+ :full => true,
138
+ :nonexistent => false,
139
+ :pipe => true,
140
+ :setgid => true,
141
+ :setuid => true,
142
+ :socket => true,
143
+ :sticky_dir => true,
144
+ :symlink => true
145
+ end
146
+
147
+ def test_class_exists_eh
148
+ util_test :exists?, :blockdev => true,
149
+ :chardev => true,
150
+ :directory => true,
151
+ :empty => true,
152
+ :full => true,
153
+ :nonexistent => false,
154
+ :pipe => true,
155
+ :setgid => true,
156
+ :setuid => true,
157
+ :socket => true,
158
+ :sticky_dir => true,
159
+ :symlink => true
160
+ end
161
+
162
+ def test_class_file_eh
163
+ util_test :file?, :blockdev => false,
164
+ :chardev => false,
165
+ :directory => false,
166
+ :empty => true,
167
+ :full => true,
168
+ :nonexistent => false,
169
+ :pipe => false,
170
+ :setgid => true,
171
+ :setuid => true,
172
+ :socket => false,
173
+ :sticky_dir => false,
174
+ :symlink => true
175
+ end
176
+
177
+ def test_class_grpowned_eh
178
+ # HACK this test sucks, doesn't test euid
179
+ assert_equal true, FileTest.grpowned?(ENV['HOME'])
180
+ assert_equal false, FileTest.grpowned?('/')
181
+ end
182
+
183
+ def test_class_identical_eh
184
+ # TODO: raise NotImplementedError, 'Need to write test_class_identical_eh'
185
+ end
186
+
187
+ def test_class_owned_eh
188
+ # HACK this test sucks, doesn't test euid
189
+ assert_equal true, FileTest.owned?(ENV['HOME'])
190
+ assert_equal false, FileTest.owned?('/')
191
+ end
192
+
193
+ def test_class_pipe_eh
194
+ util_test :pipe?, :blockdev => false,
195
+ :chardev => false,
196
+ :directory => false,
197
+ :empty => false,
198
+ :full => false,
199
+ :nonexistent => false,
200
+ :pipe => true,
201
+ :setgid => false,
202
+ :setuid => false,
203
+ :socket => false,
204
+ :sticky_dir => false,
205
+ :symlink => true
206
+ end
207
+
208
+ def test_class_readable_eh
209
+ # HACK this test sucks, doesn't test uid vs euid, ugo
210
+ assert_equal true, FileTest.readable?(@empty.path)
211
+ @empty.chmod 0000
212
+ assert_equal false, FileTest.readable?(@empty.path)
213
+ end
214
+
215
+ def test_class_readable_real_eh
216
+ # HACK this test sucks, doesn't test uid vs euid, ugo
217
+ assert_equal true, FileTest.readable_real?(@empty.path)
218
+ @empty.chmod 0000
219
+ assert_equal false, FileTest.readable_real?(@empty.path)
220
+ end
221
+
222
+ def test_class_setgid_eh
223
+ util_test :setgid?, :blockdev => false,
224
+ :chardev => false,
225
+ :directory => false,
226
+ :empty => false,
227
+ :full => false,
228
+ :nonexistent => false,
229
+ :pipe => false,
230
+ :setgid => true,
231
+ :setuid => false,
232
+ :socket => false,
233
+ :sticky_dir => false,
234
+ :symlink => true
235
+ end
236
+
237
+ def test_class_setuid_eh
238
+ util_test :setuid?, :blockdev => false,
239
+ :chardev => false,
240
+ :directory => false,
241
+ :empty => false,
242
+ :full => false,
243
+ :nonexistent => false,
244
+ :pipe => false,
245
+ :setgid => false,
246
+ :setuid => true,
247
+ :socket => false,
248
+ :sticky_dir => false,
249
+ :symlink => true
250
+ end
251
+
252
+ def util_size(f)
253
+ IO.read(f).size
254
+ end
255
+
256
+ def test_class_size # TODO directories, nonexistent
257
+ filetypes = Hash[*required_filetypes.flatten]
258
+ assert_equal 0, FileTest.size(filetypes[:blockdev])
259
+ assert_equal 0, FileTest.size(filetypes[:chardev])
260
+ # HACK need proper test dir
261
+ #assert_equal 1360, FileTest.size(filetypes[:directory])
262
+ assert_operator 0, :<, FileTest.size(filetypes[:directory])
263
+ assert_equal 0, FileTest.size(filetypes[:empty])
264
+ assert_equal 4, FileTest.size(filetypes[:full])
265
+ assert_raises Errno::ENOENT do
266
+ FileTest.size filetypes[:nonexistent]
267
+ end
268
+ assert_equal 0, FileTest.size(filetypes[:pipe])
269
+ assert_equal util_size(filetypes[:setgid]), FileTest.size(filetypes[:setgid])
270
+ assert_equal util_size(filetypes[:setuid]), FileTest.size(filetypes[:setuid])
271
+ assert_equal 0, FileTest.size(filetypes[:socket])
272
+ # HACK need proper sticky test dir
273
+ #assert_equal 63988, FileTest.size(filetypes[:sticky_dir])
274
+ assert_operator 0, :<, FileTest.size(filetypes[:sticky_dir])
275
+ end
276
+
277
+ def test_class_size_eh # TODO directories
278
+ filetypes = Hash[*required_filetypes.flatten]
279
+ assert_equal nil, FileTest.size?(filetypes[:blockdev])
280
+ assert_equal nil, FileTest.size?(filetypes[:chardev])
281
+ # HACK need proper test dir
282
+ #assert_equal 1360, FileTest.size?(filetypes[:directory])
283
+ assert_operator 0, :<, FileTest.size?(filetypes[:directory])
284
+ assert_equal nil, FileTest.size?(filetypes[:empty])
285
+ assert_equal 4, FileTest.size?(filetypes[:full])
286
+ assert_equal nil, FileTest.size?(filetypes[:nonexistent])
287
+ assert_equal nil, FileTest.size?(filetypes[:pipe])
288
+ assert_equal util_size(filetypes[:setgid]), FileTest.size?(filetypes[:setgid])
289
+ assert_equal util_size(filetypes[:setuid]), FileTest.size?(filetypes[:setuid])
290
+ assert_equal nil, FileTest.size?(filetypes[:socket])
291
+ # HACK need proper sticky test dir
292
+ #assert_equal 63988, FileTest.size?(filetypes[:sticky_dir])
293
+ assert_operator 0, :<, FileTest.size?(filetypes[:sticky_dir])
294
+ end
295
+
296
+ def test_class_socket_eh
297
+ util_test :socket?, :blockdev => false,
298
+ :chardev => false,
299
+ :directory => false,
300
+ :empty => false,
301
+ :full => false,
302
+ :nonexistent => false,
303
+ :pipe => false,
304
+ :setgid => false,
305
+ :setuid => false,
306
+ :socket => true,
307
+ :sticky_dir => false,
308
+ :symlink => true
309
+ end
310
+
311
+ def test_class_sticky_eh # TODO find a sticky file
312
+ util_test :sticky?, :blockdev => false,
313
+ :chardev => false,
314
+ :directory => false,
315
+ :empty => false,
316
+ :full => false,
317
+ :nonexistent => false,
318
+ :pipe => false,
319
+ :setgid => false,
320
+ :setuid => false,
321
+ :socket => false,
322
+ :sticky_dir => true,
323
+ :symlink => true
324
+ end
325
+
326
+ def test_class_symlink_eh
327
+ util_test :symlink?, :blockdev => false,
328
+ :chardev => false,
329
+ :directory => false,
330
+ :empty => false,
331
+ :full => false,
332
+ :nonexistent => false,
333
+ :pipe => false,
334
+ :setgid => false,
335
+ :setuid => false,
336
+ :socket => false,
337
+ :sticky_dir => false,
338
+ :symlink => true
339
+ end
340
+
341
+ def test_class_writable_eh
342
+ # HACK this test sucks, doesn't test uid vs euid, ugo
343
+ assert_equal true, FileTest.writable?(@empty.path)
344
+ @empty.chmod 0000
345
+ assert_equal false, FileTest.writable?(@empty.path)
346
+ end
347
+
348
+ def test_class_writable_real_eh
349
+ # HACK this test sucks, doesn't test uid vs euid, ugo
350
+ assert_equal true, FileTest.writable_real?(@empty.path)
351
+ @empty.chmod 0000
352
+ assert_equal false, FileTest.writable_real?(@empty.path)
353
+ end
354
+
355
+ def test_class_zero_eh
356
+ util_test :zero?, :blockdev => true,
357
+ :chardev => true,
358
+ :directory => false,
359
+ :empty => true,
360
+ :full => false,
361
+ :nonexistent => false,
362
+ :pipe => true,
363
+ :setgid => false,
364
+ :setuid => false,
365
+ :socket => true,
366
+ :sticky_dir => false,
367
+ :symlink => true
368
+ end
369
+
370
+ end
371
+
372
+ require 'test/unit' if $0 == __FILE__