def test_artist(self):
     bms = parse('#artist foo')
     assert bms.artist == 'foo'
 def test_bmp(self):
     bms = parse('#BmPf1 foo.bmp')
     assert bms.bmp[0xf1] == 'foo.bmp'
 def test_definition(self):
     bms = parse('#player 1')
     assert bms.player == 1
 def test_genre(self):
     bms = parse('#GENRE 音楽')
     assert bms.genre == '音楽'
 def test_03(self):
     'wspだけの行はcomment'
     bms = parse(' ')
     assert len(bms.command) == 0
 def test_05(self):
     'wspだけのcommentが改行を食わない'
     bms = parse(' \n#endif')
     assert len(bms.command) == 1
 def test_player_ok(self):
     bms = parse('#player 1\n#player 2')
     assert bms.player == 2
 def test_00(self):
     '#から始まるlineはcommandline'
     bms = parse(' #endif')
     assert len(bms.command) == 1
 def test_同トラック別チャネル(self):
     bms = parse('#00027:00\n#00021:01')
     assert bms.message[0] == {0x27: (0, ), 0x21: (1, )}
 def test_player(self):
     with raises(ParseError) as e:
         parse('#player 1\n#player 2', StrictFlag.DUPRECATE_DEFINITION)
     assert e.value.duplicate_definitions == frozenset('player'.split())
 def test_空文字列は0line(self):
     bms = parse('')
     assert len(bms.command) == 0
 def test_message2(self):
     bms = parse('#00027:00')
     assert bms.message[0] == {0x27: (0, )}
 def test_message0(self):
     bms = parse('#01001:Fa10')
     assert bms.message[10] == {0x01: (0xfa, 0x10)}
 def test_空行後1行は1line(self):
     bms = parse('\n#endif')
     assert len(bms.command) == 1
 def test_message(self):
     with raises(ParseError) as e:
         parse('#00001:00\n#00001:01', StrictFlag.DUPRECATE_DEFINITION)
     assert e.value.duplicate_messages == frozenset(((0, 1), ))
 def test_2行newlineは2line(self):
     bms = parse('#endif\n#endif\n')
     assert len(bms.command) == 2
 def test_message_ok(self):
     bms = parse('#00001:00\n#00001:01')
     assert bms.message[0][1] == (1, )
 def test_01(self):
     '#から始まらないlineはcomment'
     bms = parse('foo')
     assert len(bms.command) == 0
 def test_wav(self):
     with raises(ParseError) as e:
         parse('#wav00 foo\n#WAV00 bar', StrictFlag.DUPRECATE_DEFINITION)
     assert e.value.duplicate_wav == frozenset((0, ))
 def test_04(self):
     'wsp#から始まるが有効なcommandでないlineは例外'
     with raises(ParseException):
         parse(' #foo')
 def test_wav_ok(self):
     bms = parse('#wav00 foo\n#WAV00 bar')
     assert bms.wav[0] == 'bar'
 def test_message(self):
     bms = parse('#09911:20ff')
     assert bms.message[99] == {0x11: (0x20, 0xff)}
 def test_bmp(self):
     with raises(ParseError) as e:
         parse('#Bmpff foo\n#bMPff bar', StrictFlag.DUPRECATE_DEFINITION)
     assert e.value.duplicate_bmp == frozenset((0xff, ))
 def test_player(self):
     with raises(ParseException):
         parse('#player 10')
 def test_1行EOFは1line(self):
     bms = parse('#endif')
     assert len(bms.command) == 1
 def test_title(self):
     bms = parse('#title foo bar baz')
     assert bms.title == 'foo bar baz'
 def test_bmp_ok(self):
     bms = parse('#Bmpff foo\n#bMPff bar')
     assert bms.bmp[0xff] == 'bar'
 def test_bpm(self):
     bms = parse('#bpm 150')
     assert bms.bpm == 150
 def test_wav(self):
     bms = parse('#wAvaF foo.wav')
     assert bms.wav[0xaf] == 'foo.wav'