Split into category packages; module github.com/ZacharyZhang-NY/MujicaUI
This commit is contained in:
1822 files changed
+24568
-21314
No files matched your search
@@ -0,0 +1,81 @@
|
||||
package input
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// testdata/qr: segno 1.6.6 byte-mode symbols, padding fixed to ISO 7.4.10.
|
||||
func TestEncodeQRMatchesReference(t *testing.T) {
|
||||
files, err := filepath.Glob("testdata/qr/*.txt")
|
||||
if err != nil || len(files) < 6 {
|
||||
t.Fatalf("reference files: %v %v", files, err)
|
||||
}
|
||||
levels := map[string]QRLevel{"L": QRLow, "M": QRMedium, "Q": QRQuartile, "H": QRHigh}
|
||||
for _, f := range files {
|
||||
b, err := os.ReadFile(f)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
lines := strings.Split(strings.TrimSpace(string(b)), "\n")
|
||||
head := strings.Fields(lines[0])
|
||||
version, _ := strconv.Atoi(head[0])
|
||||
mask, _ := strconv.Atoi(head[2])
|
||||
data, err := hex.DecodeString(head[3])
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
m, err := EncodeQR(data, levels[head[1]])
|
||||
if err != nil {
|
||||
t.Fatalf("%s: %v", f, err)
|
||||
}
|
||||
if m.Version != version || m.Mask != mask {
|
||||
t.Errorf("%s: version %d mask %d, want %d %d", f, m.Version, m.Mask, version, mask)
|
||||
continue
|
||||
}
|
||||
for y, row := range lines[1:] {
|
||||
for x, ch := range row {
|
||||
if m.Modules[y][x] != (ch == '1') {
|
||||
t.Fatalf("%s: module (%d,%d) differs", f, x, y)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestQRCodeAlignmentPositions(t *testing.T) {
|
||||
for v, want := range map[int]string{1: "[]", 2: "[6 18]", 7: "[6 22 38]", 32: "[6 34 60 86 112 138]", 40: "[6 30 58 86 114 142 170]"} {
|
||||
if got := fmtInts(qrCodeAlignment(v)); got != want {
|
||||
t.Errorf("version %d: %s, want %s", v, got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func fmtInts(v []int) string {
|
||||
s := make([]string, len(v))
|
||||
for i, n := range v {
|
||||
s[i] = strconv.Itoa(n)
|
||||
}
|
||||
return "[" + strings.Join(s, " ") + "]"
|
||||
}
|
||||
|
||||
func TestEncodeQRLimits(t *testing.T) {
|
||||
m, err := EncodeQR(make([]byte, 2953), QRLow)
|
||||
if err != nil || m.Version != 40 || m.Size() != 177 {
|
||||
t.Fatalf("largest L symbol: %v %v", m.Version, err)
|
||||
}
|
||||
if _, err := EncodeQR(make([]byte, 2954), QRLow); err == nil {
|
||||
t.Fatal("2954 bytes fit at L")
|
||||
}
|
||||
if _, err := EncodeQR(make([]byte, 1274), QRHigh); err == nil {
|
||||
t.Fatal("1274 bytes fit at H")
|
||||
}
|
||||
m, err = EncodeQR(nil, QRHigh)
|
||||
if err != nil || m.Version != 1 {
|
||||
t.Fatalf("empty data: %v %v", m.Version, err)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user