Add menu sort tests
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 7 Feb 2016 11:34:43 +0000 (12:34 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 7 Feb 2016 11:34:43 +0000 (12:34 +0100)
hugolib/menu.go
hugolib/menu_test.go

index 2e2670b349f05a334b9275944c1cb401e902cfcb..6c3738953911ac8a83c69c1f2a2c6a176856fb06 100644 (file)
@@ -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 {
index 5687454c22efb1621738d4ad2030134dbc90ad91..f0df5c9674600c6b4bfc839c64912a290829f71a 100644 (file)
@@ -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()