package com.limegroup.gnutella.metadata; import java.io.File; import java.util.List; import junit.framework.Test; import org.limewire.util.FileUtils; import org.limewire.util.NameValue; import org.limewire.util.TestUtils; import com.google.inject.Injector; import com.limegroup.gnutella.LimeTestUtils; import com.limegroup.gnutella.metadata.audio.AudioMetaData; import com.limegroup.gnutella.xml.LimeXMLDocument; import com.limegroup.gnutella.xml.LimeXMLDocumentFactory; import com.limegroup.gnutella.xml.LimeXMLNames; import com.limegroup.gnutella.xml.LimeXMLReplyCollection.MetaDataState; public class M4AWriterTest extends AudioTestBase { private LimeXMLDocumentFactory limeXMLDocumentFactory; private MetaDataFactory metaDataFactory; private String newTitle = "new title"; private String newArtist = "new artist"; private String newAlbum = "new album"; public M4AWriterTest(String name) { super(name); } public static Test suite() { return buildTestSuite(M4AWriterTest.class); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } @Override public void setUp(){ Injector injector = LimeTestUtils.createInjector(); limeXMLDocumentFactory = injector.getInstance(LimeXMLDocumentFactory.class); metaDataFactory = injector.getInstance(MetaDataFactory.class); } /** * Tests writing meta-data to an M4a File */ public void testM4ATagsWriting() throws Exception { File f = TestUtils.getResourceFile(dir + "M4A.m4a"); assertTrue(f.exists()); File TEST_FILE = new File("test0012321.m4a"); TEST_FILE.delete(); FileUtils.copy(f, TEST_FILE); assertTrue(TEST_FILE.exists()); TEST_FILE.deleteOnExit(); // read the meta data from the current audio file AudioMetaData data = (AudioMetaData) metaDataFactory.parse(TEST_FILE); // test the contents to be sure its valid validateTag(data); // get the meta-data and update some of the values List<NameValue<String>> nameValList = data.toNameValueList(); nameValList.add(new NameValue<String>(LimeXMLNames.AUDIO_TITLE, newTitle)); nameValList.add(new NameValue<String>(LimeXMLNames.AUDIO_ARTIST, newArtist)); nameValList.add(new NameValue<String>(LimeXMLNames.AUDIO_ALBUM, newAlbum)); // create an xml doc from the audio data LimeXMLDocument doc = limeXMLDocumentFactory.createLimeXMLDocument(nameValList, data.getSchemaURI()); //2. Write data into the file MetaWriter editor = metaDataFactory.getEditorForFile(TEST_FILE.getCanonicalPath()); editor.populate(doc); MetaDataState retVal = editor.commitMetaData(TEST_FILE.getAbsolutePath()); assertEquals(MetaDataState.NORMAL,retVal); // read the file again data = (AudioMetaData) metaDataFactory.parse(TEST_FILE); AudioMetaData amd = data; // test the values, chanages values should be read assertEquals(newTitle, amd.getTitle()); assertEquals(newArtist, amd.getArtist()); assertEquals(newAlbum, amd.getAlbum()); assertEquals(COMMENT, amd.getComment()); assertEquals(TRACK, amd.getTrack()); assertEquals(YEAR, amd.getYear()); assertEquals(GENRE, amd.getGenre()); } }