/** Lets now check the value explicity are what we expect */
  public void testTagFieldKeyWrite2() {
    Exception exceptionCaught = null;
    try {
      File testFile = AbstractTestCase.copyAudioToTmp("test1.wma", new File("testwrite1.wma"));
      AudioFile f = AudioFileIO.read(testFile);
      AudioFileIO.delete(f);

      // test fields are written with correct ids
      f = AudioFileIO.read(testFile);
      Tag tag = f.getTag();
      for (FieldKey key : FieldKey.values()) {
        if (!(key == FieldKey.COVER_ART)) {
          tag.addField(tag.createField(key, key.name() + "_value"));
        }
      }
      f.commit();

      // Reread File
      f = AudioFileIO.read(testFile);
      tag = f.getTag();

      TagField tf = tag.getFirstField(AsfFieldKey.ALBUM.getFieldName());
      assertEquals("WM/AlbumTitle", tf.getId());
      assertEquals("ALBUM_value", ((TagTextField) tf).getContent());
      assertEquals("UTF-16LE", ((TagTextField) tf).getEncoding());

      tf = tag.getFirstField(AsfFieldKey.ALBUM_ARTIST.getFieldName());
      assertEquals("WM/AlbumArtist", tf.getId());
      assertEquals("ALBUM_ARTIST_value", ((TagTextField) tf).getContent());
      assertEquals("UTF-16LE", ((TagTextField) tf).getEncoding());

      tf = tag.getFirstField(AsfFieldKey.AMAZON_ID.getFieldName());
      assertEquals("ASIN", tf.getId());
      assertEquals("AMAZON_ID_value", ((TagTextField) tf).getContent());
      assertEquals("UTF-16LE", ((TagTextField) tf).getEncoding());

      tf = tag.getFirstField(AsfFieldKey.TITLE.getFieldName());
      assertEquals("TITLE", tf.getId());
      assertEquals("TITLE_value", ((TagTextField) tf).getContent());
      assertEquals("UTF-16LE", ((TagTextField) tf).getEncoding());

    } catch (Exception e) {
      e.printStackTrace();
      exceptionCaught = e;
    }
    assertNull(exceptionCaught);
  }
  /**
   * File metadata was set with Media Monkey 3
   *
   * <p>Checking our fields match the fields used by media Monkey 3 (Defacto Standard) by ensuring
   * we can read fields written in Media Monkey
   */
  public void testReadFileFromMediaMonkey3() {
    Exception exceptionCaught = null;
    try {
      File testFile = AbstractTestCase.copyAudioToTmp("test1.wma");
      AudioFile f = AudioFileIO.read(testFile);

      assertEquals("32", f.getAudioHeader().getBitRate());
      assertEquals(
          "ASF (audio): 0x0161 (Windows Media Audio (ver 7,8,9))",
          f.getAudioHeader().getEncodingType());
      assertEquals("2", f.getAudioHeader().getChannels());
      assertEquals("32000", f.getAudioHeader().getSampleRate());
      assertFalse(f.getAudioHeader().isVariableBitRate());

      assertTrue(f.getTag() instanceof AsfTag);
      AsfTag tag = (AsfTag) f.getTag();
      System.out.println(tag);

      // Ease of use methods for common fields
      assertEquals("artist", tag.getFirst(FieldKey.ARTIST));
      assertEquals("album", tag.getFirst(FieldKey.ALBUM));
      assertEquals("tracktitle", tag.getFirst(FieldKey.TITLE));
      assertEquals("comments", tag.getFirst(FieldKey.COMMENT));
      assertEquals("1971", tag.getFirst(FieldKey.YEAR));
      assertEquals("3", tag.getFirst(FieldKey.TRACK));
      assertEquals("genre", tag.getFirst(FieldKey.GENRE));

      assertEquals("artist", tag.getFirst(FieldKey.ARTIST));
      assertEquals("artist", tag.getFirst(AsfFieldKey.AUTHOR.getFieldName()));

      assertEquals("album", tag.getFirst(FieldKey.ALBUM));
      assertEquals("album", tag.getFirst(AsfFieldKey.ALBUM.getFieldName()));

      assertEquals("tracktitle", tag.getFirst(FieldKey.TITLE));
      assertEquals("tracktitle", tag.getFirst(AsfFieldKey.TITLE.getFieldName()));

      assertEquals("genre", tag.getFirst(FieldKey.GENRE));
      assertEquals("genre", tag.getFirst(AsfFieldKey.GENRE.getFieldName()));

      assertEquals("3", tag.getFirst(FieldKey.TRACK));
      assertEquals("1971", tag.getFirst(FieldKey.YEAR));
      assertEquals("genre", tag.getFirst(FieldKey.GENRE));
      assertEquals("comments", tag.getFirst(FieldKey.COMMENT));
      assertEquals("albumartist", tag.getFirst(FieldKey.ALBUM_ARTIST));
      assertEquals("composer", tag.getFirst(FieldKey.COMPOSER));
      assertEquals("grouping", tag.getFirst(FieldKey.GROUPING));
      assertEquals("2", tag.getFirst(FieldKey.DISC_NO));
      assertEquals("lyrics for song", tag.getFirst(FieldKey.LYRICS));

      assertEquals("encoder", tag.getFirst(FieldKey.ENCODER));
      assertEquals("isrc", tag.getFirst(FieldKey.ISRC));

      assertEquals("publisher", tag.getFirst(FieldKey.RECORD_LABEL));
      assertEquals("Lyricist", tag.getFirst(FieldKey.LYRICIST));
      assertEquals("conductor", tag.getFirst(FieldKey.CONDUCTOR));

      assertEquals("Mellow", tag.getFirst(FieldKey.MOOD));

      // Media Monkey does not currently support these fields ...
      // assertEquals("is_compilation", tag.getFirst(FieldKey.IS_COMPILATION));
      // assertEquals("artist_sort", tag.getFirst(FieldKey.ARTIST_SORT));
      // assertEquals("album_artist_sort", tag.getFirst(FieldKey.ALBUM_ARTIST_SORT));
      // assertEquals("album_sort", tag.getFirst(FieldKey.ALBUM_SORT));
      // assertEquals("title_sort", tag.getFirst(FieldKey.TITLE_SORT));
      // assertEquals("barcode", tag.getFirst(FieldKey.BARCODE));
      // assertEquals("catalogno", tag.getFirst(FieldKey.CATALOG_NO));
      // assertEquals("media", tag.getFirst(FieldKey.MEDIA));
      // assertEquals("remixer", tag.getFirst(FieldKey.REMIXER));
      // Now
    } catch (Exception e) {
      e.printStackTrace();
      exceptionCaught = e;
    }
    assertNull(exceptionCaught);
  }
 public void testIsMultiValues() {
   assertFalse(AsfFieldKey.isMultiValued(AsfFieldKey.ALBUM.getFieldName()));
 }
  /**
   * File metadata was set with PicardQt
   *
   * <p>Checking our fields match the fields used by picard Qt3 (Defacto Standard for Musicbrainz
   * fields) by ensuring we can read fields written in Picard Qt
   */
  public void testReadFileFromPicardQt() {
    File orig = new File("testdata", "test2.wma");
    if (!orig.isFile()) {
      System.err.println("Unable to test file - not available");
      return;
    }

    Exception exceptionCaught = null;
    try {
      File testFile = AbstractTestCase.copyAudioToTmp("test2.wma");
      AudioFile f = AudioFileIO.read(testFile);

      assertEquals("128", f.getAudioHeader().getBitRate());
      assertEquals(
          "ASF (audio): 0x0162 (Windows Media Audio 9 series (Professional))",
          f.getAudioHeader().getEncodingType());
      assertEquals("2", f.getAudioHeader().getChannels());
      assertEquals("44100", f.getAudioHeader().getSampleRate());
      assertFalse(f.getAudioHeader().isVariableBitRate());

      assertTrue(f.getTag() instanceof AsfTag);
      AsfTag tag = (AsfTag) f.getTag();
      System.out.println(tag);

      // Ease of use methods for common fields
      assertEquals("Sonic Youth", tag.getFirst(FieldKey.ARTIST));
      assertEquals("Sister", tag.getFirst(FieldKey.ALBUM));
      assertEquals("(I Got a) Catholic Block", tag.getFirst(FieldKey.TITLE));
      assertEquals("1987", tag.getFirst(FieldKey.YEAR));
      assertEquals("2", tag.getFirst(FieldKey.TRACK)); // NOTE:track can have seroes or not
      assertEquals("no wave", tag.getFirst(FieldKey.GENRE));

      assertEquals("Sonic Youth", tag.getFirst(FieldKey.ARTIST));

      assertEquals("Sonic Youth", tag.getFirst(AsfFieldKey.AUTHOR.getFieldName()));

      assertEquals("Sister", tag.getFirst(FieldKey.ALBUM));
      assertEquals("Sister", tag.getFirst(AsfFieldKey.ALBUM.getFieldName()));

      assertEquals("(I Got a) Catholic Block", tag.getFirst(FieldKey.TITLE));
      assertEquals("(I Got a) Catholic Block", tag.getFirst(AsfFieldKey.TITLE.getFieldName()));

      assertEquals("no wave", tag.getFirst(FieldKey.GENRE));
      assertEquals("no wave", tag.getFirst(AsfFieldKey.GENRE.getFieldName()));

      assertEquals("2", tag.getFirst(FieldKey.TRACK));
      assertEquals("2", tag.getFirst(AsfFieldKey.TRACK.getFieldName()));

      assertEquals("1987", tag.getFirst(FieldKey.YEAR));
      assertEquals("1987", tag.getFirst(AsfFieldKey.YEAR.getFieldName()));

      assertEquals("Sonic Youth", tag.getFirst(FieldKey.ALBUM_ARTIST));
      assertEquals("Sonic Youth", tag.getFirst(AsfFieldKey.ALBUM_ARTIST.getFieldName()));

      assertEquals("Blast First", tag.getFirst(FieldKey.RECORD_LABEL));
      assertEquals("Blast First", tag.getFirst(AsfFieldKey.RECORD_LABEL.getFieldName()));

      assertEquals("Sonic Youth", tag.getFirst(FieldKey.ARTIST_SORT));
      assertEquals("Sonic Youth", tag.getFirst(AsfFieldKey.ARTIST_SORT.getFieldName()));

      assertEquals("Sonic Youth", tag.getFirst(FieldKey.ARTIST_SORT));
      assertEquals("Sonic Youth", tag.getFirst(AsfFieldKey.ARTIST_SORT.getFieldName()));

      assertEquals("Sonic Youth", tag.getFirst(FieldKey.ALBUM_ARTIST_SORT));
      assertEquals("Sonic Youth", tag.getFirst(AsfFieldKey.ALBUM_ARTIST_SORT.getFieldName()));

      assertEquals("official", tag.getFirst(FieldKey.MUSICBRAINZ_RELEASE_STATUS));
      assertEquals("official", tag.getFirst(AsfFieldKey.MUSICBRAINZ_RELEASE_STATUS.getFieldName()));

      assertEquals("album", tag.getFirst(FieldKey.MUSICBRAINZ_RELEASE_TYPE));
      assertEquals("album", tag.getFirst(AsfFieldKey.MUSICBRAINZ_RELEASE_TYPE.getFieldName()));

      assertEquals("GB", tag.getFirst(FieldKey.MUSICBRAINZ_RELEASE_COUNTRY));
      assertEquals("GB", tag.getFirst(AsfFieldKey.MUSICBRAINZ_RELEASE_COUNTRY.getFieldName()));

      assertEquals(
          "5cbef01b-cc35-4f52-af7b-d0df0c4f61b9",
          tag.getFirst(FieldKey.MUSICBRAINZ_RELEASEARTISTID));
      assertEquals(
          "5cbef01b-cc35-4f52-af7b-d0df0c4f61b9",
          tag.getFirst(AsfFieldKey.MUSICBRAINZ_RELEASEARTISTID.getFieldName()));

      assertEquals(
          "f8ece8ad-0ef1-45c0-9d20-a58a10052d5c", tag.getFirst(FieldKey.MUSICBRAINZ_TRACK_ID));
      assertEquals(
          "f8ece8ad-0ef1-45c0-9d20-a58a10052d5c",
          tag.getFirst(AsfFieldKey.MUSICBRAINZ_TRACK_ID.getFieldName()));

      assertEquals(
          "ca16e36d-fa43-4b49-8c71-d98bd70b341f", tag.getFirst(FieldKey.MUSICBRAINZ_RELEASEID));
      assertEquals(
          "ca16e36d-fa43-4b49-8c71-d98bd70b341f",
          tag.getFirst(AsfFieldKey.MUSICBRAINZ_RELEASEID.getFieldName()));

      assertEquals(
          "5cbef01b-cc35-4f52-af7b-d0df0c4f61b9", tag.getFirst(FieldKey.MUSICBRAINZ_ARTISTID));
      assertEquals(
          "5cbef01b-cc35-4f52-af7b-d0df0c4f61b9",
          tag.getFirst(AsfFieldKey.MUSICBRAINZ_ARTISTID.getFieldName()));

      // This example doesnt populate these fields
      // assertEquals("Sonic Youth", tag.getFirst(FieldKey.COMPOSER));
      // assertEquals("grouping", tag.getFirst(FieldKey.GROUPING));
      // assertEquals("2", tag.getFirst(FieldKey.DISC_NO));
      // assertEquals("lyrics for song", tag.getFirst(FieldKey.LYRICS));
      // assertEquals("encoder", tag.getFirst(FieldKey.ENCODER));
      // assertEquals("isrc", tag.getFirst(FieldKey.ISRC));
      // assertEquals("Lyricist", tag.getFirst(FieldKey.LYRICIST));
      // assertEquals("conductor", tag.getFirst(FieldKey.CONDUCTOR));
      // assertEquals("Mellow", tag.getFirst(FieldKey.INVOLVED_PEOPLE));
      // assertEquals("5cbef01b-cc35-4f52-af7b-d0df0c4f61b9", tag.getFirst(FieldKey.MUSICIP_ID));

      // Picard Qt does not currently support these fields ...
      // assertEquals("is_compilation", tag.getFirst(FieldKey.IS_COMPILATION));
      // assertEquals("album_sort", tag.getFirst(FieldKey.ALBUM_SORT));
      // assertEquals("title_sort", tag.getFirst(FieldKey.TITLE_SORT));
      // assertEquals("barcode", tag.getFirst(FieldKey.BARCODE));
      // assertEquals("catalogno", tag.getFirst(FieldKey.CATALOG_NO));
      // assertEquals("media", tag.getFirst(FieldKey.MEDIA));
      // assertEquals("remixer", tag.getFirst(FieldKey.REMIXER));

      // Now
    } catch (Exception e) {
      e.printStackTrace();
      exceptionCaught = e;
    }
    assertNull(exceptionCaught);
  }