pathname2 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/CHANGES +3 -0
  2. data/lib/pathname2.rb +557 -536
  3. data/test/tc_pathname.rb +192 -182
  4. data/test/tc_pathname_win.rb +237 -227
  5. metadata +5 -5
data/test/tc_pathname.rb CHANGED
@@ -1,182 +1,192 @@
1
- ##############################################
2
- # tc_pathname.rb
3
- #
4
- # Test suite for the pathname package (Unix)
5
- ##############################################
6
- Dir.chdir ".." if File.basename(Dir.pwd) == "test"
7
- $LOAD_PATH.unshift Dir.pwd
8
- $LOAD_PATH.unshift Dir.pwd + "/lib"
9
-
10
- require "pathname2"
11
- require "test/unit"
12
-
13
- class TC_Pathname < Test::Unit::TestCase
14
- def setup
15
- @path = Pathname.new("/usr/local/bin")
16
- end
17
-
18
- # Convenience method for test_plus
19
- def assert_pathname_plus(a, b, c)
20
- a = Pathname.new(a)
21
- b = Pathname.new(b)
22
- c = Pathname.new(c)
23
- assert_equal(a, b + c)
24
- end
25
-
26
- # Convenience method for test_spaceship operator
27
- def assert_pathname_cmp(int, s1, s2)
28
- p1 = Pathname.new(s1)
29
- p2 = Pathname.new(s2)
30
- result = p1 <=> p2
31
- assert_equal(int, result)
32
- end
33
-
34
- def test_version
35
- assert_equal("1.0.0", Pathname::VERSION)
36
- end
37
-
38
- def test_unc
39
- assert_raises(NotImplementedError){ @path.unc? }
40
- end
41
-
42
- def test_enumerable
43
- assert_respond_to(@path, :each)
44
- end
45
-
46
- def test_root
47
- assert_respond_to(@path, :root)
48
- assert_nothing_raised{ @path.root }
49
- assert_equal("/", @path.root)
50
-
51
- path1 = Pathname.new("foo")
52
- path2 = Pathname.new("foo/bar/baz")
53
- assert_equal(".", path1.root)
54
- assert_equal(".", path2.root)
55
- end
56
-
57
- def test_root?
58
- assert_respond_to(@path, :root?)
59
- assert_nothing_raised{ @path.root? }
60
-
61
- path1 = Pathname.new("/")
62
- path2 = Pathname.new("a")
63
- assert_equal(true, path1.root?)
64
- assert_equal(false, path2.root?)
65
- end
66
-
67
- def test_absolute
68
- assert_respond_to(@path, :absolute?)
69
- assert_nothing_raised{ @path.absolute? }
70
- assert_equal(true, Pathname.new("/usr/bin/ruby").absolute?)
71
- assert_equal(false, Pathname.new("foo").absolute?)
72
- assert_equal(false, Pathname.new("foo/bar").absolute?)
73
- assert_equal(false, Pathname.new("../foo/bar").absolute?)
74
- end
75
-
76
- def test_relative
77
- assert_respond_to(@path, :relative?)
78
- assert_nothing_raised{ @path.relative? }
79
- assert_equal(false, Pathname.new("/usr/bin/ruby").relative?)
80
- assert_equal(true, Pathname.new("foo").relative?)
81
- assert_equal(true, Pathname.new("foo/bar").relative?)
82
- assert_equal(true, Pathname.new("../foo/bar").relative?)
83
- end
84
-
85
- def test_to_a
86
- assert_respond_to(@path, :to_a)
87
- assert_nothing_raised{ @path.to_a }
88
- assert_kind_of(Array, @path.to_a)
89
- assert_equal(%w/usr local bin/, @path.to_a)
90
- end
91
-
92
- def test_spaceship_operator
93
- assert_respond_to(@path, :<=>)
94
-
95
- assert_pathname_cmp( 0, "/foo/bar", "/foo/bar")
96
- assert_pathname_cmp(-1, "/foo/bar", "/foo/zap")
97
- assert_pathname_cmp( 1, "/foo/zap", "/foo/bar")
98
- assert_pathname_cmp(-1, "foo", "foo/")
99
- assert_pathname_cmp(-1, "foo/", "foo/bar")
100
- end
101
-
102
- def test_plus_operator
103
- assert_respond_to(@path, :+)
104
-
105
- # Standard stuff
106
- assert_pathname_plus("/foo/bar", "/foo", "bar")
107
- assert_pathname_plus("foo/bar", "foo", "bar")
108
- assert_pathname_plus("foo", "foo", ".")
109
- assert_pathname_plus("foo", ".", "foo")
110
- assert_pathname_plus("/foo", "bar", "/foo")
111
- assert_pathname_plus("foo", "foo/bar", "..")
112
- assert_pathname_plus("/foo", "/", "../foo")
113
- assert_pathname_plus("foo/zap", "foo/bar", "../zap")
114
- assert_pathname_plus(".", "foo", "..")
115
- assert_pathname_plus("foo", "..", "foo") # Auto clean
116
- assert_pathname_plus("foo", "..", "../foo") # Auto clean
117
-
118
- # Edge cases
119
- assert_pathname_plus(".", ".", ".")
120
- assert_pathname_plus("/", "/", "..")
121
- assert_pathname_plus(".", "..", "..")
122
- assert_pathname_plus(".", "foo", "..")
123
- end
124
-
125
- # Any tests marked with "***" mean that this behavior is different than
126
- # the current implementation. It also means I disagree with the current
127
- # implementation.
128
- def test_cleanpath
129
- # Standard stuff
130
- assert_equal("/a/b/c", Pathname.new("/a/b/c").cleanpath)
131
- assert_equal("b/c", Pathname.new("./b/c").cleanpath)
132
- assert_equal("a", Pathname.new("a/.").cleanpath) # ***
133
- assert_equal("a/c", Pathname.new("a/./c").cleanpath)
134
- assert_equal("a/b", Pathname.new("a/b/.").cleanpath) # ***
135
- assert_equal(".", Pathname.new("a/../.").cleanpath) # ***
136
- assert_equal("/a", Pathname.new("/a/b/..").cleanpath)
137
- assert_equal("/b", Pathname.new("/a/../b").cleanpath)
138
- assert_equal("d", Pathname.new("a/../../d").cleanpath) # ***
139
-
140
- # Edge cases
141
- assert_equal("", Pathname.new("").cleanpath)
142
- assert_equal(".", Pathname.new(".").cleanpath)
143
- assert_equal("..", Pathname.new("..").cleanpath)
144
- assert_equal('/', Pathname.new('/').cleanpath)
145
- assert_equal('/', Pathname.new('//').cleanpath)
146
- end
147
-
148
- def test_facade_io
149
- assert_respond_to(@path, :foreach)
150
- assert_respond_to(@path, :read)
151
- assert_respond_to(@path, :readlines)
152
- assert_respond_to(@path, :sysopen)
153
- end
154
-
155
- def test_facade_file
156
- File.methods(false).each{ |method|
157
- assert_respond_to(@path, method.to_sym)
158
- }
159
- end
160
-
161
- def test_facade_dir
162
- Dir.methods(false).each{ |method|
163
- assert_respond_to(@path, method.to_sym)
164
- }
165
- end
166
-
167
- def test_facade_fileutils
168
- methods = FileUtils.public_instance_methods
169
- methods -= File.methods(false)
170
- methods -= Dir.methods(false)
171
- methods.delete_if{ |m| m =~ /stream/ }
172
- methods.delete("identical?")
173
-
174
- methods.each{ |method|
175
- assert_respond_to(@path, method.to_sym)
176
- }
177
- end
178
-
179
- def teardown
180
- @path = nil
181
- end
182
- end
1
+ ##############################################
2
+ # tc_pathname.rb
3
+ #
4
+ # Test suite for the pathname package (Unix)
5
+ ##############################################
6
+ Dir.chdir ".." if File.basename(Dir.pwd) == "test"
7
+ $LOAD_PATH.unshift Dir.pwd
8
+ $LOAD_PATH.unshift Dir.pwd + "/lib"
9
+
10
+ require "pathname2"
11
+ require "test/unit"
12
+
13
+ class TC_Pathname < Test::Unit::TestCase
14
+ def setup
15
+ @path = Pathname.new("/usr/local/bin")
16
+ end
17
+
18
+ # Convenience method for test_plus
19
+ def assert_pathname_plus(a, b, c)
20
+ a = Pathname.new(a)
21
+ b = Pathname.new(b)
22
+ c = Pathname.new(c)
23
+ assert_equal(a, b + c)
24
+ end
25
+
26
+ # Convenience method for test_spaceship operator
27
+ def assert_pathname_cmp(int, s1, s2)
28
+ p1 = Pathname.new(s1)
29
+ p2 = Pathname.new(s2)
30
+ result = p1 <=> p2
31
+ assert_equal(int, result)
32
+ end
33
+
34
+ def test_version
35
+ assert_equal("1.1.0", Pathname::VERSION)
36
+ end
37
+
38
+ def test_unc
39
+ assert_raises(NotImplementedError){ @path.unc? }
40
+ end
41
+
42
+ def test_enumerable
43
+ assert_respond_to(@path, :each)
44
+ end
45
+
46
+ def test_root
47
+ assert_respond_to(@path, :root)
48
+ assert_nothing_raised{ @path.root }
49
+ assert_equal("/", @path.root)
50
+
51
+ path1 = Pathname.new("foo")
52
+ path2 = Pathname.new("foo/bar/baz")
53
+ assert_equal(".", path1.root)
54
+ assert_equal(".", path2.root)
55
+ end
56
+
57
+ def test_root?
58
+ assert_respond_to(@path, :root?)
59
+ assert_nothing_raised{ @path.root? }
60
+
61
+ path1 = Pathname.new("/")
62
+ path2 = Pathname.new("a")
63
+ assert_equal(true, path1.root?)
64
+ assert_equal(false, path2.root?)
65
+ end
66
+
67
+ def test_absolute
68
+ assert_respond_to(@path, :absolute?)
69
+ assert_nothing_raised{ @path.absolute? }
70
+ assert_equal(true, Pathname.new("/usr/bin/ruby").absolute?)
71
+ assert_equal(false, Pathname.new("foo").absolute?)
72
+ assert_equal(false, Pathname.new("foo/bar").absolute?)
73
+ assert_equal(false, Pathname.new("../foo/bar").absolute?)
74
+ end
75
+
76
+ def test_relative
77
+ assert_respond_to(@path, :relative?)
78
+ assert_nothing_raised{ @path.relative? }
79
+ assert_equal(false, Pathname.new("/usr/bin/ruby").relative?)
80
+ assert_equal(true, Pathname.new("foo").relative?)
81
+ assert_equal(true, Pathname.new("foo/bar").relative?)
82
+ assert_equal(true, Pathname.new("../foo/bar").relative?)
83
+ end
84
+
85
+ def test_to_a
86
+ assert_respond_to(@path, :to_a)
87
+ assert_nothing_raised{ @path.to_a }
88
+ assert_kind_of(Array, @path.to_a)
89
+ assert_equal(%w/usr local bin/, @path.to_a)
90
+ end
91
+
92
+ def test_spaceship_operator
93
+ assert_respond_to(@path, :<=>)
94
+
95
+ assert_pathname_cmp( 0, "/foo/bar", "/foo/bar")
96
+ assert_pathname_cmp(-1, "/foo/bar", "/foo/zap")
97
+ assert_pathname_cmp( 1, "/foo/zap", "/foo/bar")
98
+ assert_pathname_cmp(-1, "foo", "foo/")
99
+ assert_pathname_cmp(-1, "foo/", "foo/bar")
100
+ end
101
+
102
+ def test_plus_operator
103
+ assert_respond_to(@path, :+)
104
+
105
+ # Standard stuff
106
+ assert_pathname_plus("/foo/bar", "/foo", "bar")
107
+ assert_pathname_plus("foo/bar", "foo", "bar")
108
+ assert_pathname_plus("foo", "foo", ".")
109
+ assert_pathname_plus("foo", ".", "foo")
110
+ assert_pathname_plus("/foo", "bar", "/foo")
111
+ assert_pathname_plus("foo", "foo/bar", "..")
112
+ assert_pathname_plus("/foo", "/", "../foo")
113
+ assert_pathname_plus("foo/zap", "foo/bar", "../zap")
114
+ assert_pathname_plus(".", "foo", "..")
115
+ assert_pathname_plus("foo", "..", "foo") # Auto clean
116
+ assert_pathname_plus("foo", "..", "../foo") # Auto clean
117
+
118
+ # Edge cases
119
+ assert_pathname_plus(".", ".", ".")
120
+ assert_pathname_plus("/", "/", "..")
121
+ assert_pathname_plus(".", "..", "..")
122
+ assert_pathname_plus(".", "foo", "..")
123
+ end
124
+
125
+ # Any tests marked with "***" mean that this behavior is different than
126
+ # the current implementation. It also means I disagree with the current
127
+ # implementation.
128
+ def test_cleanpath
129
+ # Standard stuff
130
+ assert_equal("/a/b/c", Pathname.new("/a/b/c").cleanpath)
131
+ assert_equal("b/c", Pathname.new("./b/c").cleanpath)
132
+ assert_equal("a", Pathname.new("a/.").cleanpath) # ***
133
+ assert_equal("a/c", Pathname.new("a/./c").cleanpath)
134
+ assert_equal("a/b", Pathname.new("a/b/.").cleanpath) # ***
135
+ assert_equal(".", Pathname.new("a/../.").cleanpath) # ***
136
+ assert_equal("/a", Pathname.new("/a/b/..").cleanpath)
137
+ assert_equal("/b", Pathname.new("/a/../b").cleanpath)
138
+ assert_equal("d", Pathname.new("a/../../d").cleanpath) # ***
139
+
140
+ # Edge cases
141
+ assert_equal("", Pathname.new("").cleanpath)
142
+ assert_equal(".", Pathname.new(".").cleanpath)
143
+ assert_equal("..", Pathname.new("..").cleanpath)
144
+ assert_equal('/', Pathname.new('/').cleanpath)
145
+ assert_equal('/', Pathname.new('//').cleanpath)
146
+ end
147
+
148
+ def test_facade_io
149
+ assert_respond_to(@path, :foreach)
150
+ assert_respond_to(@path, :read)
151
+ assert_respond_to(@path, :readlines)
152
+ assert_respond_to(@path, :sysopen)
153
+ end
154
+
155
+ def test_facade_file
156
+ File.methods(false).each{ |method|
157
+ assert_respond_to(@path, method.to_sym)
158
+ }
159
+ end
160
+
161
+ def test_facade_dir
162
+ Dir.methods(false).each{ |method|
163
+ assert_respond_to(@path, method.to_sym)
164
+ }
165
+ end
166
+
167
+ def test_facade_fileutils
168
+ methods = FileUtils.public_instance_methods
169
+ methods -= File.methods(false)
170
+ methods -= Dir.methods(false)
171
+ methods.delete_if{ |m| m =~ /stream/ }
172
+ methods.delete("identical?")
173
+
174
+ methods.each{ |method|
175
+ assert_respond_to(@path, method.to_sym)
176
+ }
177
+ end
178
+
179
+ def test_facade_find
180
+ assert_respond_to(@path, :find)
181
+ assert_nothing_raised{ @path.find{} }
182
+
183
+ Pathname.new(Dir.pwd).find{ |f|
184
+ Find.prune if f.match("CVS")
185
+ assert_kind_of(Pathname, f)
186
+ }
187
+ end
188
+
189
+ def teardown
190
+ @path = nil
191
+ end
192
+ end
@@ -1,227 +1,237 @@
1
- ############################################
2
- # tc_pathname.rb
3
- #
4
- # Test suite for the pathname package.
5
- ############################################
6
- Dir.chdir ".." if File.basename(Dir.pwd) == "test"
7
- $LOAD_PATH.unshift Dir.pwd
8
- $LOAD_PATH.unshift Dir.pwd + "/lib"
9
-
10
- require "pathname2"
11
- require "test/unit"
12
-
13
- class TC_Pathname < Test::Unit::TestCase
14
- def setup
15
- @fpath = Pathname.new("C:/Program Files/Windows NT/Accessories")
16
- @bpath = Pathname.new("C:\\Program Files\\Windows NT\\Accessories")
17
- @upath = Pathname.new("\\\\foo\\bar\\baz")
18
- @npath = Pathname.new("foo\\bar\\baz")
19
- @rpath = Pathname.new("Z:\\")
20
- @xpath = Pathname.new("\\\\foo\\bar")
21
- @ypath = Pathname.new("\\\\foo")
22
- @zpath = Pathname.new("\\\\")
23
- @epath = Pathname.new("")
24
- end
25
-
26
- def test_version
27
- assert_equal("1.0.0", Pathname::VERSION)
28
- end
29
-
30
- # Convenience method for test_plus
31
- def assert_pathname_plus(a, b, c)
32
- a = Pathname.new(a)
33
- b = Pathname.new(b)
34
- c = Pathname.new(c)
35
- assert_equal(a, b + c)
36
- end
37
-
38
- # Convenience method for test_spaceship operator
39
- def assert_pathname_cmp(int, s1, s2)
40
- p1 = Pathname.new(s1)
41
- p2 = Pathname.new(s2)
42
- result = p1 <=> p2
43
- assert_equal(int, result)
44
- end
45
-
46
- def test_each
47
- assert_respond_to(@fpath, :each)
48
- assert_nothing_raised{ @fpath.each{ |e| } }
49
- end
50
-
51
- # Fails due to PathIsURL for some reason
52
- #def test_immutability
53
- # path = "C:\\Program Files\\foo\\bar".freeze
54
- # assert_equal(true, path.frozen?)
55
- # assert_nothing_raised{ Pathname.new(path) }
56
- # assert_nothing_raised{ Pathname.new(path).root }
57
- #end
58
-
59
- def test_plus_operator
60
- # Standard stuff
61
- assert_pathname_plus("C:\\a\\b", "C:\\a", "b")
62
- assert_pathname_plus("C:\\b", "a", "C:\\b")
63
- assert_pathname_plus("a\\b", "a", "b")
64
- assert_pathname_plus("C:\\b", "C:\\a", "..\\b")
65
- assert_pathname_plus("C:\\a\\b", "C:\\a\\.", "\\b")
66
- assert_pathname_plus("C:\\a\\b.txt", "C:\\a", "b.txt")
67
-
68
- # UNC paths
69
- assert_pathname_plus("\\\\foo\\bar", "\\\\foo", "bar")
70
- assert_pathname_plus("\\\\foo", "\\\\", "foo")
71
- assert_pathname_plus("\\\\", "\\\\", "")
72
- assert_pathname_plus("\\\\foo\\baz", "\\\\foo\\bar", "\\..\\baz")
73
- assert_pathname_plus("\\\\", "\\\\", "..\\..\\..\\..")
74
- end
75
-
76
- def test_clean
77
- # Our preset stuff
78
- assert_equal("C:\\Program Files\\Windows NT\\Accessories", @fpath.clean)
79
- assert_equal("C:\\Program Files\\Windows NT\\Accessories", @bpath.clean)
80
- assert_equal("\\\\foo\\bar\\baz", @upath.clean)
81
- assert_equal("foo\\bar\\baz", @npath.clean)
82
- assert_equal("Z:\\", @rpath.clean)
83
- assert_equal("\\\\foo\\bar", @xpath.clean)
84
- assert_equal("\\\\foo", @ypath.clean)
85
- assert_equal("\\\\", @zpath.clean)
86
- assert_equal("", @epath.clean)
87
-
88
- # Standard stuff
89
- assert_equal("C:\\a\\c", Pathname.new("C:\\a\\.\\b\\..\\c").clean)
90
- assert_equal("C:\\a", Pathname.new("C:\\.\\a").clean)
91
- assert_equal("C:\\a\\b", Pathname.new("C:\\a\\.\\b").clean)
92
- assert_equal("C:\\b", Pathname.new("C:\\a\\..\\b").clean)
93
- assert_equal("C:\\a", Pathname.new("C:\\a\\.").clean)
94
- assert_equal("C:\\d", Pathname.new("C:\\..\\..\\..\\d").clean)
95
- assert_equal("C:\\a\\", Pathname.new("C:\\a\\").clean)
96
-
97
- # Edge cases
98
- assert_equal("\\", Pathname.new(".").clean)
99
- assert_equal("\\", Pathname.new("..").clean)
100
- end
101
-
102
- def test_absolute
103
- assert_equal(true, @fpath.absolute?)
104
- assert_equal(true, @bpath.absolute?)
105
- assert_equal(true, @upath.absolute?)
106
- assert_equal(false, @npath.absolute?)
107
- assert_equal(true, @rpath.absolute?)
108
- assert_equal(true, @xpath.absolute?)
109
- assert_equal(true, @ypath.absolute?)
110
- assert_equal(true, @zpath.absolute?)
111
- assert_equal(false, @epath.absolute?)
112
- end
113
-
114
- def test_relative
115
- assert_equal(false, @fpath.relative?)
116
- assert_equal(false, @bpath.relative?)
117
- assert_equal(false, @upath.relative?)
118
- assert_equal(true, @npath.relative?)
119
- assert_equal(false, @rpath.relative?)
120
- assert_equal(false, @xpath.relative?)
121
- assert_equal(false, @ypath.relative?)
122
- assert_equal(false, @zpath.relative?)
123
- assert_equal(true, @epath.relative?)
124
- end
125
-
126
- def test_root
127
- assert_equal("C:\\", @fpath.root)
128
- assert_equal("C:\\", @bpath.root)
129
- assert_equal("\\\\foo\\bar", @upath.root)
130
- assert_equal(".", @npath.root)
131
- assert_equal("Z:\\", @rpath.root)
132
- assert_equal("\\\\foo\\bar", @xpath.root)
133
- assert_equal("\\\\foo", @ypath.root)
134
- assert_equal("\\\\", @zpath.root)
135
- assert_equal(".", @epath.root)
136
-
137
- # Edge cases
138
- assert_equal(".", Pathname.new("..").root)
139
- assert_equal(".", Pathname.new(".").root)
140
- end
141
-
142
- def test_drive_number
143
- assert_equal(2, @fpath.drive_number)
144
- assert_equal(2, @bpath.drive_number)
145
- assert_equal(nil, @upath.drive_number)
146
- assert_equal(nil, @npath.drive_number)
147
- assert_equal(25, @rpath.drive_number)
148
- assert_equal(nil, @xpath.drive_number)
149
- assert_equal(nil, @ypath.drive_number)
150
- assert_equal(nil, @zpath.drive_number)
151
- assert_equal(nil, @epath.drive_number)
152
-
153
- # Edge cases
154
- assert_equal(nil, Pathname.new("..").drive_number)
155
- assert_equal(nil, Pathname.new(".").drive_number)
156
- end
157
-
158
- def test_to_a
159
- expected = ["C:", "Program Files", "Windows NT", "Accessories"]
160
- assert_equal(expected, @fpath.to_a)
161
- assert_equal(expected, @bpath.to_a)
162
- assert_equal(["foo","bar","baz"], @upath.to_a)
163
- assert_equal(["foo","bar","baz"], @npath.to_a)
164
- assert_equal(["Z:"], @rpath.to_a)
165
- assert_equal(["foo","bar"], @xpath.to_a)
166
- assert_equal(["foo"], @ypath.to_a)
167
- assert_equal([], @zpath.to_a)
168
- assert_equal([], @epath.to_a)
169
- end
170
-
171
- def test_is_root
172
- assert_equal(false, @fpath.root?)
173
- assert_equal(false, @bpath.root?)
174
- assert_equal(false, @upath.root?)
175
- assert_equal(false, @npath.root?)
176
- assert_equal(true, @rpath.root?)
177
- assert_equal(true, @xpath.root?)
178
- assert_equal(true, @ypath.root?)
179
- assert_equal(true, @zpath.root?)
180
- assert_equal(false, @epath.root?)
181
- end
182
-
183
- def test_facade_io
184
- assert_respond_to(@fpath, :foreach)
185
- assert_respond_to(@fpath, :read)
186
- assert_respond_to(@fpath, :readlines)
187
- assert_respond_to(@fpath, :sysopen)
188
- end
189
-
190
- def test_facade_file
191
- File.methods(false).each{ |method|
192
- assert_respond_to(@fpath, method.to_sym)
193
- }
194
- assert_respond_to(@fpath, :catname) # ftools check
195
- end
196
-
197
- def test_facade_dir
198
- Dir.methods(false).each{ |method|
199
- assert_respond_to(@fpath, method.to_sym)
200
- }
201
- end
202
-
203
- def test_facade_fileutils
204
- methods = FileUtils.public_instance_methods
205
- methods -= File.methods(false)
206
- methods -= Dir.methods(false)
207
- methods.delete_if{ |m| m =~ /stream/ }
208
- methods.delete_if{ |m| m =~ /^ln/ }
209
- methods.delete("identical?")
210
-
211
- methods.each{ |method|
212
- assert_respond_to(@fpath, method.to_sym)
213
- }
214
- end
215
-
216
- def teardown
217
- @fpath = nil
218
- @bpath = nil
219
- @upath = nil
220
- @npath = nil
221
- @rpath = nil
222
- @xpath = nil
223
- @ypath = nil
224
- @zpath = nil
225
- @epath = nil
226
- end
227
- end
1
+ ############################################
2
+ # tc_pathname.rb
3
+ #
4
+ # Test suite for the pathname package.
5
+ ############################################
6
+ Dir.chdir ".." if File.basename(Dir.pwd) == "test"
7
+ $LOAD_PATH.unshift Dir.pwd
8
+ $LOAD_PATH.unshift Dir.pwd + "/lib"
9
+
10
+ require "pathname2"
11
+ require "test/unit"
12
+
13
+ class TC_Pathname < Test::Unit::TestCase
14
+ def setup
15
+ @fpath = Pathname.new("C:/Program Files/Windows NT/Accessories")
16
+ @bpath = Pathname.new("C:\\Program Files\\Windows NT\\Accessories")
17
+ @upath = Pathname.new("\\\\foo\\bar\\baz")
18
+ @npath = Pathname.new("foo\\bar\\baz")
19
+ @rpath = Pathname.new("Z:\\")
20
+ @xpath = Pathname.new("\\\\foo\\bar")
21
+ @ypath = Pathname.new("\\\\foo")
22
+ @zpath = Pathname.new("\\\\")
23
+ @epath = Pathname.new("")
24
+ end
25
+
26
+ def test_version
27
+ assert_equal("1.1.0", Pathname::VERSION)
28
+ end
29
+
30
+ # Convenience method for test_plus
31
+ def assert_pathname_plus(a, b, c)
32
+ a = Pathname.new(a)
33
+ b = Pathname.new(b)
34
+ c = Pathname.new(c)
35
+ assert_equal(a, b + c)
36
+ end
37
+
38
+ # Convenience method for test_spaceship operator
39
+ def assert_pathname_cmp(int, s1, s2)
40
+ p1 = Pathname.new(s1)
41
+ p2 = Pathname.new(s2)
42
+ result = p1 <=> p2
43
+ assert_equal(int, result)
44
+ end
45
+
46
+ def test_each
47
+ assert_respond_to(@fpath, :each)
48
+ assert_nothing_raised{ @fpath.each{ |e| } }
49
+ end
50
+
51
+ # Fails due to PathIsURL for some reason
52
+ #def test_immutability
53
+ # path = "C:\\Program Files\\foo\\bar".freeze
54
+ # assert_equal(true, path.frozen?)
55
+ # assert_nothing_raised{ Pathname.new(path) }
56
+ # assert_nothing_raised{ Pathname.new(path).root }
57
+ #end
58
+
59
+ def test_plus_operator
60
+ # Standard stuff
61
+ assert_pathname_plus("C:\\a\\b", "C:\\a", "b")
62
+ assert_pathname_plus("C:\\b", "a", "C:\\b")
63
+ assert_pathname_plus("a\\b", "a", "b")
64
+ assert_pathname_plus("C:\\b", "C:\\a", "..\\b")
65
+ assert_pathname_plus("C:\\a\\b", "C:\\a\\.", "\\b")
66
+ assert_pathname_plus("C:\\a\\b.txt", "C:\\a", "b.txt")
67
+
68
+ # UNC paths
69
+ assert_pathname_plus("\\\\foo\\bar", "\\\\foo", "bar")
70
+ assert_pathname_plus("\\\\foo", "\\\\", "foo")
71
+ assert_pathname_plus("\\\\", "\\\\", "")
72
+ assert_pathname_plus("\\\\foo\\baz", "\\\\foo\\bar", "\\..\\baz")
73
+ assert_pathname_plus("\\\\", "\\\\", "..\\..\\..\\..")
74
+ end
75
+
76
+ def test_clean
77
+ # Our preset stuff
78
+ assert_equal("C:\\Program Files\\Windows NT\\Accessories", @fpath.clean)
79
+ assert_equal("C:\\Program Files\\Windows NT\\Accessories", @bpath.clean)
80
+ assert_equal("\\\\foo\\bar\\baz", @upath.clean)
81
+ assert_equal("foo\\bar\\baz", @npath.clean)
82
+ assert_equal("Z:\\", @rpath.clean)
83
+ assert_equal("\\\\foo\\bar", @xpath.clean)
84
+ assert_equal("\\\\foo", @ypath.clean)
85
+ assert_equal("\\\\", @zpath.clean)
86
+ assert_equal("", @epath.clean)
87
+
88
+ # Standard stuff
89
+ assert_equal("C:\\a\\c", Pathname.new("C:\\a\\.\\b\\..\\c").clean)
90
+ assert_equal("C:\\a", Pathname.new("C:\\.\\a").clean)
91
+ assert_equal("C:\\a\\b", Pathname.new("C:\\a\\.\\b").clean)
92
+ assert_equal("C:\\b", Pathname.new("C:\\a\\..\\b").clean)
93
+ assert_equal("C:\\a", Pathname.new("C:\\a\\.").clean)
94
+ assert_equal("C:\\d", Pathname.new("C:\\..\\..\\..\\d").clean)
95
+ assert_equal("C:\\a\\", Pathname.new("C:\\a\\").clean)
96
+
97
+ # Edge cases
98
+ assert_equal("\\", Pathname.new(".").clean)
99
+ assert_equal("\\", Pathname.new("..").clean)
100
+ end
101
+
102
+ def test_absolute
103
+ assert_equal(true, @fpath.absolute?)
104
+ assert_equal(true, @bpath.absolute?)
105
+ assert_equal(true, @upath.absolute?)
106
+ assert_equal(false, @npath.absolute?)
107
+ assert_equal(true, @rpath.absolute?)
108
+ assert_equal(true, @xpath.absolute?)
109
+ assert_equal(true, @ypath.absolute?)
110
+ assert_equal(true, @zpath.absolute?)
111
+ assert_equal(false, @epath.absolute?)
112
+ end
113
+
114
+ def test_relative
115
+ assert_equal(false, @fpath.relative?)
116
+ assert_equal(false, @bpath.relative?)
117
+ assert_equal(false, @upath.relative?)
118
+ assert_equal(true, @npath.relative?)
119
+ assert_equal(false, @rpath.relative?)
120
+ assert_equal(false, @xpath.relative?)
121
+ assert_equal(false, @ypath.relative?)
122
+ assert_equal(false, @zpath.relative?)
123
+ assert_equal(true, @epath.relative?)
124
+ end
125
+
126
+ def test_root
127
+ assert_equal("C:\\", @fpath.root)
128
+ assert_equal("C:\\", @bpath.root)
129
+ assert_equal("\\\\foo\\bar", @upath.root)
130
+ assert_equal(".", @npath.root)
131
+ assert_equal("Z:\\", @rpath.root)
132
+ assert_equal("\\\\foo\\bar", @xpath.root)
133
+ assert_equal("\\\\foo", @ypath.root)
134
+ assert_equal("\\\\", @zpath.root)
135
+ assert_equal(".", @epath.root)
136
+
137
+ # Edge cases
138
+ assert_equal(".", Pathname.new("..").root)
139
+ assert_equal(".", Pathname.new(".").root)
140
+ end
141
+
142
+ def test_drive_number
143
+ assert_equal(2, @fpath.drive_number)
144
+ assert_equal(2, @bpath.drive_number)
145
+ assert_equal(nil, @upath.drive_number)
146
+ assert_equal(nil, @npath.drive_number)
147
+ assert_equal(25, @rpath.drive_number)
148
+ assert_equal(nil, @xpath.drive_number)
149
+ assert_equal(nil, @ypath.drive_number)
150
+ assert_equal(nil, @zpath.drive_number)
151
+ assert_equal(nil, @epath.drive_number)
152
+
153
+ # Edge cases
154
+ assert_equal(nil, Pathname.new("..").drive_number)
155
+ assert_equal(nil, Pathname.new(".").drive_number)
156
+ end
157
+
158
+ def test_to_a
159
+ expected = ["C:", "Program Files", "Windows NT", "Accessories"]
160
+ assert_equal(expected, @fpath.to_a)
161
+ assert_equal(expected, @bpath.to_a)
162
+ assert_equal(["foo","bar","baz"], @upath.to_a)
163
+ assert_equal(["foo","bar","baz"], @npath.to_a)
164
+ assert_equal(["Z:"], @rpath.to_a)
165
+ assert_equal(["foo","bar"], @xpath.to_a)
166
+ assert_equal(["foo"], @ypath.to_a)
167
+ assert_equal([], @zpath.to_a)
168
+ assert_equal([], @epath.to_a)
169
+ end
170
+
171
+ def test_is_root
172
+ assert_equal(false, @fpath.root?)
173
+ assert_equal(false, @bpath.root?)
174
+ assert_equal(false, @upath.root?)
175
+ assert_equal(false, @npath.root?)
176
+ assert_equal(true, @rpath.root?)
177
+ assert_equal(true, @xpath.root?)
178
+ assert_equal(true, @ypath.root?)
179
+ assert_equal(true, @zpath.root?)
180
+ assert_equal(false, @epath.root?)
181
+ end
182
+
183
+ def test_facade_io
184
+ assert_respond_to(@fpath, :foreach)
185
+ assert_respond_to(@fpath, :read)
186
+ assert_respond_to(@fpath, :readlines)
187
+ assert_respond_to(@fpath, :sysopen)
188
+ end
189
+
190
+ def test_facade_file
191
+ File.methods(false).each{ |method|
192
+ assert_respond_to(@fpath, method.to_sym)
193
+ }
194
+ assert_respond_to(@fpath, :catname) # ftools check
195
+ end
196
+
197
+ def test_facade_dir
198
+ Dir.methods(false).each{ |method|
199
+ assert_respond_to(@fpath, method.to_sym)
200
+ }
201
+ end
202
+
203
+ def test_facade_fileutils
204
+ methods = FileUtils.public_instance_methods
205
+ methods -= File.methods(false)
206
+ methods -= Dir.methods(false)
207
+ methods.delete_if{ |m| m =~ /stream/ }
208
+ methods.delete_if{ |m| m =~ /^ln/ }
209
+ methods.delete("identical?")
210
+
211
+ methods.each{ |method|
212
+ assert_respond_to(@fpath, method.to_sym)
213
+ }
214
+ end
215
+
216
+ def test_facade_find
217
+ assert_respond_to(@fpath, :find)
218
+ assert_nothing_raised{ @fpath.find{} }
219
+
220
+ Pathname.new(Dir.pwd).find{ |f|
221
+ Find.prune if f.match("CVS")
222
+ assert_kind_of(Pathname, f)
223
+ }
224
+ end
225
+
226
+ def teardown
227
+ @fpath = nil
228
+ @bpath = nil
229
+ @upath = nil
230
+ @npath = nil
231
+ @rpath = nil
232
+ @xpath = nil
233
+ @ypath = nil
234
+ @zpath = nil
235
+ @epath = nil
236
+ end
237
+ end