@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "c") public void testGetCrossParameterDescriptorForMethod() { MethodDescriptor descriptor = Executables.crossParameterConstrainedMethod(); assertNotNull( descriptor.getCrossParameterDescriptor(), "Cross-parameter descriptor should not be null" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "c") public void testGetCrossParameterDescriptorForMethodWithoutCrossParameterConstraints() { MethodDescriptor descriptor = Executables.returnValueConstrainedMethod(); assertNotNull( descriptor.getCrossParameterDescriptor(), "Cross-parameter descriptor should not be null" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_ELEMENTDESCRIPTOR, id = "c") public void testHasConstraintsForMethod() { CrossParameterDescriptor descriptor = Executables.crossParameterConstrainedMethod() .getCrossParameterDescriptor(); assertTrue( descriptor.hasConstraints(), "Should have constraints" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_ELEMENTDESCRIPTOR, id = "b") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "c") public void testGetConstraintsForMethodWithoutCrossParameterConstraints() { CrossParameterDescriptor descriptor = Executables.returnValueConstrainedMethod() .getCrossParameterDescriptor(); Set<ConstraintDescriptor<?>> constraints = descriptor.getConstraintDescriptors(); assertEquals( constraints.size(), 0, "Should have no constraints" ); }
@SpecAssertion(section = Sections.CONSTRAINTMETADATA_ELEMENTDESCRIPTOR, id = "c") public void testHasConstraintsForUnconstrainedMethod() { CrossParameterDescriptor descriptor = Executables.unconstrainedMethod() .getCrossParameterDescriptor(); assertFalse( descriptor.hasConstraints(), "Should have no constraints" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_ELEMENTDESCRIPTOR, id = "d") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "c") public void testFindConstraintsForMethod() { CrossParameterDescriptor descriptor = Executables.crossParameterConstrainedMethod() .getCrossParameterDescriptor(); Set<ConstraintDescriptor<?>> constraints = descriptor.findConstraints().getConstraintDescriptors(); assertEquals( constraints.size(), 1, "Should have constraints" ); ConstraintDescriptor<?> constraint = constraints.iterator().next(); assertEquals( constraint.getAnnotation().annotationType(), MyCrossParameterConstraint.class, "Wrong constraint type" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_ELEMENTDESCRIPTOR, id = "a") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_CROSSPARAMETERDESCRIPTOR, id = "a") public void testGetElementClass() { CrossParameterDescriptor descriptor = Executables.crossParameterConstrainedMethod() .getCrossParameterDescriptor(); assertEquals( descriptor.getElementClass(), Object[].class ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_CONSTRAINTDESCRIPTOR, id = "a") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_ELEMENTDESCRIPTOR, id = "b") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "c") public void testGetConstraintsForMethod() { CrossParameterDescriptor descriptor = Executables.crossParameterConstrainedMethod() .getCrossParameterDescriptor(); Set<ConstraintDescriptor<?>> constraints = descriptor.getConstraintDescriptors(); assertEquals( constraints.size(), 1, "Should have constraints" ); ConstraintDescriptor<?> constraint = constraints.iterator().next(); assertEquals( constraint.getAnnotation().annotationType(), MyCrossParameterConstraint.class, "Wrong constraint type" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_ELEMENTDESCRIPTOR, id = "d") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "c") public void testFindConstraintsForMethodWithoutCrossParameterConstraints() { CrossParameterDescriptor descriptor = Executables.returnValueConstrainedMethod() .getCrossParameterDescriptor(); Set<ConstraintDescriptor<?>> constraints = descriptor.findConstraints().getConstraintDescriptors(); assertEquals( constraints.size(), 0, "Should have no constraints" ); }
@Test @SpecAssertions({ @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "c"), @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "g"), @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "k") }) public void testMethodCrossParameterConstraint() throws Exception { MethodDescriptor descriptor = TestUtil.getMethodDescriptor( CustomerRepository.class, "notifyCustomer", Customer.class, String.class ); assertNotNull( descriptor, "the specified method should be configured in xml" ); CrossParameterDescriptor crossParameterDescriptor = descriptor.getCrossParameterDescriptor(); assertTrue( crossParameterDescriptor.hasConstraints() ); Set<ConstraintDescriptor<?>> constraintDescriptors = crossParameterDescriptor.getConstraintDescriptors(); assertTrue( constraintDescriptors.size() == 1 ); ConstraintDescriptor<?> constraintDescriptor = constraintDescriptors.iterator().next(); assertEquals( constraintDescriptor.getAnnotation().annotationType(), CrossRepositoryConstraint.class, "Unexpected constraint type" ); }
@Test @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "l") public void testIgnoreAnnotationsOnReturnValueParameterAndCrossParameter() { MethodDescriptor descriptor = TestUtil.getMethodDescriptor( IgnoreAnnotations.class, "foobar", String.class, String.class ); CrossParameterDescriptor crossParameterDescriptor = descriptor.getCrossParameterDescriptor(); assertFalse( crossParameterDescriptor.hasConstraints(), "Cross parameter constraints should be ignored." ); ReturnValueDescriptor returnValueDescriptor = descriptor.getReturnValueDescriptor(); assertFalse( returnValueDescriptor.hasConstraints(), "Return value constraints should be ignored." ); ParameterDescriptor parameterDescriptor = descriptor.getParameterDescriptors().get( 0 ); assertFalse( parameterDescriptor.hasConstraints(), "First parameter constraints should be ignored." ); parameterDescriptor = descriptor.getParameterDescriptors().get( 1 ); assertTrue( parameterDescriptor.hasConstraints(), "Second parameter constraints should be applied." ); } }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_ELEMENTDESCRIPTOR, id = "g") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "c") public void testFindConstraintsForMethodDefinedOnSuperTypeLookingAt() { CrossParameterDescriptor descriptor = Executables.crossParameterConstrainedMethodFromSuperType() .getCrossParameterDescriptor(); Set<ConstraintDescriptor<?>> constraints = descriptor.findConstraints() .lookingAt( Scope.LOCAL_ELEMENT ) .getConstraintDescriptors(); assertEquals( constraints.size(), 0, "Should have no local constraints" ); constraints = descriptor.findConstraints() .lookingAt( Scope.HIERARCHY ) .getConstraintDescriptors(); assertEquals( constraints.size(), 1, "Should have constraints" ); ConstraintDescriptor<?> constraint = constraints.iterator().next(); assertEquals( constraint.getAnnotation().annotationType(), MyCrossParameterConstraint.class, "Wrong constraint type" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_ELEMENTDESCRIPTOR, id = "g") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "c") public void testFindConstraintsForMethodLookingAt() { CrossParameterDescriptor descriptor = Executables.methodOverridingCrossParameterConstrainedMethod() .getCrossParameterDescriptor(); Set<ConstraintDescriptor<?>> constraints = descriptor.findConstraints() .lookingAt( Scope.LOCAL_ELEMENT ) .getConstraintDescriptors(); assertEquals( constraints.size(), 0, "Should have no local constraints" ); constraints = descriptor.findConstraints() .lookingAt( Scope.HIERARCHY ) .getConstraintDescriptors(); assertEquals( constraints.size(), 1, "Should have constraints" ); ConstraintDescriptor<?> constraint = constraints.iterator().next(); assertEquals( constraint.getAnnotation().annotationType(), MyCrossParameterConstraint.class, "Wrong constraint type" ); }
@Test @SpecAssertions({ @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "l"), @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "m"), @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "n"), @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "p") }) public void testIgnoreAnnotationsOnMethodLevel() { MethodDescriptor descriptor = TestUtil.getMethodDescriptor( IgnoreAnnotations.class, "foobar", String.class, String.class ); CrossParameterDescriptor crossParameterDescriptor = descriptor.getCrossParameterDescriptor(); assertFalse( crossParameterDescriptor.hasConstraints(), "Cross parameter constraints should be ignored." ); ReturnValueDescriptor returnValueDescriptor = descriptor.getReturnValueDescriptor(); assertFalse( returnValueDescriptor.hasConstraints(), "Return value constraints should be ignored." ); assertTrue( returnValueDescriptor.getGroupConversions().isEmpty(), "Group conversions should be ignored" ); ParameterDescriptor parameterDescriptor = descriptor.getParameterDescriptors().get( 0 ); assertFalse( parameterDescriptor.hasConstraints(), "First parameter constraints should be ignored." ); assertTrue( parameterDescriptor.getGroupConversions().isEmpty(), "Group conversions should be ignored" ); parameterDescriptor = descriptor.getParameterDescriptors().get( 1 ); assertTrue( parameterDescriptor.hasConstraints(), "Second parameter constraints should be applied." ); assertEquals( parameterDescriptor.getGroupConversions().size(), 2, "All group conversions should be combined" ); } }