package com.example.pocketknife; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import pocketknife.PocketKnife; import java.util.Random; import java.util.UUID; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @RunWith(RobolectricTestRunner.class) @Config(manifest = "src/main/AndroidManifest.xml") public class FooSerializerClassTest { private Random random; @Before public void setup() { random = new Random(42); } @Test public void testSaveState() { String bar = UUID.randomUUID().toString(); int baz = random.nextInt(); Foo foo1 = new Foo(bar, baz); FooSerializerClass fooSerializerClass1 = new FooSerializerClass(); fooSerializerClass1.saveFoo = foo1; Bundle bundle = new Bundle(); PocketKnife.saveInstanceState(fooSerializerClass1, bundle); Foo foo2 = new Foo(); FooSerializerClass fooSerializerClass2 = new FooSerializerClass(); fooSerializerClass2.saveFoo = foo2; PocketKnife.restoreInstanceState(fooSerializerClass2, bundle); assertTrue(foo2 == fooSerializerClass2.saveFoo); // Same memory address didn't get reassigned assertEquals(bar, foo2.getBar()); assertEquals(baz, foo2.getBaz()); } @Test public void testBuildAndBindArguments() { String bar = UUID.randomUUID().toString(); int baz = random.nextInt(); SerializerBuilder builder = new PocketKnifeSerializerBuilder(RuntimeEnvironment.application); Bundle bundle = builder.buildBundle(new Foo(bar, baz)); Foo foo = new Foo(); FooSerializerClass fooSerializerClass = new FooSerializerClass(); fooSerializerClass.argFoo = foo; PocketKnife.bindArguments(fooSerializerClass, bundle); assertTrue(foo == fooSerializerClass.argFoo); // Same memory address didn't get reassigned assertEquals(bar, foo.getBar()); assertEquals(baz, foo.getBaz()); } @Test public void testBuildAndBindExtras() { String bar = UUID.randomUUID().toString(); int baz = random.nextInt(); SerializerBuilder builder = new PocketKnifeSerializerBuilder(RuntimeEnvironment.application); Intent intent = builder.buildIntent(new Foo(bar, baz)); Foo foo = new Foo(); FooSerializerClass fooSerializerClass = new FooSerializerClass(); fooSerializerClass.extraFoo = foo; PocketKnife.bindExtras(fooSerializerClass, intent); assertTrue(foo == fooSerializerClass.extraFoo); // Same memory address didn't get reassigned assertEquals(bar, foo.getBar()); assertEquals(baz, foo.getBaz()); } @Test public void testBuildFragmentAndBindArguments() { String bar = UUID.randomUUID().toString(); int baz = random.nextInt(); SerializerBuilder builder = new PocketKnifeSerializerBuilder(RuntimeEnvironment.application); Fragment fragment = builder.buildFragment(new Foo(bar, baz)); Bundle bundle = fragment.getArguments(); Foo foo = new Foo(); FooSerializerClass fooSerializerClass = new FooSerializerClass(); fooSerializerClass.argFoo = foo; PocketKnife.bindArguments(fooSerializerClass, bundle); assertTrue(foo == fooSerializerClass.argFoo); // Same memory address didn't get reassigned assertEquals(bar, foo.getBar()); assertEquals(baz, foo.getBaz()); } }