| // Copyright 2017 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 opentype |
| |
| import ( |
| "image" |
| "testing" |
| |
| "golang.org/x/image/font" |
| "golang.org/x/image/font/gofont/goregular" |
| "golang.org/x/image/font/sfnt" |
| "golang.org/x/image/math/fixed" |
| ) |
| |
| var ( |
| regular font.Face |
| ) |
| |
| func init() { |
| font, err := sfnt.Parse(goregular.TTF) |
| if err != nil { |
| panic(err) |
| } |
| |
| regular, err = NewFace(font, defaultFaceOptions()) |
| if err != nil { |
| panic(err) |
| } |
| } |
| |
| func TestFaceGlyphAdvance(t *testing.T) { |
| for _, test := range []struct { |
| r rune |
| want fixed.Int26_6 |
| }{ |
| {' ', 213}, |
| {'A', 512}, |
| {'Á', 512}, |
| {'Æ', 768}, |
| {'i', 189}, |
| {'x', 384}, |
| } { |
| got, ok := regular.GlyphAdvance(test.r) |
| if !ok { |
| t.Errorf("could not get glyph advance width for %q", test.r) |
| continue |
| } |
| |
| if got != test.want { |
| t.Errorf("%q: glyph advance width=%d. want=%d", test.r, got, test.want) |
| continue |
| } |
| } |
| } |
| |
| func TestFaceKern(t *testing.T) { |
| // FIXME(sbinet) there is no kerning with gofont/goregular |
| for _, test := range []struct { |
| r1, r2 rune |
| want fixed.Int26_6 |
| }{ |
| {'A', 'A', 0}, |
| {'A', 'V', 0}, |
| {'V', 'A', 0}, |
| {'A', 'v', 0}, |
| {'W', 'a', 0}, |
| {'W', 'i', 0}, |
| {'Y', 'i', 0}, |
| {'f', '(', 0}, |
| {'f', 'f', 0}, |
| {'f', 'i', 0}, |
| {'T', 'a', 0}, |
| {'T', 'e', 0}, |
| } { |
| got := regular.Kern(test.r1, test.r2) |
| if got != test.want { |
| t.Errorf("(%q, %q): glyph kerning=%d. want=%d", test.r1, test.r2, got, test.want) |
| continue |
| } |
| } |
| } |
| |
| func TestFaceMetrics(t *testing.T) { |
| want := font.Metrics{Height: 888, Ascent: 726, Descent: 162, XHeight: 407, CapHeight: 555, |
| CaretSlope: image.Point{X: 0, Y: 1}} |
| got := regular.Metrics() |
| if got != want { |
| t.Fatalf("metrics failed. got=%#v. want=%#v", got, want) |
| } |
| } |