github.com/dahs81/otto@v0.2.1-0.20160126165905-6400716cf085/foundation/tuple_test.go (about)

     1  package foundation
     2  
     3  import (
     4  	"reflect"
     5  	"sort"
     6  	"testing"
     7  )
     8  
     9  func TestTupleSlice_sort(t *testing.T) {
    10  	tuples := []Tuple{
    11  		{"go", "aws", "b"},
    12  		{"rails", "aws", "b"},
    13  		{"go", "google", "a"},
    14  		{"go", "aws", "a"},
    15  	}
    16  
    17  	expected := []Tuple{
    18  		{"go", "aws", "a"},
    19  		{"go", "aws", "b"},
    20  		{"go", "google", "a"},
    21  		{"rails", "aws", "b"},
    22  	}
    23  
    24  	sort.Sort(TupleSlice(tuples))
    25  	if !reflect.DeepEqual(tuples, expected) {
    26  		t.Fatalf("bad: %#v", tuples)
    27  	}
    28  }
    29  
    30  func TestTupleMap_Lookup(t *testing.T) {
    31  	var value int
    32  	factory := func(v int) Factory {
    33  		return func() (Foundation, error) {
    34  			value = v
    35  			return nil, nil
    36  		}
    37  	}
    38  
    39  	cases := []struct {
    40  		M        TupleMap
    41  		T        Tuple
    42  		Expected int
    43  	}{
    44  		{
    45  			map[Tuple]Factory{
    46  				Tuple{"foo", "bar", "baz"}: factory(7),
    47  			},
    48  			Tuple{"foo", "bar", "baz"},
    49  			7,
    50  		},
    51  
    52  		{
    53  			map[Tuple]Factory{
    54  				Tuple{"foo", "*", "baz"}: factory(7),
    55  			},
    56  			Tuple{"foo", "bar", "baz"},
    57  			7,
    58  		},
    59  
    60  		{
    61  			map[Tuple]Factory{
    62  				Tuple{"foo", "bar", "*"}: factory(7),
    63  			},
    64  			Tuple{"foo", "bar", "baz"},
    65  			7,
    66  		},
    67  
    68  		{
    69  			map[Tuple]Factory{
    70  				Tuple{"foo", "*", "*"}: factory(7),
    71  			},
    72  			Tuple{"foo", "bar", "baz"},
    73  			7,
    74  		},
    75  
    76  		{
    77  			map[Tuple]Factory{
    78  				Tuple{"foo", "*", "*"}:     factory(12),
    79  				Tuple{"foo", "bar", "baz"}: factory(7),
    80  			},
    81  			Tuple{"foo", "bar", "baz"},
    82  			7,
    83  		},
    84  	}
    85  
    86  	for i, tc := range cases {
    87  		// Reset the value
    88  		value = 0
    89  
    90  		f := tc.M.Lookup(tc.T)
    91  		if f != nil {
    92  			f()
    93  		}
    94  
    95  		if value != tc.Expected {
    96  			t.Fatalf("%d: bad: %d", i, value)
    97  		}
    98  	}
    99  }