@Test
  public void testTrack() throws Exception {
    TitleFormat parser =
        new TitleFormat(
            "(%object.medium.name|%object.medium.number)||[%object.medium,-]||%object.number||. ||%object.recording.works.parent.name||[%object.recording.works.parent,: ]||%object.recording.works.name");

    TrackEntity track1 = new TrackEntity();
    track1.setNumber(5);
    track1.setRecording(new RecordingEntity());
    track1.getRecording().getWorks().add(new WorkEntity());
    track1.getRecording().getWorks().iterator().next().setName("Work 2");
    assert parser.format(track1).equals("5. Work 2");

    TrackEntity track2 = new TrackEntity();
    track2.setNumber(9);
    track2.setMedium(new MediumEntity());
    track2.getMedium().setNumber(1);
    track2.setRecording(new RecordingEntity());
    track2.getRecording().getWorks().add(new WorkEntity());
    track2.getRecording().getWorks().iterator().next().setName("Part 1");
    track2.getRecording().getWorks().iterator().next().setParent(new WorkEntity());
    track2.getRecording().getWorks().iterator().next().getParent().setName("Work 3");
    assert parser.format(track2).equals("1-9. Work 3: Part 1");

    TrackEntity track3 = new TrackEntity();
    track3.setNumber(13);
    track3.setMedium(new MediumEntity());
    track3.getMedium().setName("A");
    track3.setRecording(new RecordingEntity());
    track3.getRecording().getWorks().add(new WorkEntity());
    track3.getRecording().getWorks().iterator().next().setName("Part 1");
    track3.getRecording().getWorks().iterator().next().setParent(new WorkEntity());
    track3.getRecording().getWorks().iterator().next().getParent().setName("Work 4");
    assert parser.format(track3).equals("A-13. Work 4: Part 1");
  }
  @Test
  public void testSeparatorCharacters() throws Exception {
    TitleFormat parser =
        new TitleFormat(
            "%obj1|| and some separators like -_.&#:/()=; and ||[%obj3,%obj2]|| and ||(%obj3|%obj2)|| and ||(%obj4|%obj5|%obj1)");

    Map<String, Object> objects = new HashMap<String, Object>();
    objects.put("obj1", "Object1");
    objects.put("obj2", "Object2");
    objects.put("obj3", "Object3");
    System.out.println(parser.format(objects));
    assert parser
        .format(objects)
        .equals("Object1 and some separators like -_.&#:/()=; and Object2 and Object3 and Object1");
  }
  @Test
  public void testRelease() throws Exception {
    TitleFormat parser = new TitleFormat("%object.name");

    ReleaseEntity release = new ReleaseEntity();
    release.setName("Release 1");

    assert parser.format(release).equals("Release 1");
  }
  @Test
  public void testWork() throws Exception {
    TitleFormat parser = new TitleFormat("%parentwork.name||[%parentwork.name,: ]||%work.name");

    WorkEntity work = new WorkEntity();
    work.setName("Work 1");
    WorkEntity part = new WorkEntity();
    part.setName("Part 1");
    part.setParent(work);

    Map<String, Object> objects = new HashMap<String, Object>();

    objects.put("work", work);
    assert parser.format(objects).equals("Work 1");

    objects.put("work", part);
    objects.put("parentwork", work);
    assert parser.format(objects).equals("Work 1: Part 1");
  }
  @Test
  public void testString() throws Exception {
    TitleFormat parser = new TitleFormat("%object");

    assert parser.format("Test String").equals("Test String");
  }