Commit 929acded03505fd33c5a850c2a4a9a28124cd69d
Exists in
master
Merge branch '2.4.0' of git@github.com:demoiselle/framework.git into 2.4.0
Showing
9 changed files
with
336 additions
and
178 deletions
Show diff stats
impl/core/pom.xml
@@ -99,59 +99,20 @@ | @@ -99,59 +99,20 @@ | ||
99 | <artifactId>cobertura-maven-plugin</artifactId> | 99 | <artifactId>cobertura-maven-plugin</artifactId> |
100 | </plugin> | 100 | </plugin> |
101 | 101 | ||
102 | - <!-- | ||
103 | - <plugin> | ||
104 | - <groupId>org.jacoco</groupId> | ||
105 | - <artifactId>jacoco-maven-plugin</artifactId> | ||
106 | - <version>${jacoco.version}</version> | ||
107 | - <executions> | ||
108 | - <execution> | ||
109 | - <goals> | ||
110 | - <goal>prepare-agent</goal> | ||
111 | - </goals> | ||
112 | - </execution> | ||
113 | - <execution> | ||
114 | - <id>report</id> | ||
115 | - <phase>prepare-package</phase> | ||
116 | - <goals> | ||
117 | - <goal>report</goal> | ||
118 | - </goals> | ||
119 | - </execution> | ||
120 | - </executions> | ||
121 | - </plugin> | ||
122 | - --> | 102 | + <!-- <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> |
103 | + <version>${jacoco.version}</version> <executions> <execution> <goals> <goal>prepare-agent</goal> | ||
104 | + </goals> </execution> <execution> <id>report</id> <phase>prepare-package</phase> | ||
105 | + <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> --> | ||
123 | </plugins> | 106 | </plugins> |
124 | - | ||
125 | - <!-- | ||
126 | - <pluginManagement> | ||
127 | - <plugins> | ||
128 | - <plugin> | ||
129 | - <groupId>org.eclipse.m2e</groupId> | ||
130 | - <artifactId>lifecycle-mapping</artifactId> | ||
131 | - <version>1.0.0</version> | ||
132 | - <configuration> | ||
133 | - <lifecycleMappingMetadata> | ||
134 | - <pluginExecutions> | ||
135 | - <pluginExecution> | ||
136 | - <pluginExecutionFilter> | ||
137 | - <groupId>org.jacoco</groupId> | ||
138 | - <artifactId>jacoco-maven-plugin</artifactId> | ||
139 | - <versionRange>[${jacoco.version},)</versionRange> | ||
140 | - <goals> | ||
141 | - <goal>prepare-agent</goal> | ||
142 | - </goals> | ||
143 | - </pluginExecutionFilter> | ||
144 | - <action> | ||
145 | - <ignore></ignore> | ||
146 | - </action> | ||
147 | - </pluginExecution> | ||
148 | - </pluginExecutions> | ||
149 | - </lifecycleMappingMetadata> | ||
150 | - </configuration> | ||
151 | - </plugin> | ||
152 | - </plugins> | ||
153 | - </pluginManagement> | ||
154 | - --> | 107 | + |
108 | + <!-- <pluginManagement> <plugins> <plugin> <groupId>org.eclipse.m2e</groupId> | ||
109 | + <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> | ||
110 | + <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> | ||
111 | + <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> | ||
112 | + <versionRange>[${jacoco.version},)</versionRange> <goals> <goal>prepare-agent</goal> | ||
113 | + </goals> </pluginExecutionFilter> <action> <ignore></ignore> </action> </pluginExecution> | ||
114 | + </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> | ||
115 | + </plugins> </pluginManagement> --> | ||
155 | </build> | 116 | </build> |
156 | 117 | ||
157 | <dependencies> | 118 | <dependencies> |
@@ -202,50 +163,28 @@ | @@ -202,50 +163,28 @@ | ||
202 | <artifactId>hibernate-validator</artifactId> | 163 | <artifactId>hibernate-validator</artifactId> |
203 | <scope>test</scope> | 164 | <scope>test</scope> |
204 | </dependency> | 165 | </dependency> |
205 | - | ||
206 | - <!-- | ||
207 | - <dependency> | ||
208 | - <groupId>org.jboss.arquillian.extension</groupId> | ||
209 | - <artifactId>arquillian-jacoco</artifactId> | ||
210 | - <version>1.0.0.Alpha5</version> | ||
211 | - <scope>test</scope> | ||
212 | - </dependency> | ||
213 | - <dependency> | ||
214 | - <groupId>org.jacoco</groupId> | ||
215 | - <artifactId>org.jacoco.core</artifactId> | ||
216 | - <version>${jacoco.version}</version> | ||
217 | - <scope>test</scope> | ||
218 | - </dependency> | ||
219 | - --> | ||
220 | - | ||
221 | - <!-- | ||
222 | <dependency> | 166 | <dependency> |
223 | - <groupId>org.jboss.shrinkwrap.descriptors</groupId> | ||
224 | - <artifactId>shrinkwrap-descriptors-spi</artifactId> | ||
225 | - <version>2.0.0-alpha-4</version> | 167 | + <groupId>javax.servlet</groupId> |
168 | + <artifactId>servlet-api</artifactId> | ||
226 | <scope>test</scope> | 169 | <scope>test</scope> |
227 | </dependency> | 170 | </dependency> |
228 | - --> | ||
229 | 171 | ||
230 | - <!-- | ||
231 | - <dependency> | ||
232 | - <groupId>javax.el</groupId> | ||
233 | - <artifactId>el-api</artifactId> | ||
234 | - <scope>test</scope> | ||
235 | - </dependency> | ||
236 | - --> | 172 | + <!-- <dependency> <groupId>org.jboss.arquillian.extension</groupId> <artifactId>arquillian-jacoco</artifactId> |
173 | + <version>1.0.0.Alpha5</version> <scope>test</scope> </dependency> <dependency> | ||
174 | + <groupId>org.jacoco</groupId> <artifactId>org.jacoco.core</artifactId> <version>${jacoco.version}</version> | ||
175 | + <scope>test</scope> </dependency> --> | ||
176 | + | ||
177 | + <!-- <dependency> <groupId>org.jboss.shrinkwrap.descriptors</groupId> <artifactId>shrinkwrap-descriptors-spi</artifactId> | ||
178 | + <version>2.0.0-alpha-4</version> <scope>test</scope> </dependency> --> | ||
179 | + | ||
180 | + <!-- <dependency> <groupId>javax.el</groupId> <artifactId>el-api</artifactId> | ||
181 | + <scope>test</scope> </dependency> --> | ||
237 | <dependency> | 182 | <dependency> |
238 | <groupId>org.slf4j</groupId> | 183 | <groupId>org.slf4j</groupId> |
239 | <artifactId>slf4j-log4j12</artifactId> | 184 | <artifactId>slf4j-log4j12</artifactId> |
240 | <scope>test</scope> | 185 | <scope>test</scope> |
241 | </dependency> | 186 | </dependency> |
242 | - | ||
243 | - <dependency> | ||
244 | - <groupId>br.gov.frameworkdemoiselle.component</groupId> | ||
245 | - <artifactId>demoiselle-validation</artifactId> | ||
246 | - <scope>test</scope> | ||
247 | - <version>${demoiselle.validation.version}</version> | ||
248 | - </dependency> | 187 | + |
249 | </dependencies> | 188 | </dependencies> |
250 | 189 | ||
251 | <repositories> | 190 | <repositories> |
@@ -274,9 +213,7 @@ | @@ -274,9 +213,7 @@ | ||
274 | </repositories> | 213 | </repositories> |
275 | 214 | ||
276 | <properties> | 215 | <properties> |
277 | - <!-- | ||
278 | - <jacoco.version>0.6.0.201210061924</jacoco.version> | ||
279 | - --> | 216 | + <!-- <jacoco.version>0.6.0.201210061924</jacoco.version> --> |
280 | <demoiselle.validation.version>2.4.0-BETA2-SNAPSHOT</demoiselle.validation.version> | 217 | <demoiselle.validation.version>2.4.0-BETA2-SNAPSHOT</demoiselle.validation.version> |
281 | </properties> | 218 | </properties> |
282 | </project> | 219 | </project> |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/management/Management.java
@@ -241,11 +241,22 @@ public class Management { | @@ -241,11 +241,22 @@ public class Management { | ||
241 | errorBuffer.append(violation.getMessage()).append('\r').append('\n'); | 241 | errorBuffer.append(violation.getMessage()).append('\r').append('\n'); |
242 | } | 242 | } |
243 | 243 | ||
244 | - throw new DemoiselleException(bundle.getString("validation-constraint-violation",managedType.getType().getCanonicalName(),errorBuffer.toString())); | 244 | + if (errorBuffer.length()>0){ |
245 | + errorBuffer.insert(0, "\r\n"); | ||
246 | + errorBuffer.insert(errorBuffer.length(), "\r\n"); | ||
247 | + } | ||
248 | + | ||
249 | + throw new DemoiselleException( | ||
250 | + bundle.getString( | ||
251 | + "management-validation-constraint-violation" | ||
252 | + ,managedType.getType().getCanonicalName() | ||
253 | + ,propertyName,errorBuffer.toString() | ||
254 | + ) | ||
255 | + ); | ||
245 | } | 256 | } |
246 | } | 257 | } |
247 | else{ | 258 | else{ |
248 | - logger.warn(bundle.getString("validation-validator-not-found")); | 259 | + logger.warn(bundle.getString("management-validation-validator-not-found")); |
249 | } | 260 | } |
250 | 261 | ||
251 | Method getterMethod = managedType.getFields().get(propertyName).getGetterMethod(); | 262 | Method getterMethod = managedType.getFields().get(propertyName).getGetterMethod(); |
impl/core/src/main/resources/demoiselle-core-bundle.properties
@@ -114,5 +114,5 @@ management-debug-stoping-custom-context=Desligando contexto {0} para classe gere | @@ -114,5 +114,5 @@ management-debug-stoping-custom-context=Desligando contexto {0} para classe gere | ||
114 | management-debug-registering-managed-type=Registrando classe gerenciada [{0}] | 114 | management-debug-registering-managed-type=Registrando classe gerenciada [{0}] |
115 | management-debug-processing-management-extension=Processando extens\u00E3o de gerenciamento [{0}] | 115 | management-debug-processing-management-extension=Processando extens\u00E3o de gerenciamento [{0}] |
116 | management-debug-removing-management-extension=Desativando extens\u00E3o de gerenciamento [{0}] | 116 | management-debug-removing-management-extension=Desativando extens\u00E3o de gerenciamento [{0}] |
117 | - | ||
118 | -validation-validator-not-found=Nenhum provedor de valida\u00E7\u00E3o de beans encontrado, as anota\u00E7\u00F5es de valida\u00E7\u00E3o n\u00E3o ser\u00E3o processadas | 117 | +management-validation-constraint-violation=Ocorreu um erro de valida\u00E7\u00E3o na classe [{0}] ao definir um valor para a propriedade [{1}]\: [{2}] |
118 | +management-validation-validator-not-found=Nenhum provedor de valida\u00E7\u00E3o de beans encontrado, as anota\u00E7\u00F5es de valida\u00E7\u00E3o n\u00E3o ser\u00E3o processadas |
impl/core/src/test/java/management/AnnotationTestCase.java
0 → 100644
@@ -0,0 +1,95 @@ | @@ -0,0 +1,95 @@ | ||
1 | +/* | ||
2 | + * Demoiselle Framework | ||
3 | + * Copyright (C) 2010 SERPRO | ||
4 | + * ---------------------------------------------------------------------------- | ||
5 | + * This file is part of Demoiselle Framework. | ||
6 | + * | ||
7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
9 | + * as published by the Free Software Foundation. | ||
10 | + * | ||
11 | + * This program is distributed in the hope that it will be useful, | ||
12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | + * GNU General Public License for more details. | ||
15 | + * | ||
16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
20 | + * ---------------------------------------------------------------------------- | ||
21 | + * Este arquivo é parte do Framework Demoiselle. | ||
22 | + * | ||
23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
25 | + * do Software Livre (FSF). | ||
26 | + * | ||
27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
30 | + * para maiores detalhes. | ||
31 | + * | ||
32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
36 | + */ | ||
37 | +package management; | ||
38 | + | ||
39 | +import java.io.File; | ||
40 | + | ||
41 | +import management.testclasses.DummyManagementExtension; | ||
42 | +import management.testclasses.ManagedClassStore; | ||
43 | + | ||
44 | +import org.jboss.arquillian.container.test.api.Deployer; | ||
45 | +import org.jboss.arquillian.container.test.api.Deployment; | ||
46 | +import org.jboss.arquillian.junit.Arquillian; | ||
47 | +import org.jboss.arquillian.test.api.ArquillianResource; | ||
48 | +import org.jboss.shrinkwrap.api.ShrinkWrap; | ||
49 | +import org.jboss.shrinkwrap.api.asset.FileAsset; | ||
50 | +import org.jboss.shrinkwrap.api.spec.JavaArchive; | ||
51 | +import org.junit.Assert; | ||
52 | +import org.junit.Test; | ||
53 | +import org.junit.runner.RunWith; | ||
54 | + | ||
55 | +import test.LocaleProducer; | ||
56 | + | ||
57 | +@RunWith(Arquillian.class) | ||
58 | +// @Ignore | ||
59 | +public class AnnotationTestCase { | ||
60 | + | ||
61 | + /** | ||
62 | + * Deployment containing a malformed managed class. Tests using this deployment will check if deployment fails (it | ||
63 | + * has to). | ||
64 | + */ | ||
65 | + @Deployment(name = "wrong_annotation", managed = false) | ||
66 | + public static JavaArchive createWrongAnnotationDeployment() { | ||
67 | + return ShrinkWrap | ||
68 | + .create(JavaArchive.class) | ||
69 | + .addClass(LocaleProducer.class) | ||
70 | + .addPackages(true, "br") | ||
71 | + .addAsResource(new FileAsset(new File("src/test/resources/test/beans.xml")), "beans.xml") | ||
72 | + .addAsManifestResource( | ||
73 | + new File("src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension"), | ||
74 | + "services/javax.enterprise.inject.spi.Extension") | ||
75 | + .addPackages(false, ManagementBootstrapTestCase.class.getPackage()) | ||
76 | + //.addClasses(DummyManagementExtension.class, DummyManagedClassPropertyError.class, ManagedClassStore.class); | ||
77 | + .addClasses(DummyManagementExtension.class, ManagedClassStore.class); | ||
78 | + } | ||
79 | + | ||
80 | + @Test | ||
81 | + public void testWrongAnnotation(@ArquillianResource Deployer deployer) { | ||
82 | + | ||
83 | + try { | ||
84 | + deployer.deploy("wrong_annotation"); | ||
85 | + | ||
86 | + // O processo de deploy precisa falhar, pois temos uma classe anotada com falhas. | ||
87 | + Assert.fail(); | ||
88 | + } catch (Exception e) { | ||
89 | + //SUCCESS | ||
90 | + } finally { | ||
91 | + deployer.undeploy("wrong_annotation"); | ||
92 | + } | ||
93 | + } | ||
94 | + | ||
95 | +} |
impl/core/src/test/java/management/ManagementBootstrapTestCase.java
@@ -39,15 +39,14 @@ package management; | @@ -39,15 +39,14 @@ package management; | ||
39 | import java.io.File; | 39 | import java.io.File; |
40 | import java.util.List; | 40 | import java.util.List; |
41 | 41 | ||
42 | +import javax.enterprise.inject.spi.BeforeShutdown; | ||
43 | + | ||
42 | import management.testclasses.DummyManagedClass; | 44 | import management.testclasses.DummyManagedClass; |
43 | -import management.testclasses.DummyManagedClassPropertyError; | ||
44 | import management.testclasses.DummyManagementExtension; | 45 | import management.testclasses.DummyManagementExtension; |
45 | import management.testclasses.ManagedClassStore; | 46 | import management.testclasses.ManagedClassStore; |
46 | 47 | ||
47 | -import org.jboss.arquillian.container.test.api.Deployer; | ||
48 | import org.jboss.arquillian.container.test.api.Deployment; | 48 | import org.jboss.arquillian.container.test.api.Deployment; |
49 | import org.jboss.arquillian.junit.Arquillian; | 49 | import org.jboss.arquillian.junit.Arquillian; |
50 | -import org.jboss.arquillian.test.api.ArquillianResource; | ||
51 | import org.jboss.shrinkwrap.api.ShrinkWrap; | 50 | import org.jboss.shrinkwrap.api.ShrinkWrap; |
52 | import org.jboss.shrinkwrap.api.asset.FileAsset; | 51 | import org.jboss.shrinkwrap.api.asset.FileAsset; |
53 | import org.jboss.shrinkwrap.api.spec.JavaArchive; | 52 | import org.jboss.shrinkwrap.api.spec.JavaArchive; |
@@ -63,14 +62,11 @@ import br.gov.frameworkdemoiselle.util.Beans; | @@ -63,14 +62,11 @@ import br.gov.frameworkdemoiselle.util.Beans; | ||
63 | @RunWith(Arquillian.class) | 62 | @RunWith(Arquillian.class) |
64 | public class ManagementBootstrapTestCase { | 63 | public class ManagementBootstrapTestCase { |
65 | 64 | ||
66 | - @ArquillianResource | ||
67 | - private Deployer deployer; | ||
68 | - | ||
69 | /** | 65 | /** |
70 | * Deployment to test normal deployment behaviour | 66 | * Deployment to test normal deployment behaviour |
71 | * | 67 | * |
72 | */ | 68 | */ |
73 | - @Deployment(name = "default",managed=false,testable=false) | 69 | + @Deployment |
74 | public static JavaArchive createDeployment() { | 70 | public static JavaArchive createDeployment() { |
75 | return ShrinkWrap | 71 | return ShrinkWrap |
76 | .create(JavaArchive.class) | 72 | .create(JavaArchive.class) |
@@ -85,39 +81,16 @@ public class ManagementBootstrapTestCase { | @@ -85,39 +81,16 @@ public class ManagementBootstrapTestCase { | ||
85 | } | 81 | } |
86 | 82 | ||
87 | /** | 83 | /** |
88 | - * Deployment containing a malformed managed class. Tests using this deployment will | ||
89 | - * check if deployment fails (it has to). | ||
90 | - * | ||
91 | - */ | ||
92 | - @Deployment(name = "wrong_annotation",managed=false,testable=false) | ||
93 | - public static JavaArchive createWrongAnnotationDeployment() { | ||
94 | - return ShrinkWrap | ||
95 | - .create(JavaArchive.class) | ||
96 | - .addClass(LocaleProducer.class) | ||
97 | - .addPackages(true, "br") | ||
98 | - .addAsResource(new FileAsset(new File("src/test/resources/test/beans.xml")), "beans.xml") | ||
99 | - .addAsManifestResource( | ||
100 | - new File("src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension"), | ||
101 | - "services/javax.enterprise.inject.spi.Extension") | ||
102 | - .addPackages(false, ManagementBootstrapTestCase.class.getPackage()) | ||
103 | - .addClasses(DummyManagementExtension.class,DummyManagedClassPropertyError.class,ManagedClassStore.class); | ||
104 | - } | ||
105 | - | ||
106 | - /** | ||
107 | * Test if a a management extension (a library that implements {@link ManagementExtension}) is correctly detected. | 84 | * Test if a a management extension (a library that implements {@link ManagementExtension}) is correctly detected. |
108 | */ | 85 | */ |
109 | @Test | 86 | @Test |
110 | public void testManagementExtensionRegistration() { | 87 | public void testManagementExtensionRegistration() { |
111 | - deployer.deploy("default"); | ||
112 | - | ||
113 | // "store" é application scoped e é usado pelo DummyManagementExtension para | 88 | // "store" é application scoped e é usado pelo DummyManagementExtension para |
114 | // armazenar todos os beans anotados com @ManagementController. Se o bootstrap rodou corretamente, | 89 | // armazenar todos os beans anotados com @ManagementController. Se o bootstrap rodou corretamente, |
115 | // ele chamou DummyManagementExtension.initialize e este store conterá o bean de teste que anotamos. | 90 | // ele chamou DummyManagementExtension.initialize e este store conterá o bean de teste que anotamos. |
116 | ManagedClassStore store = Beans.getReference(ManagedClassStore.class); | 91 | ManagedClassStore store = Beans.getReference(ManagedClassStore.class); |
117 | 92 | ||
118 | Assert.assertEquals(1, store.getManagedTypes().size()); | 93 | Assert.assertEquals(1, store.getManagedTypes().size()); |
119 | - | ||
120 | - deployer.undeploy("default"); | ||
121 | } | 94 | } |
122 | 95 | ||
123 | /** | 96 | /** |
@@ -126,8 +99,6 @@ public class ManagementBootstrapTestCase { | @@ -126,8 +99,6 @@ public class ManagementBootstrapTestCase { | ||
126 | */ | 99 | */ |
127 | @Test | 100 | @Test |
128 | public void testManagementExtensionShutdown() { | 101 | public void testManagementExtensionShutdown() { |
129 | - deployer.deploy("default"); | ||
130 | - | ||
131 | // "store" é application scoped e é usado pelo DummyManagementExtension para | 102 | // "store" é application scoped e é usado pelo DummyManagementExtension para |
132 | // armazenar todos os beans anotados com @ManagementController. Se o bootstrap rodou corretamente, | 103 | // armazenar todos os beans anotados com @ManagementController. Se o bootstrap rodou corretamente, |
133 | // ele chamou DummyManagementExtension.initialize e este store conterá o bean de teste que anotamos. | 104 | // ele chamou DummyManagementExtension.initialize e este store conterá o bean de teste que anotamos. |
@@ -137,25 +108,11 @@ public class ManagementBootstrapTestCase { | @@ -137,25 +108,11 @@ public class ManagementBootstrapTestCase { | ||
137 | //Detecta se a classe anotada foi detectada | 108 | //Detecta se a classe anotada foi detectada |
138 | List<ManagedType> managedTypes = store.getManagedTypes(); | 109 | List<ManagedType> managedTypes = store.getManagedTypes(); |
139 | Assert.assertEquals(1, managedTypes.size()); | 110 | Assert.assertEquals(1, managedTypes.size()); |
140 | - | ||
141 | - deployer.undeploy("default"); | ||
142 | 111 | ||
112 | + Beans.getBeanManager().fireEvent(new BeforeShutdown() {}); | ||
113 | + | ||
143 | //Após o "undeploy", o ciclo de vida precisa ter removido a classe gerenciada da lista. | 114 | //Após o "undeploy", o ciclo de vida precisa ter removido a classe gerenciada da lista. |
144 | Assert.assertEquals(0, managedTypes.size()); | 115 | Assert.assertEquals(0, managedTypes.size()); |
145 | } | 116 | } |
146 | 117 | ||
147 | - @Test | ||
148 | - public void testWrongAnnotation(){ | ||
149 | - | ||
150 | - try{ | ||
151 | - deployer.deploy("wrong_annotation"); | ||
152 | - | ||
153 | - //O processo de deploy precisa falhar, pois temos uma classe anotada com falhas. | ||
154 | - Assert.fail(); | ||
155 | - } | ||
156 | - catch(Exception e){ | ||
157 | - deployer.undeploy("wrong_annotation"); | ||
158 | - } | ||
159 | - } | ||
160 | - | ||
161 | } | 118 | } |
impl/core/src/test/java/management/ValidationTestCase.java
@@ -4,6 +4,8 @@ import java.io.File; | @@ -4,6 +4,8 @@ import java.io.File; | ||
4 | 4 | ||
5 | import management.testclasses.DummyManagedClass; | 5 | import management.testclasses.DummyManagedClass; |
6 | import management.testclasses.DummyManagementExtension; | 6 | import management.testclasses.DummyManagementExtension; |
7 | +import management.testclasses.DummyValidator; | ||
8 | +import management.testclasses.DummyValidatorAnnotation; | ||
7 | import management.testclasses.ManagedClassStore; | 9 | import management.testclasses.ManagedClassStore; |
8 | 10 | ||
9 | import org.jboss.arquillian.container.test.api.Deployment; | 11 | import org.jboss.arquillian.container.test.api.Deployment; |
@@ -21,7 +23,7 @@ import br.gov.frameworkdemoiselle.util.Beans; | @@ -21,7 +23,7 @@ import br.gov.frameworkdemoiselle.util.Beans; | ||
21 | 23 | ||
22 | @RunWith(Arquillian.class) | 24 | @RunWith(Arquillian.class) |
23 | public class ValidationTestCase { | 25 | public class ValidationTestCase { |
24 | - | 26 | + |
25 | @Deployment | 27 | @Deployment |
26 | public static JavaArchive createDeployment() { | 28 | public static JavaArchive createDeployment() { |
27 | return ShrinkWrap | 29 | return ShrinkWrap |
@@ -33,30 +35,61 @@ public class ValidationTestCase { | @@ -33,30 +35,61 @@ public class ValidationTestCase { | ||
33 | new File("src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension"), | 35 | new File("src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension"), |
34 | "services/javax.enterprise.inject.spi.Extension") | 36 | "services/javax.enterprise.inject.spi.Extension") |
35 | .addPackages(false, NotificationTestCase.class.getPackage()) | 37 | .addPackages(false, NotificationTestCase.class.getPackage()) |
36 | - .addClasses(DummyManagementExtension.class,ManagedClassStore.class,DummyManagedClass.class); | 38 | + .addClasses(DummyManagementExtension.class |
39 | + , ManagedClassStore.class | ||
40 | + , DummyManagedClass.class | ||
41 | + , DummyValidator.class | ||
42 | + , DummyValidatorAnnotation.class); | ||
37 | } | 43 | } |
38 | - | 44 | + |
39 | /** | 45 | /** |
40 | - * Test if changing properties of a management controller passes through | ||
41 | - * validation phase. | 46 | + * Test if a management controller accepts a valid value annotated with a core validation (from javax.validation) |
47 | + * when a property is being set by a management client | ||
42 | */ | 48 | */ |
43 | @Test | 49 | @Test |
44 | - public void testManagedClassValidation(){ | ||
45 | - | ||
46 | - //Testa se é possível definir um valor válido para uma propriedade. | 50 | + public void testSetValidValue() { |
51 | + // Testa se é possível definir um valor válido para uma propriedade. | ||
47 | ManagedClassStore store = Beans.getReference(ManagedClassStore.class); | 52 | ManagedClassStore store = Beans.getReference(ManagedClassStore.class); |
48 | store.setProperty(DummyManagedClass.class, "id", new Integer(1)); | 53 | store.setProperty(DummyManagedClass.class, "id", new Integer(1)); |
49 | Assert.assertEquals(new Integer(1), store.getProperty(DummyManagedClass.class, "id")); | 54 | Assert.assertEquals(new Integer(1), store.getProperty(DummyManagedClass.class, "id")); |
50 | - | ||
51 | - //Testa se definir um valor inválido dispara o erro adequado | ||
52 | - try{ | ||
53 | - store.setProperty(DummyManagedClass.class, "id", new Integer(5)); | 55 | + } |
56 | + | ||
57 | + /** | ||
58 | + * Test if a management controller refuses a valid value annotated with a core validation (from javax.validation) | ||
59 | + * when a property is being set by a management client | ||
60 | + */ | ||
61 | + @Test | ||
62 | + public void testSetInvalidValue() { | ||
63 | + // Testa se é possível definir um valor válido para uma propriedade. | ||
64 | + try { | ||
65 | + ManagedClassStore store = Beans.getReference(ManagedClassStore.class); | ||
66 | + store.setProperty(DummyManagedClass.class, "id", (Integer) null); | ||
67 | + | ||
54 | Assert.fail(); | 68 | Assert.fail(); |
69 | + } catch (DemoiselleException de) { | ||
70 | + // Classes de gerenciamento disparam Demoiselle Exception quando uma validação falha | ||
55 | } | 71 | } |
56 | - catch(DemoiselleException e){ | ||
57 | - //SUCCESS | 72 | + } |
73 | + | ||
74 | + /** | ||
75 | + * Tests if custom validators (outside the javax.validation package) run as normal | ||
76 | + */ | ||
77 | + @Test | ||
78 | + public void testCustomValidation() { | ||
79 | + | ||
80 | + try { | ||
81 | + ManagedClassStore store = Beans.getReference(ManagedClassStore.class); | ||
82 | + | ||
83 | + // Atributo "gender" deve aceitar apenas "M" ou "F", tanto maiúsculo quanto minúsculo. A anotação | ||
84 | + // customizada DummyValidatorAnnotation é uma simples validação que testa se uma string passada está | ||
85 | + // na lista de strings aceitas. | ||
86 | + store.setProperty(DummyManagedClass.class, "gender", "J"); | ||
87 | + | ||
88 | + Assert.fail(); | ||
89 | + } catch (DemoiselleException e) { | ||
90 | + Assert.assertTrue( e.getMessage().contains("Test Message") ); | ||
58 | } | 91 | } |
59 | - | 92 | + |
60 | } | 93 | } |
61 | 94 | ||
62 | } | 95 | } |
impl/core/src/test/java/management/testclasses/DummyManagedClass.java
@@ -38,11 +38,11 @@ package management.testclasses; | @@ -38,11 +38,11 @@ package management.testclasses; | ||
38 | 38 | ||
39 | import java.util.UUID; | 39 | import java.util.UUID; |
40 | 40 | ||
41 | +import javax.validation.constraints.NotNull; | ||
42 | + | ||
41 | import br.gov.frameworkdemoiselle.annotation.ManagedOperation; | 43 | import br.gov.frameworkdemoiselle.annotation.ManagedOperation; |
42 | import br.gov.frameworkdemoiselle.annotation.ManagedProperty; | 44 | import br.gov.frameworkdemoiselle.annotation.ManagedProperty; |
43 | import br.gov.frameworkdemoiselle.stereotype.ManagementController; | 45 | import br.gov.frameworkdemoiselle.stereotype.ManagementController; |
44 | -import br.gov.frameworkdemoiselle.validation.annotation.AllowedValues; | ||
45 | -import br.gov.frameworkdemoiselle.validation.annotation.AllowedValues.ValueType; | ||
46 | 46 | ||
47 | @ManagementController | 47 | @ManagementController |
48 | public class DummyManagedClass { | 48 | public class DummyManagedClass { |
@@ -51,10 +51,14 @@ public class DummyManagedClass { | @@ -51,10 +51,14 @@ public class DummyManagedClass { | ||
51 | private String name; | 51 | private String name; |
52 | 52 | ||
53 | @ManagedProperty | 53 | @ManagedProperty |
54 | - @AllowedValues(allows={"1","2","3","4"},valueType=ValueType.INTEGER) | 54 | + @NotNull |
55 | private Integer id; | 55 | private Integer id; |
56 | 56 | ||
57 | @ManagedProperty | 57 | @ManagedProperty |
58 | + @DummyValidatorAnnotation(allows={"f","m","F","M"}) | ||
59 | + private String gender; | ||
60 | + | ||
61 | + @ManagedProperty | ||
58 | private Integer firstFactor , secondFactor; | 62 | private Integer firstFactor , secondFactor; |
59 | 63 | ||
60 | @ManagedProperty | 64 | @ManagedProperty |
@@ -153,24 +157,8 @@ public class DummyManagedClass { | @@ -153,24 +157,8 @@ public class DummyManagedClass { | ||
153 | } | 157 | } |
154 | 158 | ||
155 | @ManagedOperation | 159 | @ManagedOperation |
156 | - public Integer calculateFactorsNonSynchronized(Integer firstFactor , Integer secondFactor){ | ||
157 | - setFirstFactor(firstFactor); | ||
158 | - setSecondFactor(secondFactor); | ||
159 | - | ||
160 | - try { | ||
161 | - int temp = firstFactor + secondFactor; | ||
162 | - Thread.sleep( (long)(Math.random() * 100)); | ||
163 | - | ||
164 | - temp = temp + firstFactor; | ||
165 | - Thread.sleep( (long)(Math.random() * 100)); | ||
166 | - | ||
167 | - temp = temp + secondFactor; | ||
168 | - Thread.sleep( (long)(Math.random() * 100)); | ||
169 | - | ||
170 | - return temp; | ||
171 | - } catch (InterruptedException e) { | ||
172 | - throw new RuntimeException(e); | ||
173 | - } | 160 | + public Integer sumFactors(){ |
161 | + return (firstFactor!=null ? firstFactor.intValue() : 0) + (secondFactor!=null ? secondFactor.intValue() : 0); | ||
174 | } | 162 | } |
175 | 163 | ||
176 | @ManagedOperation | 164 | @ManagedOperation |
@@ -197,6 +185,18 @@ public class DummyManagedClass { | @@ -197,6 +185,18 @@ public class DummyManagedClass { | ||
197 | public void nonOperationAnnotatedMethod(){ | 185 | public void nonOperationAnnotatedMethod(){ |
198 | System.out.println("Test"); | 186 | System.out.println("Test"); |
199 | } | 187 | } |
188 | + | ||
189 | + | ||
190 | + public String getGender() { | ||
191 | + return gender; | ||
192 | + } | ||
193 | + | ||
194 | + | ||
195 | + public void setGender(String gender) { | ||
196 | + this.gender = gender; | ||
197 | + } | ||
198 | + | ||
199 | + | ||
200 | 200 | ||
201 | 201 | ||
202 | } | 202 | } |
impl/core/src/test/java/management/testclasses/DummyValidator.java
0 → 100644
@@ -0,0 +1,64 @@ | @@ -0,0 +1,64 @@ | ||
1 | +/* | ||
2 | + * Demoiselle Framework | ||
3 | + * Copyright (C) 2010 SERPRO | ||
4 | + * ---------------------------------------------------------------------------- | ||
5 | + * This file is part of Demoiselle Framework. | ||
6 | + * | ||
7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
9 | + * as published by the Free Software Foundation. | ||
10 | + * | ||
11 | + * This program is distributed in the hope that it will be useful, | ||
12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | + * GNU General Public License for more details. | ||
15 | + * | ||
16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
20 | + * ---------------------------------------------------------------------------- | ||
21 | + * Este arquivo é parte do Framework Demoiselle. | ||
22 | + * | ||
23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
25 | + * do Software Livre (FSF). | ||
26 | + * | ||
27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
30 | + * para maiores detalhes. | ||
31 | + * | ||
32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
36 | + */ | ||
37 | +package management.testclasses; | ||
38 | + | ||
39 | +import javax.validation.ConstraintValidator; | ||
40 | +import javax.validation.ConstraintValidatorContext; | ||
41 | + | ||
42 | + | ||
43 | +public class DummyValidator implements ConstraintValidator<DummyValidatorAnnotation, String> { | ||
44 | + | ||
45 | + String[] allows; | ||
46 | + | ||
47 | + @Override | ||
48 | + public void initialize(DummyValidatorAnnotation constraintAnnotation) { | ||
49 | + allows = constraintAnnotation.allows(); | ||
50 | + } | ||
51 | + | ||
52 | + @Override | ||
53 | + public boolean isValid(String value, ConstraintValidatorContext context) { | ||
54 | + | ||
55 | + for (String allow : allows){ | ||
56 | + if (allow.equals(value)){ | ||
57 | + return true; | ||
58 | + } | ||
59 | + } | ||
60 | + | ||
61 | + return false; | ||
62 | + } | ||
63 | + | ||
64 | +} |
impl/core/src/test/java/management/testclasses/DummyValidatorAnnotation.java
0 → 100644
@@ -0,0 +1,61 @@ | @@ -0,0 +1,61 @@ | ||
1 | +/* | ||
2 | + * Demoiselle Framework | ||
3 | + * Copyright (C) 2010 SERPRO | ||
4 | + * ---------------------------------------------------------------------------- | ||
5 | + * This file is part of Demoiselle Framework. | ||
6 | + * | ||
7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
9 | + * as published by the Free Software Foundation. | ||
10 | + * | ||
11 | + * This program is distributed in the hope that it will be useful, | ||
12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | + * GNU General Public License for more details. | ||
15 | + * | ||
16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
20 | + * ---------------------------------------------------------------------------- | ||
21 | + * Este arquivo é parte do Framework Demoiselle. | ||
22 | + * | ||
23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
25 | + * do Software Livre (FSF). | ||
26 | + * | ||
27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
30 | + * para maiores detalhes. | ||
31 | + * | ||
32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
36 | + */ | ||
37 | +package management.testclasses; | ||
38 | + | ||
39 | +import static java.lang.annotation.ElementType.FIELD; | ||
40 | +import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
41 | + | ||
42 | +import java.lang.annotation.Retention; | ||
43 | +import java.lang.annotation.Target; | ||
44 | + | ||
45 | +import javax.validation.Constraint; | ||
46 | +import javax.validation.Payload; | ||
47 | + | ||
48 | +@Target({ FIELD}) | ||
49 | +@Retention(RUNTIME) | ||
50 | +@Constraint(validatedBy = DummyValidator.class) | ||
51 | +public @interface DummyValidatorAnnotation { | ||
52 | + | ||
53 | + String[] allows(); | ||
54 | + | ||
55 | + String message() default "Test Message"; | ||
56 | + | ||
57 | + Class<?>[] groups() default {}; | ||
58 | + | ||
59 | + Class<? extends Payload>[] payload() default {}; | ||
60 | + | ||
61 | +} |