Files
alda-mirror/client/parser/barlines_test.go
Dave Yarwood 3588fd4689 make PitchIdentifier an interface instead of implicitly using certain fields of Note in certain situations
In accordance with the "don't make invalid data representable" principle.

This also allows us to create a LispPitch type in alda.lisp, which will just
wrap PitchIdentifier.
2019-11-04 09:32:51 -05:00

56 lines
1.5 KiB
Go

package parser
import (
"testing"
"alda.io/client/model"
_ "alda.io/client/testing"
)
func TestBarlines(t *testing.T) {
executeParseTestCases(
t,
parseTestCase{
label: "simple use of barlines",
given: "violin: c d | e f | g a",
expect: []model.ScoreUpdate{
model.PartDeclaration{Names: []string{"violin"}},
model.Note{Pitch: model.LetterAndAccidentals{NoteLetter: model.C}},
model.Note{Pitch: model.LetterAndAccidentals{NoteLetter: model.D}},
model.Barline{},
model.Note{Pitch: model.LetterAndAccidentals{NoteLetter: model.E}},
model.Note{Pitch: model.LetterAndAccidentals{NoteLetter: model.F}},
model.Barline{},
model.Note{Pitch: model.LetterAndAccidentals{NoteLetter: model.G}},
model.Note{Pitch: model.LetterAndAccidentals{NoteLetter: model.A}},
},
},
parseTestCase{
label: "a note tied over many barlines",
given: "marimba: c1|~1|~1~|1|~1~|2.",
expect: []model.ScoreUpdate{
model.PartDeclaration{Names: []string{"marimba"}},
model.Note{
Pitch: model.LetterAndAccidentals{NoteLetter: model.C},
Duration: model.Duration{
Components: []model.DurationComponent{
model.NoteLength{Denominator: 1},
model.Barline{},
model.NoteLength{Denominator: 1},
model.Barline{},
model.NoteLength{Denominator: 1},
model.Barline{},
model.NoteLength{Denominator: 1},
model.Barline{},
model.NoteLength{Denominator: 1},
model.Barline{},
model.NoteLength{Denominator: 2, Dots: 1},
},
},
},
},
},
)
}