1 package org.apache.maven.model.path;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertNull;
24
25 import org.junit.Test;
26
27
28
29
30 public class DefaultUrlNormalizerTest
31 {
32
33 private UrlNormalizer normalizer = new DefaultUrlNormalizer();
34
35 private String normalize( String url )
36 {
37 return normalizer.normalize( url );
38 }
39
40 @Test
41 public void testNullSafe()
42 {
43 assertNull( normalize( null ) );
44 }
45
46 @Test
47 public void testTrailingSlash()
48 {
49 assertEquals( "", normalize( "" ) );
50 assertEquals( "http://server.org/dir", normalize( "http://server.org/dir" ) );
51 assertEquals( "http://server.org/dir/", normalize( "http://server.org/dir/" ) );
52 }
53
54 @Test
55 public void testRemovalOfParentRefs()
56 {
57 assertEquals( "http://server.org/child", normalize( "http://server.org/parent/../child" ) );
58 assertEquals( "http://server.org/child", normalize( "http://server.org/grand/parent/../../child" ) );
59
60 assertEquals( "http://server.org//child", normalize( "http://server.org/parent/..//child" ) );
61 assertEquals( "http://server.org/child", normalize( "http://server.org/parent//../child" ) );
62 }
63
64 @Test
65 public void testPreservationOfDoubleSlashes()
66 {
67 assertEquals( "scm:hg:ssh://localhost//home/user", normalize( "scm:hg:ssh://localhost//home/user" ) );
68 assertEquals( "file:////UNC/server", normalize( "file:////UNC/server" ) );
69 assertEquals( "[fetch=]http://server.org/[push=]ssh://server.org/",
70 normalize( "[fetch=]http://server.org/[push=]ssh://server.org/" ) );
71 }
72
73 @Test
74 public void absolutePathTraversalPastRootIsOmitted()
75 {
76 assertEquals( "/", normalize("/../" ) );
77 }
78
79 @Test
80 public void parentDirectoryRemovedFromRelativeUriReference()
81 {
82 assertEquals( "", normalize( "a/../" ) );
83 }
84
85 @Test
86 public void leadingParentDirectoryNotRemovedFromRelativeUriReference()
87 {
88 assertEquals( "../", normalize( "../" ) );
89 }
90 }