You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/01/03 09:12:20 UTC

[isis] branch master updated: ISIS-2882: adding Date-/TimeFormatStyleFacet

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new d80a97a  ISIS-2882: adding Date-/TimeFormatStyleFacet
d80a97a is described below

commit d80a97aef4c05f86db5a6bdc5cb7e7aefc36d404
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jan 3 10:12:13 2022 +0100

    ISIS-2882: adding Date-/TimeFormatStyleFacet
---
 .../temporalformatstyle/DateFormatStyleFacet.java  | 37 +++++++++++
 .../DateFormatStyleFacetAbstract.java              | 73 ++++++++++++++++++++++
 .../temporalformatstyle/TimeFormatStyleFacet.java  | 37 +++++++++++
 .../TimeFormatStyleFacetAbstract.java              | 73 ++++++++++++++++++++++
 ...matStyleFacetFromValueSemanticsAnnotation.java} | 29 +++++----
 ...talDigitsFacetFromValueSemanticsAnnotation.java |  1 -
 ...matStyleFacetFromValueSemanticsAnnotation.java} | 29 +++++----
 .../ValueSemanticsAnnotationFacetFactory.java      | 20 +++++-
 .../ValueSemanticsAnnotationFacetFactoryTest.java  | 45 +++++++++++++
 9 files changed, 310 insertions(+), 34 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacet.java
new file mode 100644
index 0000000..a5c5715
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacet.java
@@ -0,0 +1,37 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle;
+
+import java.time.format.FormatStyle;
+
+import org.apache.isis.applib.annotation.ValueSemantics;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+
+/**
+ * If associated with a temporal date value, the style of a localized date.
+ */
+public interface DateFormatStyleFacet
+extends Facet {
+
+    /**
+     * As provided by {@link ValueSemantics#dateFormatStyle()}
+     */
+    FormatStyle getDateFormatStyle();
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacetAbstract.java
new file mode 100644
index 0000000..ea9b059
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacetAbstract.java
@@ -0,0 +1,73 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle;
+
+import java.time.format.FormatStyle;
+import java.util.Objects;
+import java.util.function.BiConsumer;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+import lombok.Getter;
+import lombok.NonNull;
+
+public abstract class DateFormatStyleFacetAbstract
+extends FacetAbstract
+implements DateFormatStyleFacet {
+
+    private static final Class<? extends Facet> type() {
+        return DateFormatStyleFacet.class;
+    }
+
+    @Getter(onMethod_ = {@Override})
+    private final @NonNull FormatStyle dateFormatStyle;
+
+    protected DateFormatStyleFacetAbstract(
+            final FormatStyle dateFormatStyle,
+            final FacetHolder holder) {
+        super(type(), holder);
+        this.dateFormatStyle = dateFormatStyle;
+    }
+
+    protected DateFormatStyleFacetAbstract(
+            final FormatStyle dateFormatStyle,
+            final FacetHolder holder,
+            final Facet.Precedence precedence) {
+        super(type(), holder, precedence);
+        this.dateFormatStyle = dateFormatStyle;
+    }
+
+    @Override
+    public boolean semanticEquals(@NonNull final Facet other) {
+        return other instanceof DateFormatStyleFacet
+                ? Objects.equals(
+                        this.getDateFormatStyle(),
+                        ((DateFormatStyleFacet)other).getDateFormatStyle())
+                : false;
+    }
+
+    @Override
+    public void visitAttributes(final BiConsumer<String, Object> visitor) {
+        super.visitAttributes(visitor);
+        visitor.accept("dateFormatStyle", dateFormatStyle.name());
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacet.java
new file mode 100644
index 0000000..3a03b6b
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacet.java
@@ -0,0 +1,37 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle;
+
+import java.time.format.FormatStyle;
+
+import org.apache.isis.applib.annotation.ValueSemantics;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+
+/**
+ * If associated with a temporal date value, the style of a localized time.
+ */
+public interface TimeFormatStyleFacet
+extends Facet {
+
+    /**
+     * As provided by {@link ValueSemantics#timeFormatStyle()}
+     */
+    FormatStyle getTimeFormatStyle();
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacetAbstract.java
new file mode 100644
index 0000000..c46b942
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacetAbstract.java
@@ -0,0 +1,73 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle;
+
+import java.time.format.FormatStyle;
+import java.util.Objects;
+import java.util.function.BiConsumer;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+import lombok.Getter;
+import lombok.NonNull;
+
+public abstract class TimeFormatStyleFacetAbstract
+extends FacetAbstract
+implements TimeFormatStyleFacet {
+
+    private static final Class<? extends Facet> type() {
+        return TimeFormatStyleFacet.class;
+    }
+
+    @Getter(onMethod_ = {@Override})
+    private final @NonNull FormatStyle timeFormatStyle;
+
+    protected TimeFormatStyleFacetAbstract(
+            final FormatStyle timeFormatStyle,
+            final FacetHolder holder) {
+        super(type(), holder);
+        this.timeFormatStyle = timeFormatStyle;
+    }
+
+    protected TimeFormatStyleFacetAbstract(
+            final FormatStyle timeFormatStyle,
+            final FacetHolder holder,
+            final Facet.Precedence precedence) {
+        super(type(), holder, precedence);
+        this.timeFormatStyle = timeFormatStyle;
+    }
+
+    @Override
+    public boolean semanticEquals(@NonNull final Facet other) {
+        return other instanceof TimeFormatStyleFacet
+                ? Objects.equals(
+                        this.getTimeFormatStyle(),
+                        ((TimeFormatStyleFacet)other).getTimeFormatStyle())
+                : false;
+    }
+
+    @Override
+    public void visitAttributes(final BiConsumer<String, Object> visitor) {
+        super.visitAttributes(visitor);
+        visitor.accept("timeFormatStyle", timeFormatStyle.name());
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateFormatStyleFacetFromValueSemanticsAnnotation.java
similarity index 56%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateFormatStyleFacetFromValueSemanticsAnnotation.java
index 9f57863..146097b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateFormatStyleFacetFromValueSemanticsAnnotation.java
@@ -18,31 +18,30 @@
  */
 package org.apache.isis.core.metamodel.facets.value.semantics;
 
+import java.time.format.FormatStyle;
 import java.util.Optional;
 
 import org.apache.isis.applib.annotation.ValueSemantics;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.DateFormatStyleFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.DateFormatStyleFacetAbstract;
 
-public class MaxTotalDigitsFacetFromValueSemanticsAnnotation
-extends MaxTotalDigitsFacetAbstract {
+public class DateFormatStyleFacetFromValueSemanticsAnnotation
+extends DateFormatStyleFacetAbstract {
 
-    public static Optional<MaxTotalDigitsFacet> create(
-            final Optional<ValueSemantics> digitsIfAny,
+    public static Optional<DateFormatStyleFacet> create(
+            final Optional<ValueSemantics> valueSemanticsIfAny,
             final FacetHolder holder) {
 
-        return digitsIfAny
-        .map(digits->{
-            return new MaxTotalDigitsFacetFromValueSemanticsAnnotation(
-                    digits.maxTotalDigits(), holder);
-        });
+        return valueSemanticsIfAny
+        .map(ValueSemantics::dateFormatStyle)
+        .map(dateFormatStyle->
+            new DateFormatStyleFacetFromValueSemanticsAnnotation(dateFormatStyle, holder));
    }
 
-   private MaxTotalDigitsFacetFromValueSemanticsAnnotation(
-           final int maxTotalDigits, final FacetHolder holder) {
-       super(maxTotalDigits, holder);
+   private DateFormatStyleFacetFromValueSemanticsAnnotation(
+           final FormatStyle dateFormatStyle, final FacetHolder holder) {
+       super(dateFormatStyle, holder);
    }
 
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java
index 9f57863..ae84d6e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java
@@ -44,5 +44,4 @@ extends MaxTotalDigitsFacetAbstract {
        super(maxTotalDigits, holder);
    }
 
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/TimeFormatStyleFacetFromValueSemanticsAnnotation.java
similarity index 56%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/TimeFormatStyleFacetFromValueSemanticsAnnotation.java
index 9f57863..cd6d24a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/TimeFormatStyleFacetFromValueSemanticsAnnotation.java
@@ -18,31 +18,30 @@
  */
 package org.apache.isis.core.metamodel.facets.value.semantics;
 
+import java.time.format.FormatStyle;
 import java.util.Optional;
 
 import org.apache.isis.applib.annotation.ValueSemantics;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.TimeFormatStyleFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.TimeFormatStyleFacetAbstract;
 
-public class MaxTotalDigitsFacetFromValueSemanticsAnnotation
-extends MaxTotalDigitsFacetAbstract {
+public class TimeFormatStyleFacetFromValueSemanticsAnnotation
+extends TimeFormatStyleFacetAbstract {
 
-    public static Optional<MaxTotalDigitsFacet> create(
-            final Optional<ValueSemantics> digitsIfAny,
+    public static Optional<TimeFormatStyleFacet> create(
+            final Optional<ValueSemantics> valueSemanticsIfAny,
             final FacetHolder holder) {
 
-        return digitsIfAny
-        .map(digits->{
-            return new MaxTotalDigitsFacetFromValueSemanticsAnnotation(
-                    digits.maxTotalDigits(), holder);
-        });
+        return valueSemanticsIfAny
+        .map(ValueSemantics::timeFormatStyle)
+        .map(timeFormatStyle->
+            new TimeFormatStyleFacetFromValueSemanticsAnnotation(timeFormatStyle, holder));
    }
 
-   private MaxTotalDigitsFacetFromValueSemanticsAnnotation(
-           final int maxTotalDigits, final FacetHolder holder) {
-       super(maxTotalDigits, holder);
+   private TimeFormatStyleFacetFromValueSemanticsAnnotation(
+           final FormatStyle timeFormatStyle, final FacetHolder holder) {
+       super(timeFormatStyle, holder);
    }
 
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
index 746ba86..6fec513 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
@@ -76,14 +76,14 @@ extends FacetFactoryAbstract {
             final TypedHolderAbstract facetHolder,
             final Optional<ValueSemantics> valueSemanticsIfAny,
             final Optional<Digits> digitsIfAny) {
-        processProvider(facetHolder, valueSemanticsIfAny, digitsIfAny);
+        processProvider(facetHolder, valueSemanticsIfAny);
         processDigits(facetHolder, valueSemanticsIfAny, digitsIfAny);
+        processTemporalFormat(facetHolder, valueSemanticsIfAny);
     }
 
     private void processProvider(
             final TypedHolderAbstract facetHolder,
-            final Optional<ValueSemantics> valueSemanticsIfAny,
-            final Optional<Digits> digitsIfAny) {
+            final Optional<ValueSemantics> valueSemanticsIfAny) {
 
         // check for @ValueSemantics(provider=...)
         addFacetIfPresent(
@@ -124,4 +124,18 @@ extends FacetFactoryAbstract {
 
     }
 
+    private void processTemporalFormat(
+            final TypedHolderAbstract facetHolder,
+            final Optional<ValueSemantics> valueSemanticsIfAny){
+
+        addFacetIfPresent(
+                DateFormatStyleFacetFromValueSemanticsAnnotation
+                .create(valueSemanticsIfAny, facetHolder));
+
+        addFacetIfPresent(
+                TimeFormatStyleFacetFromValueSemanticsAnnotation
+                .create(valueSemanticsIfAny, facetHolder));
+
+    }
+
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java
index ff4e0f7..7ebe68d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java
@@ -1,6 +1,8 @@
 package org.apache.isis.core.metamodel.facets.value.semantics;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.FormatStyle;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -9,10 +11,13 @@ import org.apache.isis.applib.annotation.ValueSemantics;
 import org.apache.isis.commons.internal._Constants;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.digits.MinIntegerDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.DateFormatStyleFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.TimeFormatStyleFacet;
 
 @SuppressWarnings("unused")
 public class ValueSemanticsAnnotationFacetFactoryTest
@@ -222,6 +227,32 @@ extends AbstractFacetFactoryTest {
         assertMaxFractionalDigits(facetedMethod, 4);
     }
 
+    // -- TEMPORAL FORMAT STYLE
+
+    public void testDateFormatStylePickedUpOnProperty() {
+        // given
+        class Order {
+            @ValueSemantics(dateFormatStyle = FormatStyle.FULL)
+            public LocalDateTime getDateTime() { return null; }
+        }
+        // when
+        processMethod(newFacetFactory(), Order.class, "getDateTime", _Constants.emptyClasses);
+        // then
+        assertDateFormatStyle(facetedMethod, FormatStyle.FULL);
+    }
+
+    public void testTimeFormatStylePickedUpOnProperty() {
+        // given
+        class Order {
+            @ValueSemantics(timeFormatStyle = FormatStyle.FULL)
+            public LocalDateTime getDateTime() { return null; }
+        }
+        // when
+        processMethod(newFacetFactory(), Order.class, "getDateTime", _Constants.emptyClasses);
+        // then
+        assertTimeFormatStyle(facetedMethod, FormatStyle.FULL);
+    }
+
     // -- HELPER
 
     ValueSemanticsAnnotationFacetFactory newFacetFactory() {
@@ -289,4 +320,18 @@ extends AbstractFacetFactoryTest {
         }
     }
 
+    private void assertDateFormatStyle(
+            final FacetedMethod facetedMethod, final FormatStyle formatStyle) {
+        final DateFormatStyleFacet facet = facetedMethod.getFacet(DateFormatStyleFacet.class);
+        assertNotNull(facet);
+        assertThat(facet.getDateFormatStyle(), is(formatStyle));
+    }
+
+    private void assertTimeFormatStyle(
+            final FacetedMethod facetedMethod, final FormatStyle formatStyle) {
+        final TimeFormatStyleFacet facet = facetedMethod.getFacet(TimeFormatStyleFacet.class);
+        assertNotNull(facet);
+        assertThat(facet.getTimeFormatStyle(), is(formatStyle));
+    }
+
 }