You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2023/05/22 11:03:21 UTC

[plc4x] branch develop updated: test(plc4go/cbus): add test for Buffer

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

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new 3a87a93d48 test(plc4go/cbus): add test for Buffer
3a87a93d48 is described below

commit 3a87a93d48ba0334ad883a9d297d566a3cc86727
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon May 22 13:03:12 2023 +0200

    test(plc4go/cbus): add test for Buffer
---
 plc4go/spi/utils/Buffer.go             |  20 ++--
 plc4go/spi/utils/Buffer_test.go        | 187 +++++++++++++++++++++++++++++++++
 plc4go/spi/utils/bufferCommons.go      |  26 ++++-
 plc4go/spi/utils/bufferCommons_test.go |   7 +-
 4 files changed, 227 insertions(+), 13 deletions(-)

diff --git a/plc4go/spi/utils/Buffer.go b/plc4go/spi/utils/Buffer.go
index fb18c64122..543891e2d3 100644
--- a/plc4go/spi/utils/Buffer.go
+++ b/plc4go/spi/utils/Buffer.go
@@ -27,12 +27,12 @@ type WithReaderWriterArgs interface {
 
 // WithAdditionalStringRepresentation can be used by e.g. enums to supply an additional string representation
 func WithAdditionalStringRepresentation(stringRepresentation string) WithReaderWriterArgs {
-	return withAdditionalStringRepresentation{stringRepresentation: stringRepresentation}
+	return withAdditionalStringRepresentation{readerWriterArg: readerWriterArg{WithReaderArgs: readerArg{}, WithWriterArgs: writerArg{}}, stringRepresentation: stringRepresentation}
 }
 
 // WithRenderAsList indicates that an element can be rendered as list
 func WithRenderAsList(renderAsList bool) WithReaderWriterArgs {
-	return withRenderAsList{renderAsList: renderAsList}
+	return withRenderAsList{readerWriterArg: readerWriterArg{WithReaderArgs: readerArg{}, WithWriterArgs: writerArg{}}, renderAsList: renderAsList}
 }
 
 ///////////////////////////////////////
@@ -42,8 +42,16 @@ func WithRenderAsList(renderAsList bool) WithReaderWriterArgs {
 //
 
 type readerWriterArg struct {
-	readerArg
-	writerArg
+	WithReaderArgs
+	WithWriterArgs
+}
+
+func (r readerWriterArg) isReaderArgs() bool {
+	return r.WithReaderArgs != nil
+}
+
+func (r readerWriterArg) isWriterArgs() bool {
+	return r.WithWriterArgs != nil
 }
 
 type withAdditionalStringRepresentation struct {
@@ -65,7 +73,7 @@ type withRenderAsList struct {
 func UpcastReaderArgs(args ...WithReaderArgs) []WithReaderWriterArgs {
 	result := make([]WithReaderWriterArgs, len(args))
 	for i, arg := range args {
-		result[i] = arg.(WithReaderWriterArgs)
+		result[i] = readerWriterArg{arg, writerArg{}}
 	}
 	return result
 }
@@ -73,7 +81,7 @@ func UpcastReaderArgs(args ...WithReaderArgs) []WithReaderWriterArgs {
 func UpcastWriterArgs(args ...WithWriterArgs) []WithReaderWriterArgs {
 	result := make([]WithReaderWriterArgs, len(args))
 	for i, arg := range args {
-		result[i] = arg.(WithReaderWriterArgs)
+		result[i] = readerWriterArg{readerArg{}, arg}
 	}
 	return result
 }
diff --git a/plc4go/spi/utils/Buffer_test.go b/plc4go/spi/utils/Buffer_test.go
new file mode 100644
index 0000000000..999b6de4a1
--- /dev/null
+++ b/plc4go/spi/utils/Buffer_test.go
@@ -0,0 +1,187 @@
+/*
+ * 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
+ *
+ *   https://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 utils
+
+import (
+	"github.com/stretchr/testify/assert"
+	"testing"
+)
+
+func TestUpcastReaderArgs(t *testing.T) {
+	type args struct {
+		args []WithReaderArgs
+	}
+	tests := []struct {
+		name string
+		args args
+		want []WithReaderWriterArgs
+	}{
+		{
+			name: "nothing results in nothing",
+			want: []WithReaderWriterArgs{},
+		},
+		{
+			name: "only a reader arg",
+			args: args{
+				[]WithReaderArgs{readerArg{}},
+			},
+			want: []WithReaderWriterArgs{readerWriterArg{readerArg{}, writerArg{}}},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			assert.Equalf(t, tt.want, UpcastReaderArgs(tt.args.args...), "UpcastReaderArgs(%v)", tt.args.args)
+		})
+	}
+}
+
+func TestUpcastWriterArgs(t *testing.T) {
+	type args struct {
+		args []WithWriterArgs
+	}
+	tests := []struct {
+		name string
+		args args
+		want []WithReaderWriterArgs
+	}{
+		{
+			name: "nothing results in nothing",
+			want: []WithReaderWriterArgs{},
+		},
+		{
+			name: "only a reader arg",
+			args: args{
+				[]WithWriterArgs{writerArg{}},
+			},
+			want: []WithReaderWriterArgs{readerWriterArg{readerArg{}, writerArg{}}},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			assert.Equalf(t, tt.want, UpcastWriterArgs(tt.args.args...), "UpcastWriterArgs(%v)", tt.args.args)
+		})
+	}
+}
+
+func TestWithAdditionalStringRepresentation(t *testing.T) {
+	type args struct {
+		stringRepresentation string
+	}
+	tests := []struct {
+		name string
+		args args
+		want WithReaderWriterArgs
+	}{
+		{
+			name: "some string representation",
+			want: withAdditionalStringRepresentation{readerWriterArg: readerWriterArg{readerArg{}, writerArg{}}, stringRepresentation: ""},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			assert.Equalf(t, tt.want, WithAdditionalStringRepresentation(tt.args.stringRepresentation), "WithAdditionalStringRepresentation(%v)", tt.args.stringRepresentation)
+		})
+	}
+}
+
+func TestWithRenderAsList(t *testing.T) {
+	type args struct {
+		renderAsList bool
+	}
+	tests := []struct {
+		name string
+		args args
+		want WithReaderWriterArgs
+	}{
+		{
+			name: "render as list",
+			args: args{renderAsList: true},
+			want: withRenderAsList{readerWriterArg: readerWriterArg{readerArg{}, writerArg{}}, renderAsList: true},
+		},
+		{
+			name: "render not as list",
+			args: args{renderAsList: false},
+			want: withRenderAsList{readerWriterArg: readerWriterArg{readerArg{}, writerArg{}}, renderAsList: false},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			assert.Equalf(t, tt.want, WithRenderAsList(tt.args.renderAsList), "WithRenderAsList(%v)", tt.args.renderAsList)
+		})
+	}
+}
+
+func Test_readerWriterArg_isReaderArgs(t *testing.T) {
+	type fields struct {
+		readerArg WithReaderArgs
+		writerArg WithWriterArgs
+	}
+	tests := []struct {
+		name   string
+		fields fields
+		want   bool
+	}{
+		{
+			name: "it is",
+			fields: fields{
+				readerArg: readerArg{},
+			},
+			want: true,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			re := readerWriterArg{
+				WithReaderArgs: tt.fields.readerArg,
+				WithWriterArgs: tt.fields.writerArg,
+			}
+			assert.Equalf(t, tt.want, re.isReaderArgs(), "isReaderArgs()")
+		})
+	}
+}
+
+func Test_readerWriterArg_isWriterArgs(t *testing.T) {
+	type fields struct {
+		readerArg WithReaderArgs
+		writerArg WithWriterArgs
+	}
+	tests := []struct {
+		name   string
+		fields fields
+		want   bool
+	}{
+		{
+			name: "it is",
+			fields: fields{
+				writerArg: writerArg{},
+			},
+			want: true,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			re := readerWriterArg{
+				WithReaderArgs: tt.fields.readerArg,
+				WithWriterArgs: tt.fields.writerArg,
+			}
+			assert.Equalf(t, tt.want, re.isWriterArgs(), "isWriterArgs()")
+		})
+	}
+}
diff --git a/plc4go/spi/utils/bufferCommons.go b/plc4go/spi/utils/bufferCommons.go
index 7f39d90b3d..f591cdf7ab 100644
--- a/plc4go/spi/utils/bufferCommons.go
+++ b/plc4go/spi/utils/bufferCommons.go
@@ -50,9 +50,18 @@ func (b BufferCommons) IsToBeRenderedAsList(readerWriterArgs ...WithReaderWriter
 		if !arg.isWriterArgs() && !arg.isReaderArgs() {
 			panic("not a reader or writer arg")
 		}
-		switch arg.(type) {
+		switch rwArg := arg.(type) {
 		case withRenderAsList:
-			return arg.(withRenderAsList).renderAsList
+			return rwArg.renderAsList
+		case readerWriterArg:
+			switch rArg := rwArg.WithReaderArgs.(type) {
+			case withRenderAsList:
+				return rArg.renderAsList
+			}
+			switch wArg := rwArg.WithWriterArgs.(type) {
+			case withRenderAsList:
+				return wArg.renderAsList
+			}
 		}
 	}
 	return false
@@ -63,9 +72,18 @@ func (b BufferCommons) ExtractAdditionalStringRepresentation(readerWriterArgs ..
 		if !arg.isWriterArgs() && !arg.isReaderArgs() {
 			panic("not a reader or writer arg")
 		}
-		switch arg.(type) {
+		switch rwArg := arg.(type) {
 		case withAdditionalStringRepresentation:
-			return arg.(withAdditionalStringRepresentation).stringRepresentation
+			return rwArg.stringRepresentation
+		case readerWriterArg:
+			switch rArg := rwArg.WithReaderArgs.(type) {
+			case withAdditionalStringRepresentation:
+				return rArg.stringRepresentation
+			}
+			switch wArg := rwArg.WithWriterArgs.(type) {
+			case withAdditionalStringRepresentation:
+				return wArg.stringRepresentation
+			}
 		}
 	}
 	return ""
diff --git a/plc4go/spi/utils/bufferCommons_test.go b/plc4go/spi/utils/bufferCommons_test.go
index f319d1c812..70c9124913 100644
--- a/plc4go/spi/utils/bufferCommons_test.go
+++ b/plc4go/spi/utils/bufferCommons_test.go
@@ -41,9 +41,10 @@ func TestBufferCommons_ExtractAdditionalStringRepresentation(t *testing.T) {
 			name: "extract the argument",
 			args: args{
 				readerWriterArgs: []WithReaderWriterArgs{
-					withAdditionalStringRepresentation{},
+					withAdditionalStringRepresentation{readerWriterArg: readerWriterArg{readerArg{}, writerArg{}}, stringRepresentation: "plc4xftw"},
 				},
 			},
+			want: "plc4xftw",
 		},
 	}
 	for _, tt := range tests {
@@ -70,7 +71,7 @@ func TestBufferCommons_IsToBeRenderedAsList(t *testing.T) {
 			name: "it is not",
 			args: args{
 				readerWriterArgs: []WithReaderWriterArgs{
-					withRenderAsList{},
+					withRenderAsList{readerWriterArg: readerWriterArg{readerArg{}, writerArg{}}},
 				},
 			},
 		},
@@ -78,7 +79,7 @@ func TestBufferCommons_IsToBeRenderedAsList(t *testing.T) {
 			name: "it is",
 			args: args{
 				readerWriterArgs: []WithReaderWriterArgs{
-					withRenderAsList{renderAsList: true},
+					withRenderAsList{readerWriterArg: readerWriterArg{readerArg{}, writerArg{}}, renderAsList: true},
 				},
 			},
 			want: true,