summaryrefslogtreecommitdiff
path: root/core/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/test/java')
-rw-r--r--core/src/test/java/androidx/documentfile/provider/AssetsDocumentFile.java138
-rw-r--r--core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java98
2 files changed, 39 insertions, 197 deletions
diff --git a/core/src/test/java/androidx/documentfile/provider/AssetsDocumentFile.java b/core/src/test/java/androidx/documentfile/provider/AssetsDocumentFile.java
deleted file mode 100644
index 8a8205c10..000000000
--- a/core/src/test/java/androidx/documentfile/provider/AssetsDocumentFile.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package androidx.documentfile.provider;
-
-import android.content.res.AssetManager;
-import android.net.Uri;
-import android.webkit.MimeTypeMap;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import java.io.IOException;
-
-/**
- * <p>Wraps an Android assets file or folder as a DocumentFile object.</p>
- *
- * <p>This is used to emulate access to the external storage.</p>
- */
-public class AssetsDocumentFile extends DocumentFile {
-
- /**
- * Absolute file path in the assets folder.
- */
- @NonNull
- private final String fileName;
-
- @NonNull
- private final AssetManager assetManager;
-
- public AssetsDocumentFile(@NonNull String fileName, @NonNull AssetManager assetManager) {
- super(null);
- this.fileName = fileName;
- this.assetManager = assetManager;
- }
-
- @Nullable
- @Override
- public DocumentFile createFile(@NonNull String mimeType, @NonNull String displayName) {
- return null;
- }
-
- @Nullable
- @Override
- public DocumentFile createDirectory(@NonNull String displayName) {
- return null;
- }
-
- @NonNull
- @Override
- public Uri getUri() {
- return Uri.parse(fileName);
- }
-
- @Nullable
- @Override
- public String getName() {
- int pos = fileName.indexOf('/');
- if (pos >= 0) {
- return fileName.substring(pos + 1);
- } else {
- return fileName;
- }
- }
-
- @Nullable
- @Override
- public String getType() {
- String extension = MimeTypeMap.getFileExtensionFromUrl(fileName);
- return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
- }
-
- @Override
- public boolean isDirectory() {
- return false;
- }
-
- @Override
- public boolean isFile() {
- return true;
- }
-
- @Override
- public boolean isVirtual() {
- return false;
- }
-
- @Override
- public long lastModified() {
- return 0;
- }
-
- @Override
- public long length() {
- return 0;
- }
-
- @Override
- public boolean canRead() {
- return true;
- }
-
- @Override
- public boolean canWrite() {
- return false;
- }
-
- @Override
- public boolean delete() {
- return false;
- }
-
- @Override
- public boolean exists() {
- return true;
- }
-
- @NonNull
- @Override
- public DocumentFile[] listFiles() {
- try {
- String[] files = assetManager.list(fileName);
- if (files == null) {
- return new DocumentFile[0];
- }
- DocumentFile[] result = new DocumentFile[files.length];
- for (int i = 0; i < files.length; i++) {
- String subFileName = fileName + '/' + files[i];
- result[i] = new AssetsDocumentFile(subFileName, assetManager);
- }
- return result;
- } catch (IOException e) {
- return new DocumentFile[0];
- }
- }
-
- @Override
- public boolean renameTo(@NonNull String displayName) {
- return false;
- }
-}
diff --git a/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java b/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java
index 05b0584ed..4cf746ba4 100644
--- a/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java
+++ b/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java
@@ -7,11 +7,10 @@ import android.net.Uri;
import android.webkit.MimeTypeMap;
import androidx.annotation.NonNull;
-import androidx.documentfile.provider.AssetsDocumentFile;
-import androidx.documentfile.provider.DocumentFile;
import androidx.test.platform.app.InstrumentationRegistry;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.core.util.FastDocumentFile;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.storage.database.PodDBAdapter;
@@ -24,11 +23,12 @@ import org.mockito.Mockito;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.shadows.ShadowMediaMetadataRetriever;
-import java.io.IOException;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
+import java.util.Objects;
import de.danoeh.antennapod.core.ApplicationCallbacks;
import de.danoeh.antennapod.core.ClientConfig;
@@ -60,8 +60,8 @@ public class LocalFeedUpdaterTest {
*/
private static final String FEED_URL =
"content://com.android.externalstorage.documents/tree/primary%3ADownload%2Flocal-feed";
- private static final String LOCAL_FEED_DIR1 = "local-feed1";
- private static final String LOCAL_FEED_DIR2 = "local-feed2";
+ private static final String LOCAL_FEED_DIR1 = "src/test/assets/local-feed1";
+ private static final String LOCAL_FEED_DIR2 = "src/test/assets/local-feed2";
private Context context;
@@ -172,74 +172,61 @@ public class LocalFeedUpdaterTest {
Feed feed = verifySingleFeedInDatabase();
List<FeedItem> feedItems = DBReader.getFeedItemList(feed);
- FeedItem feedItem = feedItems.get(0);
-
- assertEquals("track1.mp3", feedItem.getTitle());
-
- Date pubDate = feedItem.getPubDate();
- Calendar calendar = GregorianCalendar.getInstance();
- calendar.setTime(pubDate);
- assertEquals(2020, calendar.get(Calendar.YEAR));
- assertEquals(6 - 1, calendar.get(Calendar.MONTH));
- assertEquals(1, calendar.get(Calendar.DAY_OF_MONTH));
- assertEquals(22, calendar.get(Calendar.HOUR_OF_DAY));
- assertEquals(23, calendar.get(Calendar.MINUTE));
- assertEquals(24, calendar.get(Calendar.SECOND));
+ assertEquals("track1.mp3", feedItems.get(0).getTitle());
}
@Test
public void testGetImageUrl_EmptyFolder() {
- DocumentFile documentFolder = mockDocumentFolder();
- String imageUrl = LocalFeedUpdater.getImageUrl(documentFolder);
+ String imageUrl = LocalFeedUpdater.getImageUrl(Collections.emptyList(), Uri.EMPTY);
assertThat(imageUrl, startsWith(Feed.PREFIX_GENERATIVE_COVER));
}
@Test
public void testGetImageUrl_NoImageButAudioFiles() {
- DocumentFile documentFolder = mockDocumentFolder(mockDocumentFile("audio.mp3", "audio/mp3"));
- String imageUrl = LocalFeedUpdater.getImageUrl(documentFolder);
+ List<FastDocumentFile> folder = Collections.singletonList(mockDocumentFile("audio.mp3", "audio/mp3"));
+ String imageUrl = LocalFeedUpdater.getImageUrl(folder, Uri.EMPTY);
assertThat(imageUrl, startsWith(Feed.PREFIX_GENERATIVE_COVER));
}
@Test
public void testGetImageUrl_PreferredImagesFilenames() {
for (String filename : LocalFeedUpdater.PREFERRED_FEED_IMAGE_FILENAMES) {
- DocumentFile documentFolder = mockDocumentFolder(mockDocumentFile("audio.mp3", "audio/mp3"),
+ List<FastDocumentFile> folder = Arrays.asList(mockDocumentFile("audio.mp3", "audio/mp3"),
mockDocumentFile(filename, "image/jpeg")); // image MIME type doesn't matter
- String imageUrl = LocalFeedUpdater.getImageUrl(documentFolder);
+ String imageUrl = LocalFeedUpdater.getImageUrl(folder, Uri.EMPTY);
assertThat(imageUrl, endsWith(filename));
}
}
@Test
public void testGetImageUrl_OtherImageFilenameJpg() {
- DocumentFile documentFolder = mockDocumentFolder(mockDocumentFile("audio.mp3", "audio/mp3"),
+ List<FastDocumentFile> folder = Arrays.asList(mockDocumentFile("audio.mp3", "audio/mp3"),
mockDocumentFile("my-image.jpg", "image/jpeg"));
- String imageUrl = LocalFeedUpdater.getImageUrl(documentFolder);
+ String imageUrl = LocalFeedUpdater.getImageUrl(folder, Uri.EMPTY);
assertThat(imageUrl, endsWith("my-image.jpg"));
}
@Test
public void testGetImageUrl_OtherImageFilenameJpeg() {
- DocumentFile documentFolder = mockDocumentFolder(mockDocumentFile("audio.mp3", "audio/mp3"),
+ List<FastDocumentFile> folder = Arrays.asList(mockDocumentFile("audio.mp3", "audio/mp3"),
mockDocumentFile("my-image.jpeg", "image/jpeg"));
- String imageUrl = LocalFeedUpdater.getImageUrl(documentFolder);
+ String imageUrl = LocalFeedUpdater.getImageUrl(folder, Uri.EMPTY);
assertThat(imageUrl, endsWith("my-image.jpeg"));
}
@Test
public void testGetImageUrl_OtherImageFilenamePng() {
- DocumentFile documentFolder = mockDocumentFolder(mockDocumentFile("audio.mp3", "audio/mp3"),
+ List<FastDocumentFile> folder = Arrays.asList(mockDocumentFile("audio.mp3", "audio/mp3"),
mockDocumentFile("my-image.png", "image/png"));
- String imageUrl = LocalFeedUpdater.getImageUrl(documentFolder);
+ String imageUrl = LocalFeedUpdater.getImageUrl(folder, Uri.EMPTY);
assertThat(imageUrl, endsWith("my-image.png"));
}
@Test
public void testGetImageUrl_OtherImageFilenameUnsupportedMimeType() {
- DocumentFile documentFolder = mockDocumentFolder(mockDocumentFile("audio.mp3", "audio/mp3"),
+ List<FastDocumentFile> folder = Arrays.asList(mockDocumentFile("audio.mp3", "audio/mp3"),
mockDocumentFile("my-image.svg", "image/svg+xml"));
- String imageUrl = LocalFeedUpdater.getImageUrl(documentFolder);
+ String imageUrl = LocalFeedUpdater.getImageUrl(folder, Uri.EMPTY);
assertThat(imageUrl, startsWith(Feed.PREFIX_GENERATIVE_COVER));
}
@@ -248,9 +235,8 @@ public class LocalFeedUpdaterTest {
*
* @param localFeedDir assets local feed folder with media files
*/
- private void mapDummyMetadata(@NonNull String localFeedDir) throws IOException {
- String[] fileNames = context.getAssets().list(localFeedDir);
- for (String fileName : fileNames) {
+ private void mapDummyMetadata(@NonNull String localFeedDir) {
+ for (String fileName : Objects.requireNonNull(new File(localFeedDir).list())) {
String path = localFeedDir + '/' + fileName;
ShadowMediaMetadataRetriever.addMetadata(path,
MediaMetadataRetriever.METADATA_KEY_DURATION, "10");
@@ -259,24 +245,21 @@ public class LocalFeedUpdaterTest {
ShadowMediaMetadataRetriever.addMetadata(path,
MediaMetadataRetriever.METADATA_KEY_DATE, "20200601T222324");
}
-
}
/**
- * Calls the method {@link LocalFeedUpdater#updateFeed(Feed, Context)} with
- * the given local feed folder.
+ * Calls the method LocalFeedUpdater#tryUpdateFeed with the given local feed folder.
*
* @param localFeedDir assets local feed folder with media files
*/
private void callUpdateFeed(@NonNull String localFeedDir) {
- DocumentFile documentFile = new AssetsDocumentFile(localFeedDir, context.getAssets());
- try (MockedStatic<DocumentFile> dfMock = Mockito.mockStatic(DocumentFile.class)) {
+ try (MockedStatic<FastDocumentFile> dfMock = Mockito.mockStatic(FastDocumentFile.class)) {
// mock external storage
- dfMock.when(() -> DocumentFile.fromTreeUri(any(), any())).thenReturn(documentFile);
+ dfMock.when(() -> FastDocumentFile.list(any(), any())).thenReturn(mockLocalFolder(localFeedDir));
// call method to test
Feed feed = new Feed(FEED_URL, null);
- LocalFeedUpdater.updateFeed(feed, context, null);
+ LocalFeedUpdater.tryUpdateFeed(feed, context, null, null);
}
}
@@ -306,21 +289,18 @@ public class LocalFeedUpdaterTest {
* Create a DocumentFile mock object.
*/
@NonNull
- private static DocumentFile mockDocumentFile(@NonNull String fileName, @NonNull String mimeType) {
- DocumentFile file = mock(DocumentFile.class);
- when(file.getName()).thenReturn(fileName);
- when(file.getUri()).thenReturn(Uri.parse("file:///path/" + fileName));
- when(file.getType()).thenReturn(mimeType);
- return file;
+ private static FastDocumentFile mockDocumentFile(@NonNull String fileName, @NonNull String mimeType) {
+ return new FastDocumentFile(fileName, mimeType, Uri.parse("file:///path/" + fileName), 0, 0);
}
- /**
- * Create a DocumentFile folder mock object with a list of files.
- */
- @NonNull
- private static DocumentFile mockDocumentFolder(DocumentFile... files) {
- DocumentFile documentFolder = mock(DocumentFile.class);
- when(documentFolder.listFiles()).thenReturn(files);
- return documentFolder;
+ private static List<FastDocumentFile> mockLocalFolder(String folderName) {
+ List<FastDocumentFile> files = new ArrayList<>();
+ for (File f : Objects.requireNonNull(new File(folderName).listFiles())) {
+ String extension = MimeTypeMap.getFileExtensionFromUrl(f.getPath());
+ String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
+ files.add(new FastDocumentFile(f.getName(), mimeType,
+ Uri.parse(f.toURI().toString()), f.length(), f.lastModified()));
+ }
+ return files;
}
}