From fb968afc969fefac9ee91c8b44423ad202c2205e Mon Sep 17 00:00:00 2001 From: Raymond Lai Date: Wed, 4 May 2022 23:19:20 +0800 Subject: [PATCH] Dirty fix for ShadowContentResolver.openOutputStream(Uri, String) For test to pass, by adding implementation. --- .../write/WriteTextFileCallableTest.java | 51 ++++++++++--------- .../shadows/ShadowContentResolver.kt | 26 ++++++++++ 2 files changed, 53 insertions(+), 24 deletions(-) create mode 100644 app/src/test/java/com/amaze/filemanager/shadows/ShadowContentResolver.kt diff --git a/app/src/test/java/com/amaze/filemanager/asynchronous/asynctasks/texteditor/write/WriteTextFileCallableTest.java b/app/src/test/java/com/amaze/filemanager/asynchronous/asynctasks/texteditor/write/WriteTextFileCallableTest.java index 082a453ab..89eb2aad0 100644 --- a/app/src/test/java/com/amaze/filemanager/asynchronous/asynctasks/texteditor/write/WriteTextFileCallableTest.java +++ b/app/src/test/java/com/amaze/filemanager/asynchronous/asynctasks/texteditor/write/WriteTextFileCallableTest.java @@ -27,6 +27,30 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.robolectric.Shadows.shadowOf; +import android.content.ContentResolver; +import android.content.Context; +import android.net.Uri; +import android.os.Environment; + +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import com.amaze.filemanager.file_operations.exceptions.ShellNotRunningException; +import com.amaze.filemanager.file_operations.exceptions.StreamNotFoundException; +import com.amaze.filemanager.filesystem.EditableFileAbstraction; +import com.amaze.filemanager.filesystem.FileUtil; +import com.amaze.filemanager.filesystem.root.ConcatenateFileCommand; +import com.amaze.filemanager.shadows.ShadowContentResolver; +import com.amaze.filemanager.shadows.ShadowMultiDex; + +import org.apache.ftpserver.util.IoUtils; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; +import org.robolectric.shadow.api.Shadow; + import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; @@ -38,31 +62,9 @@ import java.io.OutputStream; import java.io.StringReader; import java.nio.charset.StandardCharsets; -import org.apache.ftpserver.util.IoUtils; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.annotation.Config; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; - -import com.amaze.filemanager.file_operations.exceptions.ShellNotRunningException; -import com.amaze.filemanager.file_operations.exceptions.StreamNotFoundException; -import com.amaze.filemanager.filesystem.EditableFileAbstraction; -import com.amaze.filemanager.filesystem.FileUtil; -import com.amaze.filemanager.filesystem.root.ConcatenateFileCommand; -import com.amaze.filemanager.shadows.ShadowMultiDex; - -import android.content.ContentResolver; -import android.content.Context; -import android.net.Uri; -import android.os.Environment; - -import androidx.test.core.app.ApplicationProvider; -import androidx.test.ext.junit.runners.AndroidJUnit4; - @RunWith(AndroidJUnit4.class) @Config( - shadows = {ShadowMultiDex.class}, + shadows = {ShadowMultiDex.class, ShadowContentResolver.class}, sdk = {JELLY_BEAN, KITKAT, P}) public class WriteTextFileCallableTest { @@ -75,7 +77,8 @@ public class WriteTextFileCallableTest { Context ctx = ApplicationProvider.getApplicationContext(); ContentResolver cr = ctx.getContentResolver(); ByteArrayOutputStream bout = new ByteArrayOutputStream(); - shadowOf(cr).registerOutputStream(uri, bout); + ShadowContentResolver scr = Shadow.extract(cr); + scr.registerOutputStream(uri, bout); WriteTextFileCallable task = new WriteTextFileCallable( diff --git a/app/src/test/java/com/amaze/filemanager/shadows/ShadowContentResolver.kt b/app/src/test/java/com/amaze/filemanager/shadows/ShadowContentResolver.kt new file mode 100644 index 000000000..953b812ed --- /dev/null +++ b/app/src/test/java/com/amaze/filemanager/shadows/ShadowContentResolver.kt @@ -0,0 +1,26 @@ +package com.amaze.filemanager.shadows + +import android.content.ContentResolver +import android.net.Uri +import org.robolectric.annotation.Implementation +import org.robolectric.annotation.Implements +import org.robolectric.shadows.ShadowContentResolver +import java.io.OutputStream + +/** + * [ShadowContentResolver] implementation to include + * [ContentResolver.openOutputStream] with Uri and open mode arguments. + * + * @see ContentResolver.openOutputStream(uri, String) + */ +@Implements(ContentResolver::class) +class ShadowContentResolver : ShadowContentResolver() { + + /** + * Implements [ContentResolver.openOutputStream] with open mode parameter. + * + * Simply delegate to one without open mode. + */ + @Implementation + fun openOutputStream(uri: Uri, mode: String): OutputStream? = super.openOutputStream(uri) +}