1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
package org.jaudiotagger;
import java.io.File;
import java.io.IOException;
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.audio.exceptions.*;
import org.jaudiotagger.tag.FieldDataInvalidException;
import org.jaudiotagger.tag.FieldKey;
import org.jaudiotagger.tag.Tag;
import org.jaudiotagger.tag.TagException;
import org.jaudiotagger.tag.TagOptionSingleton;
import static junit.framework.TestCase.*;
public class FilePermissionsTest {
public static void runWriteWriteProtectedFileWithCheckDisabled(String sourceFile) throws Exception {
File testFile = createFile(sourceFile);
try {
testFile.setWritable(false);
boolean threwException = false;
try {
setFieldAndCommit(testFile, false);
} catch (Exception success) {
threwException = true;
}
assertTrue("Expected to throw " + NoWritePermissionsException.class.getSimpleName() + " but didn't",
threwException);
} finally {
testFile.delete();
}
}
public static void runWriteWriteProtectedFileWithCheckEnabled(String sourceFile) throws Exception {
File testFile = createFile(sourceFile);
try {
testFile.setWritable(false);
boolean threwException = false;
try {
setFieldAndCommit(testFile, true);
} catch(CannotWriteException success) {
threwException=true;
}
assertTrue("Expected to throw " + CannotWriteException.class.getSimpleName() + " but didn't", threwException);
} finally {
testFile.delete();
}
}
public static void runWriteReadOnlyFileWithCheckDisabled(String sourceFile) throws Exception {
File testFile = createFile(sourceFile);
try {
testFile.setReadOnly();
boolean threwException = false;
try {
setFieldAndCommit(testFile, false);
} catch(Exception success) {
threwException=true;
}
assertTrue("Expected to throw " + UnableToModifyFileException.class.getSimpleName() + " but didn't", threwException);
} finally {
testFile.delete();
}
}
private static File createFile(String sourceFile) {
String[] baseNameAndExt = sourceFile.split("\\.(?=[^\\.]+$)");
File testFile = AbstractTestCase
.copyAudioToTmp(sourceFile, new File(baseNameAndExt[0] + "WriteProtected." + baseNameAndExt[1]));
return testFile;
}
private static void setFieldAndCommit(File testFile, boolean performPreCheck) throws CannotReadException,
IOException, TagException, ReadOnlyFileException, InvalidAudioFrameException, FieldDataInvalidException,
CannotWriteException {
TagOptionSingleton.getInstance().setCheckIsWritable(performPreCheck);
try {
AudioFile aFile = AudioFileIO.read(testFile);
Tag tag = aFile.getTag();
tag.setField(FieldKey.ALBUM, "album");
aFile.commit();
} finally {
testFile.setWritable(true);
TagOptionSingleton.getInstance().setToDefault();
}
}
}
|