typeset/measure_test.go

71 lines
2.0 KiB
Go

package typeset
import "testing"
import "golang.org/x/image/math/fixed"
import "golang.org/x/image/font/basicfont"
const basicfontFace7x13advance = 7
func tkw (kind tokenKind, value string, width fixed.Int26_6) token {
tok := tk(kind, value)
tok.width = width
for index, runl := range tok.runes {
runl.x = fixed.I(basicfontFace7x13advance * index)
tok.runes[index] = runl
}
return tok
}
func TestMeasure (test *testing.T) {
// ---- processing ----
tokens := []token {
tk(tokenKindWord, "hello"),
tk(tokenKindSpace, " "),
tk(tokenKindWord, "\rworld!"),
tk(tokenKindLineBreak, "\n"),
tk(tokenKindWord, "foo"),
tk(tokenKindLineBreak, "\n"),
tk(tokenKindLineBreak, "\r\n"),
tk(tokenKindWord, "bar"),
tk(tokenKindTab, "\t"),
tk(tokenKindWord, "baz"),
tk(tokenKindTab, "\t\t"),
tk(tokenKindWord, "something"),
}
measure(tokens, basicfont.Face7x13)
// ---- correct data ----
correctTokens := []token {
tkw(tokenKindWord, "hello", fixed.I(35)),
tkw(tokenKindSpace, " ", fixed.I( 7)),
tkw(tokenKindWord, "\rworld!", fixed.I(49)),
tkw(tokenKindLineBreak, "\n", fixed.I( 7)),
tkw(tokenKindWord, "foo", fixed.I(21)),
tkw(tokenKindLineBreak, "\n", fixed.I( 7)),
tkw(tokenKindLineBreak, "\r\n", fixed.I(14)),
tkw(tokenKindWord, "bar", fixed.I(21)),
tkw(tokenKindTab, "\t", fixed.I( 7)),
tkw(tokenKindWord, "baz", fixed.I(21)),
tkw(tokenKindTab, "\t\t", fixed.I(14)),
tkw(tokenKindWord, "something", fixed.I(63)),
}
// ---- testing ----
if len(tokens) != len(correctTokens) {
test.Logf("len(tokens) != len(correctTokens): %d, %d", len(tokens), len(correctTokens))
test.Log("GOT")
logTokens(test, tokens)
test.Log("CORRECT")
logTokens(test, correctTokens)
test.FailNow()
}
if !compareTokens(tokens, correctTokens) {
test.Log("tokens != correctTokens:")
test.Log("GOT")
logTokens(test, tokens)
test.Log("CORRECT")
logTokens(test, correctTokens)
test.FailNow()
}
}