github.com/tcnksm/go@v0.0.0-20141208075154-439b32936367/src/os/env_test.go (about) 1 // Copyright 2010 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package os_test 6 7 import ( 8 . "os" 9 "reflect" 10 "strings" 11 "testing" 12 ) 13 14 // testGetenv gives us a controlled set of variables for testing Expand. 15 func testGetenv(s string) string { 16 switch s { 17 case "*": 18 return "all the args" 19 case "#": 20 return "NARGS" 21 case "$": 22 return "PID" 23 case "1": 24 return "ARGUMENT1" 25 case "HOME": 26 return "/usr/gopher" 27 case "H": 28 return "(Value of H)" 29 case "home_1": 30 return "/usr/foo" 31 case "_": 32 return "underscore" 33 } 34 return "" 35 } 36 37 var expandTests = []struct { 38 in, out string 39 }{ 40 {"", ""}, 41 {"$*", "all the args"}, 42 {"$$", "PID"}, 43 {"${*}", "all the args"}, 44 {"$1", "ARGUMENT1"}, 45 {"${1}", "ARGUMENT1"}, 46 {"now is the time", "now is the time"}, 47 {"$HOME", "/usr/gopher"}, 48 {"$home_1", "/usr/foo"}, 49 {"${HOME}", "/usr/gopher"}, 50 {"${H}OME", "(Value of H)OME"}, 51 {"A$$$#$1$H$home_1*B", "APIDNARGSARGUMENT1(Value of H)/usr/foo*B"}, 52 } 53 54 func TestExpand(t *testing.T) { 55 for _, test := range expandTests { 56 result := Expand(test.in, testGetenv) 57 if result != test.out { 58 t.Errorf("Expand(%q)=%q; expected %q", test.in, result, test.out) 59 } 60 } 61 } 62 63 func TestConsistentEnviron(t *testing.T) { 64 e0 := Environ() 65 for i := 0; i < 10; i++ { 66 e1 := Environ() 67 if !reflect.DeepEqual(e0, e1) { 68 t.Fatalf("environment changed") 69 } 70 } 71 } 72 73 func TestUnsetenv(t *testing.T) { 74 const testKey = "GO_TEST_UNSETENV" 75 set := func() bool { 76 prefix := testKey + "=" 77 for _, key := range Environ() { 78 if strings.HasPrefix(key, prefix) { 79 return true 80 } 81 } 82 return false 83 } 84 if err := Setenv(testKey, "1"); err != nil { 85 t.Fatalf("Setenv: %v", err) 86 } 87 if !set() { 88 t.Error("Setenv didn't set TestUnsetenv") 89 } 90 if err := Unsetenv(testKey); err != nil { 91 t.Fatalf("Unsetenv: %v", err) 92 } 93 if set() { 94 t.Fatal("Unsetenv didn't clear TestUnsetenv") 95 } 96 }