|  | // Copyright 2011 Google Inc. All rights reserved. | 
|  | // Use of this source code is governed by the Apache 2.0 | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package mail | 
|  |  | 
|  | import ( | 
|  | "testing" | 
|  |  | 
|  | "github.com/golang/protobuf/proto" | 
|  |  | 
|  | "google.golang.org/appengine/internal/aetesting" | 
|  | basepb "google.golang.org/appengine/internal/base" | 
|  | pb "google.golang.org/appengine/internal/mail" | 
|  | ) | 
|  |  | 
|  | func TestMessageConstruction(t *testing.T) { | 
|  | var got *pb.MailMessage | 
|  | c := aetesting.FakeSingleContext(t, "mail", "Send", func(in *pb.MailMessage, out *basepb.VoidProto) error { | 
|  | got = in | 
|  | return nil | 
|  | }) | 
|  |  | 
|  | msg := &Message{ | 
|  | Sender: "dsymonds@example.com", | 
|  | To:     []string{"nigeltao@example.com"}, | 
|  | Body:   "Hey, lunch time?", | 
|  | Attachments: []Attachment{ | 
|  | // Regression test for a prod bug. The address of a range variable was used when | 
|  | // constructing the outgoing proto, so multiple attachments used the same name. | 
|  | { | 
|  | Name:      "att1.txt", | 
|  | Data:      []byte("data1"), | 
|  | ContentID: "<att1>", | 
|  | }, | 
|  | { | 
|  | Name: "att2.txt", | 
|  | Data: []byte("data2"), | 
|  | }, | 
|  | }, | 
|  | } | 
|  | if err := Send(c, msg); err != nil { | 
|  | t.Fatalf("Send: %v", err) | 
|  | } | 
|  | want := &pb.MailMessage{ | 
|  | Sender:   proto.String("dsymonds@example.com"), | 
|  | To:       []string{"nigeltao@example.com"}, | 
|  | Subject:  proto.String(""), | 
|  | TextBody: proto.String("Hey, lunch time?"), | 
|  | Attachment: []*pb.MailAttachment{ | 
|  | { | 
|  | FileName:  proto.String("att1.txt"), | 
|  | Data:      []byte("data1"), | 
|  | ContentID: proto.String("<att1>"), | 
|  | }, | 
|  | { | 
|  | FileName: proto.String("att2.txt"), | 
|  | Data:     []byte("data2"), | 
|  | }, | 
|  | }, | 
|  | } | 
|  | if !proto.Equal(got, want) { | 
|  | t.Errorf("Bad proto for %+v\n got %v\nwant %v", msg, got, want) | 
|  | } | 
|  | } |