You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by wa...@apache.org on 2022/07/29 15:40:56 UTC
[incubator-devlake] 01/02: fix: casting error in FolderInput node struct
This is an automated email from the ASF dual-hosted git repository.
warren pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
commit f77ce89fe1e8d13e5e46a8c907c880164121bcef
Author: Keon Amini <ke...@merico.dev>
AuthorDate: Fri Jul 29 10:25:37 2022 -0500
fix: casting error in FolderInput node struct
---
plugins/helper/list.go | 11 ++++++++---
plugins/helper/queue.go | 8 ++++++--
plugins/helper/queue_test.go | 23 +++++++++++++++++++++++
plugins/jenkins/models/job.go | 5 +++++
plugins/jenkins/models/job_test.go | 24 ++++++++++++++++++++++++
5 files changed, 66 insertions(+), 5 deletions(-)
diff --git a/plugins/helper/list.go b/plugins/helper/list.go
index a130bfa2..c0f507e5 100644
--- a/plugins/helper/list.go
+++ b/plugins/helper/list.go
@@ -19,11 +19,12 @@ package helper
// ListBaseNode 'abstract' base struct for Nodes that are chained in a linked list manner
type ListBaseNode struct {
- next *ListBaseNode
+ next QueueNode
}
func (l *ListBaseNode) Data() interface{} {
- panic("list node Data() needs to be implemented by subclasses")
+ // default implementation
+ return nil
}
func (l *ListBaseNode) Next() interface{} {
@@ -34,7 +35,11 @@ func (l *ListBaseNode) Next() interface{} {
}
func (l *ListBaseNode) SetNext(next interface{}) {
- l.next = next.(*ListBaseNode)
+ if next == nil {
+ l.next = nil
+ } else {
+ l.next = next.(QueueNode)
+ }
}
// NewListBaseNode create and init a new node (only to be called by subclasses)
diff --git a/plugins/helper/queue.go b/plugins/helper/queue.go
index edf58d62..4dd18e92 100644
--- a/plugins/helper/queue.go
+++ b/plugins/helper/queue.go
@@ -128,7 +128,7 @@ func NewQueue() *Queue {
}
type QueueIteratorNode struct {
- next *QueueIteratorNode
+ next QueueNode
data interface{}
}
@@ -140,7 +140,11 @@ func (q *QueueIteratorNode) Next() interface{} {
}
func (q *QueueIteratorNode) SetNext(next interface{}) {
- q.next, _ = next.(*QueueIteratorNode)
+ if next == nil {
+ q.next = nil
+ } else {
+ q.next, _ = next.(QueueNode)
+ }
}
func (q *QueueIteratorNode) Data() interface{} {
diff --git a/plugins/helper/queue_test.go b/plugins/helper/queue_test.go
new file mode 100644
index 00000000..519f0ecb
--- /dev/null
+++ b/plugins/helper/queue_test.go
@@ -0,0 +1,23 @@
+package helper
+
+import (
+ "github.com/stretchr/testify/require"
+ "testing"
+)
+
+func TestQueue(t *testing.T) {
+ it := NewQueueIterator()
+ it.Push(NewQueueIteratorNode("a"))
+ it.Push(NewQueueIteratorNode("b"))
+ require.True(t, it.HasNext())
+ folderRaw, err := it.Fetch()
+ require.NoError(t, err)
+ node := folderRaw.(*QueueIteratorNode)
+ require.Equal(t, "a", node.Data())
+ require.True(t, it.HasNext())
+ folderRaw, err = it.Fetch()
+ require.NoError(t, err)
+ node = folderRaw.(*QueueIteratorNode)
+ require.Equal(t, "b", node.Data())
+ require.False(t, it.HasNext())
+}
diff --git a/plugins/jenkins/models/job.go b/plugins/jenkins/models/job.go
index 0a406999..904f62d6 100644
--- a/plugins/jenkins/models/job.go
+++ b/plugins/jenkins/models/job.go
@@ -48,6 +48,11 @@ type FolderInput struct {
Path string
}
+func (f *FolderInput) Data() interface{} {
+ // default implementation
+ return f.Path
+}
+
func NewFolderInput(path string) *FolderInput {
return &FolderInput{
Path: path,
diff --git a/plugins/jenkins/models/job_test.go b/plugins/jenkins/models/job_test.go
new file mode 100644
index 00000000..7388bc29
--- /dev/null
+++ b/plugins/jenkins/models/job_test.go
@@ -0,0 +1,24 @@
+package models
+
+import (
+ "github.com/apache/incubator-devlake/plugins/helper"
+ "github.com/stretchr/testify/require"
+ "testing"
+)
+
+func TestFolderInput(t *testing.T) {
+ it := helper.NewQueueIterator()
+ it.Push(NewFolderInput("a"))
+ it.Push(NewFolderInput("b"))
+ require.True(t, it.HasNext())
+ folderRaw, err := it.Fetch()
+ require.NoError(t, err)
+ folder := folderRaw.(*FolderInput)
+ require.Equal(t, "a", folder.Data())
+ require.True(t, it.HasNext())
+ folderRaw, err = it.Fetch()
+ require.NoError(t, err)
+ folder = folderRaw.(*FolderInput)
+ require.Equal(t, "b", folder.Data())
+ require.False(t, it.HasNext())
+}