use reflect for document parsing
[epoint] / document / document_test.go
index 45cac1f..8c3413e 100644 (file)
@@ -59,17 +59,17 @@ sig
 -----END PGP SIGNATURE-----
 `)}
 
-var F = map[string]string{
-       "A": "foo",
-       "B": "bar",
-       "a": "baz",
+var F = []Field{
+       {"A", "foo"},
+       {"B", "bar"},
+       {"a", "baz"},
 }
 
 var testData = []struct {
        D []byte
        C *ClearSigned
        T string
-       F map[string]string
+       F []Field
 }{
        {[]byte(D1), C1, "cert", F},
        {[]byte(D2), C2, "cert", F},
@@ -81,13 +81,16 @@ func eqClearSigned(c1, c2 *ClearSigned) bool {
                string(c1.ArmoredSignature) == string(c2.ArmoredSignature)
 }
 
-func eqFields(f1, f2 map[string]string) bool {
-       for k,v := range f1 {
-               if f2[k] != v {
+func eqFields(f1, f2 []Field) bool {
+       if len(f1) != len(f2) {
+               return false
+       }
+       for i, v := range f1 {
+               if f2[i].Key != v.Key && f2[i].Value != v.Value {
                        return false
                }
        }
-       return len(f1) == len(f2)
+       return true
 }
 
 func TestClearSigned(t *testing.T) {
@@ -131,28 +134,63 @@ func TestParse(t *testing.T) {
 
 const draftBody = `Content-Type: text/plain.epoint.draft; charset=utf-8
 
-Drawer: 000000000000000000000000000000000000000a
-Beneficiary: 000000000000000000000000000000000000000b
+Drawer: 000000000000000000000000000000000000000A
+Beneficiary: 000000000000000000000000000000000000000B
 Amount: 1
 Denomination: half euro
-IssueDate: 2
-MaturityDate: 3
+Issue-Date: 2011-11-13T12:20:35Z
+Maturity-Date: 2011-12-27T09:18:46Z
 Notes: some notes
 Nonce: 42
-Server: 000000000000000000000000000000000000000c
-Drawee: 000000000000000000000000000000000000000d
+Server: 000000000000000000000000000000000000000C
+Drawee: 000000000000000000000000000000000000000D
 `
 
 func TestDraft(t *testing.T) {
        d, err := ParseDraft([]byte(draftBody))
        if err != nil {
-               t.Errorf("parse %q draft failed: %s\n", draftBody, err)
+               t.Errorf("ParseDraft failed: %s\n", err)
+               return
        }
        s, err := RenderDraft(d)
        if err != nil {
                t.Errorf("render %v draft failed: %s\n", d, err)
        }
        if string(s) != draftBody {
-               t.Errorf("parsed %#v, expected %#v\n", d, draftBody)
+               t.Errorf("parsed %#v\nexpected: %s\ngot: %s\n", d, draftBody, s)
+       }
+}
+
+const certBody = `Content-Type: text/plain.epoint.cert; charset=utf-8
+
+Holder: 000000000000000000000000000000000000000A
+Serial: 13
+Date: 2011-11-01T10:29:38Z
+Balance: 23
+Denomination: half euro
+Issuer: 000000000000000000000000000000000000000B
+Last-Debit-Serial: 0
+Last-Credit-Serial: 12
+Last-Cert: 000000000000000000000000000000000000000C
+Difference: 1
+Draft: 000000000000000000000000000000000000000D
+Drawer: 000000000000000000000000000000000000000E
+Drawer-Serial: 2
+Drawer-Cert: 000000000000000000000000000000000000000F
+References: 000000000000000000000000000000000000000C 000000000000000000000000000000000000000F
+`
+
+func TestCert(t *testing.T) {
+       c, err := ParseCert([]byte(certBody))
+       if err != nil {
+               t.Errorf("ParseCert failed: %s\n", err)
+               return
+       }
+       s, err := RenderCert(c)
+       if err != nil {
+               t.Errorf("render %v cert failed: %s\n", c, err)
+       }
+       if string(s) != certBody {
+               t.Errorf("parsed %#v\nexpected: %s\ngot: %s\n", c, certBody, s)
        }
 }