summaryrefslogtreecommitdiffstats
path: root/vendor/gopkg.in/alexcesaro/quotedprintable.v3
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gopkg.in/alexcesaro/quotedprintable.v3')
-rw-r--r--vendor/gopkg.in/alexcesaro/quotedprintable.v3/encodedword_test.go281
-rw-r--r--vendor/gopkg.in/alexcesaro/quotedprintable.v3/reader_test.go200
-rw-r--r--vendor/gopkg.in/alexcesaro/quotedprintable.v3/writer_test.go154
3 files changed, 0 insertions, 635 deletions
diff --git a/vendor/gopkg.in/alexcesaro/quotedprintable.v3/encodedword_test.go b/vendor/gopkg.in/alexcesaro/quotedprintable.v3/encodedword_test.go
deleted file mode 100644
index 368794fe7..000000000
--- a/vendor/gopkg.in/alexcesaro/quotedprintable.v3/encodedword_test.go
+++ /dev/null
@@ -1,281 +0,0 @@
-package quotedprintable
-
-import (
- "bytes"
- "errors"
- "fmt"
- "io"
- "io/ioutil"
- "strings"
- "testing"
-)
-
-func ExampleWordEncoder_Encode() {
- fmt.Println(QEncoding.Encode("utf-8", "¡Hola, señor!"))
- fmt.Println(QEncoding.Encode("utf-8", "Hello!"))
- fmt.Println(BEncoding.Encode("UTF-8", "¡Hola, señor!"))
- fmt.Println(QEncoding.Encode("ISO-8859-1", "Caf\xE9"))
- // Output:
- // =?utf-8?q?=C2=A1Hola,_se=C3=B1or!?=
- // Hello!
- // =?UTF-8?b?wqFIb2xhLCBzZcOxb3Ih?=
- // =?ISO-8859-1?q?Caf=E9?=
-}
-
-func ExampleWordDecoder_Decode() {
- dec := new(WordDecoder)
- header, err := dec.Decode("=?utf-8?q?=C2=A1Hola,_se=C3=B1or!?=")
- if err != nil {
- panic(err)
- }
- fmt.Println(header)
-
- dec.CharsetReader = func(charset string, input io.Reader) (io.Reader, error) {
- switch charset {
- case "x-case":
- // Fake character set for example.
- // Real use would integrate with packages such
- // as code.google.com/p/go-charset
- content, err := ioutil.ReadAll(input)
- if err != nil {
- return nil, err
- }
- return bytes.NewReader(bytes.ToUpper(content)), nil
- }
- return nil, fmt.Errorf("unhandled charset %q", charset)
- }
- header, err = dec.Decode("=?x-case?q?hello!?=")
- if err != nil {
- panic(err)
- }
- fmt.Println(header)
- // Output:
- // ¡Hola, señor!
- // HELLO!
-}
-
-func ExampleWordDecoder_DecodeHeader() {
- dec := new(WordDecoder)
- header, err := dec.DecodeHeader("=?utf-8?q?=C3=89ric?= <eric@example.org>, =?utf-8?q?Ana=C3=AFs?= <anais@example.org>")
- if err != nil {
- panic(err)
- }
- fmt.Println(header)
-
- header, err = dec.DecodeHeader("=?utf-8?q?=C2=A1Hola,?= =?utf-8?q?_se=C3=B1or!?=")
- if err != nil {
- panic(err)
- }
- fmt.Println(header)
-
- dec.CharsetReader = func(charset string, input io.Reader) (io.Reader, error) {
- switch charset {
- case "x-case":
- // Fake character set for example.
- // Real use would integrate with packages such
- // as code.google.com/p/go-charset
- content, err := ioutil.ReadAll(input)
- if err != nil {
- return nil, err
- }
- return bytes.NewReader(bytes.ToUpper(content)), nil
- }
- return nil, fmt.Errorf("unhandled charset %q", charset)
- }
- header, err = dec.DecodeHeader("=?x-case?q?hello_?= =?x-case?q?world!?=")
- if err != nil {
- panic(err)
- }
- fmt.Println(header)
- // Output:
- // Éric <eric@example.org>, Anaïs <anais@example.org>
- // ¡Hola, señor!
- // HELLO WORLD!
-}
-
-func TestEncodeWord(t *testing.T) {
- utf8, iso88591 := "utf-8", "iso-8859-1"
- tests := []struct {
- enc WordEncoder
- charset string
- src, exp string
- }{
- {QEncoding, utf8, "François-Jérôme", "=?utf-8?q?Fran=C3=A7ois-J=C3=A9r=C3=B4me?="},
- {BEncoding, utf8, "Café", "=?utf-8?b?Q2Fmw6k=?="},
- {QEncoding, iso88591, "La Seleção", "=?iso-8859-1?q?La_Sele=C3=A7=C3=A3o?="},
- {QEncoding, utf8, "", ""},
- {QEncoding, utf8, "A", "A"},
- {QEncoding, iso88591, "a", "a"},
- {QEncoding, utf8, "123 456", "123 456"},
- {QEncoding, utf8, "\t !\"#$%&'()*+,-./ :;<>?@[\\]^_`{|}~", "\t !\"#$%&'()*+,-./ :;<>?@[\\]^_`{|}~"},
- }
-
- for _, test := range tests {
- if s := test.enc.Encode(test.charset, test.src); s != test.exp {
- t.Errorf("Encode(%q) = %q, want %q", test.src, s, test.exp)
- }
- }
-}
-
-func TestDecodeWord(t *testing.T) {
- tests := []struct {
- src, exp string
- hasErr bool
- }{
- {"=?UTF-8?Q?=C2=A1Hola,_se=C3=B1or!?=", "¡Hola, señor!", false},
- {"=?UTF-8?Q?Fran=C3=A7ois-J=C3=A9r=C3=B4me?=", "François-Jérôme", false},
- {"=?UTF-8?q?ascii?=", "ascii", false},
- {"=?utf-8?B?QW5kcsOp?=", "André", false},
- {"=?ISO-8859-1?Q?Rapha=EBl_Dupont?=", "Raphaël Dupont", false},
- {"=?utf-8?b?IkFudG9uaW8gSm9zw6kiIDxqb3NlQGV4YW1wbGUub3JnPg==?=", `"Antonio José" <jose@example.org>`, false},
- {"=?UTF-8?A?Test?=", "", true},
- {"=?UTF-8?Q?A=B?=", "", true},
- {"=?UTF-8?Q?=A?=", "", true},
- {"=?UTF-8?A?A?=", "", true},
- }
-
- for _, test := range tests {
- dec := new(WordDecoder)
- s, err := dec.Decode(test.src)
- if test.hasErr && err == nil {
- t.Errorf("Decode(%q) should return an error", test.src)
- continue
- }
- if !test.hasErr && err != nil {
- t.Errorf("Decode(%q): %v", test.src, err)
- continue
- }
- if s != test.exp {
- t.Errorf("Decode(%q) = %q, want %q", test.src, s, test.exp)
- }
- }
-}
-
-func TestDecodeHeader(t *testing.T) {
- tests := []struct {
- src, exp string
- }{
- {"=?UTF-8?Q?=C2=A1Hola,_se=C3=B1or!?=", "¡Hola, señor!"},
- {"=?UTF-8?Q?Fran=C3=A7ois-J=C3=A9r=C3=B4me?=", "François-Jérôme"},
- {"=?UTF-8?q?ascii?=", "ascii"},
- {"=?utf-8?B?QW5kcsOp?=", "André"},
- {"=?ISO-8859-1?Q?Rapha=EBl_Dupont?=", "Raphaël Dupont"},
- {"Jean", "Jean"},
- {"=?utf-8?b?IkFudG9uaW8gSm9zw6kiIDxqb3NlQGV4YW1wbGUub3JnPg==?=", `"Antonio José" <jose@example.org>`},
- {"=?UTF-8?A?Test?=", "=?UTF-8?A?Test?="},
- {"=?UTF-8?Q?A=B?=", "=?UTF-8?Q?A=B?="},
- {"=?UTF-8?Q?=A?=", "=?UTF-8?Q?=A?="},
- {"=?UTF-8?A?A?=", "=?UTF-8?A?A?="},
- // Incomplete words
- {"=?", "=?"},
- {"=?UTF-8?", "=?UTF-8?"},
- {"=?UTF-8?=", "=?UTF-8?="},
- {"=?UTF-8?Q", "=?UTF-8?Q"},
- {"=?UTF-8?Q?", "=?UTF-8?Q?"},
- {"=?UTF-8?Q?=", "=?UTF-8?Q?="},
- {"=?UTF-8?Q?A", "=?UTF-8?Q?A"},
- {"=?UTF-8?Q?A?", "=?UTF-8?Q?A?"},
- // Tests from RFC 2047
- {"=?ISO-8859-1?Q?a?=", "a"},
- {"=?ISO-8859-1?Q?a?= b", "a b"},
- {"=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=", "ab"},
- {"=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=", "ab"},
- {"=?ISO-8859-1?Q?a?= \r\n\t =?ISO-8859-1?Q?b?=", "ab"},
- {"=?ISO-8859-1?Q?a_b?=", "a b"},
- }
-
- for _, test := range tests {
- dec := new(WordDecoder)
- s, err := dec.DecodeHeader(test.src)
- if err != nil {
- t.Errorf("DecodeHeader(%q): %v", test.src, err)
- }
- if s != test.exp {
- t.Errorf("DecodeHeader(%q) = %q, want %q", test.src, s, test.exp)
- }
- }
-}
-
-func TestCharsetDecoder(t *testing.T) {
- tests := []struct {
- src string
- want string
- charsets []string
- content []string
- }{
- {"=?utf-8?b?Q2Fmw6k=?=", "Café", nil, nil},
- {"=?ISO-8859-1?Q?caf=E9?=", "café", nil, nil},
- {"=?US-ASCII?Q?foo_bar?=", "foo bar", nil, nil},
- {"=?utf-8?Q?=?=", "=?utf-8?Q?=?=", nil, nil},
- {"=?utf-8?Q?=A?=", "=?utf-8?Q?=A?=", nil, nil},
- {
- "=?ISO-8859-15?Q?f=F5=F6?= =?windows-1252?Q?b=E0r?=",
- "f\xf5\xf6b\xe0r",
- []string{"iso-8859-15", "windows-1252"},
- []string{"f\xf5\xf6", "b\xe0r"},
- },
- }
-
- for _, test := range tests {
- i := 0
- dec := &WordDecoder{
- CharsetReader: func(charset string, input io.Reader) (io.Reader, error) {
- if charset != test.charsets[i] {
- t.Errorf("DecodeHeader(%q), got charset %q, want %q", test.src, charset, test.charsets[i])
- }
- content, err := ioutil.ReadAll(input)
- if err != nil {
- t.Errorf("DecodeHeader(%q), error in reader: %v", test.src, err)
- }
- got := string(content)
- if got != test.content[i] {
- t.Errorf("DecodeHeader(%q), got content %q, want %q", test.src, got, test.content[i])
- }
- i++
-
- return strings.NewReader(got), nil
- },
- }
- got, err := dec.DecodeHeader(test.src)
- if err != nil {
- t.Errorf("DecodeHeader(%q): %v", test.src, err)
- }
- if got != test.want {
- t.Errorf("DecodeHeader(%q) = %q, want %q", test.src, got, test.want)
- }
- }
-}
-
-func TestCharsetDecoderError(t *testing.T) {
- dec := &WordDecoder{
- CharsetReader: func(charset string, input io.Reader) (io.Reader, error) {
- return nil, errors.New("Test error")
- },
- }
-
- if _, err := dec.DecodeHeader("=?charset?Q?foo?="); err == nil {
- t.Error("DecodeHeader should return an error")
- }
-}
-
-func BenchmarkQEncodeWord(b *testing.B) {
- for i := 0; i < b.N; i++ {
- QEncoding.Encode("UTF-8", "¡Hola, señor!")
- }
-}
-
-func BenchmarkQDecodeWord(b *testing.B) {
- dec := new(WordDecoder)
-
- for i := 0; i < b.N; i++ {
- dec.Decode("=?utf-8?q?=C2=A1Hola,_se=C3=B1or!?=")
- }
-}
-
-func BenchmarkQDecodeHeader(b *testing.B) {
- dec := new(WordDecoder)
-
- for i := 0; i < b.N; i++ {
- dec.Decode("=?utf-8?q?=C2=A1Hola,_se=C3=B1or!?=")
- }
-}
diff --git a/vendor/gopkg.in/alexcesaro/quotedprintable.v3/reader_test.go b/vendor/gopkg.in/alexcesaro/quotedprintable.v3/reader_test.go
deleted file mode 100644
index 01ba8f75b..000000000
--- a/vendor/gopkg.in/alexcesaro/quotedprintable.v3/reader_test.go
+++ /dev/null
@@ -1,200 +0,0 @@
-package quotedprintable
-
-import (
- "bufio"
- "bytes"
- "errors"
- "flag"
- "fmt"
- "io"
- "os/exec"
- "regexp"
- "sort"
- "strings"
- "testing"
- "time"
-)
-
-func TestReader(t *testing.T) {
- tests := []struct {
- in, want string
- err interface{}
- }{
- {in: "", want: ""},
- {in: "foo bar", want: "foo bar"},
- {in: "foo bar=3D", want: "foo bar="},
- {in: "foo bar=3d", want: "foo bar="}, // lax.
- {in: "foo bar=\n", want: "foo bar"},
- {in: "foo bar\n", want: "foo bar\n"}, // somewhat lax.
- {in: "foo bar=0", want: "foo bar", err: io.ErrUnexpectedEOF},
- {in: "foo bar=0D=0A", want: "foo bar\r\n"},
- {in: " A B \r\n C ", want: " A B\r\n C"},
- {in: " A B =\r\n C ", want: " A B C"},
- {in: " A B =\n C ", want: " A B C"}, // lax. treating LF as CRLF
- {in: "foo=\nbar", want: "foobar"},
- {in: "foo\x00bar", want: "foo", err: "quotedprintable: invalid unescaped byte 0x00 in body"},
- {in: "foo bar\xff", want: "foo bar", err: "quotedprintable: invalid unescaped byte 0xff in body"},
-
- // Equal sign.
- {in: "=3D30\n", want: "=30\n"},
- {in: "=00=FF0=\n", want: "\x00\xff0"},
-
- // Trailing whitespace
- {in: "foo \n", want: "foo\n"},
- {in: "foo \n\nfoo =\n\nfoo=20\n\n", want: "foo\n\nfoo \nfoo \n\n"},
-
- // Tests that we allow bare \n and \r through, despite it being strictly
- // not permitted per RFC 2045, Section 6.7 Page 22 bullet (4).
- {in: "foo\nbar", want: "foo\nbar"},
- {in: "foo\rbar", want: "foo\rbar"},
- {in: "foo\r\nbar", want: "foo\r\nbar"},
-
- // Different types of soft line-breaks.
- {in: "foo=\r\nbar", want: "foobar"},
- {in: "foo=\nbar", want: "foobar"},
- {in: "foo=\rbar", want: "foo", err: "quotedprintable: invalid hex byte 0x0d"},
- {in: "foo=\r\r\r \nbar", want: "foo", err: `quotedprintable: invalid bytes after =: "\r\r\r \n"`},
-
- // Example from RFC 2045:
- {in: "Now's the time =\n" + "for all folk to come=\n" + " to the aid of their country.",
- want: "Now's the time for all folk to come to the aid of their country."},
- }
- for _, tt := range tests {
- var buf bytes.Buffer
- _, err := io.Copy(&buf, NewReader(strings.NewReader(tt.in)))
- if got := buf.String(); got != tt.want {
- t.Errorf("for %q, got %q; want %q", tt.in, got, tt.want)
- }
- switch verr := tt.err.(type) {
- case nil:
- if err != nil {
- t.Errorf("for %q, got unexpected error: %v", tt.in, err)
- }
- case string:
- if got := fmt.Sprint(err); got != verr {
- t.Errorf("for %q, got error %q; want %q", tt.in, got, verr)
- }
- case error:
- if err != verr {
- t.Errorf("for %q, got error %q; want %q", tt.in, err, verr)
- }
- }
- }
-
-}
-
-func everySequence(base, alpha string, length int, fn func(string)) {
- if len(base) == length {
- fn(base)
- return
- }
- for i := 0; i < len(alpha); i++ {
- everySequence(base+alpha[i:i+1], alpha, length, fn)
- }
-}
-
-var useQprint = flag.Bool("qprint", false, "Compare against the 'qprint' program.")
-
-var badSoftRx = regexp.MustCompile(`=([^\r\n]+?\n)|([^\r\n]+$)|(\r$)|(\r[^\n]+\n)|( \r\n)`)
-
-func TestExhaustive(t *testing.T) {
- if *useQprint {
- _, err := exec.LookPath("qprint")
- if err != nil {
- t.Fatalf("Error looking for qprint: %v", err)
- }
- }
-
- var buf bytes.Buffer
- res := make(map[string]int)
- everySequence("", "0A \r\n=", 6, func(s string) {
- if strings.HasSuffix(s, "=") || strings.Contains(s, "==") {
- return
- }
- buf.Reset()
- _, err := io.Copy(&buf, NewReader(strings.NewReader(s)))
- if err != nil {
- errStr := err.Error()
- if strings.Contains(errStr, "invalid bytes after =:") {
- errStr = "invalid bytes after ="
- }
- res[errStr]++
- if strings.Contains(errStr, "invalid hex byte ") {
- if strings.HasSuffix(errStr, "0x20") && (strings.Contains(s, "=0 ") || strings.Contains(s, "=A ") || strings.Contains(s, "= ")) {
- return
- }
- if strings.HasSuffix(errStr, "0x3d") && (strings.Contains(s, "=0=") || strings.Contains(s, "=A=")) {
- return
- }
- if strings.HasSuffix(errStr, "0x0a") || strings.HasSuffix(errStr, "0x0d") {
- // bunch of cases; since whitespace at the end of a line before \n is removed.
- return
- }
- }
- if strings.Contains(errStr, "unexpected EOF") {
- return
- }
- if errStr == "invalid bytes after =" && badSoftRx.MatchString(s) {
- return
- }
- t.Errorf("decode(%q) = %v", s, err)
- return
- }
- if *useQprint {
- cmd := exec.Command("qprint", "-d")
- cmd.Stdin = strings.NewReader(s)
- stderr, err := cmd.StderrPipe()
- if err != nil {
- panic(err)
- }
- qpres := make(chan interface{}, 2)
- go func() {
- br := bufio.NewReader(stderr)
- s, _ := br.ReadString('\n')
- if s != "" {
- qpres <- errors.New(s)
- if cmd.Process != nil {
- // It can get stuck on invalid input, like:
- // echo -n "0000= " | qprint -d
- cmd.Process.Kill()
- }
- }
- }()
- go func() {
- want, err := cmd.Output()
- if err == nil {
- qpres <- want
- }
- }()
- select {
- case got := <-qpres:
- if want, ok := got.([]byte); ok {
- if string(want) != buf.String() {
- t.Errorf("go decode(%q) = %q; qprint = %q", s, want, buf.String())
- }
- } else {
- t.Logf("qprint -d(%q) = %v", s, got)
- }
- case <-time.After(5 * time.Second):
- t.Logf("qprint timeout on %q", s)
- }
- }
- res["OK"]++
- })
- var outcomes []string
- for k, v := range res {
- outcomes = append(outcomes, fmt.Sprintf("%v: %d", k, v))
- }
- sort.Strings(outcomes)
- got := strings.Join(outcomes, "\n")
- want := `OK: 21576
-invalid bytes after =: 3397
-quotedprintable: invalid hex byte 0x0a: 1400
-quotedprintable: invalid hex byte 0x0d: 2700
-quotedprintable: invalid hex byte 0x20: 2490
-quotedprintable: invalid hex byte 0x3d: 440
-unexpected EOF: 3122`
- if got != want {
- t.Errorf("Got:\n%s\nWant:\n%s", got, want)
- }
-}
diff --git a/vendor/gopkg.in/alexcesaro/quotedprintable.v3/writer_test.go b/vendor/gopkg.in/alexcesaro/quotedprintable.v3/writer_test.go
deleted file mode 100644
index ed8507289..000000000
--- a/vendor/gopkg.in/alexcesaro/quotedprintable.v3/writer_test.go
+++ /dev/null
@@ -1,154 +0,0 @@
-package quotedprintable
-
-import (
- "bytes"
- "io/ioutil"
- "strings"
- "testing"
-)
-
-func TestWriter(t *testing.T) {
- testWriter(t, false)
-}
-
-func TestWriterBinary(t *testing.T) {
- testWriter(t, true)
-}
-
-func testWriter(t *testing.T, binary bool) {
- tests := []struct {
- in, want, wantB string
- }{
- {in: "", want: ""},
- {in: "foo bar", want: "foo bar"},
- {in: "foo bar=", want: "foo bar=3D"},
- {in: "foo bar\r", want: "foo bar\r\n", wantB: "foo bar=0D"},
- {in: "foo bar\r\r", want: "foo bar\r\n\r\n", wantB: "foo bar=0D=0D"},
- {in: "foo bar\n", want: "foo bar\r\n", wantB: "foo bar=0A"},
- {in: "foo bar\r\n", want: "foo bar\r\n", wantB: "foo bar=0D=0A"},
- {in: "foo bar\r\r\n", want: "foo bar\r\n\r\n", wantB: "foo bar=0D=0D=0A"},
- {in: "foo bar ", want: "foo bar=20"},
- {in: "foo bar\t", want: "foo bar=09"},
- {in: "foo bar ", want: "foo bar =20"},
- {in: "foo bar \n", want: "foo bar=20\r\n", wantB: "foo bar =0A"},
- {in: "foo bar \r", want: "foo bar=20\r\n", wantB: "foo bar =0D"},
- {in: "foo bar \r\n", want: "foo bar=20\r\n", wantB: "foo bar =0D=0A"},
- {in: "foo bar \n", want: "foo bar =20\r\n", wantB: "foo bar =0A"},
- {in: "foo bar \n ", want: "foo bar =20\r\n=20", wantB: "foo bar =0A=20"},
- {in: "¡Hola Señor!", want: "=C2=A1Hola Se=C3=B1or!"},
- {
- in: "\t !\"#$%&'()*+,-./ :;<>?@[\\]^_`{|}~",
- want: "\t !\"#$%&'()*+,-./ :;<>?@[\\]^_`{|}~",
- },
- {
- in: strings.Repeat("a", 75),
- want: strings.Repeat("a", 75),
- },
- {
- in: strings.Repeat("a", 76),
- want: strings.Repeat("a", 75) + "=\r\na",
- },
- {
- in: strings.Repeat("a", 72) + "=",
- want: strings.Repeat("a", 72) + "=3D",
- },
- {
- in: strings.Repeat("a", 73) + "=",
- want: strings.Repeat("a", 73) + "=\r\n=3D",
- },
- {
- in: strings.Repeat("a", 74) + "=",
- want: strings.Repeat("a", 74) + "=\r\n=3D",
- },
- {
- in: strings.Repeat("a", 75) + "=",
- want: strings.Repeat("a", 75) + "=\r\n=3D",
- },
- {
- in: strings.Repeat(" ", 73),
- want: strings.Repeat(" ", 72) + "=20",
- },
- {
- in: strings.Repeat(" ", 74),
- want: strings.Repeat(" ", 73) + "=\r\n=20",
- },
- {
- in: strings.Repeat(" ", 75),
- want: strings.Repeat(" ", 74) + "=\r\n=20",
- },
- {
- in: strings.Repeat(" ", 76),
- want: strings.Repeat(" ", 75) + "=\r\n=20",
- },
- {
- in: strings.Repeat(" ", 77),
- want: strings.Repeat(" ", 75) + "=\r\n =20",
- },
- }
-
- for _, tt := range tests {
- buf := new(bytes.Buffer)
- w := NewWriter(buf)
-
- want := tt.want
- if binary {
- w.Binary = true
- if tt.wantB != "" {
- want = tt.wantB
- }
- }
-
- if _, err := w.Write([]byte(tt.in)); err != nil {
- t.Errorf("Write(%q): %v", tt.in, err)
- continue
- }
- if err := w.Close(); err != nil {
- t.Errorf("Close(): %v", err)
- continue
- }
- got := buf.String()
- if got != want {
- t.Errorf("Write(%q), got:\n%q\nwant:\n%q", tt.in, got, want)
- }
- }
-}
-
-func TestRoundTrip(t *testing.T) {
- buf := new(bytes.Buffer)
- w := NewWriter(buf)
- if _, err := w.Write(testMsg); err != nil {
- t.Fatalf("Write: %v", err)
- }
- if err := w.Close(); err != nil {
- t.Fatalf("Close: %v", err)
- }
-
- r := NewReader(buf)
- gotBytes, err := ioutil.ReadAll(r)
- if err != nil {
- t.Fatalf("Error while reading from Reader: %v", err)
- }
- got := string(gotBytes)
- if got != string(testMsg) {
- t.Errorf("Encoding and decoding changed the message, got:\n%s", got)
- }
-}
-
-// From http://fr.wikipedia.org/wiki/Quoted-Printable
-var testMsg = []byte("Quoted-Printable (QP) est un format d'encodage de données codées sur 8 bits, qui utilise exclusivement les caractères alphanumériques imprimables du code ASCII (7 bits).\r\n" +
- "\r\n" +
- "En effet, les différents codages comprennent de nombreux caractères qui ne sont pas représentables en ASCII (par exemple les caractères accentués), ainsi que des caractères dits « non-imprimables ».\r\n" +
- "\r\n" +
- "L'encodage Quoted-Printable permet de remédier à ce problème, en procédant de la manière suivante :\r\n" +
- "\r\n" +
- "Un octet correspondant à un caractère imprimable de l'ASCII sauf le signe égal (donc un caractère de code ASCII entre 33 et 60 ou entre 62 et 126) ou aux caractères de saut de ligne (codes ASCII 13 et 10) ou une suite de tabulations et espaces non situées en fin de ligne (de codes ASCII respectifs 9 et 32) est représenté tel quel.\r\n" +
- "Un octet qui ne correspond pas à la définition ci-dessus (caractère non imprimable de l'ASCII, tabulation ou espaces non suivies d'un caractère imprimable avant la fin de la ligne ou signe égal) est représenté par un signe égal, suivi de son numéro, exprimé en hexadécimal.\r\n" +
- "Enfin, un signe égal suivi par un saut de ligne (donc la suite des trois caractères de codes ASCII 61, 13 et 10) peut être inséré n'importe où, afin de limiter la taille des lignes produites si nécessaire. Une limite de 76 caractères par ligne est généralement respectée.\r\n")
-
-func BenchmarkWriter(b *testing.B) {
- for i := 0; i < b.N; i++ {
- w := NewWriter(ioutil.Discard)
- w.Write(testMsg)
- w.Close()
- }
-}