github.com/mattn/anko@v0.1.10/env/env_test.go (about)

     1  package env
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  )
     7  
     8  func TestString(t *testing.T) {
     9  	t.Parallel()
    10  
    11  	env := NewEnv()
    12  	env.Define("a", "a")
    13  	output := env.String()
    14  	expected := `No parent
    15  a = "a"
    16  `
    17  	if output != expected {
    18  		t.Errorf("received: %v - expected: %v", output, expected)
    19  	}
    20  
    21  	env = env.NewEnv()
    22  	env.Define("b", "b")
    23  	output = env.String()
    24  	expected = `Has parent
    25  b = "b"
    26  `
    27  	if output != expected {
    28  		t.Errorf("received: %v - expected: %v", output, expected)
    29  	}
    30  
    31  	env = NewEnv()
    32  	env.Define("c", "c")
    33  	env.DefineType("string", "a")
    34  	output = env.String()
    35  	expected = `No parent
    36  c = "c"
    37  string = string
    38  `
    39  	if output != expected {
    40  		t.Errorf("received: %v - expected: %v", output, expected)
    41  	}
    42  }
    43  
    44  func TestGetEnvFromPath(t *testing.T) {
    45  	t.Parallel()
    46  
    47  	env := NewEnv()
    48  	a, err := env.NewModule("a")
    49  	if err != nil {
    50  		t.Fatal("NewModule error:", err)
    51  	}
    52  	var b *Env
    53  	b, err = a.NewModule("b")
    54  	if err != nil {
    55  		t.Fatal("NewModule error:", err)
    56  	}
    57  	var c *Env
    58  	c, err = b.NewModule("c")
    59  	if err != nil {
    60  		t.Fatal("NewModule error:", err)
    61  	}
    62  	err = c.Define("d", "d")
    63  	if err != nil {
    64  		t.Fatal("Define error:", err)
    65  	}
    66  
    67  	e, err := env.GetEnvFromPath(nil)
    68  	if err != nil {
    69  		t.Fatal("GetEnvFromPath error:", err)
    70  	}
    71  	if e == nil {
    72  		t.Fatal("GetEnvFromPath e nil")
    73  	}
    74  
    75  	e, err = env.GetEnvFromPath([]string{})
    76  	if err != nil {
    77  		t.Fatal("GetEnvFromPath error:", err)
    78  	}
    79  	if e == nil {
    80  		t.Fatal("GetEnvFromPath e nil")
    81  	}
    82  
    83  	e, err = env.GetEnvFromPath([]string{"a", "c"})
    84  	expected := "no namespace called: c"
    85  	if err == nil || err.Error() != expected {
    86  		t.Fatalf("GetEnvFromPath error - received: %v - expected: %v", err, expected)
    87  	}
    88  	if e != nil {
    89  		t.Fatal("GetEnvFromPath e not nil")
    90  	}
    91  
    92  	// a.b.c
    93  
    94  	e, err = env.GetEnvFromPath([]string{"a", "b", "c"})
    95  	if err != nil {
    96  		t.Fatal("GetEnvFromPath error:", err)
    97  	}
    98  	if e == nil {
    99  		t.Fatal("GetEnvFromPath e nil")
   100  	}
   101  	var value interface{}
   102  	value, err = e.Get("d")
   103  	if err != nil {
   104  		t.Fatal("Get error:", err)
   105  	}
   106  	v, ok := value.(string)
   107  	if !ok {
   108  		t.Fatal("value not string")
   109  	}
   110  	if v != "d" {
   111  		t.Errorf("value - received: %v - expected: %v", v, "d")
   112  	}
   113  
   114  	e, err = a.GetEnvFromPath([]string{"a", "b", "c"})
   115  	if err != nil {
   116  		t.Fatal("GetEnvFromPath error:", err)
   117  	}
   118  	if e == nil {
   119  		t.Fatal("GetEnvFromPath e nil")
   120  	}
   121  	value, err = e.Get("d")
   122  	if err != nil {
   123  		t.Fatal("Get error:", err)
   124  	}
   125  	v, ok = value.(string)
   126  	if !ok {
   127  		t.Fatal("value not string")
   128  	}
   129  	if v != "d" {
   130  		t.Errorf("value - received: %v - expected: %v", v, "d")
   131  	}
   132  
   133  	e, err = b.GetEnvFromPath([]string{"a", "b", "c"})
   134  	if err != nil {
   135  		t.Fatal("GetEnvFromPath error:", err)
   136  	}
   137  	if e == nil {
   138  		t.Fatal("GetEnvFromPath e nil")
   139  	}
   140  	value, err = e.Get("d")
   141  	if err != nil {
   142  		t.Fatal("Get error:", err)
   143  	}
   144  	v, ok = value.(string)
   145  	if !ok {
   146  		t.Fatal("value not string")
   147  	}
   148  	if v != "d" {
   149  		t.Errorf("value - received: %v - expected: %v", v, "d")
   150  	}
   151  
   152  	e, err = c.GetEnvFromPath([]string{"a", "b", "c"})
   153  	if err != nil {
   154  		t.Fatal("GetEnvFromPath error:", err)
   155  	}
   156  	if e == nil {
   157  		t.Fatal("GetEnvFromPath e nil")
   158  	}
   159  	value, err = e.Get("d")
   160  	if err != nil {
   161  		t.Fatal("Get error:", err)
   162  	}
   163  	v, ok = value.(string)
   164  	if !ok {
   165  		t.Fatal("value not string")
   166  	}
   167  	if v != "d" {
   168  		t.Errorf("value - received: %v - expected: %v", v, "d")
   169  	}
   170  
   171  	// b.c
   172  
   173  	e, err = env.GetEnvFromPath([]string{"b", "c"})
   174  	expected = "no namespace called: b"
   175  	if err == nil || err.Error() != expected {
   176  		t.Fatalf("GetEnvFromPath error - received: %v - expected: %v", err, expected)
   177  	}
   178  	if e != nil {
   179  		t.Fatal("GetEnvFromPath e not nil")
   180  	}
   181  
   182  	e, err = a.GetEnvFromPath([]string{"b", "c"})
   183  	if err != nil {
   184  		t.Fatal("GetEnvFromPath error:", err)
   185  	}
   186  	if e == nil {
   187  		t.Fatal("GetEnvFromPath e nil")
   188  	}
   189  	value, err = e.Get("d")
   190  	if err != nil {
   191  		t.Fatal("Get error:", err)
   192  	}
   193  	v, ok = value.(string)
   194  	if !ok {
   195  		t.Fatal("value not string")
   196  	}
   197  	if v != "d" {
   198  		t.Errorf("value - received: %v - expected: %v", v, "d")
   199  	}
   200  
   201  	e, err = b.GetEnvFromPath([]string{"b", "c"})
   202  	if err != nil {
   203  		t.Fatal("GetEnvFromPath error:", err)
   204  	}
   205  	if e == nil {
   206  		t.Fatal("GetEnvFromPath e nil")
   207  	}
   208  	value, err = e.Get("d")
   209  	if err != nil {
   210  		t.Fatal("Get error:", err)
   211  	}
   212  	v, ok = value.(string)
   213  	if !ok {
   214  		t.Fatal("value not string")
   215  	}
   216  	if v != "d" {
   217  		t.Errorf("value - received: %v - expected: %v", v, "d")
   218  	}
   219  
   220  	e, err = c.GetEnvFromPath([]string{"b", "c"})
   221  	if err != nil {
   222  		t.Fatal("GetEnvFromPath error:", err)
   223  	}
   224  	if e == nil {
   225  		t.Fatal("GetEnvFromPath e nil")
   226  	}
   227  	value, err = e.Get("d")
   228  	if err != nil {
   229  		t.Fatal("Get error:", err)
   230  	}
   231  	v, ok = value.(string)
   232  	if !ok {
   233  		t.Fatal("value not string")
   234  	}
   235  	if v != "d" {
   236  		t.Errorf("value - received: %v - expected: %v", v, "d")
   237  	}
   238  
   239  	// c
   240  
   241  	e, err = env.GetEnvFromPath([]string{"c"})
   242  	expected = "no namespace called: c"
   243  	if err == nil || err.Error() != expected {
   244  		t.Fatalf("GetEnvFromPath error - received: %v - expected: %v", err, expected)
   245  	}
   246  	if e != nil {
   247  		t.Fatal("GetEnvFromPath e not nil")
   248  	}
   249  
   250  	e, err = b.GetEnvFromPath([]string{"c"})
   251  	if err != nil {
   252  		t.Fatal("GetEnvFromPath error:", err)
   253  	}
   254  	if e == nil {
   255  		t.Fatal("GetEnvFromPath e nil")
   256  	}
   257  	value, err = e.Get("d")
   258  	if err != nil {
   259  		t.Fatal("Get error:", err)
   260  	}
   261  	v, ok = value.(string)
   262  	if !ok {
   263  		t.Fatal("value not string")
   264  	}
   265  	if v != "d" {
   266  		t.Errorf("value - received: %v - expected: %v", v, "d")
   267  	}
   268  
   269  	e, err = c.GetEnvFromPath(nil)
   270  	if err != nil {
   271  		t.Fatal("GetEnvFromPath error:", err)
   272  	}
   273  	if e == nil {
   274  		t.Fatal("GetEnvFromPath e nil")
   275  	}
   276  	value, err = e.Get("d")
   277  	if err != nil {
   278  		t.Fatal("Get error:", err)
   279  	}
   280  	v, ok = value.(string)
   281  	if !ok {
   282  		t.Fatal("value not string")
   283  	}
   284  	if v != "d" {
   285  		t.Errorf("value - received: %v - expected: %v", v, "d")
   286  	}
   287  }
   288  
   289  func TestCopy(t *testing.T) {
   290  	t.Parallel()
   291  
   292  	parent := NewEnv()
   293  	parent.Define("a", "a")
   294  	parent.DefineType("b", []bool{})
   295  	child := parent.NewEnv()
   296  	child.Define("c", "c")
   297  	child.DefineType("d", []int64{})
   298  	copy := child.Copy()
   299  
   300  	if v, e := copy.Get("a"); e != nil || v != "a" {
   301  		t.Errorf("copy missing value")
   302  	}
   303  	if v, e := copy.Type("b"); e != nil || v != reflect.TypeOf([]bool{}) {
   304  		t.Errorf("copy missing type")
   305  	}
   306  	if v, e := copy.Get("c"); e != nil || v != "c" {
   307  		t.Errorf("copy missing value")
   308  	}
   309  	if v, e := copy.Type("d"); e != nil || v != reflect.TypeOf([]int64{}) {
   310  		t.Errorf("copy missing type")
   311  	}
   312  
   313  	// TODO: add more get type tests
   314  
   315  	copy.Set("a", "i")
   316  	if v, e := child.Get("a"); e != nil || v != "i" {
   317  		t.Errorf("parent was not modified")
   318  	}
   319  	if v, e := copy.Get("a"); e != nil || v != "i" {
   320  		t.Errorf("copy did not get parent value")
   321  	}
   322  
   323  	copy.Set("c", "j")
   324  	if v, e := child.Get("c"); e != nil || v != "c" {
   325  		t.Errorf("child was not modified")
   326  	}
   327  	if v, e := copy.Get("c"); e != nil || v != "j" {
   328  		t.Errorf("copy child was not modified")
   329  	}
   330  
   331  	child.Set("a", "x")
   332  	if v, e := child.Get("a"); e != nil || v != "x" {
   333  		t.Errorf("parent was not modified")
   334  	}
   335  	if v, e := copy.Get("a"); e != nil || v != "x" {
   336  		t.Errorf("copy did not get parent value")
   337  	}
   338  
   339  	child.Set("c", "z")
   340  	if v, e := child.Get("c"); e != nil || v != "z" {
   341  		t.Errorf("child was not modified")
   342  	}
   343  	if v, e := copy.Get("c"); e != nil || v != "j" {
   344  		t.Errorf("copy child was modified")
   345  	}
   346  
   347  	parent.Set("a", "m")
   348  	if v, e := child.Get("a"); e != nil || v != "m" {
   349  		t.Errorf("parent was not modified")
   350  	}
   351  	if v, e := copy.Get("a"); e != nil || v != "m" {
   352  		t.Errorf("copy did not get parent value")
   353  	}
   354  
   355  	parent.Define("x", "n")
   356  	if v, e := child.Get("x"); e != nil || v != "n" {
   357  		t.Errorf("child did not get parent value")
   358  	}
   359  	if v, e := copy.Get("x"); e != nil || v != "n" {
   360  		t.Errorf("copy did not get parent value")
   361  	}
   362  }
   363  
   364  func TestDeepCopy(t *testing.T) {
   365  	t.Parallel()
   366  
   367  	parent := NewEnv()
   368  	parent.Define("a", "a")
   369  	env := parent.NewEnv()
   370  	copy := env.DeepCopy()
   371  
   372  	// TODO: add more/better tests, like above
   373  	if v, e := copy.Get("a"); e != nil || v != "a" {
   374  		t.Errorf("copy doesn't retain original values")
   375  	}
   376  	parent.Set("a", "b")
   377  	if v, e := env.Get("a"); e != nil || v != "b" {
   378  		t.Errorf("son was not modified")
   379  	}
   380  	if v, e := copy.Get("a"); e != nil || v != "a" {
   381  		t.Errorf("copy got the new value")
   382  	}
   383  	parent.Set("a", "c")
   384  	if v, e := env.Get("a"); e != nil || v != "c" {
   385  		t.Errorf("original was not modified")
   386  	}
   387  	if v, e := copy.Get("a"); e != nil || v != "a" {
   388  		t.Errorf("copy was modified")
   389  	}
   390  	parent.Define("b", "b")
   391  	if _, e := copy.Get("b"); e == nil {
   392  		t.Errorf("copy parent was modified")
   393  	}
   394  }