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 09:52:49 UTC

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

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 865c48ce47 test(plc4go/cbus): add test for ArrayContext
865c48ce47 is described below

commit 865c48ce4765506e00eb4486212a0496fd760640
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon May 22 11:52:39 2023 +0200

    test(plc4go/cbus): add test for ArrayContext
---
 plc4go/spi/utils/ArrayContext.go      |   4 +-
 plc4go/spi/utils/ArrayContext_test.go | 207 ++++++++++++++++++++++++++++++++++
 2 files changed, 209 insertions(+), 2 deletions(-)

diff --git a/plc4go/spi/utils/ArrayContext.go b/plc4go/spi/utils/ArrayContext.go
index 70145c7eff..4f614df927 100644
--- a/plc4go/spi/utils/ArrayContext.go
+++ b/plc4go/spi/utils/ArrayContext.go
@@ -33,8 +33,8 @@ type arrayInfo struct {
 }
 
 // CreateArrayContext creates a new context, which contains information on the size and the current position in the array.
-func CreateArrayContext(parent context.Context, numItems int, curItem int) context.Context {
-	return context.WithValue(parent, keyArrayInfo, arrayInfo{
+func CreateArrayContext(ctx context.Context, numItems int, curItem int) context.Context {
+	return context.WithValue(ctx, keyArrayInfo, arrayInfo{
 		numItems: numItems,
 		curItem:  curItem,
 	})
diff --git a/plc4go/spi/utils/ArrayContext_test.go b/plc4go/spi/utils/ArrayContext_test.go
new file mode 100644
index 0000000000..6fd913fbd2
--- /dev/null
+++ b/plc4go/spi/utils/ArrayContext_test.go
@@ -0,0 +1,207 @@
+/*
+ * 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 (
+	"context"
+	"github.com/stretchr/testify/assert"
+	"testing"
+)
+
+func TestCreateArrayContext(t *testing.T) {
+	type args struct {
+		ctx      context.Context
+		numItems int
+		curItem  int
+	}
+	tests := []struct {
+		name         string
+		args         args
+		wantVerifier func(t *testing.T, ctx context.Context) bool
+	}{
+		{
+			name: "Create one",
+			args: args{
+				ctx: context.Background(),
+			},
+			wantVerifier: func(t *testing.T, ctx context.Context) bool {
+				_arrayInfo := ctx.Value(keyArrayInfo)
+				assert.NotNil(t, _arrayInfo)
+				assert.IsType(t, arrayInfo{}, _arrayInfo)
+				assert.Equal(t, 0, _arrayInfo.(arrayInfo).numItems)
+				assert.Equal(t, 0, _arrayInfo.(arrayInfo).curItem)
+				return true
+			},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			got := CreateArrayContext(tt.args.ctx, tt.args.numItems, tt.args.curItem)
+			assert.Truef(t, tt.wantVerifier(t, got), "CreateArrayContext(%v, %v, %v)", tt.args.ctx, tt.args.numItems, tt.args.curItem)
+		})
+	}
+}
+
+func TestGetCurItemFromContext(t *testing.T) {
+	type args struct {
+		ctx context.Context
+	}
+	tests := []struct {
+		name      string
+		args      args
+		want      int
+		wantPanic bool
+	}{
+		{
+			name: "key not set",
+			args: args{
+				ctx: context.Background(),
+			},
+			wantPanic: true,
+		},
+		{
+			name: "key present but wrong value",
+			args: args{
+				ctx: context.WithValue(context.Background(), keyArrayInfo, nil),
+			},
+			wantPanic: true,
+		},
+		{
+			name: "key present",
+			args: args{
+				ctx: context.WithValue(context.Background(), keyArrayInfo, arrayInfo{
+					numItems: 1,
+					curItem:  2,
+				}),
+			},
+			want: 2,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			defer func() {
+				if tt.wantPanic {
+					assert.NotNil(t, recover(), "we expected a panic")
+				} else {
+					assert.Nil(t, recover(), "we don't expected a panic")
+				}
+			}()
+			assert.Equalf(t, tt.want, GetCurItemFromContext(tt.args.ctx), "GetCurItemFromContext(%v)", tt.args.ctx)
+		})
+	}
+}
+
+func TestGetLastItemFromContext(t *testing.T) {
+	type args struct {
+		ctx context.Context
+	}
+	tests := []struct {
+		name      string
+		args      args
+		want      bool
+		wantPanic bool
+	}{
+		{
+			name: "key not set",
+			args: args{
+				ctx: context.Background(),
+			},
+			wantPanic: true,
+		},
+		{
+			name: "key present but wrong value",
+			args: args{
+				ctx: context.WithValue(context.Background(), keyArrayInfo, nil),
+			},
+			wantPanic: true,
+		},
+		{
+			name: "key present",
+			args: args{
+				ctx: context.WithValue(context.Background(), keyArrayInfo, arrayInfo{
+					numItems: 2,
+					curItem:  1,
+				}),
+			},
+			want: true,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			defer func() {
+				if tt.wantPanic {
+					assert.NotNil(t, recover(), "we expected a panic")
+				} else {
+					assert.Nil(t, recover(), "we don't expected a panic")
+				}
+			}()
+			assert.Equalf(t, tt.want, GetLastItemFromContext(tt.args.ctx), "GetLastItemFromContext(%v)", tt.args.ctx)
+		})
+	}
+}
+
+func TestGetNumItemsFromContext(t *testing.T) {
+	type args struct {
+		ctx context.Context
+	}
+	tests := []struct {
+		name      string
+		args      args
+		want      int
+		wantPanic bool
+	}{
+		{
+			name: "key not set",
+			args: args{
+				ctx: context.Background(),
+			},
+			wantPanic: true,
+		},
+		{
+			name: "key present but wrong value",
+			args: args{
+				ctx: context.WithValue(context.Background(), keyArrayInfo, nil),
+			},
+			wantPanic: true,
+		},
+		{
+			name: "key present",
+			args: args{
+				ctx: context.WithValue(context.Background(), keyArrayInfo, arrayInfo{
+					numItems: 1,
+					curItem:  2,
+				}),
+			},
+			want: 1,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			defer func() {
+				if tt.wantPanic {
+					assert.NotNil(t, recover(), "we expected a panic")
+				} else {
+					assert.Nil(t, recover(), "we don't expected a panic")
+				}
+			}()
+			assert.Equalf(t, tt.want, GetNumItemsFromContext(tt.args.ctx), "GetNumItemsFromContext(%v)", tt.args.ctx)
+		})
+	}
+}