ptools 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES ADDED
@@ -0,0 +1,40 @@
1
+ == 1.0.0 - 2-Jun-2005
2
+ * Modified the File.middle method to accept an optional block.
3
+ * File.whereis is now limited to unique values so that redundant PATH entries
4
+ do not cause redundant entries in the returned array (or block).
5
+ * File.nl_convert and File.touch now return self.
6
+ * File.nl_convert now raises ArgumentError (instead of StandardError) if
7
+ an unknown platform is provided.
8
+ * File.wc now raises ArgumentError (instead of RuntimeError) if a bad option
9
+ is provided.
10
+ * Made documentation rdoc friendly.
11
+ * Test suite updates, corrections and additions.
12
+ * Removed the INSTALL file. See the README instead.
13
+ * Moved project to RubyForge.
14
+
15
+ == 0.1.3 - 5-Dec-2003
16
+ * Modified File#which and File#whereis for Win32 to handle extensions better,
17
+ i.e. you can send "ruby" or "ruby.exe" and get back the same result.
18
+ * Minor test changes to tc_which.rb and tc_whereis.rb.
19
+
20
+ == 0.1.2 - 14-May-2003
21
+ * Modified nl_convert() to allow the destination filename to be the same as the
22
+ source file. In that case, a tempfile is used and copied back over the
23
+ original file.
24
+ * The target file name for nl_convert() now defaults to the source file name and
25
+ the default format is now "dos".
26
+ * Added a tc_constants.rb test suite.
27
+ * Test suite additions/fixes.
28
+ * Updates to MANIFEST.
29
+
30
+ == 0.1.1 - 21-Mar-2003
31
+ * Modified File.tail to return data in the same order that 'tail' does.
32
+ * Modified File.which to return nil if the program is not found.
33
+ * Modified File.whereis now uses '\' instead of '/' on MS Windows.
34
+ * Added File.middle class method.
35
+ * Test suite modification & additions.
36
+ * Thanks go to Shanko for both the spot and patch for tail, which, whereis
37
+ and middle.
38
+
39
+ == 0.1.0 - 18-Mar-2003
40
+ * Initial release
data/MANIFEST ADDED
@@ -0,0 +1,20 @@
1
+ CHANGES
2
+ README
3
+ MANIFEST
4
+ install.rb
5
+ ptools.gemspec
6
+
7
+ lib/ptools.rb
8
+
9
+ test/ts_all.rb
10
+ test/tc_constants.rb
11
+ test/tc_head.rb
12
+ test/tc_middle.rb
13
+ test/tc_nlconvert.rb
14
+ test/tc_tail.rb
15
+ test/tc_touch.rb
16
+ test/tc_wc.rb
17
+ test/tc_which.rb
18
+ test/tc_whereis.rb
19
+ test/test_file.txt
20
+ test/test_file2.txt
data/README ADDED
@@ -0,0 +1,62 @@
1
+ == Description
2
+ The ptools (power tools) package is an additional set of commands for the
3
+ File class based on Unix command line tools.
4
+
5
+ == Prerequisites
6
+ Ruby 1.8.0 or later is recommended but not required.
7
+
8
+ == Installation
9
+ ruby test/ts_all.rb (optional)
10
+ ruby install.rb
11
+
12
+ == Synopsis
13
+ require "ptools"
14
+
15
+ File.which("ruby") # '/usr/local/bin/ruby'
16
+ File.whereis("ruby") # ['/usr/local/bin/ruby','/opt/bin/ruby']
17
+
18
+ File.head("myfile") # Returns first 10 lines of 'myfile'
19
+ File.middle("myfile",8,12) # Returns lines 8-12 of 'myfile'
20
+ File.tail("myfile",3) # Returns last 3 lines of 'myfile'
21
+ File.wc("myfile",'words') # Returns the number of words in 'myfile'
22
+
23
+ File.touch("newfile") # "newfile" now exists
24
+
25
+ # Creates a copy of 'myfile' called 'newfile', in DOS format
26
+ File.nl_convert("myfile", "newfile", "dos")
27
+
28
+ == Known Bugs
29
+ There is a bug in 1.6.x that can cause $\ characters to accumulate when
30
+ converting to DOS or MAC format if nl_convert is run multiple times on
31
+ the same file. This appears to be fixed in 1.8.x.
32
+
33
+ == Acknowledgements
34
+ The which() method was adopted from the FileWhich code posted by Michael
35
+ Granger on http://www.rubygarden.org. The 'whereis' command is a minor
36
+ modification of that code as well.
37
+
38
+ The nl_convert() method was adopted (somewhat) from the nlcvt program
39
+ found at http://www.perl.com/language/ppt/src/nlcvt/nlcvt, written by
40
+ Tom Christiansen.
41
+
42
+ The middle() method was provided by Shashank Date.
43
+
44
+ == Future Plans
45
+ Add whatever other tools people think might be useful.
46
+
47
+ == License
48
+ Ruby's
49
+
50
+ == Copyright
51
+ (C) 2003-2005 Daniel J. Berger
52
+ All Rights Reserved.
53
+
54
+ == Warranty
55
+ This package is provided "as is" and without any express or
56
+ implied warranties, including, without limitation, the implied
57
+ warranties of merchantability and fitness for a particular purpose.
58
+
59
+ == Author
60
+ Daniel J. Berger
61
+ djberg96 at gmail dot com
62
+ imperator on IRC (irc.freenode.net)
data/lib/ptools.rb ADDED
@@ -0,0 +1,230 @@
1
+ class File
2
+
3
+ PTOOLS_VERSION = "1.0.0"
4
+ WIN32EXTS = %w/.exe .com .bat/
5
+
6
+ # Looks for the first occurrence of +program+ within +path+.
7
+ #
8
+ # On Win32, it looks for executables ending with .exe, .bat and .com
9
+ # which you may optionally include in the program name.
10
+ #
11
+ # Returns nil if not found.
12
+ def self.which(program, path=ENV['PATH'])
13
+ programs = program.to_a
14
+
15
+ # If no file extension is provided on Windows, try .bat, .com
16
+ # and .exe in turn.
17
+ if File::ALT_SEPARATOR && File.extname(program).empty?
18
+ unless WIN32EXTS.include?(File.extname(program))
19
+ WIN32EXTS.each{ |ext|
20
+ programs.push(program + ext)
21
+ }
22
+ end
23
+ end
24
+
25
+ # Catch the first path found, or nil
26
+ location = catch(:done){
27
+ path.split(File::PATH_SEPARATOR).each{ |dir|
28
+ programs.each{ |prog|
29
+ f = File.join(dir, prog)
30
+ if File.executable?(f) && !File.directory?(f)
31
+ location = File.join(dir, prog)
32
+ location.tr!('/',File::ALT_SEPARATOR) if File::ALT_SEPARATOR
33
+ throw(:done, location)
34
+ end
35
+ }
36
+ }
37
+ nil # Evaluate to nil if not found
38
+ }
39
+
40
+ location
41
+ end
42
+
43
+ # In block form, yields each +program+ within +path+. In non-block
44
+ # form, returns an array of each +program+ within +path+.
45
+ #
46
+ # On Win32, it looks for executables ending with .exe, .bat and .com
47
+ # which you may optionally include in the program name.
48
+ def self.whereis(program, path=ENV['PATH'])
49
+ dirs = []
50
+ programs = program.to_a
51
+
52
+ # If no file extension is provided on Windows, try .bat, .com
53
+ # and .exe in turn.
54
+ if File::ALT_SEPARATOR && File.extname(program).empty?
55
+ unless WIN32EXTS.include?(File.extname(program))
56
+ WIN32EXTS.each{ |ext|
57
+ programs.push(program + ext)
58
+ }
59
+ end
60
+ end
61
+
62
+ path.split(File::PATH_SEPARATOR).each{ |dir|
63
+ programs.each{ |prog|
64
+ file = File.join(dir,prog)
65
+ file.tr!('/',File::ALT_SEPARATOR) if File::ALT_SEPARATOR
66
+ if File.executable?(file) && !File.directory?(file)
67
+ if block_given?
68
+ yield file
69
+ else
70
+ dirs << file
71
+ end
72
+ end
73
+ }
74
+ }
75
+ dirs.empty? ? nil : dirs.uniq
76
+ end
77
+
78
+ # In block form, yields the first +num_lines+ from +filename+. In non-block
79
+ # form, returns an Array of +num_lines+
80
+ def self.head(filename, num_lines=10)
81
+ a = []
82
+ IO.foreach(filename){ |line|
83
+ break if num_lines <= 0
84
+ num_lines -= 1
85
+ if block_given?
86
+ yield line
87
+ else
88
+ a << line
89
+ end
90
+ }
91
+ return a.empty? ? nil : a # Return nil in block form
92
+ end
93
+
94
+ # In block form, yields line +from+ up to line +to+. In non-block form
95
+ # returns an Array of lines from +from+ to +to+.
96
+ def self.middle(filename, from=10, to=20)
97
+ if block_given?
98
+ IO.readlines(filename)[from-1..to-1].each{ |line| yield line }
99
+ else
100
+ IO.readlines(filename)[from-1..to-1]
101
+ end
102
+ end
103
+
104
+ # In block form, yields the last +num_lines+ of file +filename+.
105
+ # In non-block form, it returns the lines as an array.
106
+ #
107
+ # Note that this method slurps the entire file, so I don't recommend it
108
+ # for very large files. Also note that 'tail -f' functionality is not
109
+ # present.
110
+ def self.tail(filename, num_lines=10)
111
+ if block_given?
112
+ IO.readlines(filename).reverse[0..num_lines-1].reverse.each{ |line|
113
+ yield line
114
+ }
115
+ else
116
+ IO.readlines(filename).reverse[0..num_lines-1].reverse
117
+ end
118
+ end
119
+
120
+ # Converts a text file from one OS platform format to another, ala
121
+ # 'dos2unix'. Valid values for 'format', which are case insensitve,
122
+ # include:
123
+
124
+ # * MS Windows -> dos, windows, win32
125
+ # * Unix/BSD -> unix, linux, bsd
126
+ # * Mac -> mac, macintosh, apple, osx
127
+
128
+ # Note that this method is only valid for an ftype of "file". Otherwise a
129
+ # TypeError will be raised. If an invalid format value is received, an
130
+ # ArgumentError is raised.
131
+ def self.nl_convert(filename, newfilename=filename, platform="dos")
132
+
133
+ unless File.ftype(filename) == "file"
134
+ raise TypeError, "Only valid for plain text files"
135
+ end
136
+
137
+ if platform =~ /dos|windows|win32/i
138
+ format = "\cM\cJ"
139
+ elsif platform =~ /unix|linux|bsd/i
140
+ format = "\cJ"
141
+ elsif platform =~ /mac|apple|macintosh|osx/i
142
+ format = "\cM"
143
+ else
144
+ raise ArgumentError, "Invalid platform string"
145
+ end
146
+
147
+ orig = $\
148
+ $\ = format
149
+
150
+ if filename == newfilename
151
+ require "ftools"
152
+ require "tempfile"
153
+ tf = Tempfile.new("temp")
154
+ tf.open
155
+ IO.foreach(filename){ |line|
156
+ line.chomp!
157
+ tf.print line
158
+ }
159
+ tf.close
160
+ File.delete(filename)
161
+ File.copy(tf.path,filename)
162
+ else
163
+ nf = File.new(newfilename,"w+")
164
+ IO.foreach(filename){ |line|
165
+ line.chomp!
166
+ nf.print line
167
+ }
168
+ nf.close
169
+ end
170
+
171
+ $\ = orig
172
+ self
173
+ end
174
+
175
+ # Creates the 0 byte file +filename+.
176
+ def self.touch(filename)
177
+ File.open(filename,"w+"){}
178
+ self
179
+ end
180
+
181
+ # With no arguments, returns a four element array consisting of the number
182
+ # of bytes, characters, words and lines in filename, respectively.
183
+
184
+ # Valid options are 'bytes', 'characters' (or just 'chars'), 'words' and
185
+ # 'lines'.
186
+ def self.wc(filename,option='all')
187
+ option.downcase!
188
+ valid = %w/all bytes characters chars lines words/
189
+
190
+ unless valid.include?(option)
191
+ raise ArgumentError, "Invalid option: '#{option}'"
192
+ end
193
+
194
+ n = 0
195
+ if option == 'lines'
196
+ IO.foreach(filename){ n += 1 }
197
+ return n
198
+ elsif option == 'bytes'
199
+ File.open(filename){ |f|
200
+ f.each_byte{ n += 1 }
201
+ }
202
+ return n
203
+ elsif option == 'characters' || option == 'chars'
204
+ File.open(filename){ |f|
205
+ while f.getc
206
+ n += 1
207
+ end
208
+ }
209
+ return n
210
+ elsif option == 'words'
211
+ IO.foreach(filename){ |line|
212
+ n += line.split.length
213
+ }
214
+ return n
215
+ else
216
+ bytes,chars,lines,words = 0,0,0,0
217
+ IO.foreach(filename){ |line|
218
+ lines += 1
219
+ words += line.split.length
220
+ chars += line.split('').length
221
+ }
222
+ File.open(filename){ |f|
223
+ while f.getc
224
+ bytes += 1
225
+ end
226
+ }
227
+ return [bytes,chars,words,lines]
228
+ end
229
+ end
230
+ end
@@ -0,0 +1,22 @@
1
+ ##################################################
2
+ # tc_constants.rb
3
+ #
4
+ # Tests whatever constant that have been defined
5
+ ##################################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_Constants < Test::Unit::TestCase
19
+ def test_version
20
+ assert_equal("1.0.0", File::PTOOLS_VERSION, "Bad VERSION")
21
+ end
22
+ end
data/test/tc_head.rb ADDED
@@ -0,0 +1,49 @@
1
+ ##########################################
2
+ # tc_head.rb
3
+ #
4
+ # Test case for the File.head method.
5
+ ##########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileHead < Test::Unit::TestCase
19
+ def setup
20
+ @test_file = 'test_file1.txt'
21
+
22
+ @expected_head1 = ["line1\n","line2\n","line3\n","line4\n","line5\n"]
23
+ @expected_head1.push("line6\n","line7\n","line8\n","line9\n","line10\n")
24
+
25
+ @expected_head2 = ["line1\n","line2\n","line3\n","line4\n","line5\n"]
26
+ end
27
+
28
+ def test_head_basic
29
+ assert_respond_to(File, :head)
30
+ assert_nothing_raised{ File.head(@test_file) }
31
+ assert_nothing_raised{ File.head(@test_file, 5) }
32
+ assert_nothing_raised{ File.head(@test_file){} }
33
+ end
34
+
35
+ def test_head_expected_results
36
+ assert_kind_of(Array, File.head(@test_file))
37
+ assert_equal(@expected_head1, File.head(@test_file))
38
+ assert_equal(@expected_head2, File.head(@test_file, 5))
39
+ end
40
+
41
+ def test_head_expected_errors
42
+ assert_raises(ArgumentError){ File.head(@test_file, 5, "foo") }
43
+ assert_raises(Errno::ENOENT){ File.head("bogus") }
44
+ end
45
+
46
+ def teardown
47
+ @test_file = nil
48
+ end
49
+ end
data/test/tc_middle.rb ADDED
@@ -0,0 +1,58 @@
1
+ ##########################################
2
+ # tc_middle.rb
3
+ #
4
+ # Test case for the File.middle method
5
+ ##########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileMiddle < Test::Unit::TestCase
19
+ def setup
20
+ @test_file = 'test_file1.txt'
21
+
22
+ @expected_middle1 = ["line10\n", "line11\n", "line12\n", "line13\n", "line14\n"]
23
+ @expected_middle1.push("line15\n","line16\n", "line17\n", "line18\n")
24
+ @expected_middle1.push("line19\n","line20\n")
25
+
26
+ @expected_middle2 = ["line14\n","line15\n","line16\n","line17\n"]
27
+ @expected_middle2.push("line18\n","line19\n","line20\n")
28
+
29
+ @expected_middle3 = ["line5\n","line6\n","line7\n"]
30
+ @expected_middle3.push("line8\n","line9\n","line10\n")
31
+ end
32
+
33
+ def test_method_basic
34
+ assert_respond_to(File, :middle)
35
+ assert_nothing_raised{ File.middle(@test_file) }
36
+ assert_nothing_raised{ File.middle(@test_file, 14) }
37
+ assert_nothing_raised{ File.middle(@test_file, 5, 10) }
38
+ assert_nothing_raised{ File.middle(@test_file){} }
39
+ end
40
+
41
+ def test_middle_expected_results
42
+ assert_kind_of(Array, File.middle(@test_file))
43
+ assert_equal(@expected_middle1, File.middle(@test_file))
44
+ assert_equal(@expected_middle2, File.middle(@test_file, 14))
45
+ assert_equal(@expected_middle3, File.middle(@test_file, 5, 10))
46
+ end
47
+
48
+ def test_middle_expected_errors
49
+ assert_raises(ArgumentError){ File.middle }
50
+ assert_raises(ArgumentError){ File.middle(@test_file, 5, 10, 15) }
51
+ assert_raises(NoMethodError){ File.middle(@test_file, "foo") }
52
+ assert_raises(Errno::ENOENT){ File.middle("bogus") }
53
+ end
54
+
55
+ def teardown
56
+ @test_file = nil
57
+ end
58
+ end
@@ -0,0 +1,79 @@
1
+ #############################################
2
+ # tc_nlconvert.rb
3
+ #
4
+ # Test case for the File.nl_convert method.
5
+ #############################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileNLConvert < Test::Unit::TestCase
19
+ def setup
20
+ @test_file1 = 'test_file1.txt'
21
+ @test_file2 = 'test_file2.txt'
22
+ @dos_file = 'dos_test_file.txt'
23
+ @mac_file = 'mac_test_file.txt'
24
+ @unix_file = 'nix_test_file.txt'
25
+ end
26
+
27
+ def test_nl_convert_basic
28
+ assert_respond_to(File, :nl_convert)
29
+ assert_nothing_raised{ File.nl_convert(@test_file2) }
30
+ assert_nothing_raised{ File.nl_convert(@test_file2, @test_file2) }
31
+ assert_nothing_raised{ File.nl_convert(@test_file2, @test_file2, "unix") }
32
+ end
33
+
34
+ def test_nl_convert_to_dos
35
+ msg = "dos file should be larger, but isn't"
36
+
37
+ assert_nothing_raised{ File.nl_convert(@test_file1, @dos_file, "dos") }
38
+ assert_equal(true, File.size(@dos_file) > File.size(@test_file1), msg)
39
+ assert_equal(["\cM","\cJ"],
40
+ IO.readlines(@dos_file).first.split("")[-2..-1]
41
+ )
42
+ end
43
+
44
+ def test_nl_convert_to_mac
45
+ if File::ALT_SEPARATOR
46
+ msg = "test may fail on Win32"
47
+ else
48
+ msg = "mac file should be the same size (or larger), but isn't"
49
+ end
50
+
51
+ assert_nothing_raised{ File.nl_convert(@test_file1, @mac_file, "mac") }
52
+ assert_equal(true, File.size(@mac_file) == File.size(@test_file1), msg)
53
+ assert_equal("\cM", IO.readlines(@mac_file).first.split("").last)
54
+ end
55
+
56
+ def test_nl_convert_to_unix
57
+ msg = "unix file should be the same size (or smaller), but isn't"
58
+
59
+ assert_nothing_raised{ File.nl_convert(@test_file1, @unix_file, "unix") }
60
+ assert_equal("\n", IO.readlines(@unix_file).first.split("").last)
61
+
62
+ if File::ALT_SEPARATOR
63
+ assert_equal(true, File.size(@unix_file) >= File.size(@test_file1),msg)
64
+ else
65
+ assert_equal(true, File.size(@unix_file) <= File.size(@test_file1),msg)
66
+ end
67
+ end
68
+
69
+ def test_nl_convert_expected_errors
70
+ assert_raises(ArgumentError){ File.nl_convert }
71
+ assert_raises(ArgumentError){ File.nl_convert(@test_file1, "bogus.txt", "blah") }
72
+ end
73
+
74
+ def teardown
75
+ [@dos_file, @mac_file, @unix_file].each{ |file|
76
+ File.delete(file) if File.exists?(file)
77
+ }
78
+ end
79
+ end
data/test/tc_tail.rb ADDED
@@ -0,0 +1,50 @@
1
+ ########################################
2
+ # tc_tail.rb
3
+ #
4
+ # Test case for the File.tail method.
5
+ ########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileTail < Test::Unit::TestCase
19
+ def setup
20
+ @test_file = 'test_file1.txt'
21
+
22
+ @expected_tail1 = ["line16\n","line17\n","line18\n","line19\n"]
23
+ @expected_tail1.push("line20\n","line21\n","line22\n", "line23\n")
24
+ @expected_tail1.push("line24\n","line25\n")
25
+
26
+ @expected_tail2 = ["line21\n","line22\n","line23\n","line24\n","line25\n"]
27
+ end
28
+
29
+ def test_tail_basic
30
+ assert_respond_to(File, :tail)
31
+ assert_nothing_raised{ File.tail(@test_file) }
32
+ assert_nothing_raised{ File.tail(@test_file, 5) }
33
+ assert_nothing_raised{ File.tail(@test_file){} }
34
+ end
35
+
36
+ def test_tail_expected_return_values
37
+ assert_kind_of(Array, File.tail(@test_file))
38
+ assert_equal(@expected_tail1, File.tail(@test_file))
39
+ assert_equal(@expected_tail2, File.tail(@test_file, 5))
40
+ end
41
+
42
+ def test_tail_expected_errors
43
+ assert_raises(ArgumentError){ File.tail }
44
+ assert_raises(ArgumentError){ File.tail(@test_file, 5, 5) }
45
+ end
46
+
47
+ def teardown
48
+ @test_file = nil
49
+ end
50
+ end
data/test/tc_touch.rb ADDED
@@ -0,0 +1,41 @@
1
+ ###########################################
2
+ # tc_touch.rb
3
+ #
4
+ # Test case for the File.touch method.
5
+ ###########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileTouch < Test::Unit::TestCase
19
+ def setup
20
+ @test_file = "delete.this"
21
+ end
22
+
23
+ def test_touch_basic
24
+ assert_respond_to(File, :touch)
25
+ assert_nothing_raised{ File.touch(@test_file) }
26
+ end
27
+
28
+ def test_touch_expected_results
29
+ assert_equal(File, File.touch(@test_file))
30
+ assert_equal(true, File.exists?(@test_file))
31
+ assert_equal(0, File.size(@test_file))
32
+ end
33
+
34
+ def test_touch_expected_errors
35
+ assert_raises(ArgumentError){ File.touch }
36
+ end
37
+
38
+ def teardown
39
+ File.delete(@test_file) if File.exists?(@test_file)
40
+ end
41
+ end
data/test/tc_wc.rb ADDED
@@ -0,0 +1,49 @@
1
+ ####################################
2
+ # tc_wc.rb
3
+ #
4
+ # Test case for the File.wc method.
5
+ ####################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileWC < Test::Unit::TestCase
19
+ def setup
20
+ @test_file = 'test_file1.txt'
21
+ end
22
+
23
+ def test_wc_basic
24
+ assert_respond_to(File, :wc)
25
+ assert_nothing_raised{ File.wc(@test_file) }
26
+ assert_nothing_raised{ File.wc(@test_file, 'bytes') }
27
+ assert_nothing_raised{ File.wc(@test_file, 'chars') }
28
+ assert_nothing_raised{ File.wc(@test_file, 'words') }
29
+ assert_nothing_raised{ File.wc(@test_file, 'LINES') }
30
+ end
31
+
32
+ def test_wc_results
33
+ assert_kind_of(Array, File.wc(@test_file))
34
+ assert_equal([166,166,25,25], File.wc(@test_file))
35
+ assert_equal(166, File.wc(@test_file,'bytes'), "Wrong number of bytes")
36
+ assert_equal(166, File.wc(@test_file,'chars'), "Wrong number of chars")
37
+ assert_equal(25, File.wc(@test_file,'words'), "Wrong number of words")
38
+ assert_equal(25, File.wc(@test_file,'lines'), "Wrong number of lines")
39
+ end
40
+
41
+ def test_wc_expected_errors
42
+ assert_raises(ArgumentError){ File.wc }
43
+ assert_raises(ArgumentError){ File.wc(@test_file, "bogus") }
44
+ end
45
+
46
+ def teardown
47
+ @test_file = nil
48
+ end
49
+ end
@@ -0,0 +1,52 @@
1
+ ##########################################
2
+ # tc_whereis.rb
3
+ #
4
+ # Test case for the File.whereis method.
5
+ ##########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileWhereis < Test::Unit::TestCase
19
+
20
+ def setup
21
+ # Change this to suit your system
22
+ @expected_locs = ['/usr/local/bin/ruby','/opt/sfw/bin/ruby']
23
+ @expected_locs.push('/opt/bin/ruby', '/usr/bin/ruby')
24
+
25
+ # MS Windows - change as needed
26
+ if File::ALT_SEPARATOR
27
+ @expected_locs = ["c:\\ruby\\bin\\ruby.exe"]
28
+ end
29
+ end
30
+
31
+ def test_whereis_basic
32
+ assert_respond_to(File, :whereis)
33
+ assert_nothing_raised{ File.whereis("ruby") }
34
+ assert_nothing_raised{ File.whereis("ruby","/usr/bin:/usr/local/bin") }
35
+ assert_nothing_raised{ File.whereis("ruby"){} }
36
+ end
37
+
38
+ def test_whereis_expected_return_values
39
+ assert_kind_of(Array, File.whereis("ruby"))
40
+ assert_equal(true, @expected_locs.include?(File.whereis("ruby").first))
41
+ assert_equal(nil, File.whereis("blahblah"))
42
+ end
43
+
44
+ def test_whereis_expected_errors
45
+ assert_raises(ArgumentError){ File.whereis }
46
+ assert_raises(ArgumentError){ File.whereis("ruby","foo","bar") }
47
+ end
48
+
49
+ def teardown
50
+ @expected_locs = nil
51
+ end
52
+ end
data/test/tc_which.rb ADDED
@@ -0,0 +1,54 @@
1
+ ########################################
2
+ # tc_which.rb
3
+ #
4
+ # Test case for the File.which method.
5
+ ########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require 'rbconfig'
16
+ require 'test/unit'
17
+ require 'ptools'
18
+
19
+ # I make the assumption that Ruby is in your PATH for these tests
20
+
21
+ class TC_FileWhich < Test::Unit::TestCase
22
+ include Config
23
+
24
+ def setup
25
+ @exe = File.join(CONFIG["bindir"], CONFIG["ruby_install_name"])
26
+
27
+ if File::ALT_SEPARATOR
28
+ @exe.tr!('/','\\')
29
+ @exe << ".exe"
30
+ end
31
+ end
32
+
33
+ def test_which_basic
34
+ assert_respond_to(File, :which)
35
+ assert_nothing_raised{ File.which("ruby") }
36
+ assert_nothing_raised{ File.which("ruby", "/usr/bin:/usr/local/bin") }
37
+ end
38
+
39
+ def test_which_expected_return_values
40
+ assert_kind_of(String, File.which("ruby"))
41
+ assert_equal(@exe, File.which("ruby"))
42
+ assert_equal(nil, File.which("ruby", "/bogus/path"))
43
+ assert_equal(nil, File.which("blahblah"))
44
+ end
45
+
46
+ def test_which_expected_errors
47
+ assert_raises(ArgumentError){ File.which }
48
+ assert_raises(ArgumentError){ File.which("ruby", "foo", "bar") }
49
+ end
50
+
51
+ def teardown
52
+ @exe = nil
53
+ end
54
+ end
@@ -0,0 +1,25 @@
1
+ line1
2
+ line2
3
+ line3
4
+ line4
5
+ line5
6
+ line6
7
+ line7
8
+ line8
9
+ line9
10
+ line10
11
+ line11
12
+ line12
13
+ line13
14
+ line14
15
+ line15
16
+ line16
17
+ line17
18
+ line18
19
+ line19
20
+ line20
21
+ line21
22
+ line22
23
+ line23
24
+ line24
25
+ line25
@@ -0,0 +1,25 @@
1
+ line1
2
+ line2
3
+ line3
4
+ line4
5
+ line5
6
+ line6
7
+ line7
8
+ line8
9
+ line9
10
+ line10
11
+ line11
12
+ line12
13
+ line13
14
+ line14
15
+ line15
16
+ line16
17
+ line17
18
+ line18
19
+ line19
20
+ line20
21
+ line21
22
+ line22
23
+ line23
24
+ line24
25
+ line25
data/test/ts_all.rb ADDED
@@ -0,0 +1,17 @@
1
+ ########################################
2
+ # ts_all.rb
3
+ #
4
+ # All tests for the ptools package.
5
+ ########################################
6
+ $LOAD_PATH.unshift(Dir.pwd)
7
+ $LOAD_PATH.unshift(Dir.pwd + "/test")
8
+
9
+ require 'tc_constants'
10
+ require 'tc_head'
11
+ require 'tc_middle'
12
+ require 'tc_nlconvert'
13
+ require 'tc_tail'
14
+ require 'tc_touch'
15
+ require 'tc_wc'
16
+ require 'tc_which'
17
+ require 'tc_whereis'
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.10
3
+ specification_version: 1
4
+ name: ptools
5
+ version: !ruby/object:Gem::Version
6
+ version: 1.0.0
7
+ date: 2005-06-02
8
+ summary: Extra methods for the File class
9
+ require_paths:
10
+ - lib
11
+ email: djberg96@gmail.com
12
+ homepage: http://www.rubyforge.org/projects/shards
13
+ rubyforge_project:
14
+ description:
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ -
22
+ - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
25
+ version:
26
+ platform: ruby
27
+ authors:
28
+ - Daniel J. Berger
29
+ files:
30
+ - lib/ptools.rb
31
+ - README
32
+ - CHANGES
33
+ - MANIFEST
34
+ - test/tc_head.rb
35
+ - test/ts_all.rb
36
+ - test/tc_whereis.rb
37
+ - test/tc_middle.rb
38
+ - test/tc_which.rb
39
+ - test/tc_constants.rb
40
+ - test/tc_tail.rb
41
+ - test/tc_wc.rb
42
+ - test/tc_nlconvert.rb
43
+ - test/test_file1.txt
44
+ - test/test_file2.txt
45
+ - test/tc_touch.rb
46
+ test_files:
47
+ - test/ts_all.rb
48
+ rdoc_options: []
49
+ extra_rdoc_files:
50
+ - README
51
+ - CHANGES
52
+ executables: []
53
+ extensions: []
54
+ requirements: []
55
+ dependencies: []