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