From 4dabf654cdd8d1486e8c13bd99a7749fb299db63 Mon Sep 17 00:00:00 2001 From: Terin Stock Date: Sat, 13 Jan 2018 21:55:25 -0800 Subject: feat(main): implement []string flag valuer Implement flag.Value to automnatically split strings into an array at their spaces. Change-Id: Ia9139e23d74a30acfc74cb65935bb7fc2b322aec --- Gopkg.lock | 8 +++++++- internal/flag/flag.go | 34 ++++++++++++++++++++++++++++++++++ internal/flag/flag_test.go | 29 +++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 internal/flag/flag.go create mode 100644 internal/flag/flag_test.go diff --git a/Gopkg.lock b/Gopkg.lock index 86ff3bb..49c1aac 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -1,6 +1,12 @@ # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. +[[projects]] + name = "github.com/google/go-cmp" + packages = ["cmp","cmp/internal/diff","cmp/internal/function","cmp/internal/value"] + revision = "8099a9787ce5dc5984ed879a3bda47dc730a8e97" + version = "v0.1.0" + [[projects]] branch = "master" name = "golang.org/x/net" @@ -16,6 +22,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "1b7a27daae87f4f213b3475a08fd7367804c2755750bf27adb8c32ada7c9bdae" + inputs-digest = "14999a24917f91009d496a5729d3a7dd84e62b29e070424212d8de53cc71b47e" solver-name = "gps-cdcl" solver-version = 1 diff --git a/internal/flag/flag.go b/internal/flag/flag.go new file mode 100644 index 0000000..7c7d977 --- /dev/null +++ b/internal/flag/flag.go @@ -0,0 +1,34 @@ +package flag + +import ( + "fmt" + "strings" +) + +// A StringsValue is a command-line flag that interprets its argument +// as a space-separated list of strings. +type StringsValue []string + +// Set implements the flag.Value interface by spliting the provided string at +// spaces. +func (v *StringsValue) Set(s string) error { + if s == "" { + *v = []string{} + return nil + } + + *v = strings.Fields(s) + + return nil +} + +// Get implements the flag.Getter interface by returning the contents of this +// value. +func (v *StringsValue) Get() interface{} { + return []string(*v) +} + +// String returns a string +func (v *StringsValue) String() string { + return fmt.Sprintf("%s", *v) +} diff --git a/internal/flag/flag_test.go b/internal/flag/flag_test.go new file mode 100644 index 0000000..f5ffca4 --- /dev/null +++ b/internal/flag/flag_test.go @@ -0,0 +1,29 @@ +package flag_test + +import ( + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/terinjokes/bakelite/internal/flag" +) + +func TestStringsValue(t *testing.T) { + tests := []struct { + v string + want []string + }{ + {"", []string{}}, + {"a b c", []string{"a", "b", "c"}}, + {"foo bar baz", []string{"foo", "bar", "baz"}}, + {"foo bar baz", []string{"foo", "bar", "baz"}}, + } + + for i, tt := range tests { + got := flag.StringsValue([]string{}) + got.Set(tt.v) + + if diff := cmp.Diff(tt.want, got.Get()); diff != "" { + t.Errorf("#%d: manifest differs. (-got +want):\n%s", i, diff) + } + } +} -- cgit 1.4.1