Example #1
0
 def test_clefs(self):
     parser = ParserGABC(root='clef')
     for clef in ['c1', 'c2', 'c3', 'c4', 'f3', 'f4', 'cb3', 'cb4']:
         parse = parser.parse(clef)
         element = visitParseTree(parse, VisitorGABC())
         self.assertIsInstance(element, clef21.TrebleClef)
         self.assertEqual(element.editorial.gabc, clef)
Example #2
0
 def test_multipleNeumes(self):
     parser = ParserGABC(root='syllable')
     parse = parser.parse('A(fg/fg)')
     syllable = visitParseTree(parse, VisitorGABC())
     self.assertEqual(syllable.lyric, 'A')
     self.assertEqual(len(syllable.flat.notes), 4)
     self.assertEqual(len(syllable), 2)
Example #3
0
 def test_flatClefs(self):
     """Test whether flats are NOT reset by syllable boundaries"""
     parser = ParserGABC(root='body')
     parse = parser.parse('(cb2) (e)')
     stream = visitParseTree(parse, VisitorGABC())
     notes = stream.flat.notes
     self.assertEqual(notes[0].name, 'B-')
Example #4
0
 def test_mergeWords3(self):
     gabc = "(c4) A(f) (,) (c) B(g)"
     parser = ParserGABC()
     parse = parser.parse(gabc)
     ch = visitParseTree(parse, VisitorGABC())
     ch.joinTextAcrossPausas()
     self.assertEqual(len(ch[0].elements), 3)
Example #5
0
 def test_macros(self):
     """Test whether a file with macro's is converted properly despite them"""
     parser = ParserGABC(root='file')
     parse = parser.parse(
         '%%\ndef-m1:\grealign;\ndef-m2:\grealign;\n(c2) a(f)')
     elements = visitParseTree(parse, VisitorGABC())
     self.assertTrue(True)
Example #6
0
 def test_notePrefix(self):
     parser = ParserGABC(root='note')
     parse = parser.parse('-f')
     note = visitParseTree(parse, VisitorGABC())
     ed = note.editorial
     self.assertEqual(ed.gabcPosition, 'f')
     self.assertEqual(ed.gabcPrefix, '-')
     self.assertTrue(ed.liquescence)
Example #7
0
 def test_noteSuffixes(self):
     parser = ParserGABC(root='note')
     parse = parser.parse('fs<.')
     note = visitParseTree(parse, VisitorGABC())
     ed = note.editorial
     self.assertEqual(ed.gabcPosition, 'f')
     self.assertTrue({'neumeShape': 's<'} in ed.gabcSuffixes)
     self.assertTrue({'rhythmicSign': '.'} in ed.gabcSuffixes)
Example #8
0
 def test_multipleHeaders(self):
     parser = ParserGABC()
     fileStr = 'attr1:value1;\n%%\nattr2:value2;\n%%\n(c2) A(f)'
     parse = parser.parse(fileStr)
     ch = visitParseTree(parse, VisitorGABC())
     metadata = {'attr1': 'value1', 'attr2': 'value2'}
     self.assertEqual(metadata['attr1'], 'value1')
     self.assertEqual(metadata['attr2'], 'value2')
Example #9
0
 def test_multipleSuffixes(self):
     parser = ParserGABC(root='note')
     parse = parser.parse('go1')
     n = visitParseTree(parse, VisitorGABC())
     suffixes = n.editorial.gabcSuffixes
     self.assertTrue({'neumeShape': 'o'} in suffixes)
     self.assertTrue({'neumeShape': '1'} in suffixes)
     self.assertEqual(n.editorial.gabcPosition, 'g')
Example #10
0
 def test_polyphonicAlterations(self):
     parser = ParserGABC(root='music')
     parse = parser.parse('f{ix}g')
     elements = visitParseTree(parse, VisitorGABC())
     n1, alt, n2 = elements
     self.assertIsInstance(n1, chant.Neume)
     self.assertIsInstance(alt, chant.Flat)
     self.assertIsInstance(n2, chant.Neume)
Example #11
0
 def test_textAfterAccidental(self):
     parser = ParserGABC(root='body')
     parse = parser.parse('(c2) bla(eye)')
     ch = visitParseTree(parse, VisitorGABC())
     word1, word2 = ch[0]
     self.assertIsNone(word1.flatLyrics)
     self.assertEqual(word2.flatLyrics, 'bla')
     note = word2.flat.notes[0]
     self.assertEqual(note.lyric, 'bla')
Example #12
0
 def test_word(self):
     parser = ParserGABC(root='word')
     parse = parser.parse('A(f)B(g)')
     word = visitParseTree(parse, VisitorGABC())
     obj = word.toObject()
     self.assertEqual(len(obj['elements']), 2)
     del obj['elements']
     targetObj = {'type': 'word', 'musicAndTextAligned': None}
     self.assertDictEqual(obj, targetObj)
Example #13
0
 def test_syllable(self):
     parser = ParserGABC(root='syllable')
     parse = parser.parse('A(f)')
     syll = visitParseTree(parse, VisitorGABC())
     obj = syll.toObject()
     self.assertEqual(len(obj['elements']), 1)
     del obj['elements']
     targetObj = {'type': 'syllable', 'lyric': 'A'}
     self.assertDictEqual(obj, targetObj)
Example #14
0
 def test_breath_mark(self):
     """Test whether breath marks reset the accidentals"""
     parser = ParserGABC(root='body')
     parse = parser.parse('(c2) (exe,fe)')
     stream = visitParseTree(parse, VisitorGABC())
     notes = stream.flat.notes
     self.assertEqual(notes[0].name, 'B-')
     self.assertEqual(notes[1].name, 'C')
     self.assertEqual(notes[2].name, 'B')
Example #15
0
 def test_twoSyllables(self):
     parser = ParserGABC(root='word')
     parse = parser.parse('s1(f)s2(f)')
     word = visitParseTree(parse, VisitorGABC())
     syll1, syll2 = word.syllables
     lyric1 = syll1.flat.notes[0].lyrics[0]
     lyric2 = syll2.flat.notes[0].lyrics[0]
     self.assertEqual(lyric1.syllabic, 'begin')
     self.assertEqual(lyric2.syllabic, 'end')
Example #16
0
 def test_multipleSyllablesWithCommas2(self):
     """Test whether syllables separated by commas are correctly
     merged; including the last one"""
     parser = ParserGABC(root='word')
     gabc = 'a(f)(,)(f)(,)(f)'
     parse = parser.parse(gabc)
     word = visitParseTree(parse, VisitorGABC())
     word.joinSyllablesAcrossPausas()
     self.assertEqual(len(word), 1)
Example #17
0
 def test_alterations(self):
     parser = ParserGABC(root='alteration')
     for alteration in 'xy':
         parse = parser.parse(f'f{alteration}')
         element = visitParseTree(parse, VisitorGABC())
         ed = element.editorial
         self.assertIsInstance(element, chant.Alteration)
         self.assertEqual(ed.gabcPosition, 'f')
         self.assertEqual(ed.gabcAlteration, alteration)
Example #18
0
 def test_wordBoundaries(self):
     """Test whether word boundaries reset accidentals"""
     parser = ParserGABC(root='body')
     parse = parser.parse('(c2) a(exfe) c(e)')
     stream = visitParseTree(parse, VisitorGABC())
     notes = stream.flat.notes
     self.assertEqual(notes[0].name, 'C')
     self.assertEqual(notes[1].name, 'B-')
     self.assertEqual(notes[2].name, 'B')
Example #19
0
 def test_syllableWithAnnotation(self):
     parser = ParserGABC(root='syllable')
     parse = parser.parse('*(:)')
     syll = visitParseTree(parse, VisitorGABC())
     obj = syll.toObject()
     self.assertEqual(len(obj['elements']), 1)
     del obj['elements']
     targetObj = {'annotation': '*', 'type': 'syllable'}
     self.assertDictEqual(obj, targetObj)
Example #20
0
 def test_multipleNeumes(self):
     parser = ParserGABC(root='music')
     parse = parser.parse('eh/hi')
     elements = visitParseTree(parse, VisitorGABC())
     self.assertEqual(len(elements), 2)
     self.assertIsInstance(elements[0], chant.Neume)
     self.assertEqual(len(elements[0]), 2)
     self.assertIsInstance(elements[1], chant.Neume)
     self.assertEqual(len(elements[1]), 2)
Example #21
0
 def test_articulationBeforeComma(self):
     parser = ParserGABC(root='body')
     parse = parser.parse("(c2) A(a,d)")
     ch = visitParseTree(parse, VisitorGABC())
     ch.makeBreathMarks()
     clef, n1, n2 = ch.flat
     self.assertIsInstance(clef, chant.Clef)
     self.assertIsInstance(n1, chant.Note)
     self.assertIsInstance(n2, chant.Note)
     self.assertEqual(len(n1.articulations), 1)
Example #22
0
 def test_fileWithoutHeader(self):
     parser = ParserGABC(root='file')
     fileStr = '(c2) a(f)b(g) c(h)\ni(j)'
     parse = parser.parse(fileStr)
     ch = visitParseTree(parse, VisitorGABC())
     notes = ch.flat.notes
     self.assertEqual(notes[0].name, 'C')
     self.assertEqual(notes[1].name, 'D')
     self.assertEqual(notes[2].name, 'E')
     self.assertEqual(notes[3].name, 'G')
Example #23
0
 def test_multipleSyllablesWithCommas(self):
     parser = ParserGABC(root='word')
     gabc = 'a(f)(,)(f)(,)(f)b(f)'
     parse = parser.parse(gabc)
     word = visitParseTree(parse, VisitorGABC())
     word.joinSyllablesAcrossPausas()
     self.assertEqual(len(word), 2)
     syll1, syll2 = word.elements
     self.assertEqual(len(syll1.flat), 5)
     self.assertIsInstance(syll1.flat[1], chant.Pausa)
     self.assertEqual(len(syll2.flat), 1)
Example #24
0
 def test_pausa(self):
     parser = ParserGABC(root='pausa')
     pausaTypes = [(chant.PausaFinalis, ['::']),
                   (chant.PausaMajor, [':', ':?', ':\'']),
                   (chant.PausaMinor, [';', ';1', ';2']),
                   (chant.PausaMinima, [',', ',_', ',0', ',1', '`'])]
     for pausaClass, examples in pausaTypes:
         for gabc in examples:
             parse = parser.parse(gabc)
             element = visitParseTree(parse, VisitorGABC())
             self.assertIsInstance(element, pausaClass)
             self.assertEqual(element.editorial.gabc, gabc)
Example #25
0
 def test_threeOrMoreSyllables(self):
     parser = ParserGABC(root='word')
     parse = parser.parse('s1(f)s2(f)s3(g)s4(f)')
     word = visitParseTree(parse, VisitorGABC())
     s1, s2, s3, s4 = word.syllables
     lyric1 = s1.flat.notes[0].lyrics[0]
     lyric2 = s2.flat.notes[0].lyrics[0]
     lyric3 = s3.flat.notes[0].lyrics[0]
     lyric4 = s4.flat.notes[0].lyrics[0]
     self.assertEqual(lyric1.syllabic, 'begin')
     self.assertEqual(lyric2.syllabic, 'middle')
     self.assertEqual(lyric3.syllabic, 'middle')
     self.assertEqual(lyric4.syllabic, 'end')
Example #26
0
 def test_syllablesWithCommas2(self):
     parser = ParserGABC(root='word')
     gabc = 'a(fg/gh)(,)(hi/ij)'
     parse = parser.parse(gabc)
     word = visitParseTree(parse, VisitorGABC())
     word.joinSyllablesAcrossPausas()
     self.assertEqual(len(word), 1)
     neume1, neume2, comma, neume3, neume4 = word[0].elements
     self.assertIsInstance(neume1, chant.Neume)
     self.assertIsInstance(neume2, chant.Neume)
     self.assertIsInstance(comma, chant.Pausa)
     self.assertIsInstance(neume3, chant.Neume)
     self.assertIsInstance(neume4, chant.Neume)
Example #27
0
 def test_syllablesWithCommas3(self):
     """Test whether a new syllable starts if the next syllable
     has sung text"""
     parser = ParserGABC(root='word')
     gabc = 'a(fg/gh)(,)b(hi/ij)'
     parse = parser.parse(gabc)
     word = visitParseTree(parse, VisitorGABC())
     word.joinSyllablesAcrossPausas()
     (neume1, neume2, comma), (neume3, neume4) = word
     self.assertIsInstance(neume1, chant.Neume)
     self.assertIsInstance(neume2, chant.Neume)
     self.assertIsInstance(comma, chant.Pausa)
     self.assertIsInstance(neume3, chant.Neume)
     self.assertIsInstance(neume4, chant.Neume)
Example #28
0
    def test_text(self):
        parser = ParserGABC(root='body')
        parse = parser.parse('a(c2) word(e)1(f) word2(g)')
        ch = visitParseTree(parse, VisitorGABC())
        w1, w2, w3 = ch[0]
        self.assertEqual(w1.flatLyrics, 'a')
        self.assertEqual(w2.flatLyrics, 'word1')
        self.assertEqual(w3.flatLyrics, 'word2')

        syll1, syll2 = w2.elements
        self.assertEqual(syll1.lyric, 'word')
        self.assertEqual(syll2.lyric, '1')
        self.assertEqual(syll1.flat.notes[0].lyric, 'word')
        self.assertEqual(syll2.flat.notes[0].lyric, '1')
Example #29
0
    def test_singleNeume(self):
        parser = ParserGABC(root='music')
        parse = parser.parse('fgf')
        elements = visitParseTree(parse, VisitorGABC())
        self.assertEqual(len(elements), 1)

        neume = elements[0]
        self.assertEqual(len(neume), 3)
        self.assertIsInstance(neume[0], note21.Note)
        self.assertIsInstance(neume[1], note21.Note)
        self.assertIsInstance(neume[2], note21.Note)
        self.assertEqual(neume[0].editorial.gabcPosition, 'f')
        self.assertEqual(neume[1].editorial.gabcPosition, 'g')
        self.assertEqual(neume[2].editorial.gabcPosition, 'f')
Example #30
0
    def test_flats(self):
        parser = ParserGABC(root='body')
        parse = parser.parse('(c2) a(exee,e)')
        stream = visitParseTree(parse, VisitorGABC())
        flat = stream.flat[1]
        self.assertIsInstance(flat, chant.Alteration)
        self.assertEqual(flat.pitch.step, 'B')

        notes = stream.flat.notes
        self.assertEqual(notes[0].name, 'B-')
        self.assertEqual(notes[0].pitch.accidental.name, 'flat')
        self.assertEqual(notes[1].name, 'B-')
        self.assertEqual(notes[1].pitch.accidental.name, 'flat')
        self.assertEqual(notes[2].name, 'B')
        self.assertIsNone(notes[2].pitch.accidental)