Skip to content

Commit

Permalink
HV-618 Adding test case
Browse files Browse the repository at this point in the history
  • Loading branch information
hferentschik committed Dec 13, 2012
1 parent f2f8269 commit 5a568ae
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 9 deletions.
@@ -0,0 +1,29 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2012, Red Hat, Inc. and/or its affiliates, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.hibernate.validator.test.internal.engine.methodlevel.generic;

/**
* @author Hardy Ferentschik
*/
public abstract class AbstractSimpleService<C> implements SimpleService<C> {
@Override
public void configure(C config) {
if ( config == null ) {
throw new IllegalStateException( "Config cannot be null!" );
}
}
}
@@ -0,0 +1,54 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2012, Red Hat, Inc. and/or its affiliates, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.hibernate.validator.test.internal.engine.methodlevel.generic;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;

import org.testng.annotations.Test;

import org.hibernate.validator.testutil.TestForIssue;
import org.hibernate.validator.testutil.ValidatorUtil;

import static org.hibernate.validator.testutil.ValidatorUtil.getValidatingProxy;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.fail;

/**
* @author Hardy Ferentschik
*/
public class MethodValidationInHierarchyTest {
@Test
@TestForIssue(jiraKey = "HV-618")
public void testParameterConstraintAtGenericMethodFromBaseClassAreEvaluated() {
Class<?>[] interfaces = new Class<?>[] { SimpleService.class };
SimpleService<?> service = getValidatingProxy(
new SimpleServiceImpl(), interfaces, ValidatorUtil.getValidator()
);

try {
service.configure( null );
fail( "Expected ConstraintViolationException wasn't thrown." );
}
catch ( ConstraintViolationException e ) {
assertEquals( e.getConstraintViolations().size(), 1 );

ConstraintViolation<?> constraintViolation = e.getConstraintViolations().iterator().next();
assertEquals( constraintViolation.getMessage(), "may not be null" );
}
}
}
@@ -0,0 +1,26 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2012, Red Hat, Inc. and/or its affiliates, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.hibernate.validator.test.internal.engine.methodlevel.generic;

import javax.validation.constraints.NotNull;

/**
* @author Hardy Ferentschik
*/
public interface SimpleService<C> {
void configure(@NotNull C config);
}
@@ -0,0 +1,23 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2012, Red Hat, Inc. and/or its affiliates, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.hibernate.validator.test.internal.engine.methodlevel.generic;

/**
* @author Hardy Ferentschik
*/
public class SimpleServiceImpl extends AbstractSimpleService<String> {
}
Expand Up @@ -180,6 +180,19 @@ public static ParameterDescriptor getParameterDescriptor(Class<?> clazz, String
return methodDescriptor.getParameterDescriptors().get( parameterIndex );
}

@SuppressWarnings("unchecked")
public static <T, I extends T> T getValidatingProxy(I implementor, Class<?>[] interfaces, Validator methodValidator, Class<?>... validationGroups) {
InvocationHandler handler = new ValidationInvocationHandler(
implementor, methodValidator, validationGroups
);

return (T) Proxy.newProxyInstance(
implementor.getClass().getClassLoader(),
interfaces,
handler
);
}

/**
* Creates a proxy for the given object which performs a validation of the given object's method constraints upon method invocation.
*
Expand All @@ -193,14 +206,6 @@ public static ParameterDescriptor getParameterDescriptor(Class<?> clazz, String
*/
@SuppressWarnings("unchecked")
public static <T, I extends T> T getValidatingProxy(I implementor, Validator methodValidator, Class<?>... validationGroups) {
InvocationHandler handler = new ValidationInvocationHandler(
implementor, methodValidator, validationGroups
);

return (T) Proxy.newProxyInstance(
implementor.getClass().getClassLoader(),
implementor.getClass().getInterfaces(),
handler
);
return getValidatingProxy( implementor, implementor.getClass().getInterfaces(), methodValidator, validationGroups );
}
}

0 comments on commit 5a568ae

Please sign in to comment.