github.com/jerryclinesmith/packer@v0.3.7/common/command/build_flags_test.go (about) 1 package command 2 3 import ( 4 "flag" 5 "reflect" 6 "testing" 7 ) 8 9 func TestBuildOptionFlags(t *testing.T) { 10 opts := new(BuildOptions) 11 fs := flag.NewFlagSet("test", flag.ContinueOnError) 12 BuildOptionFlags(fs, opts) 13 14 args := []string{ 15 "-except=foo,bar,baz", 16 "-only=a,b", 17 "-var=foo=bar", 18 "-var", "bar=baz", 19 "-var=foo=bang", 20 "-var-file=foo", 21 "-var-file=bar", 22 } 23 24 err := fs.Parse(args) 25 if err != nil { 26 t.Fatalf("err: %s", err) 27 } 28 29 expected := []string{"foo", "bar", "baz"} 30 if !reflect.DeepEqual(opts.Except, expected) { 31 t.Fatalf("bad: %#v", opts.Except) 32 } 33 34 expected = []string{"a", "b"} 35 if !reflect.DeepEqual(opts.Only, expected) { 36 t.Fatalf("bad: %#v", opts.Only) 37 } 38 39 if len(opts.UserVars) != 2 { 40 t.Fatalf("bad: %#v", opts.UserVars) 41 } 42 43 if opts.UserVars["foo"] != "bang" { 44 t.Fatalf("bad: %#v", opts.UserVars) 45 } 46 47 if opts.UserVars["bar"] != "baz" { 48 t.Fatalf("bad: %#v", opts.UserVars) 49 } 50 51 expected = []string{"foo", "bar"} 52 if !reflect.DeepEqual(opts.UserVarFiles, expected) { 53 t.Fatalf("bad: %#v", opts.UserVarFiles) 54 } 55 } 56 57 func TestUserVarValue_implements(t *testing.T) { 58 var raw interface{} 59 raw = new(userVarValue) 60 if _, ok := raw.(flag.Value); !ok { 61 t.Fatalf("userVarValue should be a Value") 62 } 63 } 64 65 func TestUserVarValueSet(t *testing.T) { 66 sv := new(userVarValue) 67 err := sv.Set("key=value") 68 if err != nil { 69 t.Fatalf("err: %s", err) 70 } 71 72 vars := map[string]string(*sv) 73 if vars["key"] != "value" { 74 t.Fatalf("Bad: %#v", vars) 75 } 76 77 // Empty value 78 err = sv.Set("key=") 79 if err != nil { 80 t.Fatalf("err: %s", err) 81 } 82 83 vars = map[string]string(*sv) 84 if vars["key"] != "" { 85 t.Fatalf("Bad: %#v", vars) 86 } 87 88 // Equal in value 89 err = sv.Set("key=foo=bar") 90 if err != nil { 91 t.Fatalf("err: %s", err) 92 } 93 94 vars = map[string]string(*sv) 95 if vars["key"] != "foo=bar" { 96 t.Fatalf("Bad: %#v", vars) 97 } 98 99 // No equal 100 err = sv.Set("key") 101 if err == nil { 102 t.Fatal("should have error") 103 } 104 }