2727import static org .hamcrest .CoreMatchers .is ;
2828import static org .hamcrest .MatcherAssert .assertThat ;
2929import static org .junit .jupiter .api .Assertions .assertNotNull ;
30- import static org .junit .jupiter .api .Assertions .assertTrue ;
3130
3231import org .apache .causeway .applib .annotation .TimeZoneTranslation ;
3332import org .apache .causeway .applib .annotation .ValueSemantics ;
3433import org .apache .causeway .core .metamodel .facetapi .FacetHolder ;
3534import org .apache .causeway .core .metamodel .facets .FacetFactoryTestAbstract ;
3635import org .apache .causeway .core .metamodel .facets .FacetedMethod ;
3736import org .apache .causeway .core .metamodel .facets .objectvalue .daterenderedadjust .DateRenderAdjustFacet ;
38- import org .apache .causeway .core .metamodel .facets .objectvalue .digits .MaxFractionalDigitsFacet ;
39- import org .apache .causeway .core .metamodel .facets .objectvalue .digits .MaxIntegerDigitsFacet ;
40- import org .apache .causeway .core .metamodel .facets .objectvalue .digits .MaxTotalDigitsFacet ;
41- import org .apache .causeway .core .metamodel .facets .objectvalue .digits .MinFractionalDigitsFacet ;
42- import org .apache .causeway .core .metamodel .facets .objectvalue .digits .MinIntegerDigitsFacet ;
4337import org .apache .causeway .core .metamodel .facets .objectvalue .temporalformat .DateFormatStyleFacet ;
4438import org .apache .causeway .core .metamodel .facets .objectvalue .temporalformat .TimeFormatStyleFacet ;
4539import org .apache .causeway .core .metamodel .facets .objectvalue .temporalformat .TimeZoneTranslationFacet ;
40+ import org .apache .causeway .core .metamodel .util .Facets ;
4641
4742class ValueSemanticsAnnotationFacetFactoryTest
4843extends FacetFactoryTestAbstract {
@@ -60,7 +55,8 @@ class Order {
6055 // when
6156 newFacetFactory ().process (processMethodContext );
6257 // then
63- assertMaxTotalDigits (facetedMethod , 5 );
58+ assertMaxTotalDigitsExplicit (facetedMethod , 5 );
59+ assertMaxTotalDigitsInferred (facetedMethod , 5 );
6460 assertDefaultMaxIntegerDigits (facetedMethod );
6561 assertDefaultMinIntegerDigits (facetedMethod );
6662 assertDefaultMaxFractionalDigits (facetedMethod );
@@ -81,7 +77,8 @@ public void updateCost(
8177 // when
8278 newFacetFactory ().processParams (processParameterContext );
8379 // then
84- assertMaxTotalDigits (facetedMethodParameter , 5 );
80+ assertMaxTotalDigitsExplicit (facetedMethodParameter , 5 );
81+ assertMaxTotalDigitsInferred (facetedMethodParameter , 5 );
8582 assertDefaultMaxIntegerDigits (facetedMethodParameter );
8683 assertDefaultMinIntegerDigits (facetedMethodParameter );
8784 assertDefaultMaxFractionalDigits (facetedMethodParameter );
@@ -226,7 +223,8 @@ class Order {
226223 // when
227224 newFacetFactory ().process (processMethodContext );
228225 // then
229- assertDigitsFacets (facetedMethod , 18 , 4 );
226+ assertMaxIntegerDigits (facetedMethod , 14 );
227+ assertMaxFractionalDigits (facetedMethod , 4 );
230228 });
231229 }
232230
@@ -243,7 +241,8 @@ public void updateCost(
243241 // when
244242 newFacetFactory ().processParams (processParameterContext );
245243 // then
246- assertDigitsFacets (facetedMethodParameter , 18 , 4 );
244+ assertMaxIntegerDigits (facetedMethodParameter , 14 );
245+ assertMaxFractionalDigits (facetedMethodParameter , 4 );
247246 });
248247 }
249248
@@ -275,15 +274,19 @@ class Order {
275274 actionScenario (Order .class , "maxTotalA" , (processMethodContext , facetHolder , facetedMethod ) -> {
276275 // when
277276 newFacetFactory ().process (processMethodContext );
278- // then - lowest bound wins
279- assertMaxTotalDigits (facetedMethod , 18 );
277+ // then - constraints apply individually
278+ assertMaxTotalDigitsExplicit (facetedMethod , 19 );
279+ assertMaxTotalDigitsInferred (facetedMethod , 18 );
280+ assertMaxIntegerDigits (facetedMethod , 14 );
281+ assertMaxFractionalDigits (facetedMethod , 4 );
280282 });
281283
282284 actionScenario (Order .class , "maxTotalB" , (processMethodContext , facetHolder , facetedMethod ) -> {
283285 // when
284286 newFacetFactory ().process (processMethodContext );
285287 // then - lowest bound wins
286- assertMaxTotalDigits (facetedMethod , 17 );
288+ assertMaxTotalDigitsExplicit (facetedMethod , 17 );
289+ assertMaxTotalDigitsInferred (facetedMethod , 17 );
287290 });
288291
289292 actionScenario (Order .class , "maxFracA" , (processMethodContext , facetHolder , facetedMethod ) -> {
@@ -381,7 +384,7 @@ ValueSemanticsAnnotationFacetFactory newFacetFactory() {
381384 }
382385
383386 private void assertDefaultMaxTotalDigits (final FacetHolder facetedMethod ) {
384- assertMaxTotalDigits (facetedMethod , 0 );
387+ assertMaxTotalDigitsExplicit (facetedMethod , 0 );
385388 }
386389
387390 private void assertDefaultMaxIntegerDigits (final FacetHolder facetedMethod ) {
@@ -400,66 +403,40 @@ private void assertDefaultMinFractionalDigits(final FacetHolder facetedMethod) {
400403 assertMinFractionalDigits (facetedMethod , 0 );
401404 }
402405
403- private void assertMaxTotalDigits (
406+ private void assertMaxTotalDigitsExplicit (
404407 final FacetHolder facetedMethod , final int maxTotalDigits ) {
405- final MaxTotalDigitsFacet facet = facetedMethod .lookupFacet (MaxTotalDigitsFacet .class ).orElse (null );
406- if (facet ==null && maxTotalDigits ==0 )
407- return ; // absence of the facet is semantically equal to maxTotalDigits=0
408- assertNotNull (facet );
409- assertThat (facet .maxTotalDigits (), is (maxTotalDigits ));
408+ int unlimitted = 0 ;
409+ assertThat (Facets .maxTotalDigitsExplicit (facetedMethod ).orElse (unlimitted ), is (maxTotalDigits ));
410+ }
411+
412+ private void assertMaxTotalDigitsInferred (
413+ final FacetHolder facetedMethod , final int maxTotalDigits ) {
414+ int unlimitted = 0 ;
415+ assertThat (Facets .maxTotalDigitsInferred (facetedMethod ).orElse (unlimitted ), is (maxTotalDigits ));
410416 }
411417
412418 private void assertMaxIntegerDigits (
413419 final FacetHolder facetedMethod , final int maxIntegerDigits ) {
414- final MaxIntegerDigitsFacet facet = facetedMethod .lookupFacet (MaxIntegerDigitsFacet .class ).orElse (null );
415- if (facet ==null && maxIntegerDigits ==0 )
416- return ; // absence of the facet is semantically equal to maxIntegerDigits=0
417- assertNotNull (facet );
418- assertThat (facet .maxIntegerDigits (), is (maxIntegerDigits ));
420+ int unlimitted = 0 ;
421+ assertThat (Facets .maxIntegerDigits (facetedMethod ).orElse (unlimitted ), is (maxIntegerDigits ));
419422 }
420423
421424 private void assertMinIntegerDigits (
422425 final FacetHolder facetedMethod , final int minIntegerDigits ) {
423- final MinIntegerDigitsFacet facet = facetedMethod .lookupFacet (MinIntegerDigitsFacet .class ).orElse (null );
424- if (facet ==null && minIntegerDigits ==1 )
425- return ; // absence of the facet is semantically equal to minIntegerDigits=1
426- assertNotNull (facet );
427- assertThat (facet .minIntegerDigits (), is (minIntegerDigits ));
426+ int unlimitted = 1 ;
427+ assertThat (Facets .minIntegerDigits (facetedMethod ).orElse (unlimitted ), is (minIntegerDigits ));
428428 }
429429
430430 private void assertMaxFractionalDigits (
431431 final FacetHolder facetedMethod , final int maxFractionalDigits ) {
432- final MaxFractionalDigitsFacet facet = facetedMethod .lookupFacet (MaxFractionalDigitsFacet .class ).orElse (null );
433- if (facet ==null && maxFractionalDigits ==-1 )
434- return ; // absence of the facet is semantically equal to maxFractionalDigits=-1
435- assertNotNull (facet );
436- assertThat (facet .maxFractionalDigits (), is (maxFractionalDigits ));
432+ int unlimitted = -1 ;
433+ assertThat (Facets .maxFractionalDigits (facetedMethod ).orElse (unlimitted ), is (maxFractionalDigits ));
437434 }
438435
439436 private void assertMinFractionalDigits (
440437 final FacetHolder facetedMethod , final int minFractionalDigits ) {
441- final MinFractionalDigitsFacet facet = facetedMethod .lookupFacet (MinFractionalDigitsFacet .class ).orElse (null );
442- if (facet ==null && minFractionalDigits ==0 )
443- return ; // absence of the facet is semantically equal to minFractionalDigits=0
444- assertNotNull (facet );
445- assertThat (facet .minFractionalDigits (), is (minFractionalDigits ));
446- }
447-
448- private void assertDigitsFacets (
449- final FacetHolder facetedMethod , final int maxTotalDigits , final int maxFractionalDigits ) {
450- if (maxTotalDigits >=0 ) {
451- final MaxTotalDigitsFacet facet = facetedMethod .lookupFacet (MaxTotalDigitsFacet .class ).orElse (null );
452- assertNotNull (facet );
453- assertTrue (facet instanceof MaxTotalDigitsFacetFromJavaxValidationDigitsAnnotation );
454- assertThat (facet .maxTotalDigits (), is (maxTotalDigits ));
455- }
456-
457- if (maxFractionalDigits >=0 ) {
458- final MaxFractionalDigitsFacet facet = facetedMethod .lookupFacet (MaxFractionalDigitsFacet .class ).orElse (null );
459- assertNotNull (facet );
460- assertTrue (facet instanceof MaxFractionalDigitsFacetFromJakartaDigitsAnnotation );
461- assertThat (facet .maxFractionalDigits (), is (maxFractionalDigits ));
462- }
438+ int unlimitted = 0 ;
439+ assertThat (Facets .minFractionalDigits (facetedMethod ).orElse (unlimitted ), is (minFractionalDigits ));
463440 }
464441
465442 private void assertDateRenderAdjustDays (
0 commit comments