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  }