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 | 99 | <artifactId>cobertura-maven-plugin</artifactId> |
| 100 | 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 | 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 | 116 | </build> |
| 156 | 117 | |
| 157 | 118 | <dependencies> |
| ... | ... | @@ -202,50 +163,28 @@ |
| 202 | 163 | <artifactId>hibernate-validator</artifactId> |
| 203 | 164 | <scope>test</scope> |
| 204 | 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 | 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 | 169 | <scope>test</scope> |
| 227 | 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 | 182 | <dependency> |
| 238 | 183 | <groupId>org.slf4j</groupId> |
| 239 | 184 | <artifactId>slf4j-log4j12</artifactId> |
| 240 | 185 | <scope>test</scope> |
| 241 | 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 | 188 | </dependencies> |
| 250 | 189 | |
| 251 | 190 | <repositories> |
| ... | ... | @@ -274,9 +213,7 @@ |
| 274 | 213 | </repositories> |
| 275 | 214 | |
| 276 | 215 | <properties> |
| 277 | - <!-- | |
| 278 | - <jacoco.version>0.6.0.201210061924</jacoco.version> | |
| 279 | - --> | |
| 216 | + <!-- <jacoco.version>0.6.0.201210061924</jacoco.version> --> | |
| 280 | 217 | <demoiselle.validation.version>2.4.0-BETA2-SNAPSHOT</demoiselle.validation.version> |
| 281 | 218 | </properties> |
| 282 | 219 | </project> | ... | ... |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/management/Management.java
| ... | ... | @@ -241,11 +241,22 @@ public class Management { |
| 241 | 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 | 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 | 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 | 114 | management-debug-registering-managed-type=Registrando classe gerenciada [{0}] |
| 115 | 115 | management-debug-processing-management-extension=Processando extens\u00E3o de gerenciamento [{0}] |
| 116 | 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 @@ |
| 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 | 39 | import java.io.File; |
| 40 | 40 | import java.util.List; |
| 41 | 41 | |
| 42 | +import javax.enterprise.inject.spi.BeforeShutdown; | |
| 43 | + | |
| 42 | 44 | import management.testclasses.DummyManagedClass; |
| 43 | -import management.testclasses.DummyManagedClassPropertyError; | |
| 44 | 45 | import management.testclasses.DummyManagementExtension; |
| 45 | 46 | import management.testclasses.ManagedClassStore; |
| 46 | 47 | |
| 47 | -import org.jboss.arquillian.container.test.api.Deployer; | |
| 48 | 48 | import org.jboss.arquillian.container.test.api.Deployment; |
| 49 | 49 | import org.jboss.arquillian.junit.Arquillian; |
| 50 | -import org.jboss.arquillian.test.api.ArquillianResource; | |
| 51 | 50 | import org.jboss.shrinkwrap.api.ShrinkWrap; |
| 52 | 51 | import org.jboss.shrinkwrap.api.asset.FileAsset; |
| 53 | 52 | import org.jboss.shrinkwrap.api.spec.JavaArchive; |
| ... | ... | @@ -63,14 +62,11 @@ import br.gov.frameworkdemoiselle.util.Beans; |
| 63 | 62 | @RunWith(Arquillian.class) |
| 64 | 63 | public class ManagementBootstrapTestCase { |
| 65 | 64 | |
| 66 | - @ArquillianResource | |
| 67 | - private Deployer deployer; | |
| 68 | - | |
| 69 | 65 | /** |
| 70 | 66 | * Deployment to test normal deployment behaviour |
| 71 | 67 | * |
| 72 | 68 | */ |
| 73 | - @Deployment(name = "default",managed=false,testable=false) | |
| 69 | + @Deployment | |
| 74 | 70 | public static JavaArchive createDeployment() { |
| 75 | 71 | return ShrinkWrap |
| 76 | 72 | .create(JavaArchive.class) |
| ... | ... | @@ -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 | 84 | * Test if a a management extension (a library that implements {@link ManagementExtension}) is correctly detected. |
| 108 | 85 | */ |
| 109 | 86 | @Test |
| 110 | 87 | public void testManagementExtensionRegistration() { |
| 111 | - deployer.deploy("default"); | |
| 112 | - | |
| 113 | 88 | // "store" é application scoped e é usado pelo DummyManagementExtension para |
| 114 | 89 | // armazenar todos os beans anotados com @ManagementController. Se o bootstrap rodou corretamente, |
| 115 | 90 | // ele chamou DummyManagementExtension.initialize e este store conterá o bean de teste que anotamos. |
| 116 | 91 | ManagedClassStore store = Beans.getReference(ManagedClassStore.class); |
| 117 | 92 | |
| 118 | 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 | 99 | */ |
| 127 | 100 | @Test |
| 128 | 101 | public void testManagementExtensionShutdown() { |
| 129 | - deployer.deploy("default"); | |
| 130 | - | |
| 131 | 102 | // "store" é application scoped e é usado pelo DummyManagementExtension para |
| 132 | 103 | // armazenar todos os beans anotados com @ManagementController. Se o bootstrap rodou corretamente, |
| 133 | 104 | // ele chamou DummyManagementExtension.initialize e este store conterá o bean de teste que anotamos. |
| ... | ... | @@ -137,25 +108,11 @@ public class ManagementBootstrapTestCase { |
| 137 | 108 | //Detecta se a classe anotada foi detectada |
| 138 | 109 | List<ManagedType> managedTypes = store.getManagedTypes(); |
| 139 | 110 | Assert.assertEquals(1, managedTypes.size()); |
| 140 | - | |
| 141 | - deployer.undeploy("default"); | |
| 142 | 111 | |
| 112 | + Beans.getBeanManager().fireEvent(new BeforeShutdown() {}); | |
| 113 | + | |
| 143 | 114 | //Após o "undeploy", o ciclo de vida precisa ter removido a classe gerenciada da lista. |
| 144 | 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 | 4 | |
| 5 | 5 | import management.testclasses.DummyManagedClass; |
| 6 | 6 | import management.testclasses.DummyManagementExtension; |
| 7 | +import management.testclasses.DummyValidator; | |
| 8 | +import management.testclasses.DummyValidatorAnnotation; | |
| 7 | 9 | import management.testclasses.ManagedClassStore; |
| 8 | 10 | |
| 9 | 11 | import org.jboss.arquillian.container.test.api.Deployment; |
| ... | ... | @@ -21,7 +23,7 @@ import br.gov.frameworkdemoiselle.util.Beans; |
| 21 | 23 | |
| 22 | 24 | @RunWith(Arquillian.class) |
| 23 | 25 | public class ValidationTestCase { |
| 24 | - | |
| 26 | + | |
| 25 | 27 | @Deployment |
| 26 | 28 | public static JavaArchive createDeployment() { |
| 27 | 29 | return ShrinkWrap |
| ... | ... | @@ -33,30 +35,61 @@ public class ValidationTestCase { |
| 33 | 35 | new File("src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension"), |
| 34 | 36 | "services/javax.enterprise.inject.spi.Extension") |
| 35 | 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 | 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 | 52 | ManagedClassStore store = Beans.getReference(ManagedClassStore.class); |
| 48 | 53 | store.setProperty(DummyManagedClass.class, "id", new Integer(1)); |
| 49 | 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 | 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 | 38 | |
| 39 | 39 | import java.util.UUID; |
| 40 | 40 | |
| 41 | +import javax.validation.constraints.NotNull; | |
| 42 | + | |
| 41 | 43 | import br.gov.frameworkdemoiselle.annotation.ManagedOperation; |
| 42 | 44 | import br.gov.frameworkdemoiselle.annotation.ManagedProperty; |
| 43 | 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 | 47 | @ManagementController |
| 48 | 48 | public class DummyManagedClass { |
| ... | ... | @@ -51,10 +51,14 @@ public class DummyManagedClass { |
| 51 | 51 | private String name; |
| 52 | 52 | |
| 53 | 53 | @ManagedProperty |
| 54 | - @AllowedValues(allows={"1","2","3","4"},valueType=ValueType.INTEGER) | |
| 54 | + @NotNull | |
| 55 | 55 | private Integer id; |
| 56 | 56 | |
| 57 | 57 | @ManagedProperty |
| 58 | + @DummyValidatorAnnotation(allows={"f","m","F","M"}) | |
| 59 | + private String gender; | |
| 60 | + | |
| 61 | + @ManagedProperty | |
| 58 | 62 | private Integer firstFactor , secondFactor; |
| 59 | 63 | |
| 60 | 64 | @ManagedProperty |
| ... | ... | @@ -153,24 +157,8 @@ public class DummyManagedClass { |
| 153 | 157 | } |
| 154 | 158 | |
| 155 | 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 | 164 | @ManagedOperation |
| ... | ... | @@ -197,6 +185,18 @@ public class DummyManagedClass { |
| 197 | 185 | public void nonOperationAnnotatedMethod(){ |
| 198 | 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 @@ |
| 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 @@ |
| 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 | +} | ... | ... |