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  import java.util.Locale;
30  
31  /**
32   * Tests the {@link DecoratorMulti18nProvider}
33   *
34   * @author tchemit <chemit@codelutin.com>
35   * @since 2.3
36   */
37  public class DecoratorMulti18nProviderTest {
38  
39      private static final String BY_NAME = "name";
40  
41      private static final String BY_POS = "pos";
42  
43      static protected Locale l_fr = Locale.FRANCE;
44  
45      static protected Locale l_en = Locale.UK;
46  
47      class MyDecoratorProvider extends DecoratorMulti18nProvider {
48  
49          @Override
50          protected void loadDecorators(Locale locale) {
51  
52              registerPropertyDecorator(locale, File.class, "name");
53              registerPropertyDecorator(locale, File.class, BY_NAME, "parent");
54  
55              registerJXPathDecorator(locale, Class.class, "${simpleName}$s " + locale.getCountry());
56              registerJXPathDecorator(locale, Class.class, BY_NAME, "${name}$s " + locale.getCountry());
57  
58              registerMultiJXPathDecorator(locale, Data.class, "${name}$s " + locale.getCountry(), "-", " ");
59              registerMultiJXPathDecorator(locale, Data.class, BY_POS, "${pos}$d " + locale.getCountry(), "-", " ");
60          }
61      }
62  
63      MyDecoratorProvider provider;
64  
65      @Before
66      public void beforeTest() throws Exception {
67          provider = new MyDecoratorProvider();
68      }
69  
70      @Test
71      public void testGetDecoratorByObject() throws Exception {
72  
73  
74          File f = new File("myFile");
75          Data d = new Data(0, "name");
76          Class<?> k = File.class;
77  
78          Decorator<File> fileDecorator = provider.getDecorator(l_fr, f);
79          Assert.assertNotNull(fileDecorator);
80          Assert.assertEquals(File.class, fileDecorator.getType());
81          Assert.assertEquals("myFile", fileDecorator.toString(f));
82  
83          Decorator<?> classDecorator;
84  
85          classDecorator = provider.getDecorator(l_fr, Class.class);
86          Assert.assertNotNull(classDecorator);
87          Assert.assertEquals(Class.class, classDecorator.getType());
88          Assert.assertEquals("File FR", classDecorator.toString(k));
89  
90          classDecorator = provider.getDecorator(l_en, Class.class);
91          Assert.assertNotNull(classDecorator);
92          Assert.assertEquals(Class.class, classDecorator.getType());
93          Assert.assertEquals("File GB", classDecorator.toString(k));
94  
95          Decorator<Data> dataDecorator;
96  
97          dataDecorator = provider.getDecorator(l_fr, d);
98          Assert.assertNotNull(dataDecorator);
99          Assert.assertEquals(Data.class, dataDecorator.getType());
100         Assert.assertEquals("name FR", dataDecorator.toString(d));
101 
102         dataDecorator = provider.getDecorator(l_en, d);
103         Assert.assertNotNull(dataDecorator);
104         Assert.assertEquals(Data.class, dataDecorator.getType());
105         Assert.assertEquals("name GB", dataDecorator.toString(d));
106     }
107 
108     @Test
109     public void testGetDecoratorByObjectAndName() 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.getDecorator(l_fr, f, BY_NAME);
116         Assert.assertNotNull(fileDecorator);
117         Assert.assertEquals(File.class, fileDecorator.getType());
118         Assert.assertEquals("null", fileDecorator.toString(f));
119 
120         Decorator<Class> classDecorator;
121 
122         classDecorator = provider.getDecoratorByType(l_fr, Class.class, BY_NAME);
123         Assert.assertNotNull(classDecorator);
124         Assert.assertEquals(Class.class, classDecorator.getType());
125         Assert.assertEquals("java.io.File FR", classDecorator.toString(k));
126 
127         classDecorator = provider.getDecoratorByType(l_en, Class.class, BY_NAME);
128         Assert.assertNotNull(classDecorator);
129         Assert.assertEquals(Class.class, classDecorator.getType());
130         Assert.assertEquals("java.io.File GB", classDecorator.toString(k));
131 
132 
133         Decorator<Data> dataDecorator;
134 
135         dataDecorator = provider.getDecorator(l_fr, d, BY_NAME);
136         Assert.assertNull(dataDecorator);
137 
138         dataDecorator = provider.getDecorator(l_en, d, BY_NAME);
139         Assert.assertNull(dataDecorator);
140 
141         dataDecorator = provider.getDecorator(l_fr, d, BY_POS);
142         Assert.assertNotNull(dataDecorator);
143         Assert.assertEquals(Data.class, dataDecorator.getType());
144         Assert.assertEquals("0 FR", dataDecorator.toString(d));
145 
146         dataDecorator = provider.getDecorator(l_en, d, BY_POS);
147         Assert.assertNotNull(dataDecorator);
148         Assert.assertEquals(Data.class, dataDecorator.getType());
149         Assert.assertEquals("0 GB", dataDecorator.toString(d));
150     }
151 
152     @Test
153     public void testGetDecoratorByType() throws Exception {
154 
155         File f = new File("myFile");
156         Data d = new Data(0, "name");
157         Class<?> k = File.class;
158 
159         Decorator<File> fileDecorator = provider.getDecoratorByType(l_fr, File.class);
160         Assert.assertNotNull(fileDecorator);
161         Assert.assertEquals(File.class, fileDecorator.getType());
162         Assert.assertEquals("myFile", fileDecorator.toString(f));
163 
164         Decorator<Class> classDecorator;
165 
166         classDecorator = provider.getDecoratorByType(l_fr, Class.class);
167         Assert.assertNotNull(classDecorator);
168         Assert.assertEquals(Class.class, classDecorator.getType());
169         Assert.assertEquals("File FR", classDecorator.toString(k));
170 
171         classDecorator = provider.getDecoratorByType(l_en, Class.class);
172         Assert.assertNotNull(classDecorator);
173         Assert.assertEquals(Class.class, classDecorator.getType());
174         Assert.assertEquals("File GB", classDecorator.toString(k));
175 
176         Decorator<Data> dataDecorator;
177 
178         dataDecorator = provider.getDecoratorByType(l_fr, Data.class);
179         Assert.assertNotNull(dataDecorator);
180         Assert.assertEquals(Data.class, dataDecorator.getType());
181         Assert.assertEquals("name FR", dataDecorator.toString(d));
182 
183         dataDecorator = provider.getDecoratorByType(l_en, Data.class);
184         Assert.assertNotNull(dataDecorator);
185         Assert.assertEquals(Data.class, dataDecorator.getType());
186         Assert.assertEquals("name GB", dataDecorator.toString(d));
187     }
188 
189     @Test
190     public void testGetDecoratorByTypeAndName() throws Exception {
191         File f = new File("myFile");
192         Data d = new Data(0, "name");
193         Class<?> k = File.class;
194 
195         Decorator<File> fileDecorator = provider.getDecoratorByType(l_fr, File.class, BY_NAME);
196         Assert.assertNotNull(fileDecorator);
197         Assert.assertEquals(File.class, fileDecorator.getType());
198         Assert.assertEquals("null", fileDecorator.toString(f));
199 
200         Decorator<Class> classDecorator;
201 
202         classDecorator = provider.getDecoratorByType(l_fr, Class.class, BY_NAME);
203         Assert.assertNotNull(classDecorator);
204         Assert.assertEquals(Class.class, classDecorator.getType());
205         Assert.assertEquals("java.io.File FR", classDecorator.toString(k));
206 
207         classDecorator = provider.getDecoratorByType(l_en, Class.class, BY_NAME);
208         Assert.assertNotNull(classDecorator);
209         Assert.assertEquals(Class.class, classDecorator.getType());
210         Assert.assertEquals("java.io.File GB", classDecorator.toString(k));
211 
212         Decorator<Data> dataDecorator;
213 
214         dataDecorator = provider.getDecoratorByType(l_fr, Data.class, BY_POS);
215         Assert.assertNotNull(dataDecorator);
216         Assert.assertEquals(Data.class, dataDecorator.getType());
217         Assert.assertEquals("0 FR", dataDecorator.toString(d));
218 
219         dataDecorator = provider.getDecoratorByType(l_en, Data.class, BY_POS);
220         Assert.assertNotNull(dataDecorator);
221         Assert.assertEquals(Data.class, dataDecorator.getType());
222         Assert.assertEquals("0 GB", dataDecorator.toString(d));
223     }
224 
225 
226 }