1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
17 |
|
|
18 |
|
|
19 |
|
|
20 |
|
package org.xwiki.rendering.internal.parser.xwiki20; |
21 |
|
|
22 |
|
import javax.inject.Provider; |
23 |
|
|
24 |
|
import org.junit.Before; |
25 |
|
import org.junit.Rule; |
26 |
|
import org.junit.Test; |
27 |
|
import org.xwiki.component.manager.ComponentManager; |
28 |
|
import org.xwiki.component.util.DefaultParameterizedType; |
29 |
|
import org.xwiki.rendering.internal.parser.reference.DefaultUntypedLinkReferenceParser; |
30 |
|
import org.xwiki.rendering.internal.parser.reference.type.AttachmentResourceReferenceTypeParser; |
31 |
|
import org.xwiki.rendering.internal.parser.reference.type.DocumentResourceReferenceTypeParser; |
32 |
|
import org.xwiki.rendering.internal.parser.reference.type.MailtoResourceReferenceTypeParser; |
33 |
|
import org.xwiki.rendering.internal.parser.reference.type.SpaceResourceReferenceTypeParser; |
34 |
|
import org.xwiki.rendering.internal.parser.reference.type.URLResourceReferenceTypeParser; |
35 |
|
import org.xwiki.rendering.listener.reference.DocumentResourceReference; |
36 |
|
import org.xwiki.rendering.listener.reference.InterWikiResourceReference; |
37 |
|
import org.xwiki.rendering.listener.reference.ResourceReference; |
38 |
|
import org.xwiki.rendering.listener.reference.ResourceType; |
39 |
|
import org.xwiki.rendering.parser.ResourceReferenceParser; |
40 |
|
import org.xwiki.rendering.wiki.WikiModel; |
41 |
|
import org.xwiki.test.annotation.BeforeComponent; |
42 |
|
import org.xwiki.test.annotation.ComponentList; |
43 |
|
import org.xwiki.test.mockito.MockitoComponentManagerRule; |
44 |
|
|
45 |
|
import static org.junit.Assert.assertEquals; |
46 |
|
import static org.junit.Assert.assertFalse; |
47 |
|
import static org.junit.Assert.assertNull; |
48 |
|
import static org.junit.Assert.assertTrue; |
49 |
|
import static org.mockito.Mockito.when; |
50 |
|
|
51 |
|
|
52 |
|
@link |
53 |
|
|
54 |
|
@version |
55 |
|
@since |
56 |
|
|
57 |
|
|
58 |
|
@ComponentList({ |
59 |
|
XWiki20LinkReferenceParser.class, |
60 |
|
URLResourceReferenceTypeParser.class, |
61 |
|
MailtoResourceReferenceTypeParser.class, |
62 |
|
AttachmentResourceReferenceTypeParser.class, |
63 |
|
DefaultUntypedLinkReferenceParser.class, |
64 |
|
DocumentResourceReferenceTypeParser.class, |
65 |
|
SpaceResourceReferenceTypeParser.class |
66 |
|
}) |
67 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (97) |
Complexity: 5 |
Complexity Density: 0.05 |
|
68 |
|
public class XWiki20LinkReferenceParserTest |
69 |
|
{ |
70 |
|
@Rule |
71 |
|
public MockitoComponentManagerRule componentManager = new MockitoComponentManagerRule(); |
72 |
|
|
73 |
|
protected ResourceReferenceParser parser; |
74 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (3) |
Complexity: 1 |
Complexity Density: 0.33 |
|
75 |
3 |
@BeforeComponent... |
76 |
|
public void setUpComponents() throws Exception |
77 |
|
{ |
78 |
|
|
79 |
3 |
this.componentManager.registerMockComponent(WikiModel.class); |
80 |
|
|
81 |
3 |
Provider<ComponentManager> contextComponentManagerProvider = this.componentManager.registerMockComponent( |
82 |
|
new DefaultParameterizedType(null, Provider.class, ComponentManager.class), "context"); |
83 |
3 |
when(contextComponentManagerProvider.get()).thenReturn(this.componentManager); |
84 |
|
} |
85 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
86 |
3 |
@Before... |
87 |
|
public void setUp() throws Exception |
88 |
|
{ |
89 |
3 |
this.parser = this.componentManager.getInstance(ResourceReferenceParser.class, "xwiki/2.0/link"); |
90 |
|
} |
91 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (30) |
Complexity: 1 |
Complexity Density: 0.03 |
1PASS
|
|
92 |
1 |
@Test... |
93 |
|
public void testParseLinksWhenInWikiModeCommon() throws Exception |
94 |
|
{ |
95 |
1 |
ResourceReference reference = this.parser.parse(""); |
96 |
1 |
assertEquals("", reference.getReference()); |
97 |
1 |
assertFalse(reference.isTyped()); |
98 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
99 |
1 |
assertEquals("Typed = [false] Type = [doc] Reference = []", reference.toString()); |
100 |
|
|
101 |
1 |
reference = this.parser.parse("Hello World"); |
102 |
1 |
assertEquals("Hello World", reference.getReference()); |
103 |
1 |
assertFalse(reference.isTyped()); |
104 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
105 |
1 |
assertEquals("Typed = [false] Type = [doc] Reference = [Hello World]", reference.toString()); |
106 |
|
|
107 |
1 |
reference = this.parser.parse("http://xwiki.org"); |
108 |
1 |
assertEquals("http://xwiki.org", reference.getReference()); |
109 |
1 |
assertFalse(reference.isTyped()); |
110 |
1 |
assertEquals(ResourceType.URL, reference.getType()); |
111 |
1 |
assertEquals("Typed = [false] Type = [url] Reference = [http://xwiki.org]", reference.toString()); |
112 |
|
|
113 |
|
|
114 |
1 |
reference = this.parser.parse("mailto:john@smith.com?subject=test"); |
115 |
1 |
assertEquals("john@smith.com?subject=test", reference.getReference()); |
116 |
1 |
assertTrue(reference.isTyped()); |
117 |
1 |
assertEquals(ResourceType.MAILTO, reference.getType()); |
118 |
1 |
assertEquals("Typed = [true] Type = [mailto] Reference = [john@smith.com?subject=test]", |
119 |
|
reference.toString()); |
120 |
|
|
121 |
|
|
122 |
1 |
reference = this.parser.parse("attach:some:content"); |
123 |
1 |
assertEquals("some:content", reference.getReference()); |
124 |
1 |
assertTrue(reference.isTyped()); |
125 |
1 |
assertEquals(ResourceType.ATTACHMENT, reference.getType()); |
126 |
1 |
assertEquals("Typed = [true] Type = [attach] Reference = [some:content]", reference.toString()); |
127 |
|
|
128 |
|
|
129 |
|
|
130 |
|
|
131 |
1 |
reference = this.parser.parse("mywiki:http://xwiki.org"); |
132 |
1 |
assertEquals("mywiki:http://xwiki.org", reference.getReference()); |
133 |
1 |
assertFalse(reference.isTyped()); |
134 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
135 |
1 |
assertEquals("Typed = [false] Type = [doc] Reference = [mywiki:http://xwiki.org]", reference.toString()); |
136 |
|
} |
137 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (34) |
Complexity: 1 |
Complexity Density: 0.03 |
1PASS
|
|
138 |
1 |
@Test... |
139 |
|
public void testParseLinksWhenInWikiMode() throws Exception |
140 |
|
{ |
141 |
|
|
142 |
1 |
ResourceReference reference = this.parser.parse("Hello World?xredirect=../whatever"); |
143 |
1 |
assertEquals("Hello World", reference.getReference()); |
144 |
1 |
assertEquals("xredirect=../whatever", ((DocumentResourceReference) reference).getQueryString()); |
145 |
1 |
assertFalse(reference.isTyped()); |
146 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
147 |
1 |
assertEquals("Typed = [false] Type = [doc] Reference = [Hello World] " |
148 |
|
+ "Parameters = [[queryString] = [xredirect=../whatever]]", reference.toString()); |
149 |
|
|
150 |
1 |
reference = this.parser.parse("HelloWorld?xredirect=http://xwiki.org"); |
151 |
1 |
assertEquals("HelloWorld", reference.getReference()); |
152 |
1 |
assertEquals("xredirect=http://xwiki.org", ((DocumentResourceReference) reference).getQueryString()); |
153 |
1 |
assertFalse(reference.isTyped()); |
154 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
155 |
1 |
assertEquals("Typed = [false] Type = [doc] Reference = [HelloWorld] " |
156 |
|
+ "Parameters = [[queryString] = [xredirect=http://xwiki.org]]", reference.toString()); |
157 |
|
|
158 |
|
|
159 |
1 |
reference = this.parser.parse("#anchor"); |
160 |
1 |
assertEquals("anchor", ((DocumentResourceReference) reference).getAnchor()); |
161 |
1 |
assertFalse(reference.isTyped()); |
162 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
163 |
1 |
assertEquals("Typed = [false] Type = [doc] Reference = [] Parameters = [[anchor] = [anchor]]", |
164 |
|
reference.toString()); |
165 |
|
|
166 |
1 |
reference = this.parser.parse("Hello#anchor"); |
167 |
1 |
assertEquals("Hello", reference.getReference()); |
168 |
1 |
assertEquals("anchor", ((DocumentResourceReference) reference).getAnchor()); |
169 |
1 |
assertFalse(reference.isTyped()); |
170 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
171 |
1 |
assertEquals("Typed = [false] Type = [doc] Reference = [Hello] Parameters = [[anchor] = [anchor]]", |
172 |
|
reference.toString()); |
173 |
|
|
174 |
|
|
175 |
1 |
reference = this.parser.parse("HelloWorld#anchor?param1=1¶m2=2@wikipedia"); |
176 |
1 |
assertEquals("HelloWorld#anchor?param1=1¶m2=2", reference.getReference()); |
177 |
1 |
assertEquals("wikipedia", ((InterWikiResourceReference) reference).getInterWikiAlias()); |
178 |
1 |
assertTrue(reference.isTyped()); |
179 |
1 |
assertEquals(ResourceType.INTERWIKI, reference.getType()); |
180 |
1 |
assertEquals("Typed = [true] Type = [interwiki] Reference = [HelloWorld#anchor?param1=1¶m2=2] " |
181 |
|
+ "Parameters = [[interWikiAlias] = [wikipedia]]", reference.toString()); |
182 |
|
|
183 |
|
|
184 |
1 |
reference = this.parser.parse("doc:whatever"); |
185 |
1 |
assertEquals("doc:whatever", reference.getReference()); |
186 |
1 |
assertFalse(reference.isTyped()); |
187 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
188 |
1 |
assertEquals("Typed = [false] Type = [doc] Reference = [doc:whatever]", reference.toString()); |
189 |
|
} |
190 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (24) |
Complexity: 1 |
Complexity Density: 0.04 |
1PASS
|
|
191 |
1 |
@Test... |
192 |
|
public void testParseLinksWithEscapes() throws Exception |
193 |
|
{ |
194 |
1 |
ResourceReference reference = this.parser.parse("\\.\\#notanchor"); |
195 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
196 |
1 |
assertEquals("\\.#notanchor", reference.getReference()); |
197 |
1 |
assertNull(((DocumentResourceReference) reference).getAnchor()); |
198 |
|
|
199 |
1 |
reference = this.parser.parse("page\\?notquerystring"); |
200 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
201 |
1 |
assertEquals("page?notquerystring", reference.getReference()); |
202 |
1 |
assertNull(((DocumentResourceReference) reference).getQueryString()); |
203 |
|
|
204 |
|
|
205 |
1 |
reference = this.parser.parse("page\\\\#anchor\\\\?querystring\\\\"); |
206 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
207 |
1 |
assertEquals("page\\\\", reference.getReference()); |
208 |
1 |
assertEquals("anchor\\", ((DocumentResourceReference) reference).getAnchor()); |
209 |
1 |
assertEquals("querystring\\", ((DocumentResourceReference) reference).getQueryString()); |
210 |
|
|
211 |
1 |
reference = this.parser.parse("pa\\.ge\\?query\\#anchor\\@notinterwiki"); |
212 |
1 |
assertEquals(ResourceType.DOCUMENT, reference.getType()); |
213 |
1 |
assertEquals("pa\\.ge?query#anchor@notinterwiki", reference.getReference()); |
214 |
|
|
215 |
|
|
216 |
|
|
217 |
1 |
reference = this.parser.parse("page\\\\#anchor\\\\?querystring\\\\@alias\\\\"); |
218 |
1 |
assertEquals(ResourceType.INTERWIKI, reference.getType()); |
219 |
1 |
assertEquals("page\\#anchor\\?querystring\\", reference.getReference()); |
220 |
1 |
assertEquals("alias\\", ((InterWikiResourceReference) reference).getInterWikiAlias()); |
221 |
|
|
222 |
1 |
reference = this.parser.parse("something\\\\@inter\\@wikilink"); |
223 |
1 |
assertEquals(ResourceType.INTERWIKI, reference.getType()); |
224 |
1 |
assertEquals("something\\", reference.getReference()); |
225 |
1 |
assertEquals("inter@wikilink", ((InterWikiResourceReference) reference).getInterWikiAlias()); |
226 |
|
} |
227 |
|
} |