/*
You may freely copy, distribute, modify and use this class as long
as the original author attribution remains intact. See message
below.
Copyright (C) 2005 Christian Pesch. All Rights Reserved.
*/
package slash.metamusic.mp3;
import slash.metamusic.test.AbstractFileTest;
import slash.metamusic.util.Files;
import java.io.File;
import java.io.IOException;
import static slash.metamusic.mp3.ID3FileName.WINDOWS_PATH_LENGTH_LIMIT;
/**
* Tests for ID3FileName
*/
public class ID3FileNameTest extends AbstractFileTest {
public ID3FileNameTest(String name) {
super(name);
}
public void testSimpleID3FileName() {
ID3FileName id3FileName = new ID3FileName("track", "artist", "album", 4711, false);
String fileName = "artist - album - 4711 - track.mp3";
String filePath = "artist" + File.separator + "album";
assertEquals(filePath + File.separator + fileName, id3FileName.getAbsolutePath());
assertEquals(fileName, id3FileName.getFileName());
assertEquals(filePath, id3FileName.getFilePath());
}
public void testSpecialCharactersID3FileName() {
ID3FileName id3FileName = new ID3FileName("\\/track\"", "an-a`artist*?", "hits: von 1975 - 2000!", 1234, false);
String fileName = "an-a'artist - hits von 1975-2000 - 1234 - track.mp3";
String filePath = "an-a'artist" + File.separator + "hits von 1975-2000";
assertEquals(filePath + File.separator + fileName, id3FileName.getAbsolutePath());
assertEquals(fileName, id3FileName.getFileName());
assertEquals(filePath, id3FileName.getFilePath());
}
public void testVariousCollectionID3FileName() {
ID3FileName id3FileName = new ID3FileName("track", "artist", "album", 9876, true);
String fileName = "artist - album - 9876 - track.mp3";
String filePath = "album";
assertEquals(filePath + File.separator + fileName,
id3FileName.getAbsolutePath());
assertEquals(fileName, id3FileName.getFileName());
assertEquals(filePath, id3FileName.getFilePath());
}
public void testTooLongFileName() {
String longName = createString(1024);
ID3FileName id3FileName = new ID3FileName(longName, longName, longName, Integer.MAX_VALUE, false);
String fileName = longName + " - " + longName + " - " + Integer.MAX_VALUE + " - " + longName + ".mp3";
String filePath = longName + File.separator + longName;
assertEquals(filePath + File.separator + fileName,
id3FileName.getAbsolutePath());
assertEquals(fileName, id3FileName.getFileName());
assertEquals(filePath, id3FileName.getFilePath());
}
private void checkFileName(ID3FileName id3) {
assertTrue(id3.isValid());
String fileName = "A - B - 4711 - C.mp3";
assertEquals(fileName, id3.getFileName());
String filePath = "A/B";
assertEquals(Files.replaceSeparators(filePath), id3.getFilePath());
assertEquals(Files.replaceSeparators(filePath + "/" + fileName), id3.getAbsolutePath());
assertEquals("B", id3.getAlbum());
assertEquals("A", id3.getArtist());
assertEquals(4711, id3.getIndex());
assertEquals("C", id3.getTrack());
assertFalse(id3.isVarious());
assertEquals(-1, id3.getReadSize());
assertEquals(-1, id3.getYear());
assertNull(id3.getGenre());
assertNull(id3.getComment());
}
public void testID3FileName() throws IOException {
File file = new File("A - B - 4711 - C.mp3");
ID3FileName id3 = new ID3FileName(file);
checkFileName(id3);
}
public void testHyphenID3FileName() throws IOException {
File file = new File("A-B-4711-C.mp3");
ID3FileName id3 = new ID3FileName(file);
checkFileName(id3);
}
public void testDotID3FileName() throws IOException {
File file = new File("A.B.4711.C.mp3");
ID3FileName id3 = new ID3FileName(file);
checkFileName(id3);
}
public void testNoIndexID3FileName() throws IOException {
File file = new File("A-B-C.mp3");
ID3FileName id3 = new ID3FileName(file);
assertTrue(id3.isValid());
String fileName = "A - B - C.mp3";
assertEquals(fileName, id3.getFileName());
String filePath = "A/B";
assertEquals(Files.replaceSeparators(filePath), id3.getFilePath());
assertEquals(Files.replaceSeparators(filePath + "/" + fileName), id3.getAbsolutePath());
assertEquals("B", id3.getAlbum());
assertEquals("A", id3.getArtist());
assertEquals(-1, id3.getIndex());
assertEquals("C", id3.getTrack());
id3.setIndex(4711);
checkFileName(id3);
}
public void testNoAlbumID3FileName() throws IOException {
File file = new File("A-C.mp3");
ID3FileName id3 = new ID3FileName(file);
assertTrue(id3.isValid());
String fileName = "A - C.mp3";
assertEquals(fileName, id3.getFileName());
assertNull(id3.getAlbum());
assertEquals("A", id3.getArtist());
assertEquals(-1, id3.getIndex());
assertEquals("C", id3.getTrack());
id3.setAlbum("B");
id3.setIndex(4711);
checkFileName(id3);
}
public void testNoTrackID3FileName() throws IOException {
File file = new File("C.mp3");
ID3FileName id3 = new ID3FileName(file);
assertTrue(id3.isValid());
String fileName = "C.mp3";
assertEquals(fileName, id3.getFileName());
assertNull(id3.getAlbum());
assertEquals("C", id3.getArtist());
assertEquals(-1, id3.getIndex());
assertNull(id3.getTrack());
id3.setAlbum("B");
id3.setArtist("A");
id3.setIndex(4711);
id3.setTrack("C");
checkFileName(id3);
}
public void testWithinWindowsFileNameLengthLimits() throws IOException {
File file = File.createTempFile("renametest", ".mp3");
assertTrue(file.exists());
int pathLength = file.getAbsolutePath().length();
assertTrue(pathLength < WINDOWS_PATH_LENGTH_LIMIT);
ID3FileName id3 = new ID3FileName(file);
id3.setAlbum("B");
String artist = createString(WINDOWS_PATH_LENGTH_LIMIT - pathLength);
assertTrue(artist.length() > 0);
id3.setArtist(artist);
id3.setIndex(4711);
id3.setTrack("C");
File renamed = id3.rename(file);
assertNotEquals(renamed.getAbsolutePath(), file.getAbsolutePath());
int fileNameLengthAfterRename = renamed.getAbsolutePath().length();
assertTrue(renamed.delete());
assertEquals(WINDOWS_PATH_LENGTH_LIMIT, fileNameLengthAfterRename);
}
public void testAboveWindowsFileNameLengthLimits() throws IOException {
File file = File.createTempFile("renametest", ".mp3");
assertTrue(file.exists());
int pathLength = file.getAbsolutePath().length();
assertTrue(pathLength < WINDOWS_PATH_LENGTH_LIMIT);
ID3FileName id3 = new ID3FileName(file);
id3.setAlbum("B");
String artist = createString(WINDOWS_PATH_LENGTH_LIMIT - pathLength + 1);
assertTrue(artist.length() > 0);
id3.setArtist(artist);
id3.setIndex(4711);
id3.setTrack("C");
File renamed = id3.rename(file);
assertNotEquals(renamed.getAbsolutePath(), file.getAbsolutePath());
int fileNameLengthAfterRename = renamed.getAbsolutePath().length();
assertTrue(renamed.delete());
assertEquals(WINDOWS_PATH_LENGTH_LIMIT, fileNameLengthAfterRename);
}
}