From be83044f5967b2ca0e8b7d25bb1c239fb8708de1 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 23 May 2014 22:07:33 -0700 Subject: [PATCH] config: tests, error cases --- config/variable.go | 8 ++++++ config/variable_test.go | 58 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 config/variable_test.go diff --git a/config/variable.go b/config/variable.go index edf8b671c..e26fa85bb 100644 --- a/config/variable.go +++ b/config/variable.go @@ -1,6 +1,7 @@ package config import ( + "fmt" "reflect" "regexp" "strings" @@ -53,6 +54,13 @@ func (w *variableDetectWalker) Primitive(v reflect.Value) error { var err error var iv InterpolatedVariable + if strings.Index(key, ".") == -1 { + return fmt.Errorf( + "Interpolated variable '%s' has bad format. "+ + "Did you mean 'var.%s'?", + key, key) + } + if strings.HasPrefix(key, "var.") { iv, err = NewUserVariable(key) } else { diff --git a/config/variable_test.go b/config/variable_test.go new file mode 100644 index 000000000..bef0f60af --- /dev/null +++ b/config/variable_test.go @@ -0,0 +1,58 @@ +package config + +import ( + "reflect" + "testing" +) + +func TestVariableDetectWalker(t *testing.T) { + w := new(variableDetectWalker) + + str := `foo ${var.bar}` + if err := w.Primitive(reflect.ValueOf(str)); err != nil { + t.Fatalf("err: %s", err) + } + + if len(w.Variables) != 1 { + t.Fatalf("bad: %#v", w.Variables) + } + if w.Variables["var.bar"].(*UserVariable).FullKey() != "var.bar" { + t.Fatalf("bad: %#v", w.Variables) + } +} + +func TestVariableDetectWalker_bad(t *testing.T) { + w := new(variableDetectWalker) + + str := `foo ${bar}` + if err := w.Primitive(reflect.ValueOf(str)); err == nil { + t.Fatal("should error") + } +} + +func TestVariableDetectWalker_escaped(t *testing.T) { + w := new(variableDetectWalker) + + str := `foo $${var.bar}` + if err := w.Primitive(reflect.ValueOf(str)); err != nil { + t.Fatalf("err: %s", err) + } + + if len(w.Variables) > 0 { + t.Fatalf("bad: %#v", w.Variables) + } +} + +func TestVariableDetectWalker_empty(t *testing.T) { + w := new(variableDetectWalker) + + str := `foo` + if err := w.Primitive(reflect.ValueOf(str)); err != nil { + t.Fatalf("err: %s", err) + } + + if len(w.Variables) > 0 { + t.Fatalf("bad: %#v", w.Variables) + } +} +