| // Copyright 2009 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package http | |
| import ( | |
| "testing" | |
| ) | |
| type lexTest struct { | |
| Raw string | |
| Parsed int // # of parsed characters | |
| Result []string | |
| } | |
| var lexTests = []lexTest{ | |
| { | |
| Raw: `"abc"def,:ghi`, | |
| Parsed: 13, | |
| Result: []string{"abcdef", "ghi"}, | |
| }, | |
| // My understanding of the RFC is that escape sequences outside of | |
| // quotes are not interpreted? | |
| { | |
| Raw: `"\t"\t"\t"`, | |
| Parsed: 10, | |
| Result: []string{"\t", "t\t"}, | |
| }, | |
| { | |
| Raw: `"\yab"\r\n`, | |
| Parsed: 10, | |
| Result: []string{"?ab", "r", "n"}, | |
| }, | |
| { | |
| Raw: "ab\f", | |
| Parsed: 3, | |
| Result: []string{"ab?"}, | |
| }, | |
| { | |
| Raw: "\"ab \" c,de f, gh, ij\n\t\r", | |
| Parsed: 23, | |
| Result: []string{"ab ", "c", "de", "f", "gh", "ij"}, | |
| }, | |
| } | |
| func min(x, y int) int { | |
| if x <= y { | |
| return x | |
| } | |
| return y | |
| } | |
| func TestSplitFieldValue(t *testing.T) { | |
| for k, l := range lexTests { | |
| parsed, result := httpSplitFieldValue(l.Raw) | |
| if parsed != l.Parsed { | |
| t.Errorf("#%d: Parsed %d, expected %d", k, parsed, l.Parsed) | |
| } | |
| if len(result) != len(l.Result) { | |
| t.Errorf("#%d: Result len %d, expected %d", k, len(result), len(l.Result)) | |
| } | |
| for i := 0; i < min(len(result), len(l.Result)); i++ { | |
| if result[i] != l.Result[i] { | |
| t.Errorf("#%d: %d-th entry mismatch. Have {%s}, expect {%s}", | |
| k, i, result[i], l.Result[i]) | |
| } | |
| } | |
| } | |
| } |