package org.robolectric.test;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import org.junit.rules.ExternalResource;
import org.robolectric.manifest.AndroidManifest;
import org.robolectric.res.FileFsFile;
/**
* The TemporaryAsset Rule allows creation of assets based on an ApplicationManifest.
*
* <pre>
* public static class HasTempFolder {
* @Rule
* public TemporaryAsset temporaryAsset = new TemporaryAsset();
*
* @Test
* public void testUsingTempFolder() throws IOException {
* AndroidManifest appManifest = shadowOf(RuntimeEnvironment.application).getAppManifest();
* fontFile = temporaryAsset.createFile(appManifest, "myFont.ttf", "myFontData");
* // ...
* }
* }
* </pre>
*/
public class TemporaryAsset extends ExternalResource {
List<File> assetsToDelete = new ArrayList<>();
@Override protected void after() {
for (File file : assetsToDelete) {
file.delete();
}
}
public File createFile(AndroidManifest manifest, String fileName, String contents) throws Exception {
File assetBase = ((FileFsFile) manifest.getAssetsDirectory()).getFile();
File file = new File(assetBase, fileName);
file.getParentFile().mkdirs();
FileWriter fileWriter = new FileWriter(file);
try {
fileWriter.write(contents);
} finally {
fileWriter.close();
}
assetsToDelete.add(file);
return file;
}
}