github.com/elves/elvish@v0.15.0/pkg/edit/ns_helper_test.go (about) 1 package edit 2 3 import ( 4 "reflect" 5 "sort" 6 "testing" 7 8 "github.com/elves/elvish/pkg/eval" 9 "github.com/elves/elvish/pkg/eval/vars" 10 ) 11 12 var testVar = vars.NewReadOnly("") 13 14 var eachVariableInTopTests = []struct { 15 builtin *eval.Ns 16 global *eval.Ns 17 ns string 18 wantNames []string 19 }{ 20 { 21 builtin: eval.NsBuilder{"foo": testVar, "bar": testVar}.Ns(), 22 global: eval.NsBuilder{"lorem": testVar, "ipsum": testVar}.Ns(), 23 ns: "builtin:", 24 wantNames: []string{"bar", "foo"}, 25 }, 26 { 27 builtin: eval.NsBuilder{"foo": testVar, "bar": testVar}.Ns(), 28 global: eval.NsBuilder{"lorem": testVar, "ipsum": testVar}.Ns(), 29 ns: "", 30 wantNames: []string{"bar", "foo", "ipsum", "lorem"}, 31 }, 32 { 33 builtin: eval.NsBuilder{ 34 "mod:": vars.NewReadOnly(eval.NsBuilder{"a": testVar, "b": testVar}.Ns()), 35 }.Ns(), 36 ns: "mod:", 37 wantNames: []string{"a", "b"}, 38 }, 39 { 40 global: eval.NsBuilder{ 41 "mod:": vars.NewReadOnly(eval.NsBuilder{"a": testVar, "b": testVar}.Ns()), 42 }.Ns(), 43 ns: "mod:", 44 wantNames: []string{"a", "b"}, 45 }, 46 { 47 ns: "mod:", 48 wantNames: nil, 49 }, 50 } 51 52 func TestEachVariableInTop(t *testing.T) { 53 for _, test := range eachVariableInTopTests { 54 builtin := getNs(test.builtin) 55 global := getNs(test.global) 56 57 var names []string 58 eachVariableInTop(builtin, global, test.ns, 59 func(s string) { names = append(names, s) }) 60 sort.Strings(names) 61 62 if !reflect.DeepEqual(names, test.wantNames) { 63 t.Errorf("got names %v, want %v", names, test.wantNames) 64 } 65 } 66 } 67 68 var eachNsInTopTests = []struct { 69 builtin *eval.Ns 70 global *eval.Ns 71 wantNames []string 72 }{ 73 { 74 wantNames: []string{"E:", "builtin:", "e:"}, 75 }, 76 { 77 builtin: eval.NsBuilder{"foo:": testVar}.Ns(), 78 wantNames: []string{"E:", "builtin:", "e:", "foo:"}, 79 }, 80 { 81 global: eval.NsBuilder{"foo:": testVar}.Ns(), 82 wantNames: []string{"E:", "builtin:", "e:", "foo:"}, 83 }, 84 { 85 builtin: eval.NsBuilder{"foo:": testVar}.Ns(), 86 global: eval.NsBuilder{"bar:": testVar}.Ns(), 87 wantNames: []string{"E:", "bar:", "builtin:", "e:", "foo:"}, 88 }, 89 } 90 91 func TestEachNsInTop(t *testing.T) { 92 for _, test := range eachNsInTopTests { 93 builtin := getNs(test.builtin) 94 global := getNs(test.global) 95 96 var names []string 97 eachNsInTop(builtin, global, func(s string) { names = append(names, s) }) 98 sort.Strings(names) 99 100 if !reflect.DeepEqual(names, test.wantNames) { 101 t.Errorf("got names %v, want %v", names, test.wantNames) 102 } 103 } 104 } 105 106 func getNs(ns *eval.Ns) *eval.Ns { 107 if ns == nil { 108 return new(eval.Ns) 109 } 110 return ns 111 }