1. Project Clover database Tue Dec 20 2016 21:24:09 CET
  2. Package org.xwiki.model.internal.reference

File DefaultStringEntityReferenceSerializerTest.java

 

Code metrics

0
95
10
1
269
167
10
0.11
9.5
10
1

Classes

Class Line # Actions
DefaultStringEntityReferenceSerializerTest 47 95 0% 10 0
1.0100%
 

Contributing tests

This file is covered by 9 tests. .

Source view

1    /*
2    * See the NOTICE file distributed with this work for additional
3    * information regarding copyright ownership.
4    *
5    * This is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU Lesser General Public License as
7    * published by the Free Software Foundation; either version 2.1 of
8    * the License, or (at your option) any later version.
9    *
10    * This software is distributed in the hope that it will be useful,
11    * but WITHOUT ANY WARRANTY; without even the implied warranty of
12    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13    * Lesser General Public License for more details.
14    *
15    * You should have received a copy of the GNU Lesser General Public
16    * License along with this software; if not, write to the Free
17    * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18    * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
19    */
20    package org.xwiki.model.internal.reference;
21   
22    import org.junit.Assert;
23    import org.junit.Before;
24    import org.junit.Rule;
25    import org.junit.Test;
26    import org.xwiki.model.EntityType;
27    import org.xwiki.model.reference.EntityReference;
28    import org.xwiki.model.reference.EntityReferenceProvider;
29    import org.xwiki.model.reference.EntityReferenceResolver;
30    import org.xwiki.model.reference.EntityReferenceSerializer;
31    import org.xwiki.model.reference.test.TestConstants;
32    import org.xwiki.test.annotation.ComponentList;
33    import org.xwiki.test.mockito.MockitoComponentMockingRule;
34   
35    import static org.mockito.Mockito.*;
36    import static org.junit.Assert.*;
37   
38    /**
39    * Unit tests for {@link DefaultStringEntityReferenceSerializer}.
40    *
41    * @version $Id: 2ea450caa857688c205cff6d6216d582266ae80f $
42    * @since 2.2M1
43    */
44    @ComponentList({
45    DefaultSymbolScheme.class
46    })
 
47    public class DefaultStringEntityReferenceSerializerTest implements TestConstants
48    {
49    @Rule
50    public MockitoComponentMockingRule<DefaultStringEntityReferenceSerializer> mocker =
51    new MockitoComponentMockingRule<>(DefaultStringEntityReferenceSerializer.class);
52   
53    @Rule
54    public MockitoComponentMockingRule<DefaultStringEntityReferenceResolver> resolverMocker =
55    new MockitoComponentMockingRule<>(DefaultStringEntityReferenceResolver.class);
56   
57    private EntityReferenceSerializer<String> serializer;
58   
59    private EntityReferenceResolver<String> resolver;
60   
 
61  9 toggle @Before
62    public void setUp() throws Exception
63    {
64  9 this.serializer = this.mocker.getComponentUnderTest();
65  9 this.resolver = this.resolverMocker.getComponentUnderTest();
66   
67  9 EntityReferenceProvider referenceProvider = this.resolverMocker.getInstance(EntityReferenceProvider.class);
68  9 when(referenceProvider.getDefaultReference(EntityType.WIKI)).thenReturn(DEFAULT_WIKI_REFERENCE);
69  9 when(referenceProvider.getDefaultReference(EntityType.SPACE)).thenReturn(DEFAULT_SPACE_REFERENCE);
70  9 when(referenceProvider.getDefaultReference(EntityType.DOCUMENT)).thenReturn(DEFAULT_PAGE_REFERENCE);
71  9 when(referenceProvider.getDefaultReference(EntityType.ATTACHMENT)).thenReturn(DEFAULT_ATTACHMENT_REFERENCE);
72  9 when(referenceProvider.getDefaultReference(EntityType.OBJECT)).thenReturn(DEFAULT_OBJECT_REFERENCE);
73  9 when(referenceProvider.getDefaultReference(EntityType.OBJECT_PROPERTY)).thenReturn(
74    DEFAULT_OBJECT_PROPERTY_REFERENCE);
75  9 when(referenceProvider.getDefaultReference(EntityType.CLASS_PROPERTY)).thenReturn(
76    DEFAULT_CLASS_PROPERTY_REFERENCE);
77    }
78   
 
79  1 toggle @Test
80    public void serializeWikiReferences() throws Exception
81    {
82  1 EntityReference reference = resolver.resolve("wiki", EntityType.WIKI);
83  1 assertEquals("wiki", serializer.serialize(reference));
84    }
85   
 
86  1 toggle @Test
87    public void serializeDocumentReferences() throws Exception
88    {
89  1 EntityReference reference = resolver.resolve("wiki:space.page", EntityType.DOCUMENT);
90  1 assertEquals("wiki:space.page", serializer.serialize(reference));
91   
92  1 reference = resolver.resolve("wiki:space.", EntityType.DOCUMENT);
93  1 assertEquals("wiki:space.defpage", serializer.serialize(reference));
94   
95  1 reference = resolver.resolve("space.", EntityType.DOCUMENT);
96  1 assertEquals("defwiki:space.defpage", serializer.serialize(reference));
97   
98  1 reference = resolver.resolve("page", EntityType.DOCUMENT);
99  1 assertEquals("defwiki:defspace.page", serializer.serialize(reference));
100   
101  1 reference = resolver.resolve(".", EntityType.DOCUMENT);
102  1 assertEquals("defwiki:defspace.defpage", serializer.serialize(reference));
103   
104  1 reference = resolver.resolve(null, EntityType.DOCUMENT);
105  1 assertEquals("defwiki:defspace.defpage", serializer.serialize(reference));
106   
107  1 reference = resolver.resolve("", EntityType.DOCUMENT);
108  1 assertEquals("defwiki:defspace.defpage", serializer.serialize(reference));
109   
110  1 reference = resolver.resolve("wiki1.wiki2:wiki3:some.space.page", EntityType.DOCUMENT);
111  1 assertEquals("wiki1.wiki2:wiki3:some.space.page", serializer.serialize(reference));
112   
113  1 reference = resolver.resolve("some.space.page", EntityType.DOCUMENT);
114  1 assertEquals("defwiki:some.space.page", serializer.serialize(reference));
115   
116  1 reference = resolver.resolve("wiki:page", EntityType.DOCUMENT);
117  1 assertEquals("defwiki:defspace.wiki:page", serializer.serialize(reference));
118   
119    // Verify that passing null doesn't throw a NPE
120  1 assertNull(serializer.serialize(null));
121   
122    // Test escapes
123   
124  1 reference = resolver.resolve("\\.:@\\.", EntityType.DOCUMENT);
125  1 assertEquals("defwiki:defspace.\\.:@\\.", serializer.serialize(reference));
126   
127  1 reference = resolver.resolve("\\\\:\\\\.\\\\", EntityType.DOCUMENT);
128  1 assertEquals("\\\\:\\\\.\\\\", serializer.serialize(reference));
129   
130    // The escaping here is not necessary but we want to test that it works
131  1 reference = resolver.resolve("\\wiki:\\space.\\page", EntityType.DOCUMENT);
132  1 assertEquals("wiki:space.page", serializer.serialize(reference));
133    }
134   
 
135  1 toggle @Test
136    public void serializeSpaceReferences() throws Exception
137    {
138  1 EntityReference reference = resolver.resolve("wiki:space1.space2", EntityType.SPACE);
139  1 assertEquals("wiki:space1.space2", serializer.serialize(reference));
140    }
141   
 
142  1 toggle @Test
143    public void serializeAttachmentReferences() throws Exception
144    {
145  1 EntityReference reference = resolver.resolve("wiki:space.page@filename", EntityType.ATTACHMENT);
146  1 assertEquals("wiki:space.page@filename", serializer.serialize(reference));
147   
148  1 reference = resolver.resolve("", EntityType.ATTACHMENT);
149  1 assertEquals("defwiki:defspace.defpage@deffilename", serializer.serialize(reference));
150   
151  1 reference = resolver.resolve("wiki:space.page@my.png", EntityType.ATTACHMENT);
152  1 assertEquals("wiki:space.page@my.png", serializer.serialize(reference));
153   
154  1 reference = resolver.resolve("some:file.name", EntityType.ATTACHMENT);
155  1 assertEquals("defwiki:defspace.defpage@some:file.name", serializer.serialize(reference));
156   
157    // Test escapes
158   
159  1 reference = resolver.resolve(":.\\@", EntityType.ATTACHMENT);
160  1 assertEquals("defwiki:defspace.defpage@:.\\@", serializer.serialize(reference));
161    }
162   
 
163  1 toggle @Test
164    public void serializeReferencesWithChild()
165    {
166  1 EntityReference reference = resolver.resolve("wiki:Space.Page", EntityType.DOCUMENT);
167  1 assertEquals("wiki:Space", serializer.serialize(reference.getParent()));
168   
169  1 assertEquals("wiki", serializer.serialize(reference.getParent().getParent()));
170    }
171   
172    /**
173    * Tests resolving and re-serializing an object reference.
174    */
 
175  1 toggle @Test
176    public void serializeObjectReferences()
177    {
178  1 EntityReference reference = resolver.resolve("wiki:space.page^Object", EntityType.OBJECT);
179  1 assertEquals("wiki:space.page^Object", serializer.serialize(reference));
180   
181    // default values
182  1 reference = resolver.resolve("", EntityType.OBJECT);
183  1 assertEquals("defwiki:defspace.defpage^defobject", serializer.serialize(reference));
184   
185    // property reference with no object
186  1 reference = resolver.resolve("wiki:space.page.property", EntityType.OBJECT);
187  1 assertEquals("defwiki:defspace.defpage^wiki:space.page.property", serializer.serialize(reference));
188   
189    // test escaping character
190  1 reference = resolver.resolve("wiki:space.page^Obje\\^ct", EntityType.OBJECT);
191  1 assertEquals("wiki:space.page^Obje\\^ct", serializer.serialize(reference));
192   
193  1 reference = resolver.resolve("wiki:spa^ce.page^Obje\\^ct", EntityType.OBJECT);
194  1 assertEquals("wiki:spa^ce.page^Obje\\^ct", serializer.serialize(reference));
195   
196  1 reference = resolver.resolve(":.\\^@", EntityType.OBJECT);
197  1 assertEquals("defwiki:defspace.defpage^:.\\^@", serializer.serialize(reference));
198    }
199   
200    /**
201    * Tests resolving and re-serializing an object reference.
202    */
 
203  1 toggle @Test
204    public void serializeObjectPropertyReferences()
205    {
206  1 EntityReference reference = resolver.resolve("wiki:space.page^xwiki.class[0].prop", EntityType.OBJECT_PROPERTY);
207  1 assertEquals("wiki:space.page^xwiki.class[0].prop", serializer.serialize(reference));
208   
209    // default values
210  1 reference = resolver.resolve("", EntityType.OBJECT_PROPERTY);
211  1 assertEquals("defwiki:defspace.defpage^defobject.defobjproperty", serializer.serialize(reference));
212   
213    // using separators
214  1 reference = resolver.resolve("space^page@attachment", EntityType.OBJECT_PROPERTY);
215  1 Assert
216    .assertEquals("defwiki:defspace.defpage^defobject.space^page@attachment", serializer.serialize(reference));
217   
218  1 reference = resolver.resolve("wiki:space^object", EntityType.OBJECT_PROPERTY);
219  1 assertEquals("defwiki:defspace.defpage^defobject.wiki:space^object", serializer.serialize(reference));
220   
221    // test escaping character
222  1 reference = resolver.resolve("wiki:space.page^xwiki.class[0].prop\\.erty", EntityType.OBJECT_PROPERTY);
223  1 assertEquals("wiki:space.page^xwiki.class[0].prop\\.erty", serializer.serialize(reference));
224   
225  1 reference = resolver.resolve(":\\.^@", EntityType.OBJECT_PROPERTY);
226  1 assertEquals("defwiki:defspace.defpage^defobject.:\\.^@", serializer.serialize(reference));
227    }
228   
229    /**
230    * Tests resolving and re-serializing an object reference.
231    */
 
232  1 toggle @Test
233    public void serializeClassPropertyReferences()
234    {
235  1 EntityReference reference = resolver.resolve("wiki:space.page^ClassProperty", EntityType.CLASS_PROPERTY);
236  1 assertEquals("wiki:space.page^ClassProperty", serializer.serialize(reference));
237   
238    // default values
239  1 reference = resolver.resolve("", EntityType.CLASS_PROPERTY);
240  1 assertEquals("defwiki:defspace.defpage^defclassproperty", serializer.serialize(reference));
241   
242    // property reference with no object
243  1 reference = resolver.resolve("wiki:space.page.property", EntityType.CLASS_PROPERTY);
244  1 assertEquals("defwiki:defspace.defpage^wiki:space.page.property", serializer.serialize(reference));
245   
246    // test escaping character
247  1 reference = resolver.resolve("wiki:space.page^Obje\\^ct", EntityType.CLASS_PROPERTY);
248  1 assertEquals("wiki:space.page^Obje\\^ct", serializer.serialize(reference));
249   
250  1 reference = resolver.resolve("wiki:spa^ce.page^Obje\\^ct", EntityType.CLASS_PROPERTY);
251  1 assertEquals("wiki:spa^ce.page^Obje\\^ct", serializer.serialize(reference));
252   
253  1 reference = resolver.resolve(":.\\^@", EntityType.CLASS_PROPERTY);
254  1 assertEquals("defwiki:defspace.defpage^:.\\^@", serializer.serialize(reference));
255    }
256   
 
257  1 toggle @Test
258    public void serializeRelativeReferences()
259    {
260  1 EntityReference reference = new EntityReference("page", EntityType.DOCUMENT);
261  1 assertEquals("page", serializer.serialize(reference));
262   
263  1 reference = new EntityReference("page", EntityType.DOCUMENT, new EntityReference("space", EntityType.SPACE));
264  1 assertEquals("space.page", serializer.serialize(reference));
265   
266    // Ensure that the page part is not displayed in the serialized result
267  1 assertEquals("space", serializer.serialize(reference.extractReference(EntityType.SPACE)));
268    }
269    }