]> Cypherpunks repositories - gostls13.git/commitdiff
Define Len() for JSON Map.
authorDavid Symonds <dsymonds@golang.org>
Thu, 7 May 2009 22:09:32 +0000 (15:09 -0700)
committerDavid Symonds <dsymonds@golang.org>
Thu, 7 May 2009 22:09:32 +0000 (15:09 -0700)
R=rsc
APPROVED=rsc
DELTA=6  (5 added, 0 deleted, 1 changed)
OCL=28398
CL=28430

src/lib/json/generic.go
src/lib/json/generic_test.go

index 4393e4d0804a871973dc8557d698f6d1db80e905..e3194eb17f6d04f5ea3bb8cce2727157b66dab0b 100644 (file)
@@ -33,7 +33,7 @@ type Json interface {
        Bool() bool;            // boolean (BoolKind)
        Get(s string) Json;     // field lookup (MapKind)
        Elem(i int) Json;       // element lookup (ArrayKind)
-       Len() int;              // length (ArrayKind)
+       Len() int;              // length (ArrayKind, MapKind)
 }
 
 // JsonToString returns the textual JSON syntax representation
@@ -112,6 +112,7 @@ func (j *_Bool) String() string {
 
 type _Map struct { m map[string]Json; _Null }
 func (j *_Map) Kind() int { return MapKind }
+func (j *_Map) Len() int { return len(j.m) }
 func (j *_Map) Get(s string) Json {
        if j.m == nil {
                return Null
index ab3e24fb806e735ab35331e990dec98be1854602..68868d7a5a4079bf1a5b9664bd7e08799118c3aa 100644 (file)
@@ -64,6 +64,10 @@ func TestJsonMap(t *testing.T) {
        if mapv == nil {
                t.Fatalf("StringToJson(%#q) => nil, %v, %v", mapstr, ok, errtok);
        }
+       if cnt := mapv.Len(); cnt != len(jsontests) {
+               t.Errorf("StringToJson(%#q).Len() => %v, want %v", mapstr, cnt,
+                        len(jsontests));
+       }
        for k,v := range values {
                if v1 := mapv.Get(k); !Equal(v1, v) {
                        t.Errorf("MapTest: Walk(%#q) => %v, want %v", k, v1, v);