diff --git a/engine/env.go b/engine/env.go index c43a5ec971..1da3ae52e0 100644 --- a/engine/env.go +++ b/engine/env.go @@ -194,25 +194,7 @@ func (env *Env) SetAuto(k string, v interface{}) { } func (env *Env) Encode(dst io.Writer) error { - m := make(map[string]interface{}) - for k, v := range env.Map() { - var val interface{} - if err := json.Unmarshal([]byte(v), &val); err == nil { - // FIXME: we fix-convert float values to int, because - // encoding/json decodes integers to float64, but cannot encode them back. - // (See http://golang.org/src/pkg/encoding/json/decode.go#L46) - if fval, isFloat := val.(float64); isFloat { - val = int(fval) - } - m[k] = val - } else { - m[k] = v - } - } - if err := json.NewEncoder(dst).Encode(&m); err != nil { - return err - } - return nil + return json.NewEncoder(dst).Encode(env.Map()) } func (env *Env) WriteTo(dst io.Writer) (n int64, err error) { diff --git a/engine/env_test.go b/engine/env_test.go index c7079ff942..da7d919f03 100644 --- a/engine/env_test.go +++ b/engine/env_test.go @@ -95,3 +95,21 @@ func TestEnviron(t *testing.T) { t.Fatalf("bar not found in the environ") } } + +func TestEnvWriteTo(t *testing.T) { + e := &Env{} + inputKey := "Version" + inputVal := "42.1" + e.Set(inputKey, inputVal) + out := NewOutput() + e2, err := out.AddEnv() + if err != nil { + t.Fatal(err) + } + e.WriteTo(out) + result := e2.Get(inputKey) + expected := inputVal + if expected != result { + t.Fatalf("%#v\n", result) + } +}