package com.example.pocketknife; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import org.junit.After; 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 java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Random; import java.util.Set; import java.util.UUID; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @RunWith(RobolectricTestRunner.class) @Config(manifest = "src/main/AndroidManifest.xml") public class IntentBuilderTest extends BaseTest{ private Intents intents; private Uri uri; @Before public void setup() { intents = new PocketKnifeIntents(RuntimeEnvironment.application); uri = Uri.fromParts("test", "test", "test"); } @After public void tearDown() { intents = null; uri = null; } @Test public void testAction() throws Exception { Intent intent = intents.getActionIntent(); assertEquals("Action", "TEST", intent.getAction()); intent = intents.getClassIntent(); assertNull("No Action", intent.getAction()); intent = intents.getAllPlusExtra("data", 0); assertEquals("All", "TEST", intent.getAction()); } @Test public void testClass() throws Exception { Intent intent = intents.getClassIntent(); assertEquals("Class", SimpleActivity.class.getName(), intent.getComponent().getClassName()); intent = intents.getActionIntent(); assertNull("No Class", intent.getComponent()); intent = intents.getAllPlusExtra("data", 0); assertEquals("All", SimpleActivity.class.getName(), intent.getComponent().getClassName()); } @Test public void testFlag() throws Exception { Intent intent = intents.getFlagIntent(); assertEquals("Flags", Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_NEW_TASK, intent.getFlags()); intent = intents.getActionIntent(); assertEquals("No Flags", 0, intent.getFlags()); intent = intents.getAllPlusExtra("data", 0); assertEquals("All", Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_NEW_TASK, intent.getFlags()); } @Test public void testData() throws Exception { Intent intent = intents.getDataIntent("data"); assertEquals("Data", "data", intent.getDataString()); intent = intents.getActionIntent(); assertNull("No Data", intent.getData()); intent = intents.getAllPlusExtra("data", 0); assertEquals("All", "data", intent.getDataString()); intent = intents.getDataUriIntent(uri); assertEquals("Uri", uri, intent.getData()); intent = intents.getAllDataUriPlusExtra(uri, 0); assertEquals("All Uri", uri, intent.getData()); } @Test public void testCategories() throws Exception { Intent intent = intents.getActionIntent(); Set<String> categories = intent.getCategories(); assertEquals(0, categories == null ? 0 : categories.size()); // Have to test this way since robolectric doesn't return null for categories. intent = intents.getSingleCategory(); categories = intent.getCategories(); assertEquals(1, categories.size()); assertTrue(categories.containsAll(Collections.singletonList("ONE"))); intent = intents.getCategories(); categories = intent.getCategories(); assertEquals(4, categories.size()); assertTrue(categories.containsAll(Arrays.asList("ONE", "TWO", "THREE", "FOUR"))); intent = intents.getAllPlusExtra("data", 0); categories = intent.getCategories(); assertEquals(4, categories.size()); assertTrue(categories.containsAll(Arrays.asList("ONE", "TWO", "THREE", "FOUR"))); } @Test public void testType() throws Exception { Intent intent = intents.getTypeIntent(); assertEquals("Type", "application/html", intent.getType()); intent = intents.getActionIntent(); assertNull("No Type", intent.getType()); intent = intents.getAllPlusExtra("data", 0); assertEquals("All", "application/html", intent.getType()); } @Test public void testExtras() throws Exception { Random random = new Random(42); int i = random.nextInt(); int j = random.nextInt(); Intent intent = intents.getExtra(i); assertEquals("EXTRA", i, intent.getIntExtra(PocketKnifeIntents.EXTRA_I, 0)); intent = intents.getActionIntent(); assertNull("NO EXTRAS", intent.getExtras()); intent = intents.getExtras(i, j); assertEquals("SAME TYPE I", i, intent.getIntExtra(PocketKnifeIntents.EXTRA_I, 0)); assertEquals("SAME TYPE J", j, intent.getIntExtra(PocketKnifeIntents.EXTRA_J, 0)); intent = intents.getNameCollisionExtra(i); assertEquals("NAME COLLISION", i, intent.getIntExtra(PocketKnifeIntents.EXTRA_INTENT, 0)); boolean aBoolean = random.nextBoolean(); boolean[] booleans = {random.nextBoolean(), random.nextBoolean(), random.nextBoolean(), random.nextBoolean(), random.nextBoolean()}; Bundle bundle = new Bundle(); bundle.putInt(BUNDLE_INT_ARG, random.nextInt()); bundle.putSerializable(BUNDLE_SERIALIZABLE_ARG, UUID.randomUUID().toString()); byte aByte = (byte) random.nextInt(); byte[] bytes = new byte[random.nextInt(10)]; random.nextBytes(bytes); char aChar = (char) random.nextInt(); char[] chars = {(char) random.nextInt(), (char) random.nextInt()}; CharSequence charSequence = UUID.randomUUID().toString(); CharSequence[] charSequences = {UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString()}; ArrayList<CharSequence> charSequenceArrayList = new ArrayList<CharSequence>(); charSequenceArrayList.add(UUID.randomUUID().toString()); double aDouble = random.nextDouble(); double[] doubles = {random.nextDouble()}; float aFloat = random.nextFloat(); float[] floats = {random.nextFloat()}; int anInt = random.nextInt(); int[] ints = {random.nextInt(), random.nextInt(), random.nextInt(), random.nextInt()}; ArrayList<Integer> integerArrayList = new ArrayList<Integer>(); integerArrayList.add(random.nextInt()); long aLong = random.nextLong(); long[] longs = {random.nextLong(), random.nextLong(), random.nextLong(), random.nextLong()}; MyParcelable parcelable = new MyParcelable(random.nextInt()); MyParcelable[] parcelables = {new MyParcelable(random.nextInt()), new MyParcelable(random.nextInt()), new MyParcelable(random.nextInt())}; ArrayList<MyParcelable> parcelableArrayList = new ArrayList<MyParcelable>(); parcelableArrayList.add(new MyParcelable(random.nextInt())); Serializable serializable = UUID.randomUUID().toString(); short aShort = (short) random.nextInt(); short[] shorts = {(short) random.nextInt(), (short) random.nextInt(), (short) random.nextInt(), (short) random.nextInt()}; String string = UUID.randomUUID().toString(); String[] strings = {UUID.randomUUID().toString()}; ArrayList<String> stringArrayList = new ArrayList<String>(); stringArrayList.add(UUID.randomUUID().toString()); intent = intents.getExtras(aBoolean, booleans, bundle, aByte, bytes, aChar, chars, charSequence, charSequences, charSequenceArrayList, aDouble, doubles, aFloat, floats, anInt, ints, integerArrayList, aLong, longs, parcelable, parcelables, parcelableArrayList, serializable, aShort, shorts, string, strings, stringArrayList); assertEquals(aBoolean, intent.getBooleanExtra(PocketKnifeIntents.EXTRA_A_BOOLEAN, false)); assertArrayEquals(booleans, intent.getBooleanArrayExtra(PocketKnifeIntents.EXTRA_BOOLEANS)); assertBundleEquals(bundle, intent.getBundleExtra(PocketKnifeIntents.EXTRA_BUNDLE)); assertEquals(aByte, intent.getByteExtra(PocketKnifeIntents.EXTRA_A_BYTE, (byte) 0)); assertArrayEquals(bytes, intent.getByteArrayExtra(PocketKnifeIntents.EXTRA_BYTES)); assertEquals(aChar, intent.getCharExtra(PocketKnifeIntents.EXTRA_A_CHAR, '0')); assertArrayEquals(chars, intent.getCharArrayExtra(PocketKnifeIntents.EXTRA_CHARS)); assertEquals(charSequence, intent.getCharSequenceExtra(PocketKnifeIntents.EXTRA_CHAR_SEQUENCE)); assertArrayEquals(charSequences, intent.getCharSequenceArrayExtra(PocketKnifeIntents.EXTRA_CHAR_SEQUENCES)); assertArrayListEquals(charSequenceArrayList, intent.getCharSequenceArrayListExtra(PocketKnifeIntents.EXTRA_CHAR_SEQUENCE_ARRAY_LIST)); assertEquals(aDouble, intent.getDoubleExtra(PocketKnifeIntents.EXTRA_A_DOUBLE, 0.0), 0); assertArrayEquals(doubles, intent.getDoubleArrayExtra(PocketKnifeIntents.EXTRA_DOUBLES), 0); assertEquals(aFloat, intent.getFloatExtra(PocketKnifeIntents.EXTRA_A_FLOAT, 0.0f), 0); assertArrayEquals(floats, intent.getFloatArrayExtra(PocketKnifeIntents.EXTRA_FLOATS), 0); assertEquals(anInt, intent.getIntExtra(PocketKnifeIntents.EXTRA_AN_INT, 0)); assertArrayEquals(ints, intent.getIntArrayExtra(PocketKnifeIntents.EXTRA_INTS)); assertArrayListEquals(integerArrayList, intent.getIntegerArrayListExtra(PocketKnifeIntents.EXTRA_INTEGER_ARRAY_LIST)); assertEquals(aLong, intent.getLongExtra(PocketKnifeIntents.EXTRA_A_LONG, 0)); assertArrayEquals(longs, intent.getLongArrayExtra(PocketKnifeIntents.EXTRA_LONGS)); assertEquals(parcelable, intent.getParcelableExtra(PocketKnifeIntents.EXTRA_PARCELABLE)); assertArrayEquals(parcelables, intent.getParcelableArrayExtra(PocketKnifeIntents.EXTRA_PARCELABLES)); assertArrayListEquals(parcelableArrayList, intent.getParcelableArrayListExtra(PocketKnifeIntents.EXTRA_PARCELABLE_ARRAY_LIST)); assertEquals(serializable, intent.getSerializableExtra(PocketKnifeIntents.EXTRA_SERIALIZABLE)); assertEquals(aShort, intent.getShortExtra(PocketKnifeIntents.EXTRA_A_SHORT, (short) 0)); assertArrayEquals(shorts, intent.getShortArrayExtra(PocketKnifeIntents.EXTRA_SHORTS)); assertEquals(string, intent.getStringExtra(PocketKnifeIntents.EXTRA_STRING)); assertArrayEquals(strings, intent.getStringArrayExtra(PocketKnifeIntents.EXTRA_STRINGS)); assertArrayListEquals(stringArrayList, intent.getStringArrayListExtra(PocketKnifeIntents.EXTRA_STRING_ARRAY_LIST)); } }