5286ed5c2a
Parsing the per-glyph Charstrings will be a follow-up commit. Change-Id: I52f849a77dd7fa14b6e07420820bdfb4347c2438 Reviewed-on: https://go-review.googlesource.com/33593 Reviewed-by: Dave Day <djd@golang.org>
79 lines
2.5 KiB
Go
79 lines
2.5 KiB
Go
// Copyright 2016 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 sfnt
|
|
|
|
import (
|
|
"bytes"
|
|
"io/ioutil"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"golang.org/x/image/font/gofont/goregular"
|
|
)
|
|
|
|
func TestTrueTypeParse(t *testing.T) {
|
|
f, err := Parse(goregular.TTF)
|
|
if err != nil {
|
|
t.Fatalf("Parse: %v", err)
|
|
}
|
|
testTrueType(t, f)
|
|
}
|
|
|
|
func TestTrueTypeParseReaderAt(t *testing.T) {
|
|
f, err := ParseReaderAt(bytes.NewReader(goregular.TTF))
|
|
if err != nil {
|
|
t.Fatalf("ParseReaderAt: %v", err)
|
|
}
|
|
testTrueType(t, f)
|
|
}
|
|
|
|
func testTrueType(t *testing.T, f *Font) {
|
|
if got, want := f.UnitsPerEm(), Units(2048); got != want {
|
|
t.Errorf("UnitsPerEm: got %d, want %d", got, want)
|
|
}
|
|
// The exact number of glyphs in goregular.TTF can vary, and future
|
|
// versions may add more glyphs, but https://blog.golang.org/go-fonts says
|
|
// that "The WGL4 character set... [has] more than 650 characters in all.
|
|
if got, want := f.NumGlyphs(), 650; got <= want {
|
|
t.Errorf("NumGlyphs: got %d, want > %d", got, want)
|
|
}
|
|
}
|
|
|
|
func TestPostScript(t *testing.T) {
|
|
data, err := ioutil.ReadFile(filepath.Join("..", "testdata", "CFFTest.otf"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f, err := Parse(data)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// TODO: replace this by a higher level test, once we parse Type 2
|
|
// Charstrings.
|
|
//
|
|
// As a sanity check for now, note that each string ends in '\x0e', which
|
|
// 5177.Type2.pdf Appendix A defines as "endchar".
|
|
wants := [...]string{
|
|
"\xf7\x63\x8b\xbd\xf8\x45\xbd\x01\xbd\xbd\xf7\xc0\xbd\x03\xbd\x16\xf8\x24\xf8\xa9\xfc\x24\x06\xbd\xfc\x77\x15\xf8\x45\xf7\xc0\xfc\x45\x07\x0e",
|
|
"\x8b\xef\xf8\xec\xef\x01\xef\xdb\xf7\x84\xdb\x03\xf7\xc0\xf9\x50\x15\xdb\xb3\xfb\x0c\x3b\xfb\x2a\x6d\xfb\x8e\x31\x3b\x63\xf7\x0c\xdb\xf7\x2a\xa9\xf7\x8e\xe5\x1f\xef\x04\x27\x27\xfb\x70\xfb\x48\xfb\x48\xef\xfb\x70\xef\xef\xef\xf7\x70\xf7\x48\xf7\x48\x27\xf7\x70\x27\x1f\x0e",
|
|
"\xf6\xa0\x76\x01\xef\xf7\x5c\x03\xef\x16\xf7\x5c\xf9\xb4\xfb\x5c\x06\x0e",
|
|
"\xf7\x89\xe1\x03\xf7\x21\xf8\x9c\x15\x87\xfb\x38\xf7\x00\xb7\xe1\xfc\x0a\xa3\xf8\x18\xf7\x00\x9f\x81\xf7\x4e\xfb\x04\x6f\x81\xf7\x3a\x33\x85\x83\xfb\x52\x05\x0e",
|
|
}
|
|
if ng := f.NumGlyphs(); ng != len(wants) {
|
|
t.Fatalf("NumGlyphs: got %d, want %d", ng, len(wants))
|
|
}
|
|
for i, want := range wants {
|
|
gd, err := f.viewGlyphData(nil, i)
|
|
if err != nil {
|
|
t.Errorf("i=%d: %v", i, err)
|
|
continue
|
|
}
|
|
if got := string(gd); got != want {
|
|
t.Errorf("i=%d:\ngot % x\nwant % x", i, got, want)
|
|
}
|
|
}
|
|
}
|