From 75044c199f02b3aa6690d5f8e1884d6971a49246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sun, 7 Feb 2016 12:34:43 +0100 Subject: [PATCH] Add menu sort tests --- hugolib/menu.go | 3 ++- hugolib/menu_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/hugolib/menu.go b/hugolib/menu.go index 2e2670b34..6c3738953 100644 --- a/hugolib/menu.go +++ b/hugolib/menu.go @@ -152,8 +152,9 @@ func (ms *MenuSorter) Swap(i, j int) { ms.menu[i], ms.menu[j] = ms.menu[j], ms.m // Less is part of sort.Interface. It is implemented by calling the "by" closure in the sorter. func (ms *MenuSorter) Less(i, j int) bool { return ms.by(ms.menu[i], ms.menu[j]) } -func (m Menu) Sort() { +func (m Menu) Sort() Menu { MenuEntryBy(defaultMenuEntrySort).Sort(m) + return m } func (m Menu) Limit(n int) Menu { diff --git a/hugolib/menu_test.go b/hugolib/menu_test.go index 5687454c2..f0df5c967 100644 --- a/hugolib/menu_test.go +++ b/hugolib/menu_test.go @@ -497,6 +497,32 @@ func TestMenuLimit(t *testing.T) { assert.Equal(t, m, m.Limit(5)) } +func TestMenuSortByN(t *testing.T) { + + for i, this := range []struct { + sortFunc func(p Menu) Menu + assertFunc func(p Menu) bool + }{ + {(Menu).Sort, func(p Menu) bool { return p[0].Weight == 1 && p[1].Name == "nx" && p[2].Identifier == "ib" }}, + {(Menu).ByWeight, func(p Menu) bool { return p[0].Weight == 1 && p[1].Name == "nx" && p[2].Identifier == "ib" }}, + {(Menu).ByName, func(p Menu) bool { return p[0].Name == "na" }}, + {(Menu).Reverse, func(p Menu) bool { return p[0].Identifier == "ib" && p[len(p)-1].Identifier == "ia" }}, + } { + menu := Menu{&MenuEntry{Weight: 3, Name: "nb", Identifier: "ia"}, + &MenuEntry{Weight: 1, Name: "na", Identifier: "ic"}, + &MenuEntry{Weight: 1, Name: "nx", Identifier: "ic"}, + &MenuEntry{Weight: 2, Name: "nb", Identifier: "ix"}, + &MenuEntry{Weight: 2, Name: "nb", Identifier: "ib"}} + + sorted := this.sortFunc(menu) + + if !this.assertFunc(sorted) { + t.Errorf("[%d] sort error", i) + } + } + +} + func TestHomeNodeMenu(t *testing.T) { viper.Reset() defer viper.Reset()