@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "b") public void testGetParameterDescriptorsForMethod() { MethodDescriptor descriptor = Executables.parameterConstrainedMethod(); assertEquals( descriptor.getParameterDescriptors().size(), 2, "Size of parameter descriptor list doesn't match method parameter count" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "b") public void testGetParameterDescriptorsForParameterlessMethod() { MethodDescriptor descriptor = Executables.returnValueConstrainedMethod(); assertEquals( descriptor.getParameterDescriptors().size(), 0, "Size of parameter descriptor list doesn't match method parameter count" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_CASCADABLEDESCRIPTOR, id = "b") public void testGetGroupConversionsReturnsEmptySetForMethodParameter() { ParameterDescriptor parameterDescriptor = Executables.parameterConstrainedMethod() .getParameterDescriptors() .get( 0 ); Set<GroupConversionDescriptor> groupConversions = parameterDescriptor.getGroupConversions(); assertNotNull( groupConversions ); assertTrue( groupConversions.isEmpty() ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "h") public void testMethodDescriptorCanBeRetrievedAlsoIfValidateExecutableIsSetToNONEOnTypeLevel() { MethodDescriptor descriptor = getMethodDescriptor( OrderLine.class, "setItem", String.class ); assertNotNull( descriptor ); assertEquals( descriptor.getName(), "setItem" ); assertEquals( descriptor.getParameterDescriptors().get( 0 ).getConstraintDescriptors().size(), 1 ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_CASCADABLEDESCRIPTOR, id = "a") public void testIsCascadedForMethod() { List<ParameterDescriptor> parameters = Executables.parameterConstrainedMethod() .getParameterDescriptors(); assertFalse( parameters.get( 0 ).isCascaded(), "Should not be cascaded" ); parameters = Executables.cascadedParameterMethod().getParameterDescriptors(); assertTrue( parameters.get( 0 ).isCascaded(), "Should be cascaded" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_EXECUTABLEDESCRIPTOR, id = "h") public void testMethodDescriptorCanBeRetrievedAlsoIfValidateExecutableIsSetToNONEOnMethodLevel() { MethodDescriptor descriptor = getMethodDescriptor( Item.class, "setName", String.class ); assertNotNull( descriptor ); assertEquals( descriptor.getName(), "setName" ); assertEquals( descriptor.getParameterDescriptors().get( 0 ).getConstraintDescriptors().size(), 1 ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_PARAMETERDESCRIPTOR, id = "b") public void testGetNameForMethod() { List<ParameterDescriptor> parameters = Executables.parameterConstrainedMethod() .getParameterDescriptors(); assertEquals( parameters.get( 0 ).getName(), "firstName", "Wrong parameter name" ); assertEquals( parameters.get( 1 ).getName(), "lastName", "Wrong parameter name" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_PARAMETERDESCRIPTOR, id = "a") public void testGetIndexForMethod() { List<ParameterDescriptor> parameters = Executables.parameterConstrainedMethod() .getParameterDescriptors(); assertEquals( parameters.get( 0 ).getIndex(), 0, "Wrong parameter index" ); assertEquals( parameters.get( 1 ).getIndex(), 1, "Wrong parameter index" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_ELEMENTDESCRIPTOR, id = "a") public void testGetElementClassForMethod() { List<ParameterDescriptor> parameters = Executables.parameterConstrainedMethod() .getParameterDescriptors(); assertEquals( parameters.get( 0 ).getElementClass(), String.class, "Wrong parameter class" ); }
@Test @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "o") public void testValidaAnnotationIsApplied() throws Exception { MethodDescriptor descriptor = TestUtil.getMethodDescriptor( Cascaded.class, "cascade", String.class ); assertNotNull( descriptor, "the specified method should be configured in xml" ); ReturnValueDescriptor returnValueDescriptor = descriptor.getReturnValueDescriptor(); assertTrue( returnValueDescriptor.isCascaded(), "Cascaded validation should be applied" ); ParameterDescriptor parameterDescriptor = descriptor.getParameterDescriptors().get( 0 ); assertTrue( parameterDescriptor.isCascaded(), "Cascaded validation should be applied" ); } }
@Test @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "i") public void testCascadingOnReturnValueAndParameter() throws Exception { MethodDescriptor descriptor = TestUtil.getMethodDescriptor( CustomerRepository.class, "findByExample", Customer.class ); assertNotNull( descriptor, "the specified method should be configured in xml" ); ReturnValueDescriptor returnValueDescriptor = descriptor.getReturnValueDescriptor(); assertTrue( returnValueDescriptor.isCascaded(), "<valid/> is used to configure cascading" ); List<ParameterDescriptor> parameterDescriptors = descriptor.getParameterDescriptors(); assertTrue( parameterDescriptors.size() == 1 ); ParameterDescriptor parameterDescriptor = parameterDescriptors.get( 0 ); assertTrue( parameterDescriptor.isCascaded(), "<valid/> is used to configure cascading" ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTDECLARATIONVALIDATIONPROCESS_GROUPSEQUENCE_GROUPCONVERSION, id = "d") public void testConvertGroupDefaultFromForMethodParameter() { ParameterDescriptor descriptor = getMethodDescriptor( BeanService.class, "addBean", Bean.class ) .getParameterDescriptors().iterator().next(); Set<GroupConversionDescriptor> groupConversionDescriptors = descriptor.getGroupConversions(); GroupConversionDescriptor groupConversionDescriptor = getGroupConversionDescriptorByFrom( groupConversionDescriptors, Default.class ); assertEquals( groupConversionDescriptor.getTo(), ComplexChecks.class ); }
@Test @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "o") public void testValidAnnotationIsIgnored() throws Exception { MethodDescriptor descriptor = TestUtil.getMethodDescriptor( org.hibernate.beanvalidation.tck.tests.xmlconfiguration.methodvalidation.Cascaded.class, "cascade", String.class ); assertNotNull( descriptor, "the specified method should be configured in xml" ); ReturnValueDescriptor returnValueDescriptor = descriptor.getReturnValueDescriptor(); assertFalse( returnValueDescriptor.isCascaded(), "Cascaded validation should be ignored" ); ParameterDescriptor parameterDescriptor = descriptor.getParameterDescriptors().get( 0 ); assertFalse( parameterDescriptor.isCascaded(), "Cascaded validation should be ignored" ); } }
@Test @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_GROUPCONVERSIONS, id = "a") @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_GROUPCONVERSIONS, id = "b") public void testGroupConversionsAppliedOnMethod() throws Exception { MethodDescriptor methodDescriptor = TestUtil.getMethodDescriptor( Groups.class, "convert", String.class ); assertNotNull( methodDescriptor, "the specified method should be configured in xml" ); ReturnValueDescriptor returnValueDescriptor = methodDescriptor.getReturnValueDescriptor(); Set<GroupConversionDescriptor> groupConversionDescriptors = returnValueDescriptor.getGroupConversions(); assertTrue( groupConversionDescriptors.size() == 2 ); List<ParameterDescriptor> parameterDescriptors = methodDescriptor.getParameterDescriptors(); assertTrue( parameterDescriptors.size() == 1 ); ParameterDescriptor parameterDescriptor = parameterDescriptors.get( 0 ); groupConversionDescriptors = parameterDescriptor.getGroupConversions(); assertTrue( groupConversionDescriptors.size() == 1 ); }
@Test @SpecAssertion(section = Sections.XML_MAPPING_CONSTRAINTDECLARATIONINXML_METHODLEVELOVERRIDING, id = "j") public void testGroupConversionOnReturnValueAndParameter() throws Exception { MethodDescriptor descriptor = TestUtil.getMethodDescriptor( CustomerRepository.class, "findByExample", Customer.class ); assertNotNull( descriptor, "the specified method should be configured in xml" ); ReturnValueDescriptor returnValueDescriptor = descriptor.getReturnValueDescriptor(); Set<GroupConversionDescriptor> groupConversionDescriptors = returnValueDescriptor.getGroupConversions(); assertTrue( groupConversionDescriptors.size() == 1 ); GroupConversionDescriptor groupConversionDescriptor = groupConversionDescriptors.iterator().next(); assertEquals( groupConversionDescriptor.getFrom(), Default.class, "Wrong from class for group conversion" ); List<ParameterDescriptor> parameterDescriptors = descriptor.getParameterDescriptors(); assertTrue( parameterDescriptors.size() == 1 ); ParameterDescriptor parameterDescriptor = parameterDescriptors.get( 0 ); groupConversionDescriptors = parameterDescriptor.getGroupConversions(); assertTrue( groupConversionDescriptors.size() == 1 ); groupConversionDescriptor = groupConversionDescriptors.iterator().next(); assertEquals( groupConversionDescriptor.getFrom(), Default.class, "Wrong from class for group conversion" ); } }
@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_EXECUTABLEDESCRIPTOR, id = "h") public void testMethodDescriptorCanBeRetrievedAlsoIfValidateExecutableIsSetToNONEInXml() { assertEquals( Validation.byDefaultProvider() .configure() .getBootstrapConfiguration() .getDefaultValidatedExecutableTypes(), Collections.emptySet() ); MethodDescriptor descriptor = getMethodDescriptor( StockItem.class, "setName", String.class ); assertNotNull( descriptor ); assertEquals( descriptor.getName(), "setName" ); assertEquals( descriptor.getParameterDescriptors().get( 0 ).getConstraintDescriptors().size(), 1 ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_ELEMENTDESCRIPTOR, id = "a") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_CONTAINERDESCRIPTOR, id = "a") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_CONTAINERDESCRIPTOR, id = "c") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_CONTAINERDESCRIPTOR, id = "d") public void testGetContainerElementMetaDataForMethodParameter() { ParameterDescriptor parameterDescriptor = Executables.parameterWithCascadedContainerElements().getParameterDescriptors().get( 1 ); checkContainerElementMetaDataOnParameterDescriptor( parameterDescriptor ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_CASCADABLEDESCRIPTOR, id = "b") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_GROUPCONVERSIONDESCRIPTOR, id = "a") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_GROUPCONVERSIONDESCRIPTOR, id = "b") public void testGetGroupConversionsForMethodParameter() { List<ParameterDescriptor> parameters = Executables.methodWithGroupConversionOnParameter() .getParameterDescriptors(); Set<GroupConversionDescriptor> groupConversions = parameters.get( 0 ).getGroupConversions(); assertEquals( groupConversions.size(), 2 ); for ( GroupConversionDescriptor groupConversionDescriptor : groupConversions ) { if ( groupConversionDescriptor.getFrom().equals( Default.class ) ) { assertEquals( groupConversionDescriptor.getTo(), BasicChecks.class ); } else if ( groupConversionDescriptor.getFrom().equals( StrictCustomerServiceChecks.class ) ) { assertEquals( groupConversionDescriptor.getTo(), StrictChecks.class ); } else { fail( String.format( "Encountered unexpected group conversion from %s to %s", groupConversionDescriptor.getFrom().getName(), groupConversionDescriptor.getTo().getName() ) ); } } }
@Override public Stream<ParameterDescription> describe(MethodParameter parameter) { Parameter jlrParameter = parameter.getMethod().getParameters()[parameter.getParameterIndex()]; CliOption option = jlrParameter.getAnnotation(CliOption.class); ParameterDescription result = ParameterDescription.outOf(parameter); result.help(option.help()); List<String> keys = Arrays.asList(option.key()); result.keys(notDefaultCommandKeys(parameter)); if (!option.mandatory()) { result.defaultValue(CLI_OPTION_NULL.equals(option.unspecifiedDefaultValue()) ? "null" : option.unspecifiedDefaultValue()); } if (!CLI_OPTION_NULL.equals(option.specifiedDefaultValue())) { result.whenFlag(option.specifiedDefaultValue()); } boolean containsEmptyKey = keys.contains(""); result.mandatoryKey(!containsEmptyKey); MethodDescriptor constraintsForMethod = validator.getConstraintsForClass(parameter.getDeclaringClass()) .getConstraintsForMethod(parameter.getMethod().getName(), parameter.getMethod().getParameterTypes()); if (constraintsForMethod != null) { ParameterDescriptor constraintsDescriptor = constraintsForMethod .getParameterDescriptors().get(parameter.getParameterIndex()); result.elementDescriptor(constraintsDescriptor); } return Stream.of(result); }