blob: a67070f5eb5e002bb82081c83c7c61fda3af8187 [file] [log] [blame]
// 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{
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?
lexTest{
Raw: `"\t"\t"\t"`,
Parsed: 10,
Result: []string{"\t", "t\t"},
},
lexTest{
Raw: `"\yab"\r\n`,
Parsed: 10,
Result: []string{"?ab", "r", "n"},
},
lexTest{
Raw: "ab\f",
Parsed: 3,
Result: []string{"ab?"},
},
lexTest{
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])
}
}
}
}