code: def test_XMLReader(tmp_path: Path):
      m = m21.stream.Stream()
      m.insert(m21.tempo.MetronomeMark(number=60))
  
      n = m21.note.Rest()
      n.offset = 0
      n.duration = m21.duration.Duration(1)
      m.insert(n)
  
      n = m21.note.Note(20)
      n.lyric = "a"
      n.offset = 1
      n.duration = m21.duration.Duration(2)
      m.insert(n)
  
      n = m21.note.Note(21)
      n.lyric = ""
      n.offset = 3
      n.duration = m21.duration.Duration(1)
      m.insert(n)
  
      n = m21.note.Note(22)
      n.lyric = "ー"
      n.offset = 4
      n.duration = m21.duration.Duration(1)
      m.insert(n)
  
      n = m21.note.Note(23)
      n.lyric = None
      n.offset = 5
      n.duration = m21.duration.Duration(2)
      m.insert(n)
  
      n = m21.note.Note(24)
      n.lyric = "b"
      n.offset = 7
      n.duration = m21.duration.Duration(1)
      n.articulations.append(m21.articulations.BreathMark())
      m.insert(n)
  
      n = m21.chord.Chord([24, 25])
      n.lyric = "c"
      n.offset = 8
      n.duration = m21.duration.Duration(1)
      m.insert(n)
  
      n = m21.note.Note(25)
      n.lyric = "br"
      n.offset = 9
      n.duration = m21.duration.Duration(1)
      m.insert(n)
  
      n = m21.note.Rest()
      n.offset = 10
      n.duration = m21.duration.Duration(1)
      m.insert(n)
  
      n = m21.note.Note(25)
      n.lyric = "br"
      n.offset = 11
      n.duration = m21.duration.Duration(1)
      m.insert(n)
  
      n = m21.note.Note(26)
      n.lyric = "d"
      n.offset = 12
      n.duration = m21.duration.Duration(1)
      m.insert(n)
  
      xml_path = tmp_path / "abc.xml"
      m.write("xml", fp=xml_path)
  
      p = tmp_path / "dummy3.scp"
      with p.open("w") as f:
          f.write(f"abc {xml_path}\n")
  
      reader = XMLReader(p)
      val = reader["abc"]
  
      assert len(val) == 2
      assert val[0] == 60
      notes_list = [
          NOTE("P", 0, 0, 1),
          NOTE("a", 20, 1, 3),
          NOTE("—", 21, 3, 4),
          NOTE("—", 22, 4, 5),
          NOTE("—", 23, 5, 7),
          NOTE("b", 24, 7, 8),
          NOTE("B", 0, 8, 8),
          NOTE("c", 25, 8, 9),
          NOTE("P", 0, 9, 12),
          NOTE("d", 26, 12, 13),
      ]
      for i in range(len(val[1])):
          assert val[1][i].st == notes_list[i].st
          assert val[1][i].et == notes_list[i].et
          assert val[1][i].lyric == notes_list[i].lyric
          assert val[1][i].midi == notes_list[i].midi
  
file_path: espnet/test/espnet2/fileio/test_score_scp.py
imports: import json
  from pathlib import Path
  import miditoolkit
  import miditoolkit.midi.containers
  import music21
  import numpy
  from espnet2.fileio.score_scp import NOTE, MIDReader, SingingScoreReader, SingingScoreWriter, XMLReader, XMLWriter
label_desc: Use image node_id 1 for calling a global function with example usage: test_XMLReader(tmp_path) without return types