View Javadoc
1   /*
2    * #%L
3    * Nuiton Decorator
4    * %%
5    * Copyright (C) 2011 CodeLutin, Tony Chemit
6    * %%
7    * This program is free software: you can redistribute it and/or modify
8    * it under the terms of the GNU Lesser General Public License as 
9    * published by the Free Software Foundation, either version 3 of the 
10   * License, or (at your option) any later version.
11   * 
12   * This program is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   * GNU General Lesser Public License for more details.
16   * 
17   * You should have received a copy of the GNU General Lesser Public 
18   * License along with this program.  If not, see
19   * <http://www.gnu.org/licenses/lgpl-3.0.html>.
20   * #L%
21   */
22  package org.nuiton.decorator;
23  
24  import org.junit.Assert;
25  import org.junit.Before;
26  import org.junit.Test;
27  
28  import java.io.File;
29  
30  /**
31   * @author tchemit <chemit@codelutin.com>
32   * @since 2.3
33   */
34  public class DecoratorProviderTest {
35  
36      private static final String BY_NAME = "name";
37  
38      class MyDecoratorProvider extends DecoratorProvider {
39  
40          @Override
41          protected void loadDecorators() {
42  
43              registerPropertyDecorator(File.class, "name");
44              registerPropertyDecorator(File.class, BY_NAME, "parent");
45  
46              registerJXPathDecorator(Class.class, "${simpleName}$s");
47              registerJXPathDecorator(Class.class, BY_NAME, "${name}$s");
48  
49              registerMultiJXPathDecorator(Data.class, "${name}$s", "-", " ");
50              registerMultiJXPathDecorator(Data.class, BY_NAME, "${pos}$d", "-", " ");
51          }
52      }
53  
54      DecoratorProvider provider;
55  
56      @Before
57      public void beforeTest() throws Exception {
58          provider = new MyDecoratorProvider();
59      }
60  
61      @Test
62      public void testGetDecoratorByObject() throws Exception {
63  
64          File f = new File("myFile");
65          Data d = new Data(0, "name");
66          Class<?> k = File.class;
67  
68          Decorator<File> fileDecorator = provider.getDecorator(f);
69          Assert.assertNotNull(fileDecorator);
70          Assert.assertEquals(File.class, fileDecorator.getType());
71          Assert.assertEquals("myFile", fileDecorator.toString(f));
72  
73          Decorator<?> classDecorator = provider.getDecorator(Class.class);
74          Assert.assertNotNull(classDecorator);
75          Assert.assertEquals(Class.class, classDecorator.getType());
76          Assert.assertEquals("File", classDecorator.toString(k));
77  
78          Decorator<Data> dataDecorator = provider.getDecorator(d);
79          Assert.assertNotNull(dataDecorator);
80          Assert.assertEquals(Data.class, dataDecorator.getType());
81          Assert.assertEquals("name", dataDecorator.toString(d));
82      }
83  
84      @Test
85      public void testGetDecoratorByObjectAndName() throws Exception {
86  
87          File f = new File("myFile");
88          Data d = new Data(0, "name");
89          Class<?> k = File.class;
90  
91          Decorator<File> fileDecorator = provider.getDecorator(f, BY_NAME);
92          Assert.assertNotNull(fileDecorator);
93          Assert.assertEquals(File.class, fileDecorator.getType());
94          Assert.assertEquals("null", fileDecorator.toString(f));
95  
96          Decorator<Class> classDecorator = provider.getDecoratorByType(Class.class, BY_NAME);
97          Assert.assertNotNull(classDecorator);
98          Assert.assertEquals(Class.class, classDecorator.getType());
99          Assert.assertEquals("java.io.File", classDecorator.toString(k));
100 
101 
102         Decorator<Data> dataDecorator = provider.getDecorator(d, BY_NAME);
103         Assert.assertNotNull(dataDecorator);
104         Assert.assertEquals(Data.class, dataDecorator.getType());
105         Assert.assertEquals("0", dataDecorator.toString(d));
106     }
107 
108     @Test
109     public void testGetDecoratorByType() throws Exception {
110 
111         File f = new File("myFile");
112         Data d = new Data(0, "name");
113         Class<?> k = File.class;
114 
115         Decorator<File> fileDecorator = provider.getDecoratorByType(File.class);
116         Assert.assertNotNull(fileDecorator);
117         Assert.assertEquals(File.class, fileDecorator.getType());
118         Assert.assertEquals("myFile", fileDecorator.toString(f));
119 
120         Decorator<Class> classDecorator = provider.getDecoratorByType(Class.class);
121         Assert.assertNotNull(classDecorator);
122         Assert.assertEquals(Class.class, classDecorator.getType());
123         Assert.assertEquals("File", classDecorator.toString(k));
124 
125         Decorator<Data> dataDecorator = provider.getDecoratorByType(Data.class);
126         Assert.assertNotNull(dataDecorator);
127         Assert.assertEquals(Data.class, dataDecorator.getType());
128         Assert.assertEquals("name", dataDecorator.toString(d));
129     }
130 
131     @Test
132     public void testGetDecoratorByTypeAndName() throws Exception {
133         File f = new File("myFile");
134         Data d = new Data(0, "name");
135         Class<?> k = File.class;
136 
137         Decorator<File> fileDecorator = provider.getDecoratorByType(File.class, BY_NAME);
138         Assert.assertNotNull(fileDecorator);
139         Assert.assertEquals(File.class, fileDecorator.getType());
140         Assert.assertEquals("null", fileDecorator.toString(f));
141 
142         Decorator<Class> classDecorator = provider.getDecoratorByType(Class.class, BY_NAME);
143         Assert.assertNotNull(classDecorator);
144         Assert.assertEquals(Class.class, classDecorator.getType());
145         Assert.assertEquals("java.io.File", classDecorator.toString(k));
146 
147 
148         Decorator<Data> dataDecorator = provider.getDecoratorByType(Data.class, BY_NAME);
149         Assert.assertNotNull(dataDecorator);
150         Assert.assertEquals(Data.class, dataDecorator.getType());
151         Assert.assertEquals("0", dataDecorator.toString(d));
152     }
153 
154 
155     @Test
156     public void testReload() throws Exception {
157 
158         int nb = provider.getDecorators().size();
159         Assert.assertTrue(nb > 0);
160 
161         provider.reload();
162 
163         Assert.assertEquals(nb, provider.getDecorators().size());
164     }
165 
166     @Test
167     public void testClear() throws Exception {
168         provider.clear();
169 
170         Assert.assertTrue(provider.getDecorators().isEmpty());
171     }
172 
173 }