This is an automated email from the ASF dual-hosted git repository. sruehl pushed a commit to branch feature/Beckhoff_ADS_protocol in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
commit d0e34452450a8b76bf033aa85e8cd30746d4aad1 Author: Sebastian Rühl <sru...@apache.org> AuthorDate: Fri Feb 2 11:21:46 2018 +0100 fixed ReadLength implementation --- .../java/ads/api/commands/types/ReadLength.java | 19 +++++++- .../ads/api/commands/types/ReadLengthTest.java | 55 ++++++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/ReadLength.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/ReadLength.java index 0917ebf..9f48a2b 100644 --- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/ReadLength.java +++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/ReadLength.java @@ -31,11 +31,26 @@ public class ReadLength extends ByteValue { assertLength(NUM_BYTES); } - public static ReadLength of(int length) { - return new ReadLength(ByteBuffer.allocate(NUM_BYTES).putInt(length).array()); + public static ReadLength of(long length) { + checkUnsignedBounds(length, NUM_BYTES); + return new ReadLength(ByteBuffer.allocate(NUM_BYTES) + .put((byte) (length >> 24 & 0xff)) + .put((byte) (length >> 16 & 0xff)) + .put((byte) (length >> 8 & 0xff)) + .put((byte) (length & 0xff)) + .array()); + } + + public static ReadLength of(String length) { + return of(Long.parseLong(length)); } public static ReadLength of(byte... values) { return new ReadLength(values); } + + @Override + public String toString() { + return "" + (getBytes()[0] << 24 | getBytes()[1] << 16 | getBytes()[2] << 8 | getBytes()[3]); + } } diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/ReadLengthTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/ReadLengthTest.java new file mode 100644 index 0000000..1c93d05 --- /dev/null +++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/ReadLengthTest.java @@ -0,0 +1,55 @@ +/* + 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.commands.types; + +import org.apache.commons.codec.binary.Hex; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class ReadReadLengthTest { + byte NULL_BYTE = 0x0; + + @Test + void ofBytes() { + Assertions.assertEquals("0", ReadLength.of(NULL_BYTE, NULL_BYTE, NULL_BYTE, NULL_BYTE).toString()); + Assertions.assertThrows(IllegalArgumentException.class, () -> ReadLength.of(NULL_BYTE, NULL_BYTE, NULL_BYTE, NULL_BYTE, NULL_BYTE)); + } + + @Test + void ofLong() { + assertByte(ReadLength.of(1), "0x00000001"); + assertByte(ReadLength.of(65535), "0x0000ffff"); + Assertions.assertThrows(IllegalArgumentException.class, () -> ReadLength.of(-1)); + Assertions.assertThrows(IllegalArgumentException.class, () -> ReadLength.of(Long.valueOf("4294967296"))); + } + + @Test + void ofString() { + assertByte(ReadLength.of("1"), "0x00000001"); + } + + @Test + void testToString() { + Assertions.assertEquals(ReadLength.of("1").toString(), "1"); + } + + void assertByte(ReadLength actual, String expected) { + Assertions.assertEquals(expected, "0x" + Hex.encodeHexString(actual.getBytes())); + } +} \ No newline at end of file -- To stop receiving notification emails like this one, please contact sru...@apache.org.