From 990d27425ff014b3d1174c72ecfc0357d688e4eb Mon Sep 17 00:00:00 2001 From: Googler Date: Tue, 9 Nov 2021 15:14:44 -0800 Subject: [PATCH] Shadow Build.VERSION#MEDIA_PERFORMANCE_CLASS Performance class was added in Android S. See https://developer.android.com/topic/performance/performance-class PiperOrigin-RevId: 408717180 --- .../robolectric/shadows/ShadowBuildTest.java | 9 + .../org/robolectric/shadows/ShadowBuild.java | 13 + shadows/supportv4/build.gradle | 66 ----- .../support/v4/ShadowAsyncTaskLoader.java | 25 -- .../support/v4/ShadowDrawerLayout.java | 46 ---- .../v4/ShadowLegacyAsyncTaskLoader.java | 66 ----- .../v4/ShadowLocalBroadcastManager.java | 103 -------- .../support/v4/ShadowMediaBrowserCompat.java | 231 ----------------- .../v4/ShadowPausedAsyncTaskLoader.java | 47 ---- .../support/v4/ShadowSwipeRefreshLayout.java | 34 --- .../support/v4/SupportFragmentController.java | 237 ------------------ .../support/v4/SupportFragmentTestUtil.java | 95 ------- .../shadows/support/v4/package-info.java | 7 - .../src/test/java/org/robolectric/R.java | 22 -- .../shadows/support/v4/CursorLoaderTest.java | 57 ----- .../v4/NotificationCompatBuilderTest.java | 25 -- .../support/v4/ShadowDialogFragmentTest.java | 185 -------------- .../support/v4/ShadowDrawerLayoutTest.java | 28 --- .../v4/ShadowLegacyAsyncTaskLoaderTest.java | 90 ------- .../shadows/support/v4/ShadowLoaderTest.java | 35 --- .../v4/ShadowLocalBroadcastManagerTest.java | 161 ------------ .../v4/ShadowMediaBrowserCompatTest.java | 163 ------------ .../support/v4/ShadowPagerAdapterTest.java | 50 ---- .../v4/ShadowPausedAsyncTaskLoaderTest.java | 95 ------- .../v4/ShadowSwipeRefreshLayoutTest.java | 26 -- .../support/v4/ShadowViewPagerTest.java | 84 ------- .../v4/SupportFragmentControllerTest.java | 233 ----------------- .../v4/SupportFragmentTestUtilTest.java | 99 -------- .../src/test/resources/AndroidManifest.xml | 9 - .../resources/res/layout/dialog_fragment.xml | 24 -- .../res/layout/fragment_contents.xml | 20 -- 31 files changed, 22 insertions(+), 2363 deletions(-) delete mode 100644 shadows/supportv4/build.gradle delete mode 100644 shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowAsyncTaskLoader.java delete mode 100644 shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowDrawerLayout.java delete mode 100644 shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowLegacyAsyncTaskLoader.java delete mode 100644 shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowLocalBroadcastManager.java delete mode 100644 shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowMediaBrowserCompat.java delete mode 100644 shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowPausedAsyncTaskLoader.java delete mode 100644 shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowSwipeRefreshLayout.java delete mode 100644 shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/SupportFragmentController.java delete mode 100644 shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/SupportFragmentTestUtil.java delete mode 100644 shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/package-info.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/R.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/CursorLoaderTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/NotificationCompatBuilderTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowDialogFragmentTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowDrawerLayoutTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLegacyAsyncTaskLoaderTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLoaderTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLocalBroadcastManagerTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowMediaBrowserCompatTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowPagerAdapterTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowPausedAsyncTaskLoaderTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowSwipeRefreshLayoutTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowViewPagerTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/SupportFragmentControllerTest.java delete mode 100644 shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/SupportFragmentTestUtilTest.java delete mode 100644 shadows/supportv4/src/test/resources/AndroidManifest.xml delete mode 100644 shadows/supportv4/src/test/resources/res/layout/dialog_fragment.xml delete mode 100644 shadows/supportv4/src/test/resources/res/layout/fragment_contents.xml diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowBuildTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowBuildTest.java index db6aaa572ae..43f0f0363dc 100644 --- a/robolectric/src/test/java/org/robolectric/shadows/ShadowBuildTest.java +++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowBuildTest.java @@ -2,6 +2,8 @@ import static android.os.Build.VERSION_CODES.M; import static android.os.Build.VERSION_CODES.O; +import static android.os.Build.VERSION_CODES.R; +import static android.os.Build.VERSION_CODES.S; import static com.google.common.truth.Truth.assertThat; import android.os.Build; @@ -56,6 +58,13 @@ public void setVersionIncremental() { assertThat(VERSION.INCREMENTAL).isEqualTo("robo_incremental"); } + @Test + @Config(minSdk = S) + public void setVersionMediaPerformanceClass() { + ShadowBuild.setVersionMediaPerformanceClass(R); + assertThat(VERSION.MEDIA_PERFORMANCE_CLASS).isEqualTo(R); + } + @Test @Config(minSdk = M) public void setVersionSecurityPatch() { diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowBuild.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowBuild.java index a859b18ec75..ea00874b1e5 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowBuild.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowBuild.java @@ -3,6 +3,7 @@ import static android.os.Build.VERSION_CODES.LOLLIPOP; import static android.os.Build.VERSION_CODES.M; import static android.os.Build.VERSION_CODES.O; +import static android.os.Build.VERSION_CODES.S; import static org.robolectric.util.reflector.Reflector.reflector; import android.annotation.TargetApi; @@ -110,6 +111,18 @@ public static void setVersionIncremental(String versionIncremental) { ReflectionHelpers.setStaticField(Build.VERSION.class, "INCREMENTAL", versionIncremental); } + /** + * Sets the value of the {@link Build.VERSION#MEDIA_PERFORMANCE_CLASS} field. Available in Android + * S+. + * + *

It will be reset for the next test. + */ + @TargetApi(S) + public static void setVersionMediaPerformanceClass(int performanceClass) { + ReflectionHelpers.setStaticField( + Build.VERSION.class, "MEDIA_PERFORMANCE_CLASS", performanceClass); + } + /** * Sets the value of the {@link Build.VERSION#RELEASE} field. * diff --git a/shadows/supportv4/build.gradle b/shadows/supportv4/build.gradle deleted file mode 100644 index ce9fdfe6ae3..00000000000 --- a/shadows/supportv4/build.gradle +++ /dev/null @@ -1,66 +0,0 @@ -import org.robolectric.gradle.DeployedRoboJavaModulePlugin -import org.robolectric.gradle.RoboJavaModulePlugin - -apply plugin: RoboJavaModulePlugin -apply plugin: DeployedRoboJavaModulePlugin - -apply plugin: ShadowsPlugin - -shadows { - packageName "org.robolectric.shadows.support.v4" - sdkCheckMode "OFF" -} - -configurations { - earlyTestRuntime -} - -test { - systemProperty "robolectric.resourcesMode", "binary" -} - -def supportLibraryVersions = "28.0.0" - -dependencies { - compileOnly project(":robolectric") - compileOnly project(":shadows:framework") - - compileOnly AndroidSdk.MAX_SDK.coordinates - compileOnly "com.android.support:support-annotations:${supportLibraryVersions}" - compileOnly "com.android.support:support-v4:${supportLibraryVersions}" - compileOnly "com.android.support:support-compat:${supportLibraryVersions}" - compileOnly "com.android.support:support-core-ui:${supportLibraryVersions}" - compileOnly "com.android.support:support-core-utils:${supportLibraryVersions}" - compileOnly "com.android.support:support-fragment:${supportLibraryVersions}" - compileOnly "com.android.support:support-media-compat:${supportLibraryVersions}" - - testCompileOnly AndroidSdk.MAX_SDK.coordinates - testCompileOnly "com.android.support:support-annotations:${supportLibraryVersions}" - testCompileOnly "com.android.support:support-v4:${supportLibraryVersions}" - testCompileOnly "com.android.support:support-compat:${supportLibraryVersions}" - testCompileOnly "com.android.support:support-core-ui:${supportLibraryVersions}" - testCompileOnly "com.android.support:support-core-utils:${supportLibraryVersions}" - testCompileOnly "com.android.support:support-fragment:${supportLibraryVersions}" - testCompileOnly "com.android.support:support-media-compat:${supportLibraryVersions}" - - testImplementation project(":robolectric") - testImplementation "androidx.test.ext:junit:$axtJunitVersion" - testImplementation "junit:junit:${junitVersion}" - testImplementation "org.hamcrest:hamcrest-junit:2.0.0.0" - testImplementation "com.google.truth:truth:${truthVersion}" - testImplementation "org.mockito:mockito-core:${mockitoVersion}" - - earlyTestRuntime "org.hamcrest:hamcrest-junit:2.0.0.0" - testRuntimeOnly AndroidSdk.MAX_SDK.coordinates - testRuntimeOnly "com.android.support:support-v4:${supportLibraryVersions}" - testRuntimeOnly "com.android.support:support-compat:${supportLibraryVersions}" - testRuntimeOnly "com.android.support:support-core-ui:${supportLibraryVersions}" - testRuntimeOnly "com.android.support:support-core-utils:${supportLibraryVersions}" - testRuntimeOnly "com.android.support:support-fragment:${supportLibraryVersions}" - testRuntimeOnly "com.android.support:support-media-compat:${supportLibraryVersions}" -} - -// hamcrest needs to come before junit on runtime classpath; the gradle IntelliJ plugin -// needs the compileClasspath order patched too (bug?) -sourceSets.test.compileClasspath = configurations.earlyTestRuntime + sourceSets.test.compileClasspath -sourceSets.test.runtimeClasspath = configurations.earlyTestRuntime + sourceSets.test.runtimeClasspath \ No newline at end of file diff --git a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowAsyncTaskLoader.java b/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowAsyncTaskLoader.java deleted file mode 100644 index 53869e5eee1..00000000000 --- a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowAsyncTaskLoader.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import android.support.v4.content.AsyncTaskLoader; -import org.robolectric.annotation.Implements; -import org.robolectric.annotation.LooperMode; -import org.robolectric.shadows.LooperShadowPicker; - -/** - * The shadow API for {@link AsyncTaskLoader}. - * - *

Different shadow implementations will be used based on the current {@link LooperMode.Mode}. - * - * @see ShadowLegacyAsyncTaskLoader, ShadowPausedAsyncTaskLoader - */ -@Implements(value = AsyncTaskLoader.class, shadowPicker = ShadowAsyncTaskLoader.Picker.class) -@Deprecated -public abstract class ShadowAsyncTaskLoader { - - public static class Picker extends LooperShadowPicker { - - public Picker() { - super(ShadowLegacyAsyncTaskLoader.class, ShadowPausedAsyncTaskLoader.class); - } - } -} diff --git a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowDrawerLayout.java b/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowDrawerLayout.java deleted file mode 100644 index 123d8fd83e4..00000000000 --- a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowDrawerLayout.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static org.robolectric.util.reflector.Reflector.reflector; - -import android.view.View; -import android.support.v4.widget.DrawerLayout; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.robolectric.annotation.RealObject; -import org.robolectric.shadows.ShadowViewGroup; -import org.robolectric.util.reflector.Accessor; -import org.robolectric.util.reflector.ForType; - -@Implements(DrawerLayout.class) -@Deprecated -public class ShadowDrawerLayout extends ShadowViewGroup { - @RealObject private DrawerLayout realDrawerLayout; - - - public DrawerLayout.DrawerListener getDrawerListener() { - return reflector(DrawerLayoutReflector.class, realDrawerLayout).getDrawerListener(); - } - - /** Drawer animations are disabled in unit tests. */ - @Implementation - protected void openDrawer(View drawerView, boolean animate) { - reflector(DrawerLayoutReflector.class, realDrawerLayout).openDrawer(drawerView, false); - } - - /** Drawer animations are disabled in unit tests. */ - @Implementation - protected void closeDrawer(View drawerView, boolean animate) { - reflector(DrawerLayoutReflector.class, realDrawerLayout).closeDrawer(drawerView, false); - } - - @ForType(value = DrawerLayout.class, direct = true) - interface DrawerLayoutReflector { - - @Accessor("mListener") - DrawerLayout.DrawerListener getDrawerListener(); - - void closeDrawer(View drawerView, boolean animate); - - void openDrawer(View drawerView, boolean animate); - } -} diff --git a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowLegacyAsyncTaskLoader.java b/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowLegacyAsyncTaskLoader.java deleted file mode 100644 index 9d7cf2e5ae4..00000000000 --- a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowLegacyAsyncTaskLoader.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import android.content.Context; -import android.support.v4.content.AsyncTaskLoader; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.FutureTask; -import org.robolectric.Robolectric; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.robolectric.annotation.LooperMode; -import org.robolectric.annotation.RealObject; - -/** - * A {@link AsyncTaskLoader} shadow for {@link LooperMode.Mode.LEGACY}. - * - *

This class should not be referenced directly, use {@link ShadowAsyncTaskLoader} instead. - */ -@Implements( - value = AsyncTaskLoader.class, - shadowPicker = ShadowAsyncTaskLoader.Picker.class, - // TODO: turn off shadowOf generation. Figure out why this is needed - isInAndroidSdk = false) -@Deprecated -public class ShadowLegacyAsyncTaskLoader extends ShadowAsyncTaskLoader { - @RealObject private AsyncTaskLoader realLoader; - private BackgroundWorker worker; - - @Implementation - protected void __constructor__(Context context) { - worker = new BackgroundWorker(); - } - - @Implementation - protected void onForceLoad() { - FutureTask future = - new FutureTask(worker) { - @Override - protected void done() { - try { - final D result = get(); - Robolectric.getForegroundThreadScheduler() - .post( - new Runnable() { - @Override - public void run() { - realLoader.deliverResult(result); - } - }); - } catch (InterruptedException e) { - // Ignore - } catch (ExecutionException e) { - throw new RuntimeException(e.getCause()); - } - } - }; - Robolectric.getBackgroundThreadScheduler().post(future); - } - - private final class BackgroundWorker implements Callable { - @Override - public D call() throws Exception { - return realLoader.loadInBackground(); - } - } -} diff --git a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowLocalBroadcastManager.java b/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowLocalBroadcastManager.java deleted file mode 100644 index f6e68f79df3..00000000000 --- a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowLocalBroadcastManager.java +++ /dev/null @@ -1,103 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.Handler; -import android.os.Looper; -import android.support.v4.content.LocalBroadcastManager; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.robolectric.shadows.Provider; -import org.robolectric.shadows.ShadowApplication; -import org.robolectric.util.ReflectionHelpers; -import org.robolectric.util.ReflectionHelpers.ClassParameter; - -@Implements(LocalBroadcastManager.class) -@Deprecated -public class ShadowLocalBroadcastManager { - private final List sentBroadcastIntents = new ArrayList<>(); - private final List registeredReceivers = new ArrayList<>(); - - @Implementation - protected static LocalBroadcastManager getInstance(final Context context) { - return ShadowApplication.getInstance().getSingleton(LocalBroadcastManager.class, new Provider() { - @Override - public LocalBroadcastManager get() { - return ReflectionHelpers.callConstructor(LocalBroadcastManager.class, ClassParameter.from(Context.class, context)); - } - }); - } - - @Implementation - protected void registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { - synchronized (registeredReceivers) { - registeredReceivers.add(new Wrapper(receiver, filter)); - } - } - - @Implementation - protected void unregisterReceiver(BroadcastReceiver receiver) { - synchronized (registeredReceivers) { - Iterator iterator = registeredReceivers.iterator(); - while (iterator.hasNext()) { - Wrapper wrapper = iterator.next(); - if (wrapper.broadcastReceiver == receiver) { - iterator.remove(); - } - } - } - } - - @Implementation - protected boolean sendBroadcast(Intent intent) { - boolean sent = false; - synchronized (sentBroadcastIntents) { - sentBroadcastIntents.add(intent); - } - List copy = new ArrayList<>(); - copy.addAll(registeredReceivers); - for (Wrapper wrapper : copy) { - if (wrapper.intentFilter.matchAction(intent.getAction())) { - final int match = wrapper.intentFilter.matchData(intent.getType(), intent.getScheme(), intent.getData()); - if (match != IntentFilter.NO_MATCH_DATA && match != IntentFilter.NO_MATCH_TYPE) { - sent = true; - final BroadcastReceiver receiver = wrapper.broadcastReceiver; - final Intent broadcastIntent = intent; - new Handler(Looper.getMainLooper()) - .post( - new Runnable() { - @Override - public void run() { - receiver.onReceive(RuntimeEnvironment.getApplication(), broadcastIntent); - } - }); - } - } - } - return sent; - } - - public List getSentBroadcastIntents() { - return sentBroadcastIntents; - } - - public List getRegisteredBroadcastReceivers() { - return registeredReceivers; - } - - public static class Wrapper { - public final BroadcastReceiver broadcastReceiver; - public final IntentFilter intentFilter; - - public Wrapper(BroadcastReceiver broadcastReceiver, IntentFilter intentFilter) { - this.broadcastReceiver = broadcastReceiver; - this.intentFilter = intentFilter; - } - } -} diff --git a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowMediaBrowserCompat.java b/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowMediaBrowserCompat.java deleted file mode 100644 index abdfc5e7a23..00000000000 --- a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowMediaBrowserCompat.java +++ /dev/null @@ -1,231 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static android.support.v4.media.MediaBrowserCompat.EXTRA_PAGE; -import static android.support.v4.media.MediaBrowserCompat.EXTRA_PAGE_SIZE; - -import android.content.ComponentName; -import android.content.Context; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.support.v4.media.MediaBrowserCompat; -import android.support.v4.media.MediaBrowserCompat.ConnectionCallback; -import android.support.v4.media.MediaBrowserCompat.ItemCallback; -import android.support.v4.media.MediaBrowserCompat.MediaItem; -import android.support.v4.media.MediaBrowserCompat.SearchCallback; -import android.support.v4.media.MediaBrowserCompat.SubscriptionCallback; -import android.support.v4.media.MediaBrowserServiceCompat; -import android.support.v4.media.MediaMetadataCompat; -import android.support.v4.media.session.MediaSessionCompat; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.robolectric.annotation.RealObject; -import org.robolectric.shadow.api.Shadow; -import org.robolectric.util.ReflectionHelpers.ClassParameter; - -/** - * This will mimic the connection to a {@link MediaBrowserServiceCompat} by creating and maintaining - * its own account of {@link MediaItem}s. - */ -@Implements(MediaBrowserCompat.class) -@Deprecated -public class ShadowMediaBrowserCompat { - - private final Handler handler = new Handler(); - private final MediaSessionCompat.Token token = - Shadow.newInstanceOf(MediaSessionCompat.Token.class); - - private @RealObject MediaBrowserCompat mediaBrowser; - - private final Map mediaItems = new LinkedHashMap<>(); - private final Map> mediaItemChildren = new LinkedHashMap<>(); - - private boolean isConnected; - private ConnectionCallback connectionCallback; - private String rootId = "root_id"; - - @Implementation - protected void __constructor__( - Context context, - ComponentName serviceComponent, - ConnectionCallback callback, - Bundle rootHints) { - connectionCallback = callback; - Shadow.invokeConstructor( - MediaBrowserCompat.class, - mediaBrowser, - ClassParameter.from(Context.class, context), - ClassParameter.from(ComponentName.class, serviceComponent), - ClassParameter.from(ConnectionCallback.class, callback), - ClassParameter.from(Bundle.class, rootHints)); - } - - @Implementation - protected void connect() { - handler.post( - () -> { - isConnected = true; - connectionCallback.onConnected(); - }); - } - - @Implementation - protected void disconnect() { - handler.post( - () -> { - isConnected = false; - }); - } - - @Implementation - protected boolean isConnected() { - return isConnected; - } - - @Implementation - protected String getRoot() { - if (!isConnected) { - throw new IllegalStateException("Can't call getRoot() while not connected."); - } - return rootId; - } - - @Implementation - protected void getItem(@NonNull final String mediaId, @NonNull final ItemCallback cb) { - // mediaItem will be null when there is no MediaItem that matches the given mediaId. - final MediaItem mediaItem = mediaItems.get(mediaId); - - if (isConnected && mediaItem != null) { - handler.post(() -> cb.onItemLoaded(mediaItem)); - } else { - handler.post(() -> cb.onError(mediaId)); - } - } - - @Implementation - protected void subscribe(@NonNull String parentId, @NonNull SubscriptionCallback callback) { - subscribe(parentId, null, callback); - } - - @Implementation - protected void subscribe( - @NonNull String parentId, @Nullable Bundle options, @NonNull SubscriptionCallback callback) { - if (isConnected) { - final MediaItem parentItem = mediaItems.get(parentId); - List children = - mediaItemChildren.get(parentItem) == null - ? Collections.emptyList() - : mediaItemChildren.get(parentItem); - handler.post( - () -> callback.onChildrenLoaded(parentId, applyOptionsToResults(children, options))); - } else { - handler.post(() -> callback.onError(parentId)); - } - } - - private List applyOptionsToResults(List results, final Bundle options) { - if (results == null || options == null) { - return results; - } - final int resultsSize = results.size(); - final int page = options.getInt(EXTRA_PAGE, -1); - final int pageSize = options.getInt(EXTRA_PAGE_SIZE, -1); - if (page == -1 && pageSize == -1) { - return results; - } - - final int firstItemIndex = page * pageSize; - final int lastItemIndex = firstItemIndex + pageSize; - if (page < 0 || pageSize < 1 || firstItemIndex >= resultsSize) { - return Collections.emptyList(); - } - return results.subList(firstItemIndex, Math.min(lastItemIndex, resultsSize)); - } - - /** - * This differs from real Android search logic. Search results will contain all {@link - * MediaItem}'s with a title that {@param query} is a substring of. - */ - @Implementation - protected void search( - @NonNull final String query, final Bundle extras, @NonNull SearchCallback callback) { - if (isConnected) { - final List searchResults = new ArrayList<>(); - for (MediaItem item : mediaItems.values()) { - final String mediaTitle = item.getDescription().getTitle().toString().toLowerCase(); - if (mediaTitle.contains(query.toLowerCase())) { - searchResults.add(item); - } - } - handler.post(() -> callback.onSearchResult(query, extras, searchResults)); - } else { - handler.post(() -> callback.onError(query, extras)); - } - } - - @Implementation - public MediaSessionCompat.Token getSessionToken() { - return token; - } - - /** - * Sets the root id. Can be called more than once. - * - * @param mediaId the id of the root MediaItem. This MediaItem should already have been created. - */ - public void setRootId(String mediaId) { - rootId = mediaId; - } - - /** - * Creates a MediaItem and returns it. - * - * @param parentId the id of the parent MediaItem. If the MediaItem to be created will be the - * root, parentId should be null. - * @param mediaId the id of the MediaItem to be created. - * @param title the title of the MediaItem to be created. - * @param flag says if the MediaItem to be created is browsable and/or playable. - * @return the newly created MediaItem. - */ - public MediaItem createMediaItem(String parentId, String mediaId, String title, int flag) { - final MediaMetadataCompat metadataCompat = - new MediaMetadataCompat.Builder() - .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, mediaId) - .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title) - .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI, Uri.parse(mediaId).toString()) - .build(); - final MediaItem mediaItem = new MediaItem(metadataCompat.getDescription(), flag); - mediaItems.put(mediaId, mediaItem); - - // If this MediaItem is the child of a MediaItem that has already been created. This applies to - // all MediaItems except the root. - if (parentId != null) { - final MediaItem parentItem = mediaItems.get(parentId); - List children = mediaItemChildren.get(parentItem); - if (children == null) { - children = new ArrayList<>(); - mediaItemChildren.put(parentItem, children); - } - children.add(mediaItem); - } - - return mediaItem; - } - - /** @return a copy of the internal {@link Map} that maps {@link MediaItem}s to their children. */ - public Map> getCopyOfMediaItemChildren() { - final Map> copyOfMediaItemChildren = new LinkedHashMap<>(); - for (MediaItem parent : mediaItemChildren.keySet()) { - List children = new ArrayList<>(mediaItemChildren.get(parent)); - copyOfMediaItemChildren.put(parent, children); - } - return copyOfMediaItemChildren; - } -} diff --git a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowPausedAsyncTaskLoader.java b/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowPausedAsyncTaskLoader.java deleted file mode 100644 index 7b4a725b651..00000000000 --- a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowPausedAsyncTaskLoader.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static org.robolectric.util.reflector.Reflector.reflector; - -import android.support.v4.content.AsyncTaskLoader; -import java.util.concurrent.Executor; -import org.robolectric.annotation.Implements; -import org.robolectric.annotation.LooperMode; -import org.robolectric.annotation.LooperMode.Mode; -import org.robolectric.annotation.RealObject; -import org.robolectric.util.reflector.Accessor; -import org.robolectric.util.reflector.ForType; - -/** - * A shadow for {@link AsyncTaskLoader} that is active when {@link LooperMode} is {@link - * Mode.PAUSED}. - * - * @deprecated use the androidx AsyncTaskLoader instead, which has an overriddable getExecutor - * method. - */ -@Implements( - value = AsyncTaskLoader.class, - shadowPicker = ShadowAsyncTaskLoader.Picker.class, - // TODO: turn off shadowOf generation. Figure out why this is needed - isInAndroidSdk = false) -@Deprecated -public class ShadowPausedAsyncTaskLoader extends ShadowAsyncTaskLoader { - - @RealObject private AsyncTaskLoader realObject; - - /** - * Allows overriding background executor used by the AsyncLoader. - * - *

Its recommended to switch to androidx's AsyncTaskLoader, which provides an overriddable - * getExecutor method. - */ - public void setExecutor(Executor executor) { - reflector(ReflectorAsyncTaskLoader.class, realObject).setExecutor(executor); - } - - /** Accessor interface for {@link AsyncTaskLoader}'s internals. */ - @ForType(AsyncTaskLoader.class) - private interface ReflectorAsyncTaskLoader { - @Accessor("mExecutor") - void setExecutor(Executor executor); - } -} diff --git a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowSwipeRefreshLayout.java b/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowSwipeRefreshLayout.java deleted file mode 100644 index c8407eec201..00000000000 --- a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/ShadowSwipeRefreshLayout.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static org.robolectric.util.reflector.Reflector.reflector; - -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener; -import org.robolectric.annotation.Implements; -import org.robolectric.annotation.RealObject; -import org.robolectric.shadows.ShadowViewGroup; -import org.robolectric.util.reflector.Accessor; -import org.robolectric.util.reflector.ForType; - -/** - * Deprecated. Use SwipeRefreshLayout#setRefreshing to trigger a OnRefreshListener.onRefresh call - * instead. - */ -@Implements(SwipeRefreshLayout.class) -@Deprecated -public class ShadowSwipeRefreshLayout extends ShadowViewGroup { - @RealObject SwipeRefreshLayout realObject; - - /** - * @return OnRefreshListener that was previously set. - */ - public OnRefreshListener getOnRefreshListener() { - return reflector(SwipeRefreshLayoutReflector.class, realObject).getOnRefreshListener(); - } - - @ForType(SwipeRefreshLayout.class) - interface SwipeRefreshLayoutReflector { - @Accessor("mListener") - OnRefreshListener getOnRefreshListener(); - } -} \ No newline at end of file diff --git a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/SupportFragmentController.java b/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/SupportFragmentController.java deleted file mode 100644 index b82911b9204..00000000000 --- a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/SupportFragmentController.java +++ /dev/null @@ -1,237 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import android.content.Intent; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; -import android.widget.LinearLayout; -import org.robolectric.Robolectric; -import org.robolectric.android.controller.ActivityController; -import org.robolectric.android.controller.ComponentController; - -/** - * FragmentController provides low-level APIs to control fragment's lifecycle. - * - *

Using FragmentController directly from your tests is strongly discouraged. You have to call - * all the lifecycle callback methods (create, start, ...) in the same manner as the Android - * framework by yourself otherwise you'll see fidelity issues. Consider using {@link - * androidx.fragment.app.testing.FragmentScenario} instead, which provides higher-level, streamlined - * APIs to control the lifecycle and it works with instrumentation tests too. - * - * @param a class of the fragment which is under control by this class. - */ -public class SupportFragmentController - extends ComponentController, F> { - private final F fragment; - private final ActivityController activityController; - - protected SupportFragmentController(F fragment, Class activityClass) { - this(fragment, activityClass, null); - } - - protected SupportFragmentController( - F fragment, Class activityClass, Intent intent) { - super(fragment, intent); - this.fragment = fragment; - this.activityController = Robolectric.buildActivity(activityClass, intent); - } - - public static SupportFragmentController of(F fragment) { - return new SupportFragmentController<>(fragment, FragmentControllerActivity.class); - } - - public static SupportFragmentController of( - F fragment, Class activityClass) { - return new SupportFragmentController<>(fragment, activityClass); - } - - public static SupportFragmentController of( - F fragment, Class activityClass, Intent intent) { - return new SupportFragmentController<>(fragment, activityClass, intent); - } - - /** - * Sets up the given fragment by attaching it to an activity, calling its onCreate() through - * onResume() lifecycle methods, and then making it visible. Note that the fragment will be added - * to the view with ID 1. - */ - public static F setupFragment(F fragment) { - return SupportFragmentController.of(fragment).create().start().resume().visible().get(); - } - - /** - * Sets up the given fragment by attaching it to an activity, calling its onCreate() through - * onResume() lifecycle methods, and then making it visible. Note that the fragment will be added - * to the view with ID 1. - */ - public static F setupFragment( - F fragment, Class fragmentActivityClass) { - return SupportFragmentController.of(fragment, fragmentActivityClass) - .create() - .start() - .resume() - .visible() - .get(); - } - - /** - * Sets up the given fragment by attaching it to an activity created with the given bundle, - * calling its onCreate() through onResume() lifecycle methods, and then making it visible. Note - * that the fragment will be added to the view with ID 1. - */ - public static F setupFragment( - F fragment, Class fragmentActivityClass, Bundle bundle) { - return SupportFragmentController.of(fragment, fragmentActivityClass) - .create(bundle) - .start() - .resume() - .visible() - .get(); - } - - /** - * Sets up the given fragment by attaching it to an activity created with the given bundle and - * container id, calling its onCreate() through onResume() lifecycle methods, and then making it - * visible. - */ - public static F setupFragment( - F fragment, - Class fragmentActivityClass, - int containerViewId, - Bundle bundle) { - return SupportFragmentController.of(fragment, fragmentActivityClass) - .create(containerViewId, bundle) - .start() - .postCreate(bundle) - .resume() - .visible() - .get(); - } - - /** - * Creates the activity with {@link Bundle} and adds the fragment to the view with ID - * {@code contentViewId}. - */ - public SupportFragmentController create(final int contentViewId, final Bundle bundle) { - shadowMainLooper.runPaused( - new Runnable() { - @Override - public void run() { - activityController - .create(bundle) - .get() - .getSupportFragmentManager() - .beginTransaction() - .add(contentViewId, fragment) - .commitNow(); - } - }); - return this; - } - - /** - * Creates the activity with {@link Bundle} and adds the fragment to it. Note that the fragment - * will be added to the view with ID 1. - */ - public SupportFragmentController create(final Bundle bundle) { - return create(1, bundle); - } - - @Override - public SupportFragmentController create() { - return create(null); - } - - public SupportFragmentController postCreate(Bundle bundle) { - shadowMainLooper.runPaused(new Runnable() { - @Override - public void run() { - activityController.postCreate(bundle); - } - }); - return this; - } - - @Override - public SupportFragmentController destroy() { - shadowMainLooper.runPaused(new Runnable() { - @Override - public void run() { - activityController.destroy(); - } - }); - return this; - } - - public SupportFragmentController start() { - shadowMainLooper.runPaused(new Runnable() { - @Override - public void run() { - activityController.start(); - } - }); - return this; - } - - public SupportFragmentController resume() { - shadowMainLooper.runPaused(new Runnable() { - @Override - public void run() { - activityController.resume(); - } - }); - return this; - } - - public SupportFragmentController pause() { - shadowMainLooper.runPaused(new Runnable() { - @Override - public void run() { - activityController.pause(); - } - }); - return this; - } - - public SupportFragmentController stop() { - shadowMainLooper.runPaused(new Runnable() { - @Override - public void run() { - activityController.stop(); - } - }); - return this; - } - - public SupportFragmentController visible() { - shadowMainLooper.runPaused(new Runnable() { - @Override - public void run() { - activityController.visible(); - } - }); - return this; - } - - public SupportFragmentController saveInstanceState(final Bundle outState) { - shadowMainLooper.runPaused( - new Runnable() { - @Override - public void run() { - activityController.saveInstanceState(outState); - } - }); - return this; - } - - private static class FragmentControllerActivity extends FragmentActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - LinearLayout view = new LinearLayout(this); - view.setId(1); - - setContentView(view); - } - } -} diff --git a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/SupportFragmentTestUtil.java b/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/SupportFragmentTestUtil.java deleted file mode 100644 index 6cfea658505..00000000000 --- a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/SupportFragmentTestUtil.java +++ /dev/null @@ -1,95 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static org.robolectric.shadows.ShadowLooper.shadowMainLooper; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; -import android.widget.LinearLayout; -import org.robolectric.Robolectric; - -/** - * Utilities for creating Fragments for testing. - * - * @deprecated Android encourages developers to use androidx fragments, to test these use {@link - * androidx.fragment.app.testing.FragmentScenario}. - */ -@Deprecated -public class SupportFragmentTestUtil { - - /** - * Starts fragment. - * - * @deprecated Start fragments using {@link - * androidx.fragment.app.testing.FragmentScenario#launch(Class, Bundle, FragmentFactory)}. - */ - @Deprecated - public static void startFragment(Fragment fragment) { - buildSupportFragmentManager(FragmentUtilActivity.class) - .beginTransaction().add(fragment, null).commitNow(); - shadowMainLooper().idleIfPaused(); - } - - /** - * Starts fragment hosted by the {@code fragmentActivityClass}. - * - * @deprecated Start fragments using {@link - * androidx.fragment.app.testing.FragmentScenario#launch(Class, Bundle, Int, - * FragmentFactory)}. - */ - @Deprecated - public static void startFragment( - Fragment fragment, Class fragmentActivityClass) { - buildSupportFragmentManager(fragmentActivityClass) - .beginTransaction().add(fragment, null).commitNow(); - shadowMainLooper().idleIfPaused(); - } - - /** - * Starts fragment with visible container for testing UI. - * - * @deprecated Start fragments using {@link - * androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class, Bundle, - * FragmentFactory)}. - */ - @Deprecated - public static void startVisibleFragment(Fragment fragment) { - buildSupportFragmentManager(FragmentUtilActivity.class) - .beginTransaction().add(1, fragment, null).commitNow(); - shadowMainLooper().idleIfPaused(); - } - - /** - * Starts fragment hosted by the {@code fragmentActivityClass} with visible container for testing - * UI. - * - * @deprecated Start fragments using {@link - * androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class, Bundle, Int, - * FragmentFactory)}. - */ - @Deprecated - public static void startVisibleFragment( - Fragment fragment, - Class fragmentActivityClass, - int containerViewId) { - buildSupportFragmentManager(fragmentActivityClass) - .beginTransaction().add(containerViewId, fragment, null).commitNow(); - shadowMainLooper().idle(); - } - private static FragmentManager buildSupportFragmentManager(Class fragmentActivityClass) { - FragmentActivity activity = Robolectric.setupActivity(fragmentActivityClass); - return activity.getSupportFragmentManager(); - } - - private static class FragmentUtilActivity extends FragmentActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - LinearLayout view = new LinearLayout(this); - view.setId(1); - - setContentView(view); - } - } -} diff --git a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/package-info.java b/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/package-info.java deleted file mode 100644 index a5f81a721f1..00000000000 --- a/shadows/supportv4/src/main/java/org/robolectric/shadows/support/v4/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Shadows for the Android Support Library. - * - * To use this in your project, add the artifact {@code org.robolectric:shadows-support-v4} - * to your project. - */ -package org.robolectric.shadows.support.v4; \ No newline at end of file diff --git a/shadows/supportv4/src/test/java/org/robolectric/R.java b/shadows/supportv4/src/test/java/org/robolectric/R.java deleted file mode 100644 index b93fc10a65a..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/R.java +++ /dev/null @@ -1,22 +0,0 @@ -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * aapt tool from the resource data it found. It - * should not be modified by hand. - */ - -package org.robolectric; - -public final class R { - public static final class attr {} - - public static final class id { - public static final int burritos = 0x7f030002; - public static final int tacos = 0x7f030001; - public static final int title = 0x7f030000; - } - public static final class layout { - public static final int dialog_fragment = 0x7f020000; - public static final int fragment_contents = 0x7f020001; - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/CursorLoaderTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/CursorLoaderTest.java deleted file mode 100644 index f040c2da007..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/CursorLoaderTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static com.google.common.truth.Truth.assertThat; - -import android.net.Uri; -import android.support.v4.content.CursorLoader; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RuntimeEnvironment; - -@RunWith(AndroidJUnit4.class) -public class CursorLoaderTest { - @Test - public void testGetters() { - Uri uri = Uri.parse("http://robolectric.org"); - String[] projection = new String[] { "_id", "TestColumn" }; - String selection = "_id = ?"; - String[] selectionArgs = new String[] { "5" }; - String sortOrder = "_id"; - CursorLoader cursorLoader = - new CursorLoader( - RuntimeEnvironment.getApplication(), - uri, - projection, - selection, - selectionArgs, - sortOrder); - - assertThat(cursorLoader.getUri()).isEqualTo(uri); - assertThat(cursorLoader.getProjection()).isEqualTo(projection); - assertThat(cursorLoader.getSelection()).isEqualTo(selection); - assertThat(cursorLoader.getSelectionArgs()).isEqualTo(selectionArgs); - assertThat(cursorLoader.getSortOrder()).isEqualTo(sortOrder); - } - - @Test - public void testSetters() { - Uri uri = Uri.parse("http://robolectric.org"); - String[] projection = new String[] { "_id", "TestColumn" }; - String selection = "_id = ?"; - String[] selectionArgs = new String[] { "5" }; - String sortOrder = "_id"; - CursorLoader cursorLoader = new CursorLoader(RuntimeEnvironment.getApplication()); - cursorLoader.setUri(uri); - cursorLoader.setProjection(projection); - cursorLoader.setSelection(selection); - cursorLoader.setSelectionArgs(selectionArgs); - cursorLoader.setSortOrder(sortOrder); - - assertThat(cursorLoader.getUri()).isEqualTo(uri); - assertThat(cursorLoader.getProjection()).isEqualTo(projection); - assertThat(cursorLoader.getSelection()).isEqualTo(selection); - assertThat(cursorLoader.getSelectionArgs()).isEqualTo(selectionArgs); - assertThat(cursorLoader.getSortOrder()).isEqualTo(sortOrder); - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/NotificationCompatBuilderTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/NotificationCompatBuilderTest.java deleted file mode 100644 index 8d29ff79bb3..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/NotificationCompatBuilderTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static com.google.common.truth.Truth.assertThat; - -import android.app.Notification; -import android.support.v4.app.NotificationCompat; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.android.internal.R; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RuntimeEnvironment; - -@RunWith(AndroidJUnit4.class) -public class NotificationCompatBuilderTest { - @Test - public void addAction__shouldAddActionToNotification() { - NotificationCompat.Action action = - new NotificationCompat.Action.Builder(R.drawable.ic_corp_icon, "a title", null).build(); - Notification notification = - new NotificationCompat.Builder(RuntimeEnvironment.getApplication()) - .addAction(action) - .build(); - assertThat(notification.actions).asList().hasSize(1); - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowDialogFragmentTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowDialogFragmentTest.java deleted file mode 100644 index 623bf066b96..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowDialogFragmentTest.java +++ /dev/null @@ -1,185 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.robolectric.Shadows.shadowOf; -import static org.robolectric.shadows.ShadowLooper.shadowMainLooper; - -import android.app.Activity; -import android.app.Dialog; -import android.os.Bundle; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import java.util.ArrayList; -import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.R; -import org.robolectric.Robolectric; -import org.robolectric.shadows.ShadowDialog; - -@RunWith(AndroidJUnit4.class) -public class ShadowDialogFragmentTest { - - private FragmentActivity activity; - private TestDialogFragment dialogFragment; - private FragmentManager fragmentManager; - - @Before - public void setUp() throws Exception { - activity = Robolectric.buildActivity(FragmentActivity.class).create().start().resume().get(); - fragmentManager = activity.getSupportFragmentManager(); - dialogFragment = new TestDialogFragment(); - } - - @Test - public void show_shouldCallLifecycleMethods() throws Exception { - dialogFragment.show(fragmentManager, "this is a tag"); - shadowMainLooper().idle(); - - assertThat(dialogFragment.transcript).containsExactly( - "onAttach", - "onCreate", - "onCreateDialog", - "onCreateView", - "onViewCreated", - "onActivityCreated", - "onStart", - "onResume" - ); - - assertNotNull(dialogFragment.getActivity()); - assertSame(activity, dialogFragment.onAttachActivity); - } - - @Test - public void show_whenPassedATransaction_shouldCallShowWithManager() throws Exception { - dialogFragment.show(fragmentManager.beginTransaction(), "this is a tag"); - shadowMainLooper().idle(); - - assertThat(dialogFragment.transcript).containsExactly( - "onAttach", - "onCreate", - "onCreateDialog", - "onCreateView", - "onViewCreated", - "onActivityCreated", - "onStart", - "onResume" - ); - - assertNotNull(dialogFragment.getActivity()); - assertSame(activity, dialogFragment.onAttachActivity); - } - - @Test - public void show_shouldShowDialogThatWasReturnedFromOnCreateDialog_whenOnCreateDialogReturnsADialog() throws Exception { - Dialog dialogFromOnCreateDialog = new Dialog(activity); - dialogFragment.returnThisDialogFromOnCreateDialog(dialogFromOnCreateDialog); - dialogFragment.show(fragmentManager, "this is a tag"); - shadowMainLooper().idle(); - - Dialog dialog = ShadowDialog.getLatestDialog(); - assertSame(dialogFromOnCreateDialog, dialog); - assertSame(dialogFromOnCreateDialog, dialogFragment.getDialog()); - assertSame(dialogFragment, fragmentManager.findFragmentByTag("this is a tag")); - } - - @Test - public void show_shouldShowDialogThatWasAutomaticallyCreated_whenOnCreateDialogReturnsNull() throws Exception { - dialogFragment.show(fragmentManager, "this is a tag"); - shadowMainLooper().idle(); - - Dialog dialog = ShadowDialog.getLatestDialog(); - assertNotNull(dialog); - assertSame(dialog, dialogFragment.getDialog()); - assertNotNull(dialog.findViewById(R.id.title)); - assertSame(dialogFragment, fragmentManager.findFragmentByTag("this is a tag")); - } - - @Test - public void removeUsingTransaction_shouldDismissTheDialog() throws Exception { - dialogFragment.show(fragmentManager, null); - shadowMainLooper().idle(); - - FragmentTransaction t = fragmentManager.beginTransaction(); - t.remove(dialogFragment); - t.commit(); - shadowMainLooper().idle(); - - Dialog dialog = ShadowDialog.getLatestDialog(); - assertFalse(dialog.isShowing()); - assertTrue(shadowOf(dialog).hasBeenDismissed()); - } - - public static class TestDialogFragment extends DialogFragment { - final List transcript = new ArrayList<>(); - Activity onAttachActivity; - private Dialog returnThisDialogFromOnCreateDialog; - - @Override - public void onAttach(Activity activity) { - transcript.add("onAttach"); - onAttachActivity = activity; - super.onAttach(activity); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - transcript.add("onCreate"); - super.onCreate(savedInstanceState); - } - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - transcript.add("onCreateDialog"); - return returnThisDialogFromOnCreateDialog == null - ? super.onCreateDialog(savedInstanceState) - : returnThisDialogFromOnCreateDialog; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - transcript.add("onCreateView"); - return inflater.inflate(R.layout.dialog_fragment, null); - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - transcript.add("onViewCreated"); - super.onViewCreated(view, savedInstanceState); - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - transcript.add("onActivityCreated"); - super.onActivityCreated(savedInstanceState); - } - - @Override - public void onStart() { - transcript.add("onStart"); - super.onStart(); - } - - @Override - public void onResume() { - transcript.add("onResume"); - super.onResume(); - } - - public void returnThisDialogFromOnCreateDialog(Dialog dialog) { - returnThisDialogFromOnCreateDialog = dialog; - } - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowDrawerLayoutTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowDrawerLayoutTest.java deleted file mode 100644 index c39f1df0f1d..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowDrawerLayoutTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.mock; - -import android.app.Activity; -import android.support.v4.widget.DrawerLayout; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.Robolectric; -import org.robolectric.shadow.api.Shadow; - -@RunWith(AndroidJUnit4.class) -public class ShadowDrawerLayoutTest { - - @Test - public void canGetAndSetDrawerListener() throws Exception { - DrawerLayout drawerLayout = new DrawerLayout(Robolectric.buildActivity(Activity.class).create().get()); - DrawerLayout.DrawerListener mockDrawerListener = mock(DrawerLayout.DrawerListener.class); - drawerLayout.setDrawerListener(mockDrawerListener); - assertThat(shadowOf(drawerLayout).getDrawerListener()).isSameInstanceAs(mockDrawerListener); - } - - private ShadowDrawerLayout shadowOf(DrawerLayout drawerLayout) { - return (ShadowDrawerLayout) Shadow.extract(drawerLayout); - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLegacyAsyncTaskLoaderTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLegacyAsyncTaskLoaderTest.java deleted file mode 100644 index 3a6f7953a03..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLegacyAsyncTaskLoaderTest.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static com.google.common.truth.Truth.assertThat; -import static org.robolectric.annotation.LooperMode.Mode.LEGACY; - -import android.support.v4.content.AsyncTaskLoader; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import java.util.ArrayList; -import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.Robolectric; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.LooperMode; - -/** Unit tests for {@link }ShadowLegacyAsyncTaskLoader). */ -@RunWith(AndroidJUnit4.class) -@LooperMode(LEGACY) -public class ShadowLegacyAsyncTaskLoaderTest { - private final List transcript = new ArrayList<>(); - - @Before - public void setUp() { - Robolectric.getForegroundThreadScheduler().pause(); - Robolectric.getBackgroundThreadScheduler().pause(); - } - - @Test - public void forceLoad_shouldEnqueueWorkOnSchedulers() { - new TestLoader(42).forceLoad(); - assertThat(transcript).isEmpty(); - - Robolectric.flushBackgroundThreadScheduler(); - assertThat(transcript).containsExactly("loadInBackground"); - transcript.clear(); - - Robolectric.flushForegroundThreadScheduler(); - assertThat(transcript).containsExactly("deliverResult 42"); - } - - @Test - public void forceLoad_multipleLoads() { - TestLoader testLoader = new TestLoader(42); - testLoader.forceLoad(); - assertThat(transcript).isEmpty(); - - Robolectric.flushBackgroundThreadScheduler(); - assertThat(transcript).containsExactly("loadInBackground"); - transcript.clear(); - - Robolectric.flushForegroundThreadScheduler(); - assertThat(transcript).containsExactly("deliverResult 42"); - - testLoader.setData(43); - transcript.clear(); - testLoader.forceLoad(); - - Robolectric.flushBackgroundThreadScheduler(); - assertThat(transcript).containsExactly("loadInBackground"); - transcript.clear(); - - Robolectric.flushForegroundThreadScheduler(); - assertThat(transcript).containsExactly("deliverResult 43"); - } - - class TestLoader extends AsyncTaskLoader { - private Integer data; - - public TestLoader(Integer data) { - super(RuntimeEnvironment.getApplication()); - this.data = data; - } - - @Override - public Integer loadInBackground() { - transcript.add("loadInBackground"); - return data; - } - - @Override - public void deliverResult(Integer data) { - transcript.add("deliverResult " + data.toString()); - } - - public void setData(int newData) { - this.data = newData; - } - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLoaderTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLoaderTest.java deleted file mode 100644 index 7fdf779a230..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLoaderTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static com.google.common.truth.Truth.assertThat; - -import android.support.v4.content.Loader; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RuntimeEnvironment; - -/** Tests for support loaders. */ -@RunWith(AndroidJUnit4.class) -public class ShadowLoaderTest { - private Loader loader; - private boolean onForceLoadCalled; - - @Before - public void create() { - loader = - new Loader(RuntimeEnvironment.getApplication()) { - @Override - protected void onForceLoad() { - onForceLoadCalled = true; - } - }; - onForceLoadCalled = false; - } - - @Test - public void shouldCallOnForceLoad() { - loader.forceLoad(); - assertThat(onForceLoadCalled).isTrue(); - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLocalBroadcastManagerTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLocalBroadcastManagerTest.java deleted file mode 100644 index d9deba99026..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowLocalBroadcastManagerTest.java +++ /dev/null @@ -1,161 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.robolectric.shadows.ShadowLooper.shadowMainLooper; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.net.Uri; -import android.support.v4.content.LocalBroadcastManager; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import java.util.ArrayList; -import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.shadow.api.Shadow; - -@RunWith(AndroidJUnit4.class) -public class ShadowLocalBroadcastManagerTest { - private List transcript = new ArrayList<>(); - - @Test - public void shouldGetInstance() throws Exception { - LocalBroadcastManager instance = - LocalBroadcastManager.getInstance(RuntimeEnvironment.getApplication()); - assertNotNull(instance); - assertSame(instance, LocalBroadcastManager.getInstance(RuntimeEnvironment.getApplication())); - } - - @Test - public void shouldSendBroadcasts() throws Exception { - LocalBroadcastManager instance = - LocalBroadcastManager.getInstance(RuntimeEnvironment.getApplication()); - final boolean[] called = new boolean[1]; - final BroadcastReceiver receiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - called[0] = true; - } - }; - instance.registerReceiver(receiver, new IntentFilter("com.foo")); - - instance.sendBroadcast(new Intent("com.bar")); - shadowMainLooper().idle(); - assertFalse(called[0]); - instance.sendBroadcast(new Intent("com.foo")); - shadowMainLooper().idle(); - assertTrue(called[0]); - } - - @Test - public void shouldSendBroadcastsWithDataScheme() throws Exception { - LocalBroadcastManager instance = - LocalBroadcastManager.getInstance(RuntimeEnvironment.getApplication()); - final boolean[] called = new boolean[1]; - final BroadcastReceiver receiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - called[0] = true; - } - }; - IntentFilter intentFilter = new IntentFilter("com.foo"); - intentFilter.addDataScheme("http"); - instance.registerReceiver(receiver, intentFilter); - - instance.sendBroadcast(new Intent("com.foo", Uri.parse("ftp://robolectric.org"))); - shadowMainLooper().idle(); - assertFalse(called[0]); - instance.sendBroadcast(new Intent("com.foo", Uri.parse("http://robolectric.org"))); - shadowMainLooper().idle(); - assertTrue(called[0]); - } - - @Test - public void shouldUnregisterReceiver() throws Exception { - LocalBroadcastManager instance = - LocalBroadcastManager.getInstance(RuntimeEnvironment.getApplication()); - final boolean[] called = new boolean[1]; - final BroadcastReceiver receiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - called[0] = true; - } - }; - instance.registerReceiver(receiver, new IntentFilter("com.foo")); - instance.unregisterReceiver(receiver); - instance.sendBroadcast(new Intent("com.foo")); - shadowMainLooper().idle(); - assertFalse(called[0]); - } - - @Test - public void testGetBroadcastIntents() throws Exception { - LocalBroadcastManager broadcastManager = - LocalBroadcastManager.getInstance(RuntimeEnvironment.getApplication()); - broadcastManager.registerReceiver(new BroadcastReceiver() { - @Override public void onReceive(Context context, Intent intent) { - transcript.add("got intent " + intent.getAction()); - } - }, IntentFilter.create("foo", "application/blatz")); - - Intent intent1 = new Intent("foo").setType("application/blatz"); - broadcastManager.sendBroadcast(intent1); - shadowMainLooper().idle(); - Intent intent2 = new Intent("bar").setType("application/blatz"); - broadcastManager.sendBroadcast(intent2); - shadowMainLooper().idle(); - - assertThat(transcript).containsExactly("got intent foo"); - } - - @Test - public void testGetRegisteredBroadcastReceivers() throws Exception { - LocalBroadcastManager broadcastManager = - LocalBroadcastManager.getInstance(RuntimeEnvironment.getApplication()); - ShadowLocalBroadcastManager shadowLocalBroadcastManager = shadowBroadcast(broadcastManager); - assertEquals(0, shadowLocalBroadcastManager.getRegisteredBroadcastReceivers().size()); - - BroadcastReceiver receiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) {} - }; - IntentFilter filter = new IntentFilter("foo"); - - broadcastManager.registerReceiver(receiver, filter); - - assertEquals(1, shadowLocalBroadcastManager.getRegisteredBroadcastReceivers().size()); - ShadowLocalBroadcastManager.Wrapper capturedWrapper = shadowLocalBroadcastManager.getRegisteredBroadcastReceivers().get(0); - assertEquals(receiver, capturedWrapper.broadcastReceiver); - assertEquals(filter, capturedWrapper.intentFilter); - - broadcastManager.unregisterReceiver(receiver); - assertEquals(0, shadowLocalBroadcastManager.getRegisteredBroadcastReceivers().size()); - } - - @Test - public void testGetSentBroadcastIntents() throws Exception { - LocalBroadcastManager broadcastManager = - LocalBroadcastManager.getInstance(RuntimeEnvironment.getApplication()); - ShadowLocalBroadcastManager shadowLocalBroadcastManager = shadowBroadcast(broadcastManager); - assertEquals(0, shadowLocalBroadcastManager.getSentBroadcastIntents().size()); - - Intent broadcastIntent = new Intent("foo"); - broadcastManager.sendBroadcast(broadcastIntent); - shadowMainLooper().idle(); - - assertEquals(1, shadowLocalBroadcastManager.getSentBroadcastIntents().size()); - assertEquals(broadcastIntent, shadowLocalBroadcastManager.getSentBroadcastIntents().get(0)); - } - - private ShadowLocalBroadcastManager shadowBroadcast(LocalBroadcastManager localBroadcastManager) { - return (ShadowLocalBroadcastManager) Shadow.extract(localBroadcastManager); - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowMediaBrowserCompatTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowMediaBrowserCompatTest.java deleted file mode 100644 index 7a9a9a62859..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowMediaBrowserCompatTest.java +++ /dev/null @@ -1,163 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static android.support.v4.media.MediaBrowserCompat.MediaItem.FLAG_BROWSABLE; -import static android.support.v4.media.MediaBrowserCompat.MediaItem.FLAG_PLAYABLE; -import static com.google.common.truth.Truth.assertThat; -import static org.robolectric.shadows.ShadowLooper.shadowMainLooper; -import static org.robolectric.shadows.support.v4.Shadows.shadowOf; - -import android.content.ComponentName; -import android.content.Context; -import android.os.Bundle; -import android.support.v4.media.MediaBrowserCompat; -import android.support.v4.media.MediaBrowserCompat.MediaItem; -import androidx.annotation.NonNull; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RuntimeEnvironment; - -/** Tests for {@link org.robolectric.shadows.support.v4.ShadowMediaBrowserCompat}. */ -@RunWith(AndroidJUnit4.class) -public class ShadowMediaBrowserCompatTest { - - private Context context = RuntimeEnvironment.getApplication(); - private MediaBrowserCompat mediaBrowser; - private ShadowMediaBrowserCompat shadow; - - private MediaItem root; - private MediaItem child; - - private final MediaItemCallBack mediaItemCallBack = new MediaItemCallBack(); - private final MediaSubscriptionCallback mediaSubscriptionCallback = - new MediaSubscriptionCallback(); - private final MediaSearchCallback mediaSearchCallback = new MediaSearchCallback(); - - private static final String ROOT_ID = "root_id"; - private static final String CHILD_ID = "child_id"; - - @Before - public void setUp() { - final ComponentName componentName = new ComponentName("a", "b"); - mediaBrowser = - new MediaBrowserCompat( - context, componentName, new MediaBrowserCompat.ConnectionCallback(), null); - shadow = shadowOf(mediaBrowser); - mediaBrowser.connect(); - shadowMainLooper().idle(); - root = shadow.createMediaItem(null, ROOT_ID, "root_title", FLAG_BROWSABLE); - shadow.setRootId(ROOT_ID); - child = shadow.createMediaItem(ROOT_ID, CHILD_ID, "child_title", FLAG_PLAYABLE); - } - - @Test - public void mediaBrowserConnection_isConnected() { - assertThat(mediaBrowser.isConnected()).isTrue(); - } - - @Test - public void mediaBrowserConnection_isDisconnected() { - mediaBrowser.disconnect(); - shadowMainLooper().idle(); - assertThat(mediaBrowser.isConnected()).isFalse(); - } - - @Test - public void mediaBrowser_getRootId() { - String mediaBrowserRootId = mediaBrowser.getRoot(); - assertThat(mediaBrowserRootId).isEqualTo(ROOT_ID); - } - - @Test - public void mediaBrowser_getItem() { - mediaBrowser.getItem(ROOT_ID, mediaItemCallBack); - shadowMainLooper().idle(); - assertThat(mediaItemCallBack.getMediaItem()).isEqualTo(root); - - mediaItemCallBack.mediaItem = null; - mediaBrowser.getItem("fake_id", mediaItemCallBack); - shadowMainLooper().idle(); - assertThat(mediaItemCallBack.getMediaItem()).isNull(); - } - - @Test - public void mediaBrowser_subscribe() { - mediaBrowser.subscribe(ROOT_ID, mediaSubscriptionCallback); - shadowMainLooper().idle(); - assertThat(mediaSubscriptionCallback.getResults()).isEqualTo(Collections.singletonList(child)); - - mediaBrowser.subscribe(CHILD_ID, mediaSubscriptionCallback); - shadowMainLooper().idle(); - assertThat(mediaSubscriptionCallback.getResults()).isEmpty(); - - mediaBrowser.subscribe("fake_id", mediaSubscriptionCallback); - shadowMainLooper().idle(); - assertThat(mediaSubscriptionCallback.getResults()).isEmpty(); - } - - @Test - public void mediaBrowser_search() { - mediaBrowser.search("root", null, mediaSearchCallback); - shadowMainLooper().idle(); - assertThat(mediaSearchCallback.getResults()).isEqualTo(Collections.singletonList(root)); - - mediaBrowser.search("title", null, mediaSearchCallback); - shadowMainLooper().idle(); - final List expectedResults = Arrays.asList(root, child); - assertThat(mediaSearchCallback.getResults()).isEqualTo(expectedResults); - - mediaBrowser.search("none", null, mediaSearchCallback); - shadowMainLooper().idle(); - assertThat(mediaSearchCallback.getResults()).isEmpty(); - } - - private static class MediaSearchCallback extends MediaBrowserCompat.SearchCallback { - - List results; - - @Override - public void onSearchResult( - @NonNull String query, Bundle bundle, @NonNull List list) { - super.onSearchResult(query, bundle, list); - results = list; - } - - public List getResults() { - return results; - } - } - - private static class MediaSubscriptionCallback extends MediaBrowserCompat.SubscriptionCallback { - - List results; - - @Override - public void onChildrenLoaded(@NonNull String parentId, @NonNull List list) { - super.onChildrenLoaded(parentId, list); - results = list; - } - - public List getResults() { - return results; - } - } - - private static class MediaItemCallBack extends MediaBrowserCompat.ItemCallback { - - MediaItem mediaItem; - - @Override - public void onItemLoaded(MediaItem mediaItem) { - super.onItemLoaded(mediaItem); - this.mediaItem = mediaItem; - } - - MediaItem getMediaItem() { - return mediaItem; - } - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowPagerAdapterTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowPagerAdapterTest.java deleted file mode 100644 index 716259ef1b0..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowPagerAdapterTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static org.junit.Assert.assertTrue; - -import android.database.DataSetObserver; -import android.view.View; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import android.support.v4.view.PagerAdapter; -import java.lang.reflect.Method; -import org.junit.Test; -import org.junit.runner.RunWith; - -@RunWith(AndroidJUnit4.class) -public class ShadowPagerAdapterTest { - @Test - public void shouldNotifyDataSetChanged() throws Exception { - NullPagerAdapter pagerAdapter = new NullPagerAdapter(); - TestDataSetObserver datasetObserver = new TestDataSetObserver(); - Method method = - PagerAdapter.class.getDeclaredMethod("registerDataSetObserver", DataSetObserver.class); - method.setAccessible(true); - method.invoke(pagerAdapter, datasetObserver); - pagerAdapter.notifyDataSetChanged(); - - assertTrue(datasetObserver.onChangedWasCalled); - } - - private static class NullPagerAdapter extends PagerAdapter { - @Override - public int getCount() { - return 0; - } - - @Override - public boolean isViewFromObject(View view, Object object) { - return false; - } - - - } - - private static class TestDataSetObserver extends DataSetObserver { - boolean onChangedWasCalled; - - @Override - public void onChanged() { - onChangedWasCalled = true; - } - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowPausedAsyncTaskLoaderTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowPausedAsyncTaskLoaderTest.java deleted file mode 100644 index 888cad99960..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowPausedAsyncTaskLoaderTest.java +++ /dev/null @@ -1,95 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static com.google.common.truth.Truth.assertThat; -import static org.robolectric.annotation.LooperMode.Mode.PAUSED; -import static org.robolectric.shadows.ShadowLooper.shadowMainLooper; - -import android.support.v4.content.AsyncTaskLoader; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import java.util.ArrayList; -import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.android.util.concurrent.PausedExecutorService; -import org.robolectric.annotation.LooperMode; -import org.robolectric.shadow.api.Shadow; - -/** Unit tests for {@link ShadowPausedAsyncTaskLoader}. */ -@RunWith(AndroidJUnit4.class) -@LooperMode(PAUSED) -public class ShadowPausedAsyncTaskLoaderTest { - private final List taskRecord = new ArrayList<>(); - private TestLoader testLoader; - private PausedExecutorService pausedBackgroundExecutor; - - @Before - public void setUp() { - pausedBackgroundExecutor = new PausedExecutorService(); - testLoader = new TestLoader(42); - ShadowPausedAsyncTaskLoader shadowLoader = Shadow.extract(testLoader); - shadowLoader.setExecutor(pausedBackgroundExecutor); - } - - @Test - public void forceLoad_shouldEnqueueWork() { - testLoader.forceLoad(); - assertThat(taskRecord).isEmpty(); - - pausedBackgroundExecutor.runAll(); - assertThat(taskRecord).containsExactly("loadInBackground"); - taskRecord.clear(); - - shadowMainLooper().idle(); - assertThat(taskRecord).containsExactly("deliverResult 42"); - } - - @Test - public void forceLoad_multipleLoads() { - testLoader.forceLoad(); - assertThat(taskRecord).isEmpty(); - - pausedBackgroundExecutor.runAll(); - assertThat(taskRecord).containsExactly("loadInBackground"); - taskRecord.clear(); - - shadowMainLooper().idle(); - assertThat(taskRecord).containsExactly("deliverResult 42"); - - testLoader.setData(43); - taskRecord.clear(); - testLoader.forceLoad(); - - pausedBackgroundExecutor.runAll(); - assertThat(taskRecord).containsExactly("loadInBackground"); - taskRecord.clear(); - - shadowMainLooper().idle(); - assertThat(taskRecord).containsExactly("deliverResult 43"); - } - - class TestLoader extends AsyncTaskLoader { - private Integer data; - - public TestLoader(Integer data) { - super(RuntimeEnvironment.getApplication()); - this.data = data; - } - - @Override - public Integer loadInBackground() { - taskRecord.add("loadInBackground"); - return data; - } - - @Override - public void deliverResult(Integer data) { - taskRecord.add("deliverResult " + data.toString()); - } - - public void setData(int newData) { - this.data = newData; - } - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowSwipeRefreshLayoutTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowSwipeRefreshLayoutTest.java deleted file mode 100644 index 8cd324efad9..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowSwipeRefreshLayoutTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.mock; -import static org.robolectric.shadows.support.v4.Shadows.shadowOf; - -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RuntimeEnvironment; - -@RunWith(AndroidJUnit4.class) -public class ShadowSwipeRefreshLayoutTest { - - @Test - public void getOnRefreshListener_shouldReturnTheListener() { - final OnRefreshListener listener = mock(OnRefreshListener.class); - - final SwipeRefreshLayout layout = new SwipeRefreshLayout(RuntimeEnvironment.getApplication()); - layout.setOnRefreshListener(listener); - - assertThat(shadowOf(layout).getOnRefreshListener()).isSameInstanceAs(listener); - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowViewPagerTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowViewPagerTest.java deleted file mode 100644 index bbb73a5492a..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/ShadowViewPagerTest.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; - -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; -import android.view.View; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RuntimeEnvironment; - -@RunWith(AndroidJUnit4.class) -public class ShadowViewPagerTest { - - private ViewPager pager; - private TestPagerAdapter adapter; - - @Before - public void setUp() throws Exception { - pager = new ViewPager(RuntimeEnvironment.getApplication()); - adapter = new TestPagerAdapter(); - } - - @Test - public void shouldSetAndGetAdapter() throws Exception { - assertNull(pager.getAdapter()); - - pager.setAdapter(adapter); - assertSame(adapter, pager.getAdapter()); - } - - @Test - public void test_getAndSetCurrentItem() throws Exception { - pager.setAdapter(adapter); - pager.setCurrentItem(2); - assertEquals(2, pager.getCurrentItem()); - } - - @Test - public void setCurrentItem_shouldInvokeListener() throws Exception { - pager.setAdapter(adapter); - TestOnPageChangeListener listener = new TestOnPageChangeListener(); - pager.setOnPageChangeListener(listener); - assertFalse(listener.onPageSelectedCalled); - pager.setCurrentItem(2); - assertTrue(listener.onPageSelectedCalled); - } - - @Test - public void setCurrentItem_shouldntInvokeListenerWhenSettingRedundantly() throws Exception { - TestOnPageChangeListener listener = new TestOnPageChangeListener(); - pager.setOnPageChangeListener(listener); - assertFalse(listener.onPageSelectedCalled); - pager.setCurrentItem(pager.getCurrentItem()); - assertFalse(listener.onPageSelectedCalled); - } - - private static class TestPagerAdapter extends PagerAdapter { - @Override - public int getCount() { - return 3; - } - - @Override - public boolean isViewFromObject(View view, Object object) { - return false; - } - } - - private static class TestOnPageChangeListener extends ViewPager.SimpleOnPageChangeListener { - public boolean onPageSelectedCalled; - - @Override - public void onPageSelected(int position) { - onPageSelectedCalled = true; - } - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/SupportFragmentControllerTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/SupportFragmentControllerTest.java deleted file mode 100644 index fb26c321152..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/SupportFragmentControllerTest.java +++ /dev/null @@ -1,233 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static com.google.common.truth.Truth.assertThat; - -import android.content.Intent; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.TextView; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import java.util.ArrayList; -import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.R; - -@RunWith(AndroidJUnit4.class) -public class SupportFragmentControllerTest { - - private static final int VIEW_ID_CUSTOMIZED_LOGIN_ACTIVITY = 123; - - @Test - public void initialNotAttached() { - final LoginFragment fragment = new LoginFragment(); - SupportFragmentController.of(fragment); - - assertThat(fragment.getView()).isNull(); - assertThat(fragment.getActivity()).isNull(); - assertThat(fragment.isAdded()).isFalse(); - } - - @Test - public void initialNotAttached_customActivity() { - final LoginFragment fragment = new LoginFragment(); - SupportFragmentController.of(fragment, LoginActivity.class); - - assertThat(fragment.getView()).isNull(); - assertThat(fragment.getActivity()).isNull(); - assertThat(fragment.isAdded()).isFalse(); - } - - @Test - public void attachedAfterCreate() { - final LoginFragment fragment = new LoginFragment(); - SupportFragmentController.of(fragment).create(); - - assertThat(fragment.getActivity()).isNotNull(); - assertThat(fragment.isAdded()).isTrue(); - assertThat(fragment.isResumed()).isFalse(); - } - - @Test - public void attachedAfterCreate_customActivity() { - final LoginFragment fragment = new LoginFragment(); - SupportFragmentController.of(fragment, LoginActivity.class).create(); - - assertThat(fragment.getActivity()).isNotNull(); - assertThat(fragment.getActivity()).isInstanceOf(LoginActivity.class); - assertThat(fragment.isAdded()).isTrue(); - assertThat(fragment.isResumed()).isFalse(); - } - - @Test - public void attachedAfterCreate_customizedViewId() { - final LoginFragment fragment = new LoginFragment(); - SupportFragmentController.of(fragment, CustomizedViewIdLoginActivity.class).create(VIEW_ID_CUSTOMIZED_LOGIN_ACTIVITY, null).start(); - - assertThat(fragment.getView()).isNotNull(); - assertThat(fragment.getActivity()).isNotNull(); - assertThat(fragment.isAdded()).isTrue(); - assertThat(fragment.isResumed()).isFalse(); - assertThat((TextView) fragment.getView().findViewById(R.id.tacos)).isNotNull(); - } - - @Test - public void hasViewAfterStart() { - final LoginFragment fragment = new LoginFragment(); - SupportFragmentController.of(fragment).create().start(); - - assertThat(fragment.getView()).isNotNull(); - } - - @Test - public void isResumed() { - final LoginFragment fragment = new LoginFragment(); - SupportFragmentController.of(fragment, LoginActivity.class).create().start().resume(); - - assertThat(fragment.getView()).isNotNull(); - assertThat(fragment.getActivity()).isNotNull(); - assertThat(fragment.isAdded()).isTrue(); - assertThat(fragment.isResumed()).isTrue(); - assertThat((TextView) fragment.getView().findViewById(R.id.tacos)).isNotNull(); - } - - @Test - public void isPaused() { - final LoginFragment fragment = new LoginFragment(); - SupportFragmentController.of(fragment, LoginActivity.class).create().start().resume().pause(); - - assertThat(fragment.getView()).isNotNull(); - assertThat(fragment.getActivity()).isNotNull(); - assertThat(fragment.isAdded()).isTrue(); - assertThat(fragment.isResumed()).isFalse(); - - assertThat(fragment.transcript).containsAtLeast("onResume", "onPause"); - } - - @Test - public void isStopped() { - final LoginFragment fragment = new LoginFragment(); - SupportFragmentController.of(fragment, LoginActivity.class).create().start().resume().pause().stop(); - - assertThat(fragment.getView()).isNotNull(); - assertThat(fragment.getActivity()).isNotNull(); - assertThat(fragment.isAdded()).isTrue(); - assertThat(fragment.isResumed()).isFalse(); - - assertThat(fragment.transcript).containsAtLeast("onStart", "onResume", "onPause", "onStop"); - } - - @Test - public void withIntent() { - final LoginFragment fragment = new LoginFragment(); - Intent intent = new Intent("test_action"); - intent.putExtra("test_key", "test_value"); - SupportFragmentController controller = - SupportFragmentController.of(fragment, LoginActivity.class, intent).create(); - - Intent intentInFragment = controller.get().getActivity().getIntent(); - assertThat(intentInFragment.getAction()).isEqualTo("test_action"); - assertThat(intentInFragment.getExtras().getString("test_key")).isEqualTo("test_value"); - } - - @Test - public void visible() { - final LoginFragment fragment = new LoginFragment(); - final SupportFragmentController controller = SupportFragmentController.of(fragment, LoginActivity.class); - - controller.create().start().resume(); - assertThat(fragment.isVisible()).isFalse(); - - controller.visible(); - assertThat(fragment.isVisible()).isTrue(); - } - - @Test - public void savesInstanceState() { - final LoginFragment fragment = new LoginFragment(); - final SupportFragmentController controller = - SupportFragmentController.of(fragment, LoginActivity.class); - controller.create().start().resume().visible(); - LoginActivity activity = (LoginActivity) controller.get().getActivity(); - Bundle expectedState = new Bundle(); - expectedState.putBoolean("isRestored", true); - activity.setState(expectedState); - final Bundle savedInstanceState = new Bundle(); - - controller.saveInstanceState(savedInstanceState); - - assertThat(savedInstanceState.getBoolean("isRestored")).isTrue(); - } - - public static class LoginFragment extends Fragment { - public List transcript = new ArrayList<>(); - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_contents, container, false); - } - - @Override - public void onStart() { - super.onStart(); - transcript.add("onStart"); - } - - @Override - public void onResume() { - super.onResume(); - transcript.add("onResume"); - } - - @Override - public void onPause() { - super.onPause(); - transcript.add("onPause"); - } - - @Override - public void onStop() { - super.onStop(); - transcript.add("onStop"); - } - } - - public static class LoginActivity extends FragmentActivity { - private Bundle state = new Bundle(); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - LinearLayout view = new LinearLayout(this); - view.setId(1); - - setContentView(view); - } - - @Override - protected void onSaveInstanceState(Bundle savedInstanceState) { - super.onSaveInstanceState(savedInstanceState); - savedInstanceState.putAll(state); - } - - public void setState(Bundle state) { - this.state = state; - } - } - - public static class CustomizedViewIdLoginActivity extends FragmentActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - LinearLayout view = new LinearLayout(this); - view.setId(VIEW_ID_CUSTOMIZED_LOGIN_ACTIVITY); - - setContentView(view); - } - } -} diff --git a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/SupportFragmentTestUtilTest.java b/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/SupportFragmentTestUtilTest.java deleted file mode 100644 index aceb524b889..00000000000 --- a/shadows/supportv4/src/test/java/org/robolectric/shadows/support/v4/SupportFragmentTestUtilTest.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.robolectric.shadows.support.v4; - -import static com.google.common.truth.Truth.assertThat; -import static org.robolectric.shadows.support.v4.SupportFragmentTestUtil.startFragment; -import static org.robolectric.shadows.support.v4.SupportFragmentTestUtil.startVisibleFragment; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.TextView; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.R; - -@RunWith(AndroidJUnit4.class) -public class SupportFragmentTestUtilTest { - - @Test - public void startFragment_shouldStartSupportFragment() { - final LoginSupportFragment fragment = new LoginSupportFragment(); - startFragment(fragment); - - assertThat(fragment.getView()).isNotNull(); - assertThat(fragment.getActivity()).isNotNull(); - assertThat((TextView) fragment.getView().findViewById(R.id.tacos)).isNotNull(); - } - - @Test - public void startVisibleFragment_shouldStartSupportFragment() { - final LoginSupportFragment fragment = new LoginSupportFragment(); - startVisibleFragment(fragment); - - assertThat(fragment.getView()).isNotNull(); - assertThat(fragment.getActivity()).isNotNull(); - assertThat((TextView) fragment.getView().findViewById(R.id.tacos)).isNotNull(); - } - - @Test - public void startVisibleFragment_shouldAttachSupportFragmentToActivity() { - final LoginSupportFragment fragment = new LoginSupportFragment(); - startVisibleFragment(fragment); - - assertThat(fragment.getView().getWindowToken()).isNotNull(); - } - - @Test - public void startFragment_shouldStartSupportFragmentWithSpecifiedActivityClass() { - final LoginSupportFragment fragment = new LoginSupportFragment(); - startFragment(fragment, LoginFragmentActivity.class); - - assertThat(fragment.getView()).isNotNull(); - assertThat(fragment.getActivity()).isNotNull(); - assertThat((TextView) fragment.getView().findViewById(R.id.tacos)).isNotNull(); - assertThat(fragment.getActivity()).isInstanceOf(LoginFragmentActivity.class); - } - - @Test - public void startVisibleFragment_shouldStartSupportFragmentWithSpecifiedActivityClass() { - final LoginSupportFragment fragment = new LoginSupportFragment(); - startVisibleFragment(fragment, LoginFragmentActivity.class, 1); - - assertThat(fragment.getView()).isNotNull(); - assertThat(fragment.getActivity()).isNotNull(); - assertThat((TextView) fragment.getView().findViewById(R.id.tacos)).isNotNull(); - assertThat(fragment.getActivity()).isInstanceOf(LoginFragmentActivity.class); - } - - @Test - public void startVisibleFragment_shouldAttachSupportFragmentToActivityWithSpecifiedActivityClass() { - final LoginSupportFragment fragment = new LoginSupportFragment(); - startVisibleFragment(fragment, LoginFragmentActivity.class, 1); - - assertThat(fragment.getView().getWindowToken()).isNotNull(); - assertThat(fragment.getActivity()).isInstanceOf(LoginFragmentActivity.class); - } - - public static class LoginSupportFragment extends Fragment { - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_contents, container, false); - } - } - - public static class LoginFragmentActivity extends FragmentActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - LinearLayout view = new LinearLayout(this); - view.setId(1); - - setContentView(view); - } - } -} diff --git a/shadows/supportv4/src/test/resources/AndroidManifest.xml b/shadows/supportv4/src/test/resources/AndroidManifest.xml deleted file mode 100644 index fe15d6cd607..00000000000 --- a/shadows/supportv4/src/test/resources/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - diff --git a/shadows/supportv4/src/test/resources/res/layout/dialog_fragment.xml b/shadows/supportv4/src/test/resources/res/layout/dialog_fragment.xml deleted file mode 100644 index d7785754e92..00000000000 --- a/shadows/supportv4/src/test/resources/res/layout/dialog_fragment.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - diff --git a/shadows/supportv4/src/test/resources/res/layout/fragment_contents.xml b/shadows/supportv4/src/test/resources/res/layout/fragment_contents.xml deleted file mode 100644 index 425b2bb6a0d..00000000000 --- a/shadows/supportv4/src/test/resources/res/layout/fragment_contents.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - -