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; } }