Home | History | Annotate | Download | only in cts
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.content.cts;
     18 
     19 import com.android.internal.app.ResolverActivity;
     20 import com.android.internal.util.XmlUtils;
     21 
     22 import org.xmlpull.v1.XmlPullParser;
     23 import org.xmlpull.v1.XmlPullParserException;
     24 
     25 import android.content.ComponentName;
     26 import android.content.ContentResolver;
     27 import android.content.Context;
     28 import android.content.Intent;
     29 import android.content.pm.ActivityInfo;
     30 import android.content.pm.PackageManager;
     31 import android.content.pm.PackageManager.NameNotFoundException;
     32 import android.content.res.XmlResourceParser;
     33 import android.net.Uri;
     34 import android.os.Bundle;
     35 import android.os.IBinder;
     36 import android.os.Parcel;
     37 import android.os.ServiceManager;
     38 import android.provider.Contacts.People;
     39 import android.test.AndroidTestCase;
     40 import android.util.AttributeSet;
     41 import android.util.Log;
     42 import android.util.Xml;
     43 
     44 import java.io.IOException;
     45 import java.io.Serializable;
     46 import java.net.URISyntaxException;
     47 import java.util.ArrayList;
     48 import java.util.Objects;
     49 import java.util.Set;
     50 
     51 public class IntentTest extends AndroidTestCase {
     52 
     53     private Intent mIntent;
     54     private static final String TEST_ACTION = "android.content.IntentTest_test";
     55     private static final Uri TEST_URI = People.CONTENT_URI;
     56     private static final Uri ANOTHER_TEST_URI = People.CONTENT_FILTER_URI;
     57     private static final String TEST_EXTRA_NAME = "testExtraName";
     58     private Context mContext;
     59     private PackageManager mPm;
     60     private ComponentName mComponentName;
     61     private ComponentName mAnotherComponentName;
     62     private static final String TEST_TYPE = "testType";
     63     private static final String ANOTHER_TEST_TYPE = "anotherTestType";
     64     private static final String TEST_CATEGORY = "testCategory";
     65     private static final String ANOTHER_TEST_CATEGORY = "testAnotherCategory";
     66     private static final String TEST_PACKAGE = "android.content.cts";
     67     private static final String ANOTHER_TEST_PACKAGE = "android.database.cts";
     68 
     69     @Override
     70     protected void setUp() throws Exception {
     71         super.setUp();
     72         mIntent = new Intent();
     73         mContext = getContext();
     74         mPm = mContext.getPackageManager();
     75         mComponentName = new ComponentName(mContext, MockActivity.class);
     76         mAnotherComponentName = new ComponentName(mContext, "tmp");
     77     }
     78 
     79     public void testConstructor() {
     80         mIntent = new Intent();
     81         assertNotNull(mIntent);
     82 
     83         Intent intent = new Intent();
     84         intent.setAction(TEST_ACTION);
     85 
     86         mIntent = new Intent(intent);
     87         assertNotNull(mIntent);
     88         assertEquals(TEST_ACTION, mIntent.getAction());
     89 
     90         mIntent = new Intent(TEST_ACTION);
     91         assertNotNull(mIntent);
     92         assertEquals(TEST_ACTION, mIntent.getAction());
     93 
     94         mIntent = new Intent(TEST_ACTION, TEST_URI);
     95         assertNotNull(mIntent);
     96         assertEquals(TEST_ACTION, mIntent.getAction());
     97         assertEquals(TEST_URI, mIntent.getData());
     98 
     99         mIntent = new Intent(mContext, MockActivity.class);
    100         assertNotNull(mIntent);
    101         assertEquals(mComponentName, mIntent.getComponent());
    102 
    103         mIntent = new Intent(TEST_ACTION, TEST_URI, mContext, MockActivity.class);
    104         assertNotNull(mIntent);
    105         assertEquals(TEST_ACTION, mIntent.getAction());
    106         assertEquals(TEST_URI, mIntent.getData());
    107         assertEquals(mComponentName, mIntent.getComponent());
    108     }
    109 
    110     public void testRemoveExtra() {
    111         mIntent = new Intent();
    112         mIntent.putExtra(TEST_EXTRA_NAME, "testvalue");
    113         assertNotNull(mIntent.getStringExtra(TEST_EXTRA_NAME));
    114         mIntent.removeExtra(TEST_EXTRA_NAME);
    115         assertNull(mIntent.getStringExtra(TEST_EXTRA_NAME));
    116     }
    117 
    118     public void testGetCharSequenceExtra() {
    119         final CharSequence expected = "CharSequencetest";
    120         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    121         assertEquals(expected, mIntent.getCharSequenceExtra(TEST_EXTRA_NAME));
    122     }
    123 
    124     public void testReadFromParcel() {
    125         mIntent.setAction(TEST_ACTION);
    126         mIntent.setData(TEST_URI);
    127         mIntent.setType(TEST_TYPE);
    128         mIntent.setFlags(0);
    129         mIntent.setComponent(mComponentName);
    130         mIntent.addCategory(TEST_CATEGORY);
    131         final Parcel parcel = Parcel.obtain();
    132         mIntent.writeToParcel(parcel, 0);
    133         parcel.setDataPosition(0);
    134         final Intent target = new Intent();
    135         target.readFromParcel(parcel);
    136         assertEquals(mIntent.getAction(), target.getAction());
    137         assertEquals(mIntent.getData(), target.getData());
    138         assertEquals(mIntent.getFlags(), target.getFlags());
    139         assertEquals(mIntent.getComponent(), target.getComponent());
    140         assertEquals(mIntent.getCategories(), target.getCategories());
    141         assertEquals(mIntent.toURI(), target.toURI());
    142     }
    143 
    144     public void testGetParcelableArrayListExtra() {
    145         final ArrayList<Intent> expected = new ArrayList<Intent>();
    146         Intent intent = new Intent(TEST_ACTION);
    147         expected.add(intent);
    148 
    149         mIntent.putParcelableArrayListExtra(TEST_EXTRA_NAME, expected);
    150         final ArrayList<Intent> target = mIntent.getParcelableArrayListExtra(TEST_EXTRA_NAME);
    151         assertEquals(expected.size(), target.size());
    152         assertEquals(expected, target);
    153     }
    154 
    155     public void testFilterHashCode() {
    156         mIntent.filterHashCode();
    157     }
    158 
    159     public void testGetCategories() {
    160         mIntent.addCategory(TEST_CATEGORY);
    161         final Set<String> target = mIntent.getCategories();
    162         assertEquals(TEST_CATEGORY, target.toArray()[0]);
    163     }
    164 
    165     public void testGetScheme() {
    166         assertNull(mIntent.getScheme());
    167         mIntent.setData(TEST_URI);
    168         assertEquals(TEST_URI.getScheme(), mIntent.getScheme());
    169     }
    170 
    171     public void testGetIntegerArrayListExtra() {
    172         final ArrayList<Integer> expected = new ArrayList<Integer>();
    173         expected.add(0);
    174         mIntent.putIntegerArrayListExtra(TEST_EXTRA_NAME, expected);
    175         assertEquals(expected, mIntent.getIntegerArrayListExtra(TEST_EXTRA_NAME));
    176     }
    177 
    178     public void testHasExtra() {
    179         mIntent = new Intent();
    180         assertFalse(mIntent.hasExtra(TEST_EXTRA_NAME));
    181         mIntent.putExtra(TEST_EXTRA_NAME, "test");
    182         assertTrue(mIntent.hasExtra(TEST_EXTRA_NAME));
    183     }
    184 
    185     public void testGetIntArrayExtra() {
    186         final int[] expected = { 1, 2, 3 };
    187         assertNull(mIntent.getIntArrayExtra(TEST_EXTRA_NAME));
    188         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    189         assertEquals(expected, mIntent.getIntArrayExtra(TEST_EXTRA_NAME));
    190     }
    191 
    192     public void testSetClassName1() {
    193         final Intent intent = mIntent.setClassName(mContext, MockActivity.class.getName());
    194         assertEquals(mComponentName, mIntent.getComponent());
    195         assertSame(mIntent, intent);
    196     }
    197 
    198     public void testSetClassName2() {
    199         mIntent.setClassName(mContext.getPackageName(), MockActivity.class.getName());
    200         assertEquals(mComponentName, mIntent.getComponent());
    201     }
    202 
    203     public void testGetIntExtra() {
    204         final int expected = 0;
    205         mIntent = new Intent();
    206         assertEquals(expected, mIntent.getIntExtra(TEST_EXTRA_NAME, expected));
    207         mIntent.putExtra(TEST_EXTRA_NAME, 100);
    208         assertEquals(100, mIntent.getIntExtra(TEST_EXTRA_NAME, 1));
    209 
    210     }
    211 
    212     public void testPutIntegerArrayListExtra() {
    213         final ArrayList<Integer> expected = new ArrayList<Integer>();
    214         expected.add(0);
    215         mIntent = new Intent();
    216         mIntent.putIntegerArrayListExtra(TEST_EXTRA_NAME, expected);
    217         assertEquals(expected, mIntent.getIntegerArrayListExtra(TEST_EXTRA_NAME));
    218     }
    219 
    220     public void testAccessType() {
    221         mIntent.setType(TEST_TYPE);
    222         assertEquals(TEST_TYPE, mIntent.getType());
    223     }
    224 
    225     public void testGetBundleExtra() {
    226         final Bundle expected = new Bundle();
    227         expected.putBoolean("testTrue", true);
    228         mIntent.putExtras(expected);
    229         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    230 
    231         assertEquals(expected, mIntent.getBundleExtra(TEST_EXTRA_NAME));
    232     }
    233 
    234     public void testGetCharArrayExtra() {
    235         final char[] expected = { 'a', 'b', 'c' };
    236         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    237         final char[] actual= mIntent.getCharArrayExtra(TEST_EXTRA_NAME);
    238         assertEquals(expected.length, actual.length);
    239         assertEquals(expected[0], actual[0]);
    240         assertEquals(expected[1], actual[1]);
    241         assertEquals(expected[2], actual[2]);
    242     }
    243 
    244     public void testGetDoubleArrayExtra() {
    245         final double[] expected = { 1d, 2d };
    246         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    247         assertEquals(expected, mIntent.getDoubleArrayExtra(TEST_EXTRA_NAME));
    248     }
    249 
    250     public void testPutStringArrayListExtra() {
    251         final ArrayList<String> expected = new ArrayList<String>();
    252         expected.add("testString");
    253         mIntent.putStringArrayListExtra(TEST_EXTRA_NAME, expected);
    254         assertEquals(expected, mIntent.getStringArrayListExtra(TEST_EXTRA_NAME));
    255     }
    256 
    257     public void testResolveType1() {
    258         final ContentResolver contentResolver = mContext.getContentResolver();
    259         assertNull(mIntent.resolveType(mContext));
    260         mIntent.setType(TEST_TYPE);
    261         assertEquals(TEST_TYPE, mIntent.resolveType(mContext));
    262         mIntent.setType(null);
    263         mIntent.setData(TEST_URI);
    264         assertEquals(contentResolver.getType(TEST_URI), mIntent.resolveType(mContext));
    265         mIntent.setData(Uri.parse("test"));
    266         assertNull(mIntent.resolveType(mContext));
    267     }
    268 
    269     public void testResolveType2() {
    270         final ContentResolver contentResolver = mContext.getContentResolver();
    271         assertNull(mIntent.resolveType(contentResolver));
    272         mIntent.setType(TEST_TYPE);
    273         assertEquals(TEST_TYPE, mIntent.resolveType(contentResolver));
    274         mIntent.setType(null);
    275         mIntent.setData(TEST_URI);
    276         assertEquals(contentResolver.getType(TEST_URI), mIntent.resolveType(contentResolver));
    277         mIntent.setData(Uri.parse("test"));
    278         assertNull(mIntent.resolveType(contentResolver));
    279     }
    280 
    281     public void testAccessComponent() {
    282         mIntent.setComponent(mComponentName);
    283         assertEquals(mComponentName, mIntent.getComponent());
    284     }
    285 
    286     public void testGetDataString() {
    287         assertNull(mIntent.getDataString());
    288         mIntent.setData(TEST_URI);
    289         assertEquals(TEST_URI.toString(), mIntent.getDataString());
    290     }
    291 
    292     public void testHasCategory() {
    293         assertFalse(mIntent.hasCategory(TEST_CATEGORY));
    294         mIntent.addCategory(TEST_CATEGORY);
    295         assertTrue(mIntent.hasCategory(TEST_CATEGORY));
    296     }
    297 
    298     public void testGetLongArrayExtra() {
    299         final long[] expected = { 1l, 2l, 3l };
    300         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    301         assertEquals(expected, mIntent.getLongArrayExtra(TEST_EXTRA_NAME));
    302     }
    303 
    304     public void testParseIntent() throws XmlPullParserException, IOException,
    305         NameNotFoundException {
    306         mIntent = null;
    307         XmlResourceParser parser = null;
    308         AttributeSet attrs = null;
    309         ActivityInfo ai = null;
    310         try {
    311             mIntent = Intent.parseIntent(mContext.getResources(), parser, attrs);
    312             fail("should thow exception!");
    313         } catch (NullPointerException e) {
    314             // expected
    315         }
    316 
    317         ai = mContext.getPackageManager().getActivityInfo(mComponentName,
    318                 PackageManager.GET_META_DATA);
    319         parser = ai.loadXmlMetaData(mContext.getPackageManager(), "android.app.alias");
    320 
    321         attrs = Xml.asAttributeSet(parser);
    322         int type;
    323         while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
    324                 && type != XmlPullParser.START_TAG) {
    325         }
    326 
    327         String nodeName = parser.getName();
    328         if (!"alias".equals(nodeName)) {
    329             throw new RuntimeException();
    330         }
    331 
    332         int outerDepth = parser.getDepth();
    333         while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
    334                 && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
    335             if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
    336                 continue;
    337             }
    338 
    339             nodeName = parser.getName();
    340             if ("intent".equals(nodeName)) {
    341                 mIntent = Intent.parseIntent(mContext.getResources(), parser, attrs);
    342             } else {
    343                 XmlUtils.skipCurrentTag(parser);
    344             }
    345         }
    346 
    347         assertNotNull(mIntent);
    348         assertEquals("android.intent.action.MAIN", mIntent.getAction());
    349         assertEquals(Uri.parse("http://www.google.com/"), mIntent.getData());
    350     }
    351 
    352     public void testSetClass() {
    353         assertNull(mIntent.getComponent());
    354         mIntent.setClass(mContext, MockActivity.class);
    355         assertEquals(mComponentName, mIntent.getComponent());
    356     }
    357 
    358     public void testResolveTypeIfNeeded() {
    359         ContentResolver contentResolver = mContext.getContentResolver();
    360         assertNull(mIntent.resolveTypeIfNeeded(contentResolver));
    361         mIntent.setType(TEST_TYPE);
    362         assertEquals(TEST_TYPE, mIntent.resolveTypeIfNeeded(contentResolver));
    363 
    364         mIntent.setType(null);
    365         mIntent.setComponent(mComponentName);
    366         assertEquals(null, mIntent.resolveTypeIfNeeded(contentResolver));
    367 
    368         mIntent.setType(TEST_TYPE);
    369         mIntent.setComponent(mComponentName);
    370         assertEquals(TEST_TYPE, mIntent.resolveTypeIfNeeded(contentResolver));
    371 
    372         mIntent.setType(null);
    373         mIntent.setData(TEST_URI);
    374         assertNull(mIntent.resolveTypeIfNeeded(contentResolver));
    375     }
    376 
    377     public void testPutExtra1() {
    378         assertFalse(mIntent.getBooleanExtra(TEST_EXTRA_NAME, false));
    379         mIntent.putExtra(TEST_EXTRA_NAME, true);
    380         assertTrue(mIntent.getBooleanExtra(TEST_EXTRA_NAME, false));
    381         mIntent.putExtra(TEST_EXTRA_NAME, false);
    382         assertFalse(mIntent.getBooleanExtra(TEST_EXTRA_NAME, false));
    383     }
    384 
    385     public void testPutExtra2() {
    386         final byte expected = Byte.valueOf("1");
    387         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    388         assertEquals(expected, mIntent.getByteExtra(TEST_EXTRA_NAME, Byte.valueOf("1")));
    389     }
    390 
    391     public void testPutExtra3() {
    392         assertEquals('a', mIntent.getCharExtra(TEST_EXTRA_NAME, 'a'));
    393         final char expected = 'a';
    394         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    395         assertEquals(expected, mIntent.getCharExtra(TEST_EXTRA_NAME, 'a'));
    396     }
    397 
    398     public void testPutExtra4() {
    399         final Short expected = Short.valueOf("2");
    400         assertEquals(Short.valueOf("1").shortValue(), mIntent.getShortExtra(
    401                 TEST_EXTRA_NAME, Short.valueOf("1")));
    402         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    403         assertEquals(expected.shortValue(), mIntent.getShortExtra(TEST_EXTRA_NAME, Short.valueOf("1")));
    404     }
    405 
    406     public void testPutExtra5() {
    407         final int expected = 2;
    408         assertEquals(1, mIntent.getIntExtra(TEST_EXTRA_NAME, 1));
    409         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    410         assertEquals(expected, mIntent.getIntExtra(TEST_EXTRA_NAME, 1));
    411     }
    412 
    413     public void testPutExtra6() {
    414         final long expected = 2l;
    415         assertEquals(1l, mIntent.getLongExtra(TEST_EXTRA_NAME, 1l));
    416         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    417         assertEquals(expected, mIntent.getLongExtra(TEST_EXTRA_NAME, 1l));
    418     }
    419 
    420     public void testPutExtra7() {
    421         final float expected = 2f;
    422         assertEquals(1f, mIntent.getFloatExtra(TEST_EXTRA_NAME, 1f));
    423         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    424         assertEquals(expected, mIntent.getFloatExtra(TEST_EXTRA_NAME, 1f));
    425     }
    426 
    427     public void testPutExtra8() {
    428         final double expected = 2d;
    429         assertEquals(1d, mIntent.getDoubleExtra(TEST_EXTRA_NAME, 1d));
    430         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    431         assertEquals(expected, mIntent.getDoubleExtra(TEST_EXTRA_NAME, 1d));
    432     }
    433 
    434     public void testPutExtra9() {
    435         final String expected = "testString";
    436         assertNull(mIntent.getStringExtra(TEST_EXTRA_NAME));
    437         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    438         assertEquals(expected, mIntent.getStringExtra(TEST_EXTRA_NAME));
    439     }
    440 
    441     public void testPutExtra10() {
    442         final CharSequence expected = "testString";
    443         assertNull(mIntent.getCharSequenceExtra(TEST_EXTRA_NAME));
    444         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    445         assertEquals(expected, mIntent.getCharSequenceExtra(TEST_EXTRA_NAME));
    446     }
    447 
    448     public void testPutExtra11() {
    449         final Intent expected = new Intent(TEST_ACTION);
    450         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    451         assertEquals(expected, mIntent.getParcelableExtra(TEST_EXTRA_NAME));
    452     }
    453 
    454     public void testPutExtra12() {
    455         final Intent[] expected = { new Intent(TEST_ACTION), new Intent(mContext, MockActivity.class) };
    456         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    457         assertEquals(expected, mIntent.getParcelableArrayExtra(TEST_EXTRA_NAME));
    458     }
    459 
    460     public void testPutExtra13() {
    461         final TestSerializable expected = new TestSerializable();
    462         expected.Name = "testName";
    463         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    464         assertEquals(expected, mIntent.getSerializableExtra(TEST_EXTRA_NAME));
    465         TestSerializable target = (TestSerializable) mIntent.getSerializableExtra(TEST_EXTRA_NAME);
    466         assertEquals(expected.Name, target.Name);
    467     }
    468 
    469     public void testPutExtra14() {
    470         final boolean[] expected = { true, true, false };
    471         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    472         assertEquals(expected, mIntent.getBooleanArrayExtra(TEST_EXTRA_NAME));
    473     }
    474 
    475     public void testPutExtra15() {
    476         final byte[] expected = TEST_ACTION.getBytes();
    477         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    478         assertEquals(expected, mIntent.getByteArrayExtra(TEST_EXTRA_NAME));
    479     }
    480 
    481     public void testPutExtra16() {
    482         final short[] expected = { 1, 2, 3 };
    483         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    484         assertEquals(expected, mIntent.getShortArrayExtra(TEST_EXTRA_NAME));
    485     }
    486 
    487     public void testPutExtra17() {
    488         final char[] expected = { '1', '2', '3' };
    489         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    490         assertEquals(expected, mIntent.getCharArrayExtra(TEST_EXTRA_NAME));
    491     }
    492 
    493     public void testPutExtra18() {
    494         final int[] expected = { 1, 2, 3 };
    495         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    496         assertEquals(expected, mIntent.getIntArrayExtra(TEST_EXTRA_NAME));
    497     }
    498 
    499     public void testPutExtra19() {
    500         final long[] expected = { 1l, 2l, 3l };
    501         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    502         assertEquals(expected, mIntent.getLongArrayExtra(TEST_EXTRA_NAME));
    503     }
    504 
    505     public void testPutExtra20() {
    506         final float[] expected = { 1f, 2f, 3f };
    507         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    508         assertEquals(expected, mIntent.getFloatArrayExtra(TEST_EXTRA_NAME));
    509     }
    510 
    511     public void testPutExtra21() {
    512         final double[] expected = { 1d, 2d, 3d };
    513         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    514         assertEquals(expected, mIntent.getDoubleArrayExtra(TEST_EXTRA_NAME));
    515     }
    516 
    517     public void testPutExtra22() {
    518         final String[] expected = { "1d", "2d", "3d" };
    519         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    520         assertEquals(expected, mIntent.getStringArrayExtra(TEST_EXTRA_NAME));
    521     }
    522 
    523     public void testPutExtra23() {
    524         final Bundle expected = new Bundle();
    525         expected.putString("key", "value");
    526         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    527         assertEquals(expected, mIntent.getBundleExtra(TEST_EXTRA_NAME));
    528     }
    529 
    530     @SuppressWarnings("deprecation")
    531     public void testPutExtra24() {
    532         final IBinder expected = ServiceManager.getService("activity");
    533         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    534         assertEquals(expected, mIntent.getIBinderExtra(TEST_EXTRA_NAME));
    535     }
    536 
    537     public void testAddCategory() {
    538         assertFalse(mIntent.hasCategory(TEST_CATEGORY));
    539         mIntent.addCategory(TEST_CATEGORY);
    540         assertTrue(mIntent.hasCategory(TEST_CATEGORY));
    541     }
    542 
    543     public void testPutParcelableArrayListExtra() {
    544         ArrayList<Intent> expected = new ArrayList<Intent>();
    545         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    546         assertEquals(expected, mIntent.getParcelableArrayListExtra(TEST_EXTRA_NAME));
    547     }
    548 
    549     public void testToString() {
    550         assertNotNull(mIntent.toString());
    551     }
    552 
    553     public void testAccessData() {
    554         mIntent.setData(TEST_URI);
    555         assertEquals(TEST_URI, mIntent.getData());
    556     }
    557 
    558     public void testSetExtrasClassLoader() {
    559     }
    560 
    561     public void testGetStringArrayListExtra() {
    562         final ArrayList<String> expected = new ArrayList<String>();
    563         expected.add("testString");
    564         mIntent.putStringArrayListExtra(TEST_EXTRA_NAME, expected);
    565         assertEquals(expected, mIntent.getStringArrayListExtra(TEST_EXTRA_NAME));
    566     }
    567 
    568     public void testGetCharSequenceArrayListExtra() {
    569         final ArrayList<CharSequence> expected = new ArrayList<CharSequence>();
    570         expected.add("testCharSequence");
    571         mIntent.putCharSequenceArrayListExtra(TEST_EXTRA_NAME, expected);
    572         assertEquals(expected, mIntent.getCharSequenceArrayListExtra(TEST_EXTRA_NAME));
    573     }
    574 
    575     public void testResolveActivityInfo() throws NameNotFoundException {
    576         final PackageManager pm = mContext.getPackageManager();
    577         assertEquals(null, mIntent.resolveActivityInfo(pm, 1));
    578         mIntent.setComponent(mComponentName);
    579         ActivityInfo target = null;
    580 
    581         target = pm.getActivityInfo(mComponentName, 1);
    582         assertEquals(target.targetActivity, mIntent.resolveActivityInfo(pm, 1).targetActivity);
    583     }
    584 
    585     public void testGetParcelableExtra() {
    586         final Intent expected = new Intent(TEST_ACTION);
    587         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    588         assertEquals(expected, mIntent.getParcelableExtra(TEST_EXTRA_NAME));
    589     }
    590 
    591     public void testAccessAction() {
    592         mIntent.setAction(TEST_ACTION);
    593         assertEquals(TEST_ACTION, mIntent.getAction());
    594     }
    595 
    596     public void testAddFlags() {
    597         final int flag = 1;
    598         int expected = 0;
    599         mIntent.addFlags(flag);
    600         expected |= flag;
    601         assertEquals(expected, mIntent.getFlags());
    602     }
    603 
    604     public void testDescribeContents() {
    605         final int expected = 0;
    606         assertEquals(expected, mIntent.describeContents());
    607         mIntent.putExtra(TEST_EXTRA_NAME, "test");
    608         assertEquals(mIntent.getExtras().describeContents(), mIntent.describeContents());
    609     }
    610 
    611     public void testGetShortExtra() {
    612 
    613         final Short expected = Short.valueOf("2");
    614         assertEquals(Short.valueOf("1").shortValue(), mIntent.getShortExtra(
    615                 TEST_EXTRA_NAME, Short.valueOf("1")));
    616         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    617         assertEquals(expected.shortValue(), mIntent.getShortExtra(TEST_EXTRA_NAME, Short.valueOf("1")));
    618     }
    619 
    620     public void testClone() {
    621         mIntent.setAction(TEST_ACTION);
    622         mIntent.setClass(mContext, MockActivity.class);
    623         mIntent.setComponent(mComponentName);
    624         mIntent.setDataAndType(TEST_URI, TEST_TYPE);
    625         mIntent.addCategory(TEST_CATEGORY);
    626         final String key = "testkey";
    627         final String excepted = "testValue";
    628         mIntent.putExtra(key, excepted);
    629         Intent actual = (Intent) mIntent.clone();
    630         assertEquals(mComponentName, actual.getComponent());
    631         assertEquals(TEST_ACTION, actual.getAction());
    632         assertEquals(mComponentName, actual.getComponent());
    633         assertEquals(TEST_URI, actual.getData());
    634         assertEquals(TEST_TYPE, actual.getType());
    635         assertEquals(TEST_CATEGORY, (String) (actual.getCategories().toArray()[0]));
    636         assertEquals(excepted, actual.getStringExtra(key));
    637     }
    638 
    639     public void testGetDoubleExtra() {
    640         final double expected = 2d;
    641         assertEquals(1d, mIntent.getDoubleExtra(TEST_EXTRA_NAME, 1d));
    642         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    643         assertEquals(expected, mIntent.getDoubleExtra(TEST_EXTRA_NAME, 1d));
    644     }
    645 
    646     public void testCloneFilter() {
    647         mIntent.setAction(TEST_ACTION);
    648         mIntent.setClass(mContext, MockActivity.class);
    649         mIntent.setComponent(mComponentName);
    650         mIntent.setDataAndType(TEST_URI, TEST_TYPE);
    651         mIntent.addCategory(TEST_CATEGORY);
    652         final String key = "testkey";
    653         mIntent.putExtra(key, "testValue");
    654         Intent actual = mIntent.cloneFilter();
    655         assertEquals(mComponentName, actual.getComponent());
    656         assertEquals(TEST_ACTION, actual.getAction());
    657         assertEquals(mComponentName, actual.getComponent());
    658         assertEquals(TEST_URI, actual.getData());
    659         assertEquals(TEST_TYPE, actual.getType());
    660         assertEquals(TEST_CATEGORY, (String) (actual.getCategories().toArray()[0]));
    661         assertNull(actual.getStringExtra(key));
    662     }
    663 
    664     public void testGetIntentOld() throws URISyntaxException {
    665         String uri = "test";
    666         mIntent = Intent.getIntentOld(uri);
    667         assertEquals(Intent.ACTION_VIEW, mIntent.getAction());
    668 
    669         mIntent = null;
    670         try {
    671             uri = "test#action(test)categories(test)type(mtype)launchFlags(test)extras(test";
    672             mIntent = Intent.getIntentOld(uri);
    673             fail("should throw URISyntaxException.");
    674         } catch (Exception e) {
    675             // expected
    676         }
    677 
    678         final String compnent =
    679                 "component(" + mContext.getPackageName() + "!" + MockActivity.class.getName() + ")";
    680         uri = "testdata#action(test)categories(test!test2)type(mtype)launchFlags(5)" + compnent
    681                 + "extras(Stest=testString!btestbyte=1!"
    682                 + "Btestboolean=true!ctestchar=a!dtestdouble=1d!"
    683                 + "itestint=1!ltestlong=1!stestshort=1!ftestfloat=1f)";
    684         mIntent = Intent.getIntentOld(uri);
    685         assertEquals("test", mIntent.getAction());
    686         assertEquals("testdata", mIntent.getData().toString());
    687         assertEquals(mComponentName, mIntent.getComponent());
    688         assertEquals("test", (String) (mIntent.getCategories().toArray()[0]));
    689         assertEquals("mtype", mIntent.getType());
    690         assertEquals(4, mIntent.getFlags());
    691         assertEquals("testString", mIntent.getStringExtra("test"));
    692         assertTrue(mIntent.getBooleanExtra("testboolean", false));
    693         final byte b = 1;
    694         final byte defaulttByte = 2;
    695         assertEquals(b, mIntent.getByteExtra("testbyte", defaulttByte));
    696         assertEquals('a', mIntent.getCharExtra("testchar", 'b'));
    697         final float testFloat = 1f;
    698         assertEquals(testFloat, mIntent.getFloatExtra("testfloat", 2f));
    699         final double testDouble = 1d;
    700         assertEquals(testDouble, mIntent.getDoubleExtra("testdouble", 2d));
    701 
    702         final long testLong = 1;
    703         assertEquals(testLong, mIntent.getLongExtra("testlong", 2l));
    704 
    705         final short testShort = 1;
    706         final short defaultShort = 2;
    707         assertEquals(testShort, mIntent.getShortExtra("testshort", defaultShort));
    708         assertEquals(1, mIntent.getIntExtra("testint", 2));
    709     }
    710 
    711     public void testGetParcelableArrayExtra() {
    712         final Intent[] expected = { new Intent(TEST_ACTION), new Intent(mContext, MockActivity.class) };
    713         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    714         assertEquals(expected, mIntent.getParcelableArrayExtra(TEST_EXTRA_NAME));
    715     }
    716 
    717     public void testResolveActivityEmpty() {
    718         final Intent emptyIntent = new Intent();
    719 
    720         // Empty intent shouldn't resolve to anything
    721         final ComponentName target = emptyIntent.resolveActivity(mPm);
    722         assertNull(target);
    723     }
    724 
    725     public void testResolveActivitySingleMatch() {
    726         final Intent intent = new Intent("com.android.cts.content.action.TEST_ACTION");
    727         intent.addCategory("com.android.cts.content.category.TEST_CATEGORY");
    728 
    729         // Should only have one activity responding to narrow category
    730         final ComponentName target = intent.resolveActivity(mPm);
    731         assertEquals("com.android.cts.content", target.getPackageName());
    732         assertEquals("android.content.cts.MockActivity", target.getClassName());
    733     }
    734 
    735     public void testResolveActivityShortcutMatch() {
    736         final Intent intent = new Intent("com.android.cts.content.action.TEST_ACTION");
    737         intent.setComponent(
    738                 new ComponentName("com.android.cts.content", "android.content.cts.MockActivity2"));
    739 
    740         // Multiple activities match, but we asked for explicit component
    741         final ComponentName target = intent.resolveActivity(mPm);
    742         assertEquals("com.android.cts.content", target.getPackageName());
    743         assertEquals("android.content.cts.MockActivity2", target.getClassName());
    744     }
    745 
    746     public void testResolveActivityMultipleMatch() {
    747         final Intent intent = new Intent("com.android.cts.content.action.TEST_ACTION");
    748 
    749         // Should have multiple activities, resulting in resolver dialog
    750         final ComponentName target = intent.resolveActivity(mPm);
    751         final String pkgName = target.getPackageName();
    752         assertFalse("com.android.cts.content".equals(pkgName));
    753 
    754         // Whoever they are must be able to set preferred activities
    755         if (!"android".equals(pkgName)) {
    756             if (mPm.checkPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS, pkgName)
    757                     != PackageManager.PERMISSION_GRANTED) {
    758                 fail("Resolved target " + target
    759                         + " doesn't have SET_PREFERRED_APPLICATIONS permission");
    760             }
    761         }
    762     }
    763 
    764     public void testGetCharExtra() {
    765         assertEquals('a', mIntent.getCharExtra(TEST_EXTRA_NAME, 'a'));
    766         final char expected = 'b';
    767         mIntent.putExtra(TEST_EXTRA_NAME, expected);
    768         assertEquals(expected, mIntent.getCharExtra(TEST_EXTRA_NAME, 'a'));
    769     }
    770 
    771     public void testGetIntent() throws URISyntaxException {
    772         mIntent = Intent.getIntent("test#");
    773         assertEquals(Intent.ACTION_VIEW, mIntent.getAction());
    774 
    775         try {
    776             String uri = "#Intent;action=android.content.IntentTest_test;"
    777                     + "category=testCategory;type=testtype;launchFlags=0x1;"
    778                     + "component=com.android/.app.MockActivity;K.testExtraName=1;end";
    779             mIntent = Intent.getIntent(uri);
    780             fail("should throw URISyntaxException.");
    781         } catch (Exception e) {
    782             // expected
    783         }
    784         mIntent = new Intent();
    785 
    786         String uri = mIntent.toURI();
    787         Intent target = Intent.getIntent(uri);
    788         assertEquals(Intent.ACTION_VIEW, target.getAction());
    789 
    790         mIntent.setAction(TEST_ACTION);
    791         uri = mIntent.toURI();
    792         target = Intent.getIntent(uri);
    793         assertEquals(TEST_ACTION, target.getAction());
    794 
    795         mIntent.setData(TEST_URI);
    796         uri = mIntent.toURI();
    797         target = Intent.getIntent(uri);
    798         assertEquals(TEST_URI, target.getData());
    799 
    800         mIntent.setComponent(mComponentName);
    801         uri = mIntent.toURI();
    802         target = Intent.getIntent(uri);
    803         assertEquals(mComponentName, target.getComponent());
    804 
    805         mIntent.addCategory(TEST_CATEGORY);
    806         uri = mIntent.toURI();
    807         target = Intent.getIntent(uri);
    808         assertEquals(1, target.getCategories().size());
    809         assertEquals(TEST_CATEGORY, (String) (target.getCategories().toArray()[0]));
    810 
    811         mIntent.setType(TEST_TYPE);
    812         uri = mIntent.toURI();
    813         target = Intent.getIntent(uri);
    814         assertEquals(TEST_TYPE, target.getType());
    815 
    816         mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT
    817                 | Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION
    818                 | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION
    819                 | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
    820         uri = mIntent.toURI();
    821         target = Intent.getIntent(uri);
    822         assertEquals(Intent.FLAG_ACTIVITY_NEW_DOCUMENT, target.getFlags());
    823 
    824         String stringValue = "testString";
    825         mIntent.putExtra(TEST_EXTRA_NAME, stringValue);
    826         uri = mIntent.toURI();
    827         target = Intent.getIntent(uri);
    828         assertEquals(stringValue, target.getStringExtra(TEST_EXTRA_NAME));
    829 
    830         mIntent.putExtra(TEST_EXTRA_NAME, true);
    831         uri = mIntent.toURI();
    832         target = Intent.getIntent(uri);
    833         assertTrue(target.getBooleanExtra(TEST_EXTRA_NAME, false));
    834 
    835         final byte b = 1;
    836         mIntent.putExtra(TEST_EXTRA_NAME, b);
    837 
    838         uri = mIntent.toURI();
    839         target = Intent.getIntent(uri);
    840         final byte defaulttByte = 2;
    841         assertEquals(b, target.getByteExtra(TEST_EXTRA_NAME, defaulttByte));
    842 
    843         final char testChar = 'a';
    844         mIntent.putExtra(TEST_EXTRA_NAME, testChar);
    845         uri = mIntent.toURI();
    846         target = Intent.getIntent(uri);
    847         assertEquals(testChar, target.getCharExtra(TEST_EXTRA_NAME, 'b'));
    848 
    849         final double testDouble = 1;
    850         mIntent.putExtra(TEST_EXTRA_NAME, testDouble);
    851         uri = mIntent.toURI();
    852         target = Intent.getIntent(uri);
    853         assertEquals(testDouble, target.getDoubleExtra(TEST_EXTRA_NAME, 2));
    854 
    855         final int testInt = 1;
    856         mIntent.putExtra(TEST_EXTRA_NAME, testInt);
    857         uri = mIntent.toURI();
    858         target = Intent.getIntent(uri);
    859         assertEquals(testInt, target.getIntExtra(TEST_EXTRA_NAME, 2));
    860 
    861         final long testLong = 1l;
    862         mIntent.putExtra(TEST_EXTRA_NAME, testLong);
    863         uri = mIntent.toURI();
    864         target = Intent.getIntent(uri);
    865         assertEquals(testLong, target.getLongExtra(TEST_EXTRA_NAME, 2l));
    866 
    867         final short testShort = 1;
    868         final short defaultShort = 2;
    869         mIntent.putExtra(TEST_EXTRA_NAME, testShort);
    870         uri = mIntent.toURI();
    871         target = Intent.getIntent(uri);
    872         assertEquals(testShort, target.getShortExtra(TEST_EXTRA_NAME, defaultShort));
    873     }
    874 
    875     public void testToURI() {
    876         mIntent = new Intent();
    877         assertEquals("", mIntent.toURI());
    878 
    879         mIntent.setData(TEST_URI);
    880         assertTrue(mIntent.toURI().indexOf(TEST_URI.toString()) != -1);
    881 
    882         mIntent.setAction(TEST_ACTION);
    883         assertTrue(mIntent.toURI().indexOf("action=" + TEST_ACTION) != -1);
    884 
    885         mIntent.addCategory(TEST_CATEGORY);
    886         assertTrue(mIntent.toURI().indexOf("category=") != -1);
    887 
    888         mIntent.setType(TEST_TYPE);
    889 
    890         assertTrue(mIntent.toURI().indexOf("type=" + TEST_TYPE) != -1);
    891 
    892         mIntent.setFlags(1);
    893         assertFalse(mIntent.toURI().indexOf("launchFlags=" + Integer.toHexString(1)) != -1);
    894 
    895         mIntent.setComponent(mComponentName);
    896         assertTrue(mIntent.toURI().indexOf(
    897                 "component=" + mComponentName.flattenToShortString()) != -1);
    898 
    899         final String stringValue = "testString";
    900         mIntent.putExtra(TEST_EXTRA_NAME, stringValue);
    901 
    902         assertTrue(mIntent.toURI().indexOf(getString("S", TEST_EXTRA_NAME, stringValue)) != -1);
    903 
    904         mIntent.putExtra(TEST_EXTRA_NAME, true);
    905 
    906         assertTrue(mIntent.toURI().indexOf(getString("B", TEST_EXTRA_NAME, true)) != -1);
    907 
    908         final byte b = 1;
    909         mIntent.putExtra(TEST_EXTRA_NAME, b);
    910         assertTrue(mIntent.toURI().indexOf(getString("b", TEST_EXTRA_NAME, b)) != -1);
    911 
    912         final Character testChar = 'a';
    913         mIntent.putExtra(TEST_EXTRA_NAME, testChar);
    914 
    915         assertTrue(mIntent.toURI().indexOf(getString("c", TEST_EXTRA_NAME, testChar)) != -1);
    916 
    917         final double testDouble = 1;
    918         mIntent.putExtra(TEST_EXTRA_NAME, testDouble);
    919         assertTrue(mIntent.toURI().indexOf(getString("d", TEST_EXTRA_NAME, testDouble)) != -1);
    920 
    921         final int testInt = 1;
    922         mIntent.putExtra(TEST_EXTRA_NAME, testInt);
    923         assertTrue(mIntent.toURI().indexOf(getString("i", TEST_EXTRA_NAME, testInt)) != -1);
    924 
    925         final long testLong = 1l;
    926         mIntent.putExtra(TEST_EXTRA_NAME, testLong);
    927         assertTrue(mIntent.toURI().indexOf(getString("l", TEST_EXTRA_NAME, testLong)) != -1);
    928         final short testShort = 1;
    929         mIntent.putExtra(TEST_EXTRA_NAME, testShort);
    930         assertTrue(mIntent.toURI().indexOf(getString("s", TEST_EXTRA_NAME, testShort)) != -1);
    931         assertTrue(mIntent.toURI().indexOf("end") != -1);
    932     }
    933 
    934     private String getString(String entryType, String key, Object value) {
    935         StringBuilder uri = new StringBuilder();
    936         uri.append(entryType);
    937         uri.append('.');
    938         uri.append(Uri.encode(key));
    939         uri.append('=');
    940         uri.append(Uri.encode(value.toString()));
    941         return uri.toString();
    942     }
    943 
    944     static Intent makeSelector(Intent baseIntent, Intent selectorIntent) {
    945         baseIntent.setSelector(selectorIntent);
    946         return baseIntent;
    947     }
    948 
    949     public void testUris() {
    950         checkIntentUri(
    951                 "intent:#Intent;action=android.test.FOO;end",
    952                 null,
    953                 new Intent().setAction("android.test.FOO"));
    954         checkIntentUri(
    955                 "intent:#Intent;category=android.test.FOO;end",
    956                 null,
    957                 new Intent().setAction(Intent.ACTION_VIEW).addCategory("android.test.FOO"));
    958         checkIntentUri(
    959                 "intent:#Intent;action=android.test.FOO;launchFlags=0x20;end",
    960                 null,
    961                 new Intent().setAction("android.test.FOO").setFlags(0x20));
    962         checkIntentUri(
    963                 "intent://www.example.com/blah#Intent;scheme=http;end",
    964                 null,
    965                 new Intent().setAction(Intent.ACTION_VIEW)
    966                         .setData(Uri.parse("http://www.example.com/blah")));
    967         checkIntentUri(
    968                 "intent://www.example.com/blah#Intent;scheme=http;component=com.exfoo/com.argh.Bar;end",
    969                 null,
    970                 new Intent().setAction(Intent.ACTION_VIEW)
    971                         .setData(Uri.parse("http://www.example.com/blah"))
    972                         .setComponent(new ComponentName("com.exfoo", "com.argh.Bar")));
    973         checkIntentUri(
    974                 "intent://www.example.com/blah#fragment#Intent;scheme=http;end",
    975                 null,
    976                 new Intent().setAction(Intent.ACTION_VIEW)
    977                         .setData(Uri.parse("http://www.example.com/blah#fragment")));
    978         checkIntentUri(
    979                 "intent://www.example.com/blah#Intent;scheme=http;action=android.test.foo;end",
    980                 null,
    981                 new Intent().setAction("android.test.foo")
    982                         .setData(Uri.parse("http://www.example.com/blah")));
    983         checkIntentUri(
    984                 "intent:foo#Intent;scheme=mailto;type=image/foo;end",
    985                 null,
    986                 new Intent().setAction(Intent.ACTION_VIEW)
    987                         .setDataAndType(Uri.parse("mailto:foo"), "image/foo"));
    988         checkIntentUri(
    989                 "intent:foo#Intent;scheme=mailto;S.string=text;end",
    990                 null,
    991                 new Intent().setAction(Intent.ACTION_VIEW)
    992                         .setData(Uri.parse("mailto:foo"))
    993                         .putExtra("string", "text"));
    994         checkIntentUri(
    995                 "intent:#Intent;action=android.test.FOO;S.string=text;end",
    996                 null,
    997                 new Intent().setAction("android.test.FOO").putExtra("string", "text"));
    998         checkIntentUri(
    999                 "intent:foo#Intent;scheme=mailto;i.int=1000;end",
   1000                 null,
   1001                 new Intent().setAction(Intent.ACTION_VIEW)
   1002                         .setData(Uri.parse("mailto:foo"))
   1003                         .putExtra("int", 1000));
   1004         checkIntentUri(
   1005                 "intent:foo#Intent;scheme=mailto;l.long=1000;end",
   1006                 null,
   1007                 new Intent().setAction(Intent.ACTION_VIEW)
   1008                         .setData(Uri.parse("mailto:foo"))
   1009                         .putExtra("long", (long) 1000));
   1010         checkIntentUri(
   1011                 "intent:foo#Intent;scheme=mailto;B.boolean=true;end",
   1012                 null,
   1013                 new Intent().setAction(Intent.ACTION_VIEW)
   1014                         .setData(Uri.parse("mailto:foo"))
   1015                         .putExtra("boolean", true));
   1016         checkIntentUri(
   1017                 "intent:foo#Intent;scheme=mailto;f.float=10.4;end",
   1018                 null,
   1019                 new Intent().setAction(Intent.ACTION_VIEW)
   1020                         .setData(Uri.parse("mailto:foo"))
   1021                         .putExtra("float", 10.4f));
   1022         checkIntentUri(
   1023                 "intent:foo#Intent;scheme=mailto;d.double=10.4;end",
   1024                 null,
   1025                 new Intent().setAction(Intent.ACTION_VIEW)
   1026                         .setData(Uri.parse("mailto:foo"))
   1027                         .putExtra("double", (double) 10.4));
   1028         checkIntentUri(
   1029                 "intent:#Intent;S.string=text;i.int=1000;l.long=1000;B.boolean=true;f.float=10.4;end",
   1030                 null,
   1031                 new Intent().setAction(Intent.ACTION_VIEW).putExtra("string", "text")
   1032                         .putExtra("int", 1000).putExtra("long", (long) 1000)
   1033                         .putExtra("boolean", true).putExtra("float", 10.4f));
   1034         checkIntentUri(
   1035                 "intent:foo#Intent;scheme=mailto;SEL;scheme=foobar;action=android.test.FOO;end",
   1036                 null,
   1037                 makeSelector(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("mailto:foo")),
   1038                         new Intent("android.test.FOO").setData(Uri.parse("foobar:"))));
   1039         checkIntentUri(
   1040                 "intent:foo#Intent;scheme=mailto;SEL;action=android.test.FOO;package=com.myapp;end",
   1041                 null,
   1042                 makeSelector(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("mailto:foo")),
   1043                         new Intent("android.test.FOO").setPackage("com.myapp")));
   1044         checkIntentUri(
   1045                 "intent:foo#Intent;scheme=mailto;SEL;action=android.test.FOO;component=com.exfoo/com.argh.Bar;end",
   1046                 null,
   1047                 makeSelector(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("mailto:foo")),
   1048                         new Intent("android.test.FOO")
   1049                                 .setComponent(new ComponentName("com.exfoo", "com.argh.Bar"))));
   1050 
   1051         checkIntentUri(
   1052                 "intent:#Intent;action=android.test.FOO;package=com.myapp;end",
   1053                 "android-app://com.myapp#Intent;action=android.test.FOO;end",
   1054                 new Intent().setAction("android.test.FOO").setPackage("com.myapp"));
   1055         checkIntentUri(
   1056                 "intent:#Intent;action=android.intent.action.MAIN;package=com.myapp;end",
   1057                 "android-app://com.myapp",
   1058                 new Intent().setAction(Intent.ACTION_MAIN).setPackage("com.myapp"));
   1059         checkIntentUri(
   1060                 "intent:#Intent;package=com.myapp;end",
   1061                 "android-app://com.myapp#Intent;action=android.intent.action.VIEW;end",
   1062                 new Intent().setAction(Intent.ACTION_VIEW).setPackage("com.myapp"));
   1063         checkIntentUri(
   1064                 "intent:#Intent;category=android.test.FOO;package=com.myapp;end",
   1065                 "android-app://com.myapp#Intent;action=android.intent.action.VIEW;category=android.test.FOO;end",
   1066                 new Intent().setAction(Intent.ACTION_VIEW).addCategory("android.test.FOO")
   1067                         .setPackage("com.myapp"));
   1068         checkIntentUri(
   1069                 "intent:#Intent;action=android.test.FOO;launchFlags=0x20;package=com.myapp;end",
   1070                 "android-app://com.myapp#Intent;action=android.test.FOO;launchFlags=0x20;end",
   1071                 new Intent().setAction("android.test.FOO").setFlags(0x20)
   1072                         .setPackage("com.myapp"));
   1073         checkIntentUri(
   1074                 "intent://www.example.com/blah#Intent;scheme=http;package=com.myapp;end",
   1075                 "android-app://com.myapp/http/www.example.com/blah",
   1076                 new Intent().setAction(Intent.ACTION_VIEW)
   1077                         .setData(Uri.parse("http://www.example.com/blah"))
   1078                         .setPackage("com.myapp"));
   1079         checkIntentUri(
   1080                 "intent://www.example.com/blah#Intent;scheme=http;package=com.myapp;component=com.exfoo/com.argh.Bar;end",
   1081                 "android-app://com.myapp/http/www.example.com/blah#Intent;component=com.exfoo/com.argh.Bar;end",
   1082                 new Intent().setAction(Intent.ACTION_VIEW)
   1083                         .setData(Uri.parse("http://www.example.com/blah"))
   1084                         .setComponent(new ComponentName("com.exfoo", "com.argh.Bar"))
   1085                         .setPackage("com.myapp"));
   1086         checkIntentUri(
   1087                 "intent://www.example.com/blah#fragment#Intent;scheme=http;package=com.myapp;end",
   1088                 "android-app://com.myapp/http/www.example.com/blah#fragment",
   1089                 new Intent().setAction(Intent.ACTION_VIEW)
   1090                         .setData(Uri.parse("http://www.example.com/blah#fragment"))
   1091                         .setPackage("com.myapp"));
   1092         checkIntentUri(
   1093                 "intent://www.example.com/blah#fragment#Intent;scheme=http;action=android.test.FOO;package=com.myapp;end",
   1094                 "android-app://com.myapp/http/www.example.com/blah#fragment#Intent;action=android.test.FOO;end",
   1095                 new Intent().setAction("android.test.FOO")
   1096                         .setData(Uri.parse("http://www.example.com/blah#fragment"))
   1097                         .setPackage("com.myapp"));
   1098         checkIntentUri(
   1099                 "intent://www.example.com/blah#Intent;scheme=http;package=com.myapp;end",
   1100                 "android-app://com.myapp/http/www.example.com/blah",
   1101                 new Intent().setAction(Intent.ACTION_VIEW)
   1102                         .setData(Uri.parse("http://www.example.com/blah"))
   1103                         .setPackage("com.myapp"));
   1104         checkIntentUri(
   1105                 "intent:#Intent;scheme=mailto;type=image/foo;package=com.myapp;end",
   1106                 "android-app://com.myapp/mailto#Intent;type=image/foo;end",
   1107                 new Intent().setAction(Intent.ACTION_VIEW)
   1108                         .setDataAndType(Uri.parse("mailto:"), "image/foo")
   1109                         .setPackage("com.myapp"));
   1110         checkIntentUri(
   1111                 "intent:#Intent;scheme=mailto;package=com.myapp;S.string=text;end",
   1112                 "android-app://com.myapp/mailto#Intent;S.string=text;end",
   1113                 new Intent().setAction(Intent.ACTION_VIEW).putExtra("string", "text")
   1114                         .setData(Uri.parse("mailto:")).setPackage("com.myapp"));
   1115         checkIntentUri(
   1116                 "intent:#Intent;action=android.test.FOO;package=com.myapp;S.string=text;end",
   1117                 "android-app://com.myapp#Intent;action=android.test.FOO;S.string=text;end",
   1118                 new Intent().setAction("android.test.FOO").putExtra("string", "text")
   1119                         .setPackage("com.myapp"));
   1120         checkIntentUri(
   1121                 "intent:#Intent;scheme=mailto;package=com.myapp;i.int=1000;end",
   1122                 "android-app://com.myapp/mailto#Intent;i.int=1000;end",
   1123                 new Intent().setAction(Intent.ACTION_VIEW).putExtra("int", 1000)
   1124                         .setData(Uri.parse("mailto:")).setPackage("com.myapp"));
   1125         checkIntentUri(
   1126                 "intent:#Intent;scheme=mailto;package=com.myapp;l.long=1000;end",
   1127                 "android-app://com.myapp/mailto#Intent;l.long=1000;end",
   1128                 new Intent().setAction(Intent.ACTION_VIEW).putExtra("long", (long) 1000)
   1129                         .setData(Uri.parse("mailto:")).setPackage("com.myapp"));
   1130         checkIntentUri(
   1131                 "intent:#Intent;scheme=mailto;package=com.myapp;B.boolean=true;end",
   1132                 "android-app://com.myapp/mailto#Intent;B.boolean=true;end",
   1133                 new Intent().setAction(Intent.ACTION_VIEW).putExtra("boolean", true)
   1134                         .setData(Uri.parse("mailto:")).setPackage("com.myapp"));
   1135         checkIntentUri(
   1136                 "intent:#Intent;scheme=mailto;package=com.myapp;f.float=10.4;end",
   1137                 "android-app://com.myapp/mailto#Intent;f.float=10.4;end",
   1138                 new Intent().setAction(Intent.ACTION_VIEW).putExtra("float", 10.4f)
   1139                         .setData(Uri.parse("mailto:")).setPackage("com.myapp"));
   1140         checkIntentUri(
   1141                 "intent:#Intent;scheme=mailto;package=com.myapp;d.double=10.4;end",
   1142                 "android-app://com.myapp/mailto#Intent;d.double=10.4;end",
   1143                 new Intent().setAction(Intent.ACTION_VIEW).putExtra("double", (double) 10.4)
   1144                         .setData(Uri.parse("mailto:")).setPackage("com.myapp"));
   1145         checkIntentUri(
   1146                 "intent:#Intent;package=com.myapp;S.string=text;i.int=1000;l.long=1000;B.boolean=true;f.float=10.4;end",
   1147                 "android-app://com.myapp#Intent;action=android.intent.action.VIEW;S.string=text;i.int=1000;l.long=1000;B.boolean=true;f.float=10.4;end",
   1148                 new Intent().setAction(Intent.ACTION_VIEW).putExtra("string", "text")
   1149                         .putExtra("int", 1000).putExtra("long", (long) 1000)
   1150                         .putExtra("boolean", true).putExtra("float", 10.4f)
   1151                         .setPackage("com.myapp"));
   1152     }
   1153 
   1154     private boolean compareIntents(Intent expected, Intent actual) {
   1155         if (!Objects.equals(expected.getAction(), actual.getAction())) {
   1156             return false;
   1157         }
   1158         if (!Objects.equals(expected.getData(), actual.getData())) {
   1159             return false;
   1160         }
   1161         if (!Objects.equals(expected.getType(), actual.getType())) {
   1162             return false;
   1163         }
   1164         if (!Objects.equals(expected.getPackage(), actual.getPackage())) {
   1165             return false;
   1166         }
   1167         if (!Objects.equals(expected.getComponent(), actual.getComponent())) {
   1168             return false;
   1169         }
   1170         if (expected.getFlags() != actual.getFlags()) {
   1171             return false;
   1172         }
   1173         Set<String> expectedCat = expected.getCategories();
   1174         Set<String> actualCat = actual.getCategories();
   1175         if (expectedCat != actualCat) {
   1176             if (expectedCat == null || actualCat == null) {
   1177                 return false;
   1178             }
   1179             for (String cat : expectedCat) {
   1180                 if (!actual.hasCategory(cat)) {
   1181                     return false;
   1182                 }
   1183             }
   1184             for (String cat : actualCat) {
   1185                 if (!expected.hasCategory(cat)) {
   1186                     return false;
   1187                 }
   1188             }
   1189         }
   1190         Bundle extras1 = expected.getExtras();
   1191         Bundle extras2 = actual.getExtras();
   1192         if (extras1 != extras2) {
   1193             if (extras1 == null || extras2 == null) {
   1194                 return false;
   1195             }
   1196             for (String key : extras1.keySet()) {
   1197                 if (!Objects.equals(extras1.get(key), extras2.get(key))) {
   1198                     return false;
   1199                 }
   1200             }
   1201             for (String key : extras2.keySet()) {
   1202                 if (!Objects.equals(extras1.get(key), extras2.get(key))) {
   1203                     return false;
   1204                 }
   1205             }
   1206         }
   1207         return true;
   1208     }
   1209 
   1210     private void assertEqualsIntent(String msg, Intent expected, Intent actual) {
   1211         if (!compareIntents(expected, actual)) {
   1212             failNotEquals(msg, expected, actual);
   1213         }
   1214         Intent expectedSel = expected.getSelector();
   1215         Intent actualSel = actual.getSelector();
   1216         if (expectedSel != actualSel) {
   1217             if (expectedSel == null || actualSel == null) {
   1218                 failNotEquals(msg, expected, actual);
   1219             }
   1220             if (!compareIntents(expectedSel, actualSel)) {
   1221                 failNotEquals(msg, expected, actual);
   1222             }
   1223         }
   1224     }
   1225 
   1226     private void checkIntentUri(String intentSchemeUri, String androidAppSchemeUri, Intent intent) {
   1227         if (intentSchemeUri != null) {
   1228             try {
   1229                 Intent genIntent = Intent.parseUri(intentSchemeUri, 0);
   1230                 assertEqualsIntent("Implicitly converting " + intentSchemeUri + " to Intent",
   1231                         intent, genIntent);
   1232                 genIntent = Intent.parseUri(intentSchemeUri, Intent.URI_INTENT_SCHEME);
   1233                 assertEqualsIntent("Explicitly converting " + intentSchemeUri + " to Intent",
   1234                         intent, genIntent);
   1235             } catch (URISyntaxException e) {
   1236                 fail("Failure parsing " + intentSchemeUri + ": " + e);
   1237             }
   1238             String genUri = intent.toUri(Intent.URI_INTENT_SCHEME);
   1239             assertEquals("Converting " + intent + " to intent: uri",
   1240                     intentSchemeUri, genUri);
   1241         }
   1242         if (androidAppSchemeUri != null) {
   1243             try {
   1244                 Intent genIntent = Intent.parseUri(androidAppSchemeUri, 0);
   1245                 assertEqualsIntent("Implicitly converting " + androidAppSchemeUri + " to Intent",
   1246                         intent, genIntent);
   1247                 genIntent = Intent.parseUri(intentSchemeUri, Intent.URI_ANDROID_APP_SCHEME);
   1248                 assertEqualsIntent("Explicitly converting " + androidAppSchemeUri + " to Intent",
   1249                         intent, genIntent);
   1250             } catch (URISyntaxException e) {
   1251                 fail("Failure parsing " + androidAppSchemeUri + ": " + e);
   1252             }
   1253             String genUri = intent.toUri(Intent.URI_ANDROID_APP_SCHEME);
   1254             assertEquals("Converting " + intent + " to android-app: uri",
   1255                     androidAppSchemeUri, genUri);
   1256         }
   1257     }
   1258 
   1259     public void testAccessFlags() {
   1260         int expected = 1;
   1261         mIntent.setFlags(expected);
   1262         assertEquals(expected, mIntent.getFlags());
   1263     }
   1264 
   1265     public void testCreateChooser() {
   1266         Intent target = Intent.createChooser(mIntent, null);
   1267         assertEquals(Intent.ACTION_CHOOSER, target.getAction());
   1268         Intent returnIntent = (Intent) target.getParcelableExtra(Intent.EXTRA_INTENT);
   1269         assertEquals(mIntent.toString(), returnIntent.toString());
   1270         assertEquals(mIntent.toURI(), returnIntent.toURI());
   1271         assertNull(returnIntent.getStringExtra(Intent.EXTRA_INTENT));
   1272         final String title = "title String";
   1273         target = Intent.createChooser(mIntent, title);
   1274         assertEquals(title, target.getStringExtra(Intent.EXTRA_TITLE));
   1275     }
   1276 
   1277     public void testGetFloatArrayExtra() {
   1278         final float[] expected = { 1f, 2f, 3f };
   1279         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1280         assertEquals(expected, mIntent.getFloatArrayExtra(TEST_EXTRA_NAME));
   1281     }
   1282 
   1283     public void testSetDataAndType() {
   1284         mIntent.setDataAndType(TEST_URI, TEST_TYPE);
   1285         assertEquals(TEST_URI, mIntent.getData());
   1286         assertEquals(TEST_TYPE, mIntent.getType());
   1287     }
   1288 
   1289     public void testSetData() {
   1290         mIntent.setData(TEST_URI);
   1291         assertEquals(TEST_URI, mIntent.getData());
   1292         assertNull(mIntent.getType());
   1293 
   1294         mIntent.setType(TEST_TYPE);
   1295         mIntent.setData(TEST_URI);
   1296         assertEquals(TEST_URI, mIntent.getData());
   1297         assertNull(mIntent.getType());
   1298     }
   1299 
   1300     public void testSetType() {
   1301         mIntent.setType(TEST_TYPE);
   1302         assertEquals(TEST_TYPE, mIntent.getType());
   1303         assertNull(mIntent.getData());
   1304 
   1305         mIntent.setData(TEST_URI);
   1306         mIntent.setType(TEST_TYPE);
   1307         assertEquals(TEST_TYPE, mIntent.getType());
   1308         assertNull(mIntent.getData());
   1309     }
   1310 
   1311     public void testGetStringExtra() {
   1312         final String expected = "testString";
   1313         assertNull(mIntent.getStringExtra(TEST_EXTRA_NAME));
   1314         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1315         assertEquals(expected, mIntent.getStringExtra(TEST_EXTRA_NAME));
   1316     }
   1317 
   1318     /**
   1319      * Test that fillIn has no effect when no fields are set.
   1320      */
   1321     public void testFillIn_blank() {
   1322         Intent sourceIntent = new Intent();
   1323         Intent destIntent = new Intent();
   1324         assertEquals(0, destIntent.fillIn(sourceIntent, Intent.FILL_IN_ACTION));
   1325         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1326         assertNull(destIntent.getAction());
   1327     }
   1328 
   1329     /**
   1330      * Test that fillIn copies the action field.
   1331      */
   1332     public void testFillIn_action() {
   1333         Intent sourceIntent = new Intent();
   1334         Intent destIntent = new Intent();
   1335         // test action copied when null
   1336         sourceIntent.setAction(TEST_ACTION);
   1337         assertEquals(Intent.FILL_IN_ACTION, destIntent.fillIn(sourceIntent, 0));
   1338         assertEquals(TEST_ACTION, destIntent.getAction());
   1339     }
   1340 
   1341     /**
   1342      * Test that fillIn does not copy action when its already set in target Intent.
   1343      */
   1344     public void testFillIn_actionSet() {
   1345         Intent sourceIntent = new Intent();
   1346         Intent destIntent = new Intent();
   1347         final String newAction = "foo";
   1348         sourceIntent = new Intent();
   1349         sourceIntent.setAction(newAction);
   1350         destIntent.setAction(TEST_ACTION);
   1351 
   1352         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1353         assertEquals(TEST_ACTION, destIntent.getAction());
   1354     }
   1355 
   1356     /**
   1357      * Test that fillIn copies action when {@link Intent#FILL_IN_ACTION} flag is set.
   1358      */
   1359     public void testFillIn_actionOverride() {
   1360         Intent sourceIntent = new Intent();
   1361         Intent destIntent = new Intent();
   1362         final String newAction = "foo";
   1363         sourceIntent = new Intent();
   1364         sourceIntent.setAction(newAction);
   1365         destIntent.setAction(TEST_ACTION);
   1366 
   1367         assertEquals(Intent.FILL_IN_ACTION, destIntent.fillIn(sourceIntent, Intent.FILL_IN_ACTION));
   1368         assertEquals(newAction, destIntent.getAction());
   1369     }
   1370 
   1371     /**
   1372      * Test that fillIn copies data.
   1373      */
   1374     public void testFillIn_data() {
   1375         Intent sourceIntent = new Intent();
   1376         Intent destIntent = new Intent();
   1377         sourceIntent.setData(TEST_URI);
   1378         assertEquals(Intent.FILL_IN_DATA, destIntent.fillIn(sourceIntent, 0));
   1379         assertEquals(TEST_URI, destIntent.getData());
   1380     }
   1381 
   1382     /**
   1383      * Test that fillIn does not copy data when already its already set in target Intent.
   1384      */
   1385     public void testFillIn_dataSet() {
   1386         Intent sourceIntent = new Intent();
   1387         Intent destIntent = new Intent();
   1388         sourceIntent.setData(TEST_URI);
   1389         destIntent.setData(ANOTHER_TEST_URI);
   1390         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1391         assertEquals(ANOTHER_TEST_URI, destIntent.getData());
   1392     }
   1393 
   1394     /**
   1395      * Test that fillIn overrides data when {@link Intent#FILL_IN_DATA} flag is set.
   1396      */
   1397     public void testFillIn_dataOverride() {
   1398         Intent sourceIntent = new Intent();
   1399         Intent destIntent = new Intent();
   1400         sourceIntent.setData(TEST_URI);
   1401         destIntent.setData(ANOTHER_TEST_URI);
   1402         assertEquals(Intent.FILL_IN_DATA, destIntent.fillIn(sourceIntent, Intent.FILL_IN_DATA));
   1403         assertEquals(TEST_URI, destIntent.getData());
   1404     }
   1405 
   1406     /**
   1407      * Test that fillIn copies data type.
   1408      */
   1409     public void testFillIn_dataType() {
   1410         Intent sourceIntent = new Intent();
   1411         Intent destIntent = new Intent();
   1412         sourceIntent.setType(TEST_TYPE);
   1413         assertEquals(Intent.FILL_IN_DATA, destIntent.fillIn(sourceIntent, 0));
   1414         assertEquals(TEST_TYPE, destIntent.getType());
   1415     }
   1416 
   1417     /**
   1418      * Test that fillIn does not copy data type when already its already set in target Intent.
   1419      */
   1420     public void testFillIn_dataTypeSet() {
   1421         Intent sourceIntent = new Intent();
   1422         Intent destIntent = new Intent();
   1423         sourceIntent.setType(TEST_TYPE);
   1424         destIntent.setType(ANOTHER_TEST_TYPE);
   1425         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1426         assertEquals(ANOTHER_TEST_TYPE, destIntent.getType());
   1427     }
   1428 
   1429     /**
   1430      * Test that fillIn overrides data type when {@link Intent#FILL_IN_DATA} flag is set.
   1431      */
   1432     public void testFillIn_dataTypeOverride() {
   1433         Intent sourceIntent = new Intent();
   1434         Intent destIntent = new Intent();
   1435         sourceIntent.setType(TEST_TYPE);
   1436         destIntent.setType(ANOTHER_TEST_TYPE);
   1437         assertEquals(Intent.FILL_IN_DATA, destIntent.fillIn(sourceIntent, Intent.FILL_IN_DATA));
   1438         assertEquals(TEST_TYPE, destIntent.getType());
   1439     }
   1440 
   1441     /**
   1442      * Test component is not copied by fillIn method when {@link Intent#FILL_IN_COMPONENT} flag is
   1443      * not set.
   1444      */
   1445     public void testFillIn_componentNoCopy() {
   1446         Intent sourceIntent = new Intent();
   1447         Intent destIntent = new Intent();
   1448         sourceIntent.setComponent(mComponentName);
   1449         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1450         assertEquals(null, destIntent.getComponent());
   1451     }
   1452 
   1453     /**
   1454      * Test that fillIn copies component when {@link Intent#FILL_IN_COMPONENT} flag is set.
   1455      */
   1456     public void testFillIn_componentOverride() {
   1457         Intent sourceIntent = new Intent();
   1458         Intent destIntent = new Intent();
   1459         sourceIntent.setComponent(mComponentName);
   1460         destIntent.setComponent(mAnotherComponentName);
   1461         assertEquals(Intent.FILL_IN_COMPONENT, destIntent.fillIn(sourceIntent,
   1462                 Intent.FILL_IN_COMPONENT));
   1463         assertEquals(mComponentName, destIntent.getComponent());
   1464     }
   1465 
   1466     /**
   1467      * Test that fillIn copies categories.
   1468      */
   1469     public void testFillIn_category() {
   1470         Intent sourceIntent = new Intent();
   1471         Intent destIntent = new Intent();
   1472         // add two categories to ensure all categories are copied
   1473         sourceIntent.addCategory(TEST_CATEGORY);
   1474         sourceIntent.addCategory(ANOTHER_TEST_CATEGORY);
   1475         assertEquals(Intent.FILL_IN_CATEGORIES, destIntent.fillIn(sourceIntent, 0));
   1476         assertEquals(2, destIntent.getCategories().size());
   1477         assertTrue(destIntent.getCategories().contains(TEST_CATEGORY));
   1478         assertTrue(destIntent.getCategories().contains(ANOTHER_TEST_CATEGORY));
   1479     }
   1480 
   1481     /**
   1482      * Test fillIn does not copy categories by default when already set.
   1483      */
   1484     public void testFillIn_categorySet() {
   1485         Intent sourceIntent = new Intent();
   1486         Intent destIntent = new Intent();
   1487         sourceIntent = new Intent();
   1488         sourceIntent.addCategory(TEST_CATEGORY);
   1489         destIntent.addCategory(ANOTHER_TEST_CATEGORY);
   1490 
   1491         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1492         assertEquals(1, destIntent.getCategories().size());
   1493         assertTrue(destIntent.getCategories().contains(ANOTHER_TEST_CATEGORY));
   1494         assertFalse(destIntent.getCategories().contains(TEST_CATEGORY));
   1495     }
   1496 
   1497     /**
   1498      * Test that fillIn adds categories when {@link Intent#FILL_IN_CATEGORIES} flag is set.
   1499      */
   1500     public void testFillIn_categoryOverride() {
   1501         Intent sourceIntent = new Intent();
   1502         Intent destIntent = new Intent();
   1503         sourceIntent = new Intent();
   1504         sourceIntent.addCategory(TEST_CATEGORY);
   1505         destIntent.addCategory(ANOTHER_TEST_CATEGORY);
   1506 
   1507         assertEquals(Intent.FILL_IN_CATEGORIES, destIntent.fillIn(sourceIntent, Intent.FILL_IN_CATEGORIES));
   1508         assertEquals(1, destIntent.getCategories().size());
   1509         assertFalse(destIntent.getCategories().contains(ANOTHER_TEST_CATEGORY));
   1510         assertTrue(destIntent.getCategories().contains(TEST_CATEGORY));
   1511     }
   1512 
   1513     /**
   1514      * Test fillIn copies package.
   1515      */
   1516     public void testFillIn_package() {
   1517         Intent sourceIntent = new Intent();
   1518         Intent destIntent = new Intent();
   1519         sourceIntent.setPackage(TEST_PACKAGE);
   1520         assertEquals(Intent.FILL_IN_PACKAGE, destIntent.fillIn(sourceIntent, 0));
   1521         assertEquals(TEST_PACKAGE, destIntent.getPackage());
   1522     }
   1523 
   1524     /**
   1525      * Test fillIn does not copy package by default when already set.
   1526      */
   1527     public void testFillIn_packageSet() {
   1528         Intent sourceIntent = new Intent();
   1529         Intent destIntent = new Intent();
   1530         sourceIntent.setPackage(TEST_PACKAGE);
   1531         destIntent.setPackage(ANOTHER_TEST_PACKAGE);
   1532         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1533         assertEquals(ANOTHER_TEST_PACKAGE, destIntent.getPackage());
   1534     }
   1535 
   1536     /**
   1537      * Test that fillIn overrides package when {@link Intent#FILL_IN_PACKAGE} flag is set.
   1538      */
   1539     public void testFillIn_packageOverride() {
   1540         Intent sourceIntent = new Intent();
   1541         Intent destIntent = new Intent();
   1542         sourceIntent.setPackage(TEST_PACKAGE);
   1543         destIntent.setPackage(ANOTHER_TEST_PACKAGE);
   1544         assertEquals(Intent.FILL_IN_PACKAGE, destIntent.fillIn(sourceIntent, Intent.FILL_IN_PACKAGE));
   1545         assertEquals(TEST_PACKAGE, destIntent.getPackage());
   1546     }
   1547 
   1548     /**
   1549      * Test that fillIn copies extras.
   1550      */
   1551     public void testFillIn_extras() {
   1552         Intent sourceIntent = new Intent();
   1553         Intent destIntent = new Intent();
   1554         final Bundle bundle = new Bundle();
   1555         bundle.putBoolean(TEST_EXTRA_NAME, true);
   1556         sourceIntent.putExtras(bundle);
   1557         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1558         assertTrue(destIntent.getExtras().getBoolean(TEST_EXTRA_NAME));
   1559     }
   1560 
   1561     public void testGetExtras() {
   1562         assertNull(mIntent.getExtras());
   1563         final String expected = "testString";
   1564         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1565         assertNotNull(mIntent.getExtras());
   1566         assertEquals(expected, mIntent.getExtras().getString(TEST_EXTRA_NAME));
   1567     }
   1568 
   1569     public void testGetBooleanExtra() {
   1570         assertFalse(mIntent.getBooleanExtra(TEST_EXTRA_NAME, false));
   1571         mIntent.putExtra(TEST_EXTRA_NAME, true);
   1572         assertTrue(mIntent.getBooleanExtra(TEST_EXTRA_NAME, false));
   1573         mIntent.putExtra(TEST_EXTRA_NAME, false);
   1574         assertFalse(mIntent.getBooleanExtra(TEST_EXTRA_NAME, false));
   1575     }
   1576 
   1577     public void testGetFloatExtra() {
   1578         float expected = 2f;
   1579         assertEquals(1f, mIntent.getFloatExtra(TEST_EXTRA_NAME, 1f));
   1580         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1581         assertEquals(expected, mIntent.getFloatExtra(TEST_EXTRA_NAME, 1f));
   1582     }
   1583 
   1584     public void testGetShortArrayExtra() {
   1585         final short[] expected = { 1, 2, 3 };
   1586         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1587         assertEquals(expected, mIntent.getShortArrayExtra(TEST_EXTRA_NAME));
   1588     }
   1589 
   1590     public void testGetStringArrayExtra() {
   1591         final String[] expected = { "1d", "2d", "3d" };
   1592         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1593         assertEquals(expected, mIntent.getStringArrayExtra(TEST_EXTRA_NAME));
   1594     }
   1595 
   1596     public void testGetCharSequenceArrayExtra() {
   1597         final String[] expected = { "1d", "2d", "3d" };
   1598         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1599         assertEquals(expected, mIntent.getCharSequenceArrayExtra(TEST_EXTRA_NAME));
   1600     }
   1601 
   1602     public void testGetByteArrayExtra() {
   1603         final byte[] expected = TEST_ACTION.getBytes();
   1604         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1605         assertEquals(expected, mIntent.getByteArrayExtra(TEST_EXTRA_NAME));
   1606     }
   1607 
   1608     public void testHasFileDescriptors() {
   1609         Bundle bundle = mIntent.getExtras();
   1610         assertEquals(bundle != null && bundle.hasFileDescriptors(), mIntent.hasFileDescriptors());
   1611         final byte[] expected = TEST_ACTION.getBytes();
   1612         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1613         bundle = mIntent.getExtras();
   1614         assertEquals(bundle != null && bundle.hasFileDescriptors(), mIntent.hasFileDescriptors());
   1615     }
   1616 
   1617     public void testGetBooleanArrayExtra() {
   1618         final boolean[] expected = { true, true, false };
   1619         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1620         assertEquals(expected, mIntent.getBooleanArrayExtra(TEST_EXTRA_NAME));
   1621     }
   1622 
   1623     public void testGetLongExtra() {
   1624         final long expected = 2l;
   1625         assertEquals(1l, mIntent.getLongExtra(TEST_EXTRA_NAME, 1l));
   1626         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1627         assertEquals(expected, mIntent.getLongExtra(TEST_EXTRA_NAME, 1l));
   1628     }
   1629 
   1630     public void testRemoveCategory() {
   1631         assertNull(mIntent.getCategories());
   1632         mIntent.addCategory(TEST_CATEGORY);
   1633         assertNotNull(mIntent.getCategories());
   1634         assertEquals(1, mIntent.getCategories().size());
   1635         assertEquals(TEST_CATEGORY, (String) (mIntent.getCategories().toArray()[0]));
   1636         mIntent.removeCategory(TEST_CATEGORY);
   1637         assertFalse(mIntent.hasCategory(TEST_CATEGORY));
   1638     }
   1639 
   1640     public void testFilterEquals() {
   1641         assertFalse(mIntent.filterEquals(null));
   1642 
   1643         Intent target = new Intent();
   1644         assertTrue(mIntent.filterEquals(target));
   1645 
   1646         target.setAction(TEST_ACTION);
   1647         assertFalse(mIntent.filterEquals(target));
   1648         mIntent.setAction(TEST_ACTION + "test");
   1649         assertFalse(mIntent.filterEquals(target));
   1650         mIntent.setAction(null);
   1651         assertFalse(mIntent.filterEquals(target));
   1652         mIntent.setAction(TEST_ACTION);
   1653         assertTrue(mIntent.filterEquals(target));
   1654 
   1655         target.setData(TEST_URI);
   1656         assertFalse(mIntent.filterEquals(target));
   1657         mIntent.setData(Uri.parse("myURI"));
   1658         assertFalse(mIntent.filterEquals(target));
   1659         mIntent.setData(null);
   1660         assertFalse(mIntent.filterEquals(target));
   1661         mIntent.setData(TEST_URI);
   1662         assertTrue(mIntent.filterEquals(target));
   1663 
   1664         target.setType(TEST_TYPE);
   1665         assertFalse(mIntent.filterEquals(target));
   1666         mIntent.setType(TEST_TYPE + "test");
   1667         assertFalse(mIntent.filterEquals(target));
   1668         mIntent.setType(null);
   1669         assertFalse(mIntent.filterEquals(target));
   1670         mIntent.setType(TEST_TYPE);
   1671         assertTrue(mIntent.filterEquals(target));
   1672 
   1673         target.setComponent(mComponentName);
   1674         assertFalse(mIntent.filterEquals(target));
   1675         mIntent.setComponent(new ComponentName(mContext, MockReceiver.class));
   1676         assertFalse(mIntent.filterEquals(target));
   1677         mIntent.setComponent(null);
   1678         assertFalse(mIntent.filterEquals(target));
   1679         mIntent.setComponent(mComponentName);
   1680         assertTrue(mIntent.filterEquals(target));
   1681 
   1682         target.addCategory(TEST_CATEGORY);
   1683         assertFalse(mIntent.filterEquals(target));
   1684         mIntent.addCategory(TEST_CATEGORY + "test");
   1685         assertFalse(mIntent.filterEquals(target));
   1686         mIntent.addCategory(TEST_CATEGORY);
   1687         assertFalse(mIntent.filterEquals(target));
   1688     }
   1689 
   1690     public void testPutExtras1() {
   1691         final Intent intent = new Intent();
   1692         mIntent.putExtras(intent);
   1693         assertEquals(intent.getExtras(), mIntent.getExtras());
   1694         intent.putExtra("test2", true);
   1695         mIntent.putExtras(intent);
   1696         assertEquals(intent.getExtras().toString(), mIntent.getExtras().toString());
   1697     }
   1698 
   1699     public void testPutExtras2() {
   1700         final Bundle bundle = new Bundle();
   1701         mIntent.putExtras(bundle);
   1702         assertEquals(0, mIntent.getExtras().size());
   1703         String expected = "testString";
   1704         bundle.putString(TEST_EXTRA_NAME, expected);
   1705         mIntent.putExtras(bundle);
   1706         assertEquals(1, mIntent.getExtras().size());
   1707         assertEquals(expected, mIntent.getExtras().getString(TEST_EXTRA_NAME));
   1708         mIntent.putExtra(TEST_EXTRA_NAME, bundle);
   1709         assertEquals(bundle, mIntent.getBundleExtra(TEST_EXTRA_NAME));
   1710     }
   1711 
   1712     public void testGetByteExtra() {
   1713         final byte expected = Byte.valueOf("1");
   1714         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1715         assertEquals(expected, mIntent.getByteExtra(TEST_EXTRA_NAME, Byte.valueOf("1")));
   1716     }
   1717 
   1718     public void testGetSerializableExtra() {
   1719         TestSerializable expected = new TestSerializable();
   1720         expected.Name = "testName";
   1721         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1722         assertEquals(expected, mIntent.getSerializableExtra(TEST_EXTRA_NAME));
   1723         TestSerializable target = (TestSerializable) mIntent.getSerializableExtra(TEST_EXTRA_NAME);
   1724         assertEquals(expected.Name, target.Name);
   1725     }
   1726 
   1727     public void testReplaceExtras() {
   1728         Bundle extras = new Bundle();
   1729         String bundleKey = "testKey";
   1730         String bundleValue = "testValue";
   1731         extras.putString(bundleKey, bundleValue);
   1732 
   1733         Intent intent = mIntent.replaceExtras(extras);
   1734         assertSame(mIntent, intent);
   1735         String actualValue = intent.getExtras().getString(bundleKey);
   1736         assertEquals(bundleValue, actualValue);
   1737 
   1738         Intent src = new Intent();
   1739         String intentName = "srcName";
   1740         String intentValue = "srcValue";
   1741         src.putExtra(intentName, intentValue);
   1742 
   1743         intent = mIntent.replaceExtras(src);
   1744         assertSame(mIntent, intent);
   1745         actualValue = intent.getExtras().getString(intentName);
   1746         assertEquals(intentValue, actualValue);
   1747     }
   1748 
   1749     public void testNormalizeMimeType() {
   1750         assertEquals(null, Intent.normalizeMimeType(null));
   1751         assertEquals("text/plain", Intent.normalizeMimeType("text/plain; charset=UTF-8"));
   1752         assertEquals("text/x-vcard", Intent.normalizeMimeType("text/x-vCard"));
   1753         assertEquals("foo/bar", Intent.normalizeMimeType("   foo/bar    "));
   1754     }
   1755 
   1756     private static class TestSerializable implements Serializable {
   1757         static final long serialVersionUID = 1l;
   1758         public String Name;
   1759     }
   1760 }
   1761