From 69fb71d2cf64064d7ddd2d830efbdac0b19388e4 Mon Sep 17 00:00:00 2001 From: Trial97 Date: Mon, 25 Oct 2021 10:48:29 +0300 Subject: [PATCH] Updated orderednavigablemap --- utils/orderednavigablemap.go | 5 +++++ utils/orderednavigablemap_test.go | 37 +++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/utils/orderednavigablemap.go b/utils/orderednavigablemap.go index b50c9f190..dac53626d 100644 --- a/utils/orderednavigablemap.go +++ b/utils/orderednavigablemap.go @@ -67,6 +67,11 @@ func (onm *OrderedNavigableMap) Empty() bool { func (onm *OrderedNavigableMap) removeRef(path string) { for idxPath, slcIdx := range onm.orderRef { //remove the references from order if strings.HasPrefix(idxPath, path) { + if lp := len(path); len(idxPath) > lp && + idxPath[lp] != NestingSep[0] && + idxPath[lp] != IdxStart[0] { + continue + } for _, el := range slcIdx { onm.orderIdx.Remove(el) } diff --git a/utils/orderednavigablemap_test.go b/utils/orderednavigablemap_test.go index be5a11de5..d27c01b98 100644 --- a/utils/orderednavigablemap_test.go +++ b/utils/orderednavigablemap_test.go @@ -948,3 +948,40 @@ func TestOrderedNavigableMapCompose(t *testing.T) { t.Error(err) } } + +func TestOrderedNavigableMapSet2(t *testing.T) { + nm := NewOrderedNavigableMap() + + if err := nm.SetAsSlice(&FullPath{ + PathSlice: []string{"Field"}, + Path: "Field", + }, []*DataNode{NewLeafNode("1001")}); err != nil { + t.Error(err) + } + + if err := nm.SetAsSlice(&FullPath{ + PathSlice: []string{"Field1"}, + Path: "Field1", + }, []*DataNode{NewLeafNode("1002")}); err != nil { + t.Error(err) + } + if err := nm.SetAsSlice(&FullPath{ + PathSlice: []string{"Field"}, + Path: "Field", + }, []*DataNode{NewLeafNode("1001")}); err != nil { + t.Error(err) + } + + nMap := &DataNode{Type: NMMapType, Map: map[string]*DataNode{ + "Field1": {Type: NMSliceType, Slice: []*DataNode{NewLeafNode("1002")}}, + "Field": {Type: NMSliceType, Slice: []*DataNode{NewLeafNode("1001")}}, + }} + order := [][]string{{"Field1", "0"}, {"Field", "0"}} + + if !reflect.DeepEqual(nm.nm, nMap) { + t.Errorf("Expected %s ,received: %s", ToJSON(nMap), ToJSON(nm.nm)) + } + if !reflect.DeepEqual(nm.GetOrder(), order) { + t.Errorf("Expected %s ,received: %s", order, nm.GetOrder()) + } +}