a73x

internal/site/mark_test.go

Ref:   Size: 2.3 KiB   History

package site

import (
	"strings"
	"testing"
)

func TestMarkBitmapFromGohu11(t *testing.T) {
	f, err := parseBDF(gohu11)
	if err != nil {
		t.Fatal(err)
	}
	pix, err := markBitmap(f)
	if err != nil {
		t.Fatal(err)
	}
	want := strings.Join([]string{
		"###.#####.###",
		"#...#.......#",
		"#...#.......#",
		"#...####....#",
		"#...#.......#",
		"#...#.......#",
		"#...#.......#",
		"#...#####...#",
		"###.......###",
		"",
	}, "\n")
	if got := bitmapString(pix); got != want {
		t.Errorf("mark:\ngot:\n%swant:\n%s", got, want)
	}
}

func TestMarkBitmapFromGohu14b(t *testing.T) {
	f, err := parseBDF(gohu14b)
	if err != nil {
		t.Fatal(err)
	}
	pix, err := markBitmap(f)
	if err != nil {
		t.Fatal(err)
	}
	want := strings.Join([]string{
		"####.........####",
		"##...#######...##",
		"##...##........##",
		"##...##........##",
		"##...##........##",
		"##...#####.....##",
		"##...##........##",
		"##...##........##",
		"##...##........##",
		"##...#######...##",
		"####.........####",
		"",
	}, "\n")
	if got := bitmapString(pix); got != want {
		t.Errorf("mark:\ngot:\n%swant:\n%s", got, want)
	}
}

// The tab icon must land on whole device pixels at 16px, so its box is
// exactly 16 units — a 15-unit box would scale to 16 and blur.
func TestFaviconSVGBoxIsPixelExact(t *testing.T) {
	f, err := parseBDF(gohu11)
	if err != nil {
		t.Fatal(err)
	}
	pix, err := markBitmap(f)
	if err != nil {
		t.Fatal(err)
	}
	svg, err := faviconSVG(pix, 16)
	if err != nil {
		t.Fatal(err)
	}
	for _, want := range []string{
		`viewBox="0 0 16 16"`,
		`shape-rendering="crispEdges"`,
		"prefers-color-scheme: dark",
		"#1a1a1a",
		"#ececec",
	} {
		if !strings.Contains(svg, want) {
			t.Errorf("favicon missing %q:\n%s", want, svg)
		}
	}
	if n := strings.Count(svg, "<rect"); n != len(bitmapRuns(pix)) {
		t.Errorf("favicon has %d rects, want one per ink run (%d)", n, len(bitmapRuns(pix)))
	}
	// Centred: 13x9 ink in a 16 box leaves one blank column at the left.
	if !strings.Contains(svg, `x="1" y="3"`) {
		t.Errorf("mark not centred in the box:\n%s", svg)
	}
}

func TestFaviconSVGRejectsTooSmallABox(t *testing.T) {
	f, err := parseBDF(gohu14b)
	if err != nil {
		t.Fatal(err)
	}
	pix, err := markBitmap(f)
	if err != nil {
		t.Fatal(err)
	}
	if _, err := faviconSVG(pix, 16); err == nil {
		t.Error("want an error: the 17-wide bold mark does not fit a 16 box")
	}
}