Explorar o código

Merge pull request #5431 from shykes/engine-len

engine.Len returns the number of keys in an env
Solomon Hykes %!s(int64=11) %!d(string=hai) anos
pai
achega
8fac9a345b
Modificáronse 2 ficheiros con 35 adicións e 0 borrados
  1. 7 0
      engine/env.go
  2. 28 0
      engine/env_test.go

+ 7 - 0
engine/env.go

@@ -36,6 +36,13 @@ func (env *Env) Exists(key string) bool {
 	return exists
 }
 
+// Len returns the number of keys in the environment.
+// Note that len(env) might be different from env.Len(),
+// because the same key might be set multiple times.
+func (env *Env) Len() int {
+	return len(env.Map())
+}
+
 func (env *Env) Init(src *Env) {
 	(*env) = make([]string, 0, len(*src))
 	for _, val := range *src {

+ 28 - 0
engine/env_test.go

@@ -4,6 +4,34 @@ import (
 	"testing"
 )
 
+func TestEnvLenZero(t *testing.T) {
+	env := &Env{}
+	if env.Len() != 0 {
+		t.Fatalf("%d", env.Len())
+	}
+}
+
+func TestEnvLenNotZero(t *testing.T) {
+	env := &Env{}
+	env.Set("foo", "bar")
+	env.Set("ga", "bu")
+	if env.Len() != 2 {
+		t.Fatalf("%d", env.Len())
+	}
+}
+
+func TestEnvLenDup(t *testing.T) {
+	env := &Env{
+		"foo=bar",
+		"foo=baz",
+		"a=b",
+	}
+	// len(env) != env.Len()
+	if env.Len() != 2 {
+		t.Fatalf("%d", env.Len())
+	}
+}
+
 func TestNewJob(t *testing.T) {
 	job := mkJob(t, "dummy", "--level=awesome")
 	if job.Name != "dummy" {