Dirty fix for ShadowContentResolver.openOutputStream(Uri, String)

For test to pass, by adding implementation.
This commit is contained in:
Raymond Lai
2022-05-04 23:19:20 +08:00
committed by Hai Zhang
parent c3bfb744f6
commit fb968afc96
2 changed files with 53 additions and 24 deletions
@@ -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(
@@ -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)
}