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 8b8a9388d7e9e0caefc6c42c57932c871ac27ad6 Author: Sebastian Rühl <sru...@apache.org> AuthorDate: Wed Jun 13 17:07:35 2018 +0200 fixed some bugs while working on coverage --- .../java/ads/api/commands/types/AdsState.java | 2 +- .../plc4x/java/ads/api/generic/AmsHeader.java | 34 +++++--- .../java/ads/api/serial/types/FragmentNumber.java | 12 +++ .../java/ads/api/serial/types/ReceiverAddress.java | 12 +++ .../ads/api/serial/types/TransmitterAddress.java | 12 +++ .../java/ads/api/serial/types/UserDataLength.java | 12 +++ .../types/CommandTypesFactoryMethodTest.java | 11 +++ .../ads/api/generic/GenericFactoryMethodTest.java | 6 +- .../java/ads/api/generic/types/AmsPortTest.java | 9 ++- .../SerialFactoryMethodTest.java} | 29 +++---- .../types/GenericTypesFactoryMethodTest.java | 92 ++++++++++++++++++++++ .../TcpFactoryMethodTest.java} | 8 +- .../tcp/types/GenericTypesFactoryMethodTest.java | 87 ++++++++++++++++++++ 13 files changed, 283 insertions(+), 43 deletions(-) diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsState.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsState.java index 2ddeec7..dd95fb0 100644 --- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsState.java +++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsState.java @@ -80,6 +80,6 @@ public class AdsState extends UnsignedShortLEByteValue { public static final AdsState ADSSTATE_STOPPING = AdsState.of(17); public static final AdsState ADSSTATE_INCOMPATIBLE = AdsState.of(18); public static final AdsState ADSSTATE_EXCEPTION = AdsState.of(19); - public static final AdsState ADSSTATE_MAXSTATES = AdsState.of(Integer.MAX_VALUE); + public static final AdsState ADSSTATE_MAXSTATES = AdsState.of(65535); } } diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AmsHeader.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AmsHeader.java index 84fe1bf..26f642e 100644 --- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AmsHeader.java +++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AmsHeader.java @@ -68,7 +68,7 @@ public class AmsHeader implements ByteReadable { */ private final Invoke invokeId; - private final LengthSupplier dataLengthSupplier; + private final transient LengthSupplier dataLengthSupplier; private AmsHeader(AmsNetId targetAmsNetId, AmsPort targetAmsPort, AmsNetId sourceAmsNetId, AmsPort sourceAmsPort, Command commandId, State stateFlags, DataLength dataLength, AmsError code, Invoke invokeId) { this.targetAmsNetId = requireNonNull(targetAmsNetId); @@ -157,30 +157,40 @@ public class AmsHeader implements ByteReadable { @Override public boolean equals(Object o) { - if (this == o) + if (this == o) { return true; - if (!(o instanceof AmsHeader)) + } + if (!(o instanceof AmsHeader)) { return false; + } AmsHeader amsHeader = (AmsHeader) o; - if (!targetAmsNetId.equals(amsHeader.targetAmsNetId)) + if (!targetAmsNetId.equals(amsHeader.targetAmsNetId)) { return false; - if (!targetAmsPort.equals(amsHeader.targetAmsPort)) + } + if (!targetAmsPort.equals(amsHeader.targetAmsPort)) { return false; - if (!sourceAmsNetId.equals(amsHeader.sourceAmsNetId)) + } + if (!sourceAmsNetId.equals(amsHeader.sourceAmsNetId)) { return false; - if (!sourceAmsPort.equals(amsHeader.sourceAmsPort)) + } + if (!sourceAmsPort.equals(amsHeader.sourceAmsPort)) { return false; - if (commandId != amsHeader.commandId) + } + if (commandId != amsHeader.commandId) { return false; - if (!stateFlags.equals(amsHeader.stateFlags)) + } + if (!stateFlags.equals(amsHeader.stateFlags)) { return false; - if (!code.equals(amsHeader.code)) + } + if (!code.equals(amsHeader.code)) { return false; - if (!invokeId.equals(amsHeader.invokeId)) + } + if (!invokeId.equals(amsHeader.invokeId)) { return false; - + } + return getDataLength().equals(((AmsHeader) o).getDataLength()); } diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/FragmentNumber.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/FragmentNumber.java index 6a145ca..71104fe 100644 --- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/FragmentNumber.java +++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/FragmentNumber.java @@ -32,6 +32,10 @@ public class FragmentNumber extends ByteValue { super(value); } + private FragmentNumber(byte[] value) { + super(value); + } + private FragmentNumber(ByteBuf byteBuf) { this(byteBuf.readByte()); } @@ -40,6 +44,14 @@ public class FragmentNumber extends ByteValue { return new FragmentNumber(value); } + public static FragmentNumber of(byte... value) { + return new FragmentNumber(value); + } + + public static FragmentNumber of(String value) { + return new FragmentNumber(Byte.valueOf(value)); + } + public static FragmentNumber of(ByteBuf byteBuf) { return new FragmentNumber(byteBuf); } diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/ReceiverAddress.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/ReceiverAddress.java index b6ec0aa..459d00f 100644 --- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/ReceiverAddress.java +++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/ReceiverAddress.java @@ -34,6 +34,10 @@ public class ReceiverAddress extends ByteValue { super(value); } + private ReceiverAddress(byte[] value) { + super(value); + } + private ReceiverAddress(ByteBuf byteBuf) { this(byteBuf.readByte()); } @@ -42,6 +46,14 @@ public class ReceiverAddress extends ByteValue { return new ReceiverAddress(value); } + public static ReceiverAddress of(byte... value) { + return new ReceiverAddress(value); + } + + public static ReceiverAddress of(String value) { + return new ReceiverAddress(Byte.valueOf(value)); + } + public static ReceiverAddress of(ByteBuf byteBuf) { return new ReceiverAddress(byteBuf); } diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/TransmitterAddress.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/TransmitterAddress.java index f447b76..09b3de7 100644 --- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/TransmitterAddress.java +++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/TransmitterAddress.java @@ -34,6 +34,10 @@ public class TransmitterAddress extends ByteValue { super(value); } + private TransmitterAddress(byte[] value) { + super(value); + } + private TransmitterAddress(ByteBuf byteBuf) { this(byteBuf.readByte()); } @@ -42,6 +46,14 @@ public class TransmitterAddress extends ByteValue { return new TransmitterAddress(value); } + public static TransmitterAddress of(byte... value) { + return new TransmitterAddress(value); + } + + public static TransmitterAddress of(String value) { + return new TransmitterAddress(Byte.valueOf(value)); + } + public static TransmitterAddress of(ByteBuf byteBuf) { return new TransmitterAddress(byteBuf); } diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/UserDataLength.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/UserDataLength.java index e432885..7516d1c 100644 --- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/UserDataLength.java +++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/UserDataLength.java @@ -32,6 +32,10 @@ public class UserDataLength extends ByteValue { super(value); } + private UserDataLength(byte[] value) { + super(value); + } + private UserDataLength(ByteBuf byteBuf) { this(byteBuf.readByte()); } @@ -40,6 +44,14 @@ public class UserDataLength extends ByteValue { return new UserDataLength(value); } + public static UserDataLength of(byte... value) { + return new UserDataLength(value); + } + + public static UserDataLength of(String value) { + return new UserDataLength(Byte.valueOf(value)); + } + public static UserDataLength of(ByteBuf byteBuf) { return new UserDataLength(byteBuf); } diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/CommandTypesFactoryMethodTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/CommandTypesFactoryMethodTest.java index 2af1c52..01a3ab0 100644 --- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/CommandTypesFactoryMethodTest.java +++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/CommandTypesFactoryMethodTest.java @@ -36,6 +36,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import static org.hamcrest.Matchers.*; +import static org.junit.Assert.assertNotNull; import static org.junit.Assume.assumeThat; @RunWith(Parameterized.class) @@ -48,6 +49,7 @@ public class CommandTypesFactoryMethodTest { public static Collection<Object[]> data() { return Stream.of( AdsReturnCode.class, + AdsStampHeader.class, AdsState.class, CycleTime.class, Data.class, @@ -73,6 +75,12 @@ public class CommandTypesFactoryMethodTest { } @Test + public void innerReservedClasses() { + assertNotNull(IndexGroup.SystemServiceGroups.SYSTEMSERVICE_CHANGENETID); + assertNotNull(AdsState.DefinedValues.ADSSTATE_CONFIG); + } + + @Test public void testOfInt() throws Exception { assumeThat(clazz, instanceOf(UnsignedShortLEByteValue.class)); Method ofMethod = clazz.getDeclaredMethod("of", int.class); @@ -88,12 +96,14 @@ public class CommandTypesFactoryMethodTest { @Test public void testOfString() throws Exception { + assumeThat(clazz, not(AdsStampHeader.class)); Method ofMethod = clazz.getDeclaredMethod("of", String.class); ofMethod.invoke(null, clazz != AdsReturnCode.class ? "1" : "ADS_CODE_0"); } @Test public void testGetter() throws Exception { + assumeThat(clazz, not(AdsStampHeader.class)); List<Method> getters = Arrays .stream(clazz.getDeclaredMethods()) .filter(method -> ( @@ -135,6 +145,7 @@ public class CommandTypesFactoryMethodTest { @Test public void testOfBytes() throws Exception { + assumeThat(clazz, not(AdsStampHeader.class)); assumeThat(clazz, not(Data.class)); assumeThat(clazz, not(AdsReturnCode.class)); Field num_bytes_field = clazz.getDeclaredField("NUM_BYTES"); diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java index 9c554ee..a763a25 100644 --- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java +++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java @@ -19,8 +19,6 @@ package org.apache.plc4x.java.ads.api.generic; import org.apache.plc4x.java.ads.api.generic.types.Command; -import org.apache.plc4x.java.ads.api.tcp.AmsTCPPacket; -import org.apache.plc4x.java.ads.api.tcp.AmsTcpHeader; import org.apache.plc4x.java.ads.api.util.LengthSupplier; import org.junit.Test; import org.junit.runner.RunWith; @@ -49,9 +47,7 @@ public class GenericFactoryMethodTest { public static Collection<Object[]> data() { return Stream.of( AdsData.class, - AmsHeader.class, - AmsTcpHeader.class, - AmsTCPPacket.class + AmsHeader.class ).map(clazz -> new Object[]{clazz}).collect(Collectors.toList()); } diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/AmsPortTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/AmsPortTest.java index 43164b8..8f61aa7 100644 --- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/AmsPortTest.java +++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/AmsPortTest.java @@ -23,6 +23,7 @@ import org.junit.Test; import static org.apache.plc4x.java.ads.util.Junit5Backport.assertThrows; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; public class AmsPortTest { @@ -30,6 +31,12 @@ public class AmsPortTest { private final byte NULL_BYTE = 0x0; @Test + public void reservedPorts() { + // Initialize subclass + assertNotNull(AmsPort.ReservedPorts.logger); + } + + @Test public void ofBytes() { assertEquals("0", AmsPort.of(NULL_BYTE, NULL_BYTE).toString()); assertThrows(IllegalArgumentException.class, () -> AmsPort.of(NULL_BYTE, NULL_BYTE, NULL_BYTE)); @@ -52,7 +59,7 @@ public class AmsPortTest { public void noHex() { AmsPort.of("0x0100"); } - + @Test public void ofString() { assertByte(AmsPort.of("1"), "0x0100"); diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/serial/SerialFactoryMethodTest.java similarity index 76% copy from plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java copy to plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/serial/SerialFactoryMethodTest.java index 9c554ee..267812a 100644 --- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java +++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/serial/SerialFactoryMethodTest.java @@ -16,12 +16,9 @@ specific language governing permissions and limitations under the License. */ -package org.apache.plc4x.java.ads.api.generic; +package org.apache.plc4x.java.ads.api.serial; -import org.apache.plc4x.java.ads.api.generic.types.Command; -import org.apache.plc4x.java.ads.api.tcp.AmsTCPPacket; -import org.apache.plc4x.java.ads.api.tcp.AmsTcpHeader; -import org.apache.plc4x.java.ads.api.util.LengthSupplier; +import org.apache.plc4x.java.ads.api.util.ByteReadable; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -36,11 +33,10 @@ import java.util.stream.Stream; import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertThat; -import static org.mockito.Mockito.RETURNS_DEEP_STUBS; -import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.*; @RunWith(Parameterized.class) -public class GenericFactoryMethodTest { +public class SerialFactoryMethodTest { @Parameterized.Parameter public Class<?> clazz; @@ -48,10 +44,9 @@ public class GenericFactoryMethodTest { @Parameterized.Parameters(name = "{index} {0}") public static Collection<Object[]> data() { return Stream.of( - AdsData.class, - AmsHeader.class, - AmsTcpHeader.class, - AmsTCPPacket.class + AmsSerialAcknowledgeFrame.class, + AmsSerialFrame.class, + AmsSerialResetFrame.class ).map(clazz -> new Object[]{clazz}).collect(Collectors.toList()); } @@ -69,12 +64,10 @@ public class GenericFactoryMethodTest { continue; } Object invoke = method.invoke(null, Arrays.stream(method.getParameterTypes()).map(aClass -> { - if (aClass == Command.class) { - return Command.INVALID; - } else if (aClass == LengthSupplier[].class) { - return new LengthSupplier[]{() -> 0}; - } else if (aClass == long.class) { - return 1L; + if (ByteReadable.class.isAssignableFrom(aClass)) { + ByteReadable mock = (ByteReadable) mock(aClass, RETURNS_DEEP_STUBS); + when(mock.getBytes()).thenReturn(new byte[0]); + return mock; } else { return mock(aClass, RETURNS_DEEP_STUBS); } diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/serial/types/GenericTypesFactoryMethodTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/serial/types/GenericTypesFactoryMethodTest.java new file mode 100644 index 0000000..d2d8cb0 --- /dev/null +++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/serial/types/GenericTypesFactoryMethodTest.java @@ -0,0 +1,92 @@ +/* + 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.ads.api.serial.types; + +import org.apache.plc4x.java.ads.api.generic.types.AmsNetId; +import org.apache.plc4x.java.ads.api.generic.types.Command; +import org.apache.plc4x.java.ads.api.util.UnsignedIntLEByteValue; +import org.apache.plc4x.java.ads.api.util.UnsignedShortLEByteValue; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.not; +import static org.junit.Assume.assumeThat; + +@RunWith(Parameterized.class) +public class GenericTypesFactoryMethodTest { + + @Parameterized.Parameter + public Class<?> clazz; + + @Parameterized.Parameters(name = "{index} {0}") + public static Collection<Object[]> data() { + return Stream.of( + CRC.class, + FragmentNumber.class, + MagicCookie.class, + ReceiverAddress.class, + TransmitterAddress.class, + UserData.class, + UserDataLength.class + ).map(clazz -> new Object[]{clazz}).collect(Collectors.toList()); + } + + @Test + public void testOfInt() throws Exception { + assumeThat(clazz, instanceOf(UnsignedShortLEByteValue.class)); + Method ofMethod = clazz.getDeclaredMethod("of", int.class); + ofMethod.invoke(null, 1); + } + + @Test + public void testOfLong() throws Exception { + assumeThat(clazz, instanceOf(UnsignedIntLEByteValue.class)); + Method ofMethod = clazz.getDeclaredMethod("of", long.class); + ofMethod.invoke(null, 1L); + } + + @Test + public void testOfString() throws Exception { + Method ofMethod = clazz.getDeclaredMethod("of", String.class); + String testString = "1"; + if (clazz == AmsNetId.class) { + testString = "1.1.1.1.1.1"; + } else if (clazz == Command.class) { + testString = Command.ADS_ADD_DEVICE_NOTIFICATION.name(); + } + ofMethod.invoke(null, testString); + } + + @Test + public void testOfBytes() throws Exception { + assumeThat(clazz, not(UserData.class)); + Field num_bytes_field = clazz.getDeclaredField("NUM_BYTES"); + Integer numberOfBytes = (Integer) num_bytes_field.get(null); + Method ofMethod = clazz.getDeclaredMethod("of", byte[].class); + ofMethod.invoke(null, (Object) new byte[numberOfBytes]); + } +} diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/tcp/TcpFactoryMethodTest.java similarity index 92% copy from plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java copy to plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/tcp/TcpFactoryMethodTest.java index 9c554ee..7897a33 100644 --- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java +++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/tcp/TcpFactoryMethodTest.java @@ -16,11 +16,9 @@ specific language governing permissions and limitations under the License. */ -package org.apache.plc4x.java.ads.api.generic; +package org.apache.plc4x.java.ads.api.tcp; import org.apache.plc4x.java.ads.api.generic.types.Command; -import org.apache.plc4x.java.ads.api.tcp.AmsTCPPacket; -import org.apache.plc4x.java.ads.api.tcp.AmsTcpHeader; import org.apache.plc4x.java.ads.api.util.LengthSupplier; import org.junit.Test; import org.junit.runner.RunWith; @@ -40,7 +38,7 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; @RunWith(Parameterized.class) -public class GenericFactoryMethodTest { +public class TcpFactoryMethodTest { @Parameterized.Parameter public Class<?> clazz; @@ -48,8 +46,6 @@ public class GenericFactoryMethodTest { @Parameterized.Parameters(name = "{index} {0}") public static Collection<Object[]> data() { return Stream.of( - AdsData.class, - AmsHeader.class, AmsTcpHeader.class, AmsTCPPacket.class ).map(clazz -> new Object[]{clazz}).collect(Collectors.toList()); diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/tcp/types/GenericTypesFactoryMethodTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/tcp/types/GenericTypesFactoryMethodTest.java new file mode 100644 index 0000000..2a49cea --- /dev/null +++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/tcp/types/GenericTypesFactoryMethodTest.java @@ -0,0 +1,87 @@ +/* + 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.ads.api.tcp.types; + +import org.apache.plc4x.java.ads.api.generic.types.AmsNetId; +import org.apache.plc4x.java.ads.api.generic.types.Command; +import org.apache.plc4x.java.ads.api.util.UnsignedIntLEByteValue; +import org.apache.plc4x.java.ads.api.util.UnsignedShortLEByteValue; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.not; +import static org.junit.Assume.assumeThat; + +@RunWith(Parameterized.class) +public class GenericTypesFactoryMethodTest { + + @Parameterized.Parameter + public Class<?> clazz; + + @Parameterized.Parameters(name = "{index} {0}") + public static Collection<Object[]> data() { + return Stream.of( + TcpLength.class, + UserData.class + ).map(clazz -> new Object[]{clazz}).collect(Collectors.toList()); + } + + @Test + public void testOfInt() throws Exception { + assumeThat(clazz, instanceOf(UnsignedShortLEByteValue.class)); + Method ofMethod = clazz.getDeclaredMethod("of", int.class); + ofMethod.invoke(null, 1); + } + + @Test + public void testOfLong() throws Exception { + assumeThat(clazz, instanceOf(UnsignedIntLEByteValue.class)); + Method ofMethod = clazz.getDeclaredMethod("of", long.class); + ofMethod.invoke(null, 1L); + } + + @Test + public void testOfString() throws Exception { + Method ofMethod = clazz.getDeclaredMethod("of", String.class); + String testString = "1"; + if (clazz == AmsNetId.class) { + testString = "1.1.1.1.1.1"; + } else if (clazz == Command.class) { + testString = Command.ADS_ADD_DEVICE_NOTIFICATION.name(); + } + ofMethod.invoke(null, testString); + } + + @Test + public void testOfBytes() throws Exception { + assumeThat(clazz, not(UserData.class)); + Field num_bytes_field = clazz.getDeclaredField("NUM_BYTES"); + Integer numberOfBytes = (Integer) num_bytes_field.get(null); + Method ofMethod = clazz.getDeclaredMethod("of", byte[].class); + ofMethod.invoke(null, (Object) new byte[numberOfBytes]); + } +} -- To stop receiving notification emails like this one, please contact sru...@apache.org.