/* * ID3V1Test.java * * Created on 29-Dec-2003 * * Copyright (C)2003-2005 Paul Grebenc * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $Id: ID3V1Test.java,v 1.7 2005/04/26 16:56:39 paul Exp $ */ package org.blinkenlights.jid3.test; import java.io.*; import junit.framework.TestCase; import org.blinkenlights.jid3.*; import org.blinkenlights.jid3.util.*; import org.blinkenlights.jid3.v1.*; /** * @author paul * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class ID3V1Test extends TestCase { /** * Constructor for ID3V1Test. * @param arg0 */ public ID3V1Test(String arg0) { super(arg0); } public static void main(String[] args) { junit.swingui.TestRunner.run(ID3V1Test.class); } /* * @see TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); } /* * @see TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); } /** Test reading v1.0 tag from known file. */ public void testReadV1_0Tag() { try { File oSourceFile = new File(AllTests.s_RootPath + "v1_0tags.mp3"); MediaFile oMediaFile = new MP3File(oSourceFile); ID3Tag[] aoID3Tag = oMediaFile.getTags(); System.out.println("\n*** v1_0tags.mp3 tags:"); ID3Util.printTags(aoID3Tag); if (aoID3Tag.length != 1) { fail("There should be exactly one set of tags in this file."); } if ( ! (aoID3Tag[0] instanceof ID3V1_0Tag) ) { fail("Expected ID3V1_0Tag."); } ID3V1_0Tag oID3V1_0Tag = (ID3V1_0Tag)aoID3Tag[0]; if ((!oID3V1_0Tag.getTitle().equals("Title")) || (!oID3V1_0Tag.getArtist().equals("Artist")) || (!oID3V1_0Tag.getAlbum().equals("Album")) || (!oID3V1_0Tag.getYear().equals("1999")) || (!oID3V1_0Tag.getComment().equals("Comment")) || (!oID3V1_0Tag.getGenre().equals(ID3V1Tag.Genre.Nullsoft_BlackMetal))) { fail("Unexpected tag value found."); } } catch (Exception e) { fail(e.toString()); } } /** Test writing v1.0 tag to bare file, then compare against expected result. */ public void testWriteV1_0Tag() { try { // get a copy of an unmodified file to edit copy(AllTests.s_RootPath + "notags.mp3", AllTests.s_RootPath + "id3_v1_0_testresult.mp3"); File oSourceFile = new File(AllTests.s_RootPath + "id3_v1_0_testresult.mp3"); MediaFile oMediaFile = new MP3File(oSourceFile); // write v1.0 tag to file ID3V1_0Tag oID3V1_0Tag = new ID3V1_0Tag(); oID3V1_0Tag.setAlbum("Album"); oID3V1_0Tag.setArtist("Artist"); oID3V1_0Tag.setComment("Comment"); oID3V1_0Tag.setGenre(ID3V1Tag.Genre.Nullsoft_BlackMetal); oID3V1_0Tag.setTitle("Title"); oID3V1_0Tag.setYear("1999"); System.out.println(oID3V1_0Tag.toString()); oMediaFile.setID3Tag(oID3V1_0Tag); oMediaFile.sync(); // check against expected result compare(AllTests.s_RootPath + "v1_0tags.mp3", AllTests.s_RootPath + "id3_v1_0_testresult.mp3"); } catch (Exception e) { fail(e.toString()); } } /** Test reading v1.1 tag from known file. */ public void testReadV1_1Tag() { try { File oSourceFile = new File(AllTests.s_RootPath + "v1_1tags.mp3"); MediaFile oMediaFile = new MP3File(oSourceFile); ID3Tag[] aoID3Tag = oMediaFile.getTags(); System.out.println("\n*** v1_1tags.mp3 tags:"); ID3Util.printTags(aoID3Tag); if (aoID3Tag.length != 1) { fail("There should be exactly one set of tags in this file."); } if ( ! (aoID3Tag[0] instanceof ID3V1_1Tag) ) { fail("Expected ID3V1_1Tag."); } ID3V1_1Tag oID3V1_1Tag = (ID3V1_1Tag)aoID3Tag[0]; if ((!oID3V1_1Tag.getTitle().equals("Title")) || (!oID3V1_1Tag.getArtist().equals("Artist")) || (!oID3V1_1Tag.getAlbum().equals("Album")) || (!oID3V1_1Tag.getYear().equals("1999")) || (!oID3V1_1Tag.getComment().equals("Comment")) || (!oID3V1_1Tag.getGenre().equals(ID3V1Tag.Genre.Nullsoft_BlackMetal)) || (oID3V1_1Tag.getAlbumTrack() != 7) || (oID3V1_1Tag.getGenre().getByteValue() != 138)) { fail("Unexpected tag value found."); } } catch (Exception e) { fail(e.toString()); } } /** Test writing v1.0 tag to bare file, then compare against expected result. */ public void testWriteV1_1Tag() { try { // get a copy of an unmodified file to edit copy(AllTests.s_RootPath + "notags.mp3", AllTests.s_RootPath + "id3_v1_1_testresult.mp3"); File oSourceFile = new File(AllTests.s_RootPath + "id3_v1_1_testresult.mp3"); MediaFile oMediaFile = new MP3File(oSourceFile); // write v1.1 tag to file ID3V1_1Tag oID3V1_1Tag = new ID3V1_1Tag(); oID3V1_1Tag.setAlbum("Album"); oID3V1_1Tag.setArtist("Artist"); oID3V1_1Tag.setComment("Comment"); oID3V1_1Tag.setGenre(ID3V1Tag.Genre.Nullsoft_BlackMetal); oID3V1_1Tag.setTitle("Title"); oID3V1_1Tag.setYear("1999"); oID3V1_1Tag.setAlbumTrack(7); System.out.println(oID3V1_1Tag.toString()); oMediaFile.setID3Tag(oID3V1_1Tag); oMediaFile.sync(); // check against expected result compare(AllTests.s_RootPath + "v1_1tags.mp3", AllTests.s_RootPath + "id3_v1_1_testresult.mp3"); } catch (Exception e) { fail(e.toString()); } } /** Copy a file. * * @param sSource source filename * @param sDestination destination filename * @throws Exception */ private static void copy(String sSource, String sDestination) throws Exception { File oInputFile = new File(sSource); File oOutputFile = new File(sDestination); FileInputStream oFIS = new FileInputStream(oInputFile); FileOutputStream oFOS = new FileOutputStream(oOutputFile); int c; while ((c = oFIS.read()) != -1) oFOS.write(c); oFIS.close(); oFOS.close(); } /** Compare two files. * * @param sFileOne filename * @param sFileTwo filename * @return true if identical, false otherwise * @throws Exception */ private static void compare(String sFileOne, String sFileTwo) throws Exception { File oOneFile = new File(sFileOne); File oTwoFile = new File(sFileTwo); // check that lengths are the same if (oOneFile.length() != oTwoFile.length()) { throw new Exception("File lengths differ."); } FileInputStream oFIS1 = new FileInputStream(oOneFile); FileInputStream oFIS2 = new FileInputStream(oTwoFile); int c; // lengths are equal, so check that contents are the same int i=0; while ((c = oFIS1.read()) != -1) { if (oFIS2.read() != c) { throw new Exception("File contents differ at position " + i + "."); } i++; } oFIS1.close(); oFIS2.close(); } }