package com.example.pocketknife;
import android.content.Intent;
import android.os.Bundle;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.util.ActivityController;
import java.util.Random;
import static org.junit.Assert.assertEquals;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = "src/main/AndroidManifest.xml")
public class InheritanceTest {
@Test
public void testInheritance() throws Exception {
Random random = new Random(42);
Bundle args = new Bundle();
int parentArg = random.nextInt();
int childArg = random.nextInt();
args.putInt(ChildFragment.CHILD_ARG, childArg);
args.putInt(ParentFragment.PARENT_ARG, parentArg);
Intent intent = new Intent(RuntimeEnvironment.application, GrandchildActivity.class);
int parentExtra = random.nextInt();
int childExtra = random.nextInt();
intent.putExtra(ParentActivity.PARENT_EXTRA, parentExtra);
intent.putExtra(ChildActivity.CHILD_EXTRA, childExtra);
intent.putExtra(ChildActivity.FRAGMENT_ARGS, args);
ActivityController<GrandchildActivity> initialController = Robolectric.buildActivity(GrandchildActivity.class).withIntent(intent).create();
GrandchildActivity originalActivity = initialController.start().restart().visible().get();
assertEquals(childExtra, originalActivity.childExtra);
assertEquals(parentExtra, originalActivity.parentExtra);
assertEquals(childArg, originalActivity.fragment.childArg);
assertEquals(parentArg, originalActivity.fragment.parentArg);
originalActivity.paInt = random.nextInt();
originalActivity.caInt = random.nextInt();
originalActivity.fragment.pfInt = random.nextInt();
originalActivity.fragment.cfInt = random.nextInt();
Bundle saveState = new Bundle();
initialController.saveInstanceState(saveState);
Bundle copyArgs = new Bundle();
copyArgs.putInt(ChildFragment.CHILD_ARG, random.nextInt() - childArg);
copyArgs.putInt(ParentFragment.PARENT_ARG, random.nextInt() - parentArg);
Intent copyIntent = new Intent(RuntimeEnvironment.application, GrandchildActivity.class);
copyIntent.putExtra(ParentActivity.PARENT_EXTRA, random.nextInt() - parentExtra);
copyIntent.putExtra(ChildActivity.CHILD_EXTRA, random.nextInt() - childExtra);
copyIntent.putExtra(ChildActivity.FRAGMENT_ARGS, copyArgs);
ActivityController<GrandchildActivity> secondaryController = Robolectric.buildActivity(GrandchildActivity.class).withIntent(copyIntent).create(saveState);
GrandchildActivity copyActivity = secondaryController.start().restart().visible().get();
assertEquals(originalActivity.caInt, copyActivity.caInt);
assertEquals(originalActivity.paInt, copyActivity.paInt);
assertEquals(originalActivity.fragment.cfInt, copyActivity.fragment.cfInt);
assertEquals(originalActivity.fragment.pfInt, copyActivity.fragment.pfInt);
}
}