concertina

Elecronic concertina
git clone https://git.woozle.org/neale/concertina.git

concertina / pkg / layouts
Neale Pickett  ·  2026-02-17

layouts_test.go

 1package layouts
 2
 3import (
 4	"encoding/json"
 5	"testing"
 6)
 7
 8func TestParser(t *testing.T) {
 9	txt := `Rochelle C/G
10     	E,/F,	A,/B♭,	C♯/D♯	A/G	G♯/B♭	|	c♯/d♯	a/c♯	g♯/g	c♯'/b♭	a'/d'
11	C,/G,	G,/B,	C/D	E/F	G/A	|	c/B	e/d	g/f	c'/a	e'/b
12	B,/A,	D/F♯	G/A	B/c	d/e	|	g/f♯	b/a	d'/c'	g'/e'	b'/f♯'
13	-	-	-	-	D,/D,	|	-	-	-	-	-
14`
15
16	layouts, err := ParseLayouts(txt)
17	if err != nil {
18		t.Fatal(err)
19	}
20
21	if l := len(layouts); l != 1 {
22		t.Fatalf("wrong length: %d", l)
23	}
24
25	layout := layouts[0]
26	if layout.Name != "Rochelle C/G" {
27		t.Error("wrong name")
28	}
29
30	if b, err := json.Marshal(layout); err != nil {
31		t.Error(err)
32	} else {
33		t.Log(string(b))
34	}
35
36	if v := layout.Notes[0][0][0][0]; v != ABC2MIDI("E,") {
37		t.Errorf("wrong note: %d", v)
38	}
39	if layout.Notes[0][0][0][1] != ABC2MIDI("F,") {
40		t.Error("wrong note")
41	}
42}
43
44func TestDefaultParser(t *testing.T) {
45	layouts, err := DefaultLayouts()
46	if err != nil {
47		t.Fatal(err)
48	}
49
50	// If you add or remove a layout, you'll have to change this constant :)
51	if l := len(layouts); l != 4 {
52		t.Errorf("wrong number of layouts: %d", l)
53	}
54}