]> Cypherpunks repositories - gostls13.git/commitdiff
net/mail: make address parsing (more) public
authorGraham Miller <graham.miller@gmail.com>
Fri, 5 Oct 2012 00:08:54 +0000 (10:08 +1000)
committerDavid Symonds <dsymonds@golang.org>
Fri, 5 Oct 2012 00:08:54 +0000 (10:08 +1000)
Code for parsing email addresses was already partially part of the public API with "func (Header) AddressList".  This CL adds a trivial implementation for two public methods to parse address and lists from a string. With tests.

R=dsymonds
CC=golang-dev
https://golang.org/cl/5676067

src/pkg/net/mail/message.go
src/pkg/net/mail/message_test.go

index 93cc4d1edd48ecb266e94600a945b4f976902525..96c796e7804e77fc13697b7b333edba635cc9038 100644 (file)
@@ -127,7 +127,7 @@ func (h Header) AddressList(key string) ([]*Address, error) {
        if hdr == "" {
                return nil, ErrHeaderNotPresent
        }
-       return newAddrParser(hdr).parseAddressList()
+       return ParseAddressList(hdr)
 }
 
 // Address represents a single mail address.
@@ -138,6 +138,16 @@ type Address struct {
        Address string // user@domain
 }
 
+// Parses a single RFC 5322 address, e.g. "Barry Gibbs <bg@example.com>"
+func ParseAddress(address string) (*Address, error) {
+       return newAddrParser(address).parseAddress()
+}
+
+// ParseAddressList parses the given string as a list of addresses.
+func ParseAddressList(list string) ([]*Address, error) {
+       return newAddrParser(list).parseAddressList()
+}
+
 // String formats the address as a valid RFC 5322 address.
 // If the address's name contains non-ASCII characters
 // the name will be rendered according to RFC 2047.
index fd17eb414a7370636c4d6ce769da6fd324b56659..2e746f4a722c8422b12b7ff8257bfeb676866430 100644 (file)
@@ -227,13 +227,24 @@ func TestAddressParsing(t *testing.T) {
                },
        }
        for _, test := range tests {
-               addrs, err := newAddrParser(test.addrsStr).parseAddressList()
+               if len(test.exp) == 1 {
+                       addr, err := ParseAddress(test.addrsStr)
+                       if err != nil {
+                               t.Errorf("Failed parsing (single) %q: %v", test.addrsStr, err)
+                               continue
+                       }
+                       if !reflect.DeepEqual([]*Address{addr}, test.exp) {
+                               t.Errorf("Parse (single) of %q: got %+v, want %+v", test.addrsStr, addr, test.exp)
+                       }
+               }
+
+               addrs, err := ParseAddressList(test.addrsStr)
                if err != nil {
-                       t.Errorf("Failed parsing %q: %v", test.addrsStr, err)
+                       t.Errorf("Failed parsing (list) %q: %v", test.addrsStr, err)
                        continue
                }
                if !reflect.DeepEqual(addrs, test.exp) {
-                       t.Errorf("Parse of %q: got %+v, want %+v", test.addrsStr, addrs, test.exp)
+                       t.Errorf("Parse (list) of %q: got %+v, want %+v", test.addrsStr, addrs, test.exp)
                }
        }
 }