This is an automated email from the ASF dual-hosted git repository. sruehl pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
commit 47ff4f0d1c29142c7cb306b159bc5fa24ae8e658 Author: Sebastian Rühl <sru...@apache.org> AuthorDate: Thu Aug 16 14:28:57 2018 +0200 added a immutability test to plc4j-api to track immutability --- plc4j/api/pom.xml | 6 ++ .../api/messages/items/SubscriptionEventItem.java | 6 +- .../items/SubscriptionRequestCyclicItem.java | 4 +- .../messages/items/SubscriptionRequestItem.java | 4 +- .../apache/plc4x/java/api/ImmutabilityTest.java | 103 +++++++++++++++++++++ 5 files changed, 116 insertions(+), 7 deletions(-) diff --git a/plc4j/api/pom.xml b/plc4j/api/pom.xml index dbd5703..ac1484b 100644 --- a/plc4j/api/pom.xml +++ b/plc4j/api/pom.xml @@ -39,6 +39,12 @@ <version>0.0.1-SNAPSHOT</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.mutabilitydetector</groupId> + <artifactId>MutabilityDetector</artifactId> + <version>0.9.6</version> + <scope>test</scope> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionEventItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionEventItem.java index 60d95dc..5142d9a 100644 --- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionEventItem.java +++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionEventItem.java @@ -24,9 +24,9 @@ import java.util.Objects; public class SubscriptionEventItem<T> { - private SubscriptionRequestItem<T> subscriptionRequestItem; - private Calendar timestamp; - private List<T> values; + private final SubscriptionRequestItem<T> subscriptionRequestItem; + private final Calendar timestamp; + private final List<T> values; public SubscriptionEventItem(SubscriptionRequestItem<T> subscriptionRequestItem, Calendar timestamp, List<T> values) { this.subscriptionRequestItem = subscriptionRequestItem; diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java index 06f3a77..336d7b4 100644 --- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java +++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java @@ -27,8 +27,8 @@ import java.util.function.Consumer; public class SubscriptionRequestCyclicItem<T> extends SubscriptionRequestItem<T> { - private TimeUnit timeUnit; - private int period; + private final TimeUnit timeUnit; + private final int period; public SubscriptionRequestCyclicItem(Class<T> dataType, Address address, TimeUnit timeUnit, int period, Consumer<SubscriptionEventItem<T>> consumer) { super(dataType, address, SubscriptionType.CYCLIC, consumer); diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java index 0667073..a38d258 100644 --- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java +++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java @@ -26,8 +26,8 @@ import java.util.function.Consumer; public abstract class SubscriptionRequestItem<T> extends RequestItem<T> { - private SubscriptionType subscriptionType; - private Consumer<SubscriptionEventItem<T>> consumer; + private final SubscriptionType subscriptionType; + private final Consumer<SubscriptionEventItem<T>> consumer; public SubscriptionRequestItem(Class<T> datatype, Address address, SubscriptionType subscriptionType, Consumer<SubscriptionEventItem<T>> consumer) { super(datatype, address); diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/ImmutabilityTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/ImmutabilityTest.java new file mode 100644 index 0000000..d6d60a8 --- /dev/null +++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/ImmutabilityTest.java @@ -0,0 +1,103 @@ +/* + 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.plc4x.java.api; + +import org.apache.plc4x.java.api.authentication.PlcUsernamePasswordAuthentication; +import org.apache.plc4x.java.api.messages.*; +import org.apache.plc4x.java.api.messages.items.*; +import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest; +import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse; +import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest; +import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Collection; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.not; +import static org.junit.Assume.assumeThat; +import static org.mutabilitydetector.unittesting.AllowedReason.allowingForSubclassing; +import static org.mutabilitydetector.unittesting.MutabilityAssert.assertInstancesOf; +import static org.mutabilitydetector.unittesting.MutabilityMatchers.areImmutable; + +@RunWith(Parameterized.class) +public class ImmutabilityTest { + + private static Set<Class<?>> NOT_YET_IMMUTABLE = Stream.of( + ReadResponseItem.class, + SubscriptionEventItem.class, + SubscriptionRequestCyclicItem.class, + SubscriptionRequestItem.class, + SubscriptionResponseItem.class, + UnsubscriptionRequestItem.class, + WriteRequestItem.class, + PlcProprietaryRequest.class, + PlcProprietaryResponse.class, + PlcSubscriptionEvent.class, + PlcUnsubscriptionRequest.class + ).collect(Collectors.toSet()); + + @Parameterized.Parameter + public Class<?> clazz; + + @Parameterized.Parameters(name = "{index} {0}") + public static Collection<Object[]> data() { + return Stream.of( + PlcUsernamePasswordAuthentication.class, + ReadRequestItem.class, + ReadResponseItem.class, + SubscriptionEventItem.class, + SubscriptionRequestChangeOfStateItem.class, + SubscriptionRequestCyclicItem.class, + SubscriptionRequestEventItem.class, + SubscriptionRequestItem.class, + SubscriptionResponseItem.class, + UnsubscriptionRequestItem.class, + WriteRequestItem.class, + WriteResponseItem.class, + TypeSafePlcReadRequest.class, + TypeSafePlcReadResponse.class, + TypeSafePlcWriteRequest.class, + TypeSafePlcWriteResponse.class, + PlcProprietaryRequest.class, + PlcProprietaryResponse.class, + PlcSubscriptionEvent.class, + PlcSubscriptionRequest.class, + PlcSubscriptionResponse.class, + PlcUnsubscriptionRequest.class, + PlcUnsubscriptionResponse.class, + PlcWriteRequest.class, + PlcWriteResponse.class + ).map(aClass -> new Object[]{aClass}) + .collect(Collectors.toList()); + } + + @Test + public void immutability() { + assumeThat(clazz + " not yet immutable", NOT_YET_IMMUTABLE, not(hasItem(clazz))); + assertInstancesOf(clazz, + areImmutable(), + allowingForSubclassing()); + } +}