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         checkIntentUri(
   1152                 "intent://example.org/db?123#Intent;scheme=z39.50r;end",
   1153                 null,
   1154                 new Intent().setAction(Intent.ACTION_VIEW)
   1155                         .setData(Uri.parse("z39.50r://example.org/db?123")));
   1156     }
   1157 
   1158     private boolean compareIntents(Intent expected, Intent actual) {
   1159         if (!Objects.equals(expected.getAction(), actual.getAction())) {
   1160             return false;
   1161         }
   1162         if (!Objects.equals(expected.getData(), actual.getData())) {
   1163             return false;
   1164         }
   1165         if (!Objects.equals(expected.getType(), actual.getType())) {
   1166             return false;
   1167         }
   1168         if (!Objects.equals(expected.getPackage(), actual.getPackage())) {
   1169             return false;
   1170         }
   1171         if (!Objects.equals(expected.getComponent(), actual.getComponent())) {
   1172             return false;
   1173         }
   1174         if (expected.getFlags() != actual.getFlags()) {
   1175             return false;
   1176         }
   1177         Set<String> expectedCat = expected.getCategories();
   1178         Set<String> actualCat = actual.getCategories();
   1179         if (expectedCat != actualCat) {
   1180             if (expectedCat == null || actualCat == null) {
   1181                 return false;
   1182             }
   1183             for (String cat : expectedCat) {
   1184                 if (!actual.hasCategory(cat)) {
   1185                     return false;
   1186                 }
   1187             }
   1188             for (String cat : actualCat) {
   1189                 if (!expected.hasCategory(cat)) {
   1190                     return false;
   1191                 }
   1192             }
   1193         }
   1194         Bundle extras1 = expected.getExtras();
   1195         Bundle extras2 = actual.getExtras();
   1196         if (extras1 != extras2) {
   1197             if (extras1 == null || extras2 == null) {
   1198                 return false;
   1199             }
   1200             for (String key : extras1.keySet()) {
   1201                 if (!Objects.equals(extras1.get(key), extras2.get(key))) {
   1202                     return false;
   1203                 }
   1204             }
   1205             for (String key : extras2.keySet()) {
   1206                 if (!Objects.equals(extras1.get(key), extras2.get(key))) {
   1207                     return false;
   1208                 }
   1209             }
   1210         }
   1211         return true;
   1212     }
   1213 
   1214     private void assertEqualsIntent(String msg, Intent expected, Intent actual) {
   1215         if (!compareIntents(expected, actual)) {
   1216             failNotEquals(msg, expected, actual);
   1217         }
   1218         Intent expectedSel = expected.getSelector();
   1219         Intent actualSel = actual.getSelector();
   1220         if (expectedSel != actualSel) {
   1221             if (expectedSel == null || actualSel == null) {
   1222                 failNotEquals(msg, expected, actual);
   1223             }
   1224             if (!compareIntents(expectedSel, actualSel)) {
   1225                 failNotEquals(msg, expected, actual);
   1226             }
   1227         }
   1228     }
   1229 
   1230     private void checkIntentUri(String intentSchemeUri, String androidAppSchemeUri, Intent intent) {
   1231         if (intentSchemeUri != null) {
   1232             try {
   1233                 Intent genIntent = Intent.parseUri(intentSchemeUri, 0);
   1234                 assertEqualsIntent("Implicitly converting " + intentSchemeUri + " to Intent",
   1235                         intent, genIntent);
   1236                 genIntent = Intent.parseUri(intentSchemeUri, Intent.URI_INTENT_SCHEME);
   1237                 assertEqualsIntent("Explicitly converting " + intentSchemeUri + " to Intent",
   1238                         intent, genIntent);
   1239             } catch (URISyntaxException e) {
   1240                 fail("Failure parsing " + intentSchemeUri + ": " + e);
   1241             }
   1242             String genUri = intent.toUri(Intent.URI_INTENT_SCHEME);
   1243             assertEquals("Converting " + intent + " to intent: uri",
   1244                     intentSchemeUri, genUri);
   1245         }
   1246         if (androidAppSchemeUri != null) {
   1247             try {
   1248                 Intent genIntent = Intent.parseUri(androidAppSchemeUri, 0);
   1249                 assertEqualsIntent("Implicitly converting " + androidAppSchemeUri + " to Intent",
   1250                         intent, genIntent);
   1251                 genIntent = Intent.parseUri(intentSchemeUri, Intent.URI_ANDROID_APP_SCHEME);
   1252                 assertEqualsIntent("Explicitly converting " + androidAppSchemeUri + " to Intent",
   1253                         intent, genIntent);
   1254             } catch (URISyntaxException e) {
   1255                 fail("Failure parsing " + androidAppSchemeUri + ": " + e);
   1256             }
   1257             String genUri = intent.toUri(Intent.URI_ANDROID_APP_SCHEME);
   1258             assertEquals("Converting " + intent + " to android-app: uri",
   1259                     androidAppSchemeUri, genUri);
   1260         }
   1261     }
   1262 
   1263     public void testAccessFlags() {
   1264         int expected = 1;
   1265         mIntent.setFlags(expected);
   1266         assertEquals(expected, mIntent.getFlags());
   1267     }
   1268 
   1269     public void testCreateChooser() {
   1270         Intent target = Intent.createChooser(mIntent, null);
   1271         assertEquals(Intent.ACTION_CHOOSER, target.getAction());
   1272         Intent returnIntent = (Intent) target.getParcelableExtra(Intent.EXTRA_INTENT);
   1273         assertEquals(mIntent.toString(), returnIntent.toString());
   1274         assertEquals(mIntent.toURI(), returnIntent.toURI());
   1275         assertNull(returnIntent.getStringExtra(Intent.EXTRA_INTENT));
   1276         final String title = "title String";
   1277         target = Intent.createChooser(mIntent, title);
   1278         assertEquals(title, target.getStringExtra(Intent.EXTRA_TITLE));
   1279     }
   1280 
   1281     public void testGetFloatArrayExtra() {
   1282         final float[] expected = { 1f, 2f, 3f };
   1283         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1284         assertEquals(expected, mIntent.getFloatArrayExtra(TEST_EXTRA_NAME));
   1285     }
   1286 
   1287     public void testSetDataAndType() {
   1288         mIntent.setDataAndType(TEST_URI, TEST_TYPE);
   1289         assertEquals(TEST_URI, mIntent.getData());
   1290         assertEquals(TEST_TYPE, mIntent.getType());
   1291     }
   1292 
   1293     public void testSetData() {
   1294         mIntent.setData(TEST_URI);
   1295         assertEquals(TEST_URI, mIntent.getData());
   1296         assertNull(mIntent.getType());
   1297 
   1298         mIntent.setType(TEST_TYPE);
   1299         mIntent.setData(TEST_URI);
   1300         assertEquals(TEST_URI, mIntent.getData());
   1301         assertNull(mIntent.getType());
   1302     }
   1303 
   1304     public void testSetType() {
   1305         mIntent.setType(TEST_TYPE);
   1306         assertEquals(TEST_TYPE, mIntent.getType());
   1307         assertNull(mIntent.getData());
   1308 
   1309         mIntent.setData(TEST_URI);
   1310         mIntent.setType(TEST_TYPE);
   1311         assertEquals(TEST_TYPE, mIntent.getType());
   1312         assertNull(mIntent.getData());
   1313     }
   1314 
   1315     public void testGetStringExtra() {
   1316         final String expected = "testString";
   1317         assertNull(mIntent.getStringExtra(TEST_EXTRA_NAME));
   1318         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1319         assertEquals(expected, mIntent.getStringExtra(TEST_EXTRA_NAME));
   1320     }
   1321 
   1322     /**
   1323      * Test that fillIn has no effect when no fields are set.
   1324      */
   1325     public void testFillIn_blank() {
   1326         Intent sourceIntent = new Intent();
   1327         Intent destIntent = new Intent();
   1328         assertEquals(0, destIntent.fillIn(sourceIntent, Intent.FILL_IN_ACTION));
   1329         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1330         assertNull(destIntent.getAction());
   1331     }
   1332 
   1333     /**
   1334      * Test that fillIn copies the action field.
   1335      */
   1336     public void testFillIn_action() {
   1337         Intent sourceIntent = new Intent();
   1338         Intent destIntent = new Intent();
   1339         // test action copied when null
   1340         sourceIntent.setAction(TEST_ACTION);
   1341         assertEquals(Intent.FILL_IN_ACTION, destIntent.fillIn(sourceIntent, 0));
   1342         assertEquals(TEST_ACTION, destIntent.getAction());
   1343     }
   1344 
   1345     /**
   1346      * Test that fillIn does not copy action when its already set in target Intent.
   1347      */
   1348     public void testFillIn_actionSet() {
   1349         Intent sourceIntent = new Intent();
   1350         Intent destIntent = new Intent();
   1351         final String newAction = "foo";
   1352         sourceIntent = new Intent();
   1353         sourceIntent.setAction(newAction);
   1354         destIntent.setAction(TEST_ACTION);
   1355 
   1356         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1357         assertEquals(TEST_ACTION, destIntent.getAction());
   1358     }
   1359 
   1360     /**
   1361      * Test that fillIn copies action when {@link Intent#FILL_IN_ACTION} flag is set.
   1362      */
   1363     public void testFillIn_actionOverride() {
   1364         Intent sourceIntent = new Intent();
   1365         Intent destIntent = new Intent();
   1366         final String newAction = "foo";
   1367         sourceIntent = new Intent();
   1368         sourceIntent.setAction(newAction);
   1369         destIntent.setAction(TEST_ACTION);
   1370 
   1371         assertEquals(Intent.FILL_IN_ACTION, destIntent.fillIn(sourceIntent, Intent.FILL_IN_ACTION));
   1372         assertEquals(newAction, destIntent.getAction());
   1373     }
   1374 
   1375     /**
   1376      * Test that fillIn copies data.
   1377      */
   1378     public void testFillIn_data() {
   1379         Intent sourceIntent = new Intent();
   1380         Intent destIntent = new Intent();
   1381         sourceIntent.setData(TEST_URI);
   1382         assertEquals(Intent.FILL_IN_DATA, destIntent.fillIn(sourceIntent, 0));
   1383         assertEquals(TEST_URI, destIntent.getData());
   1384     }
   1385 
   1386     /**
   1387      * Test that fillIn does not copy data when already its already set in target Intent.
   1388      */
   1389     public void testFillIn_dataSet() {
   1390         Intent sourceIntent = new Intent();
   1391         Intent destIntent = new Intent();
   1392         sourceIntent.setData(TEST_URI);
   1393         destIntent.setData(ANOTHER_TEST_URI);
   1394         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1395         assertEquals(ANOTHER_TEST_URI, destIntent.getData());
   1396     }
   1397 
   1398     /**
   1399      * Test that fillIn overrides data when {@link Intent#FILL_IN_DATA} flag is set.
   1400      */
   1401     public void testFillIn_dataOverride() {
   1402         Intent sourceIntent = new Intent();
   1403         Intent destIntent = new Intent();
   1404         sourceIntent.setData(TEST_URI);
   1405         destIntent.setData(ANOTHER_TEST_URI);
   1406         assertEquals(Intent.FILL_IN_DATA, destIntent.fillIn(sourceIntent, Intent.FILL_IN_DATA));
   1407         assertEquals(TEST_URI, destIntent.getData());
   1408     }
   1409 
   1410     /**
   1411      * Test that fillIn copies data type.
   1412      */
   1413     public void testFillIn_dataType() {
   1414         Intent sourceIntent = new Intent();
   1415         Intent destIntent = new Intent();
   1416         sourceIntent.setType(TEST_TYPE);
   1417         assertEquals(Intent.FILL_IN_DATA, destIntent.fillIn(sourceIntent, 0));
   1418         assertEquals(TEST_TYPE, destIntent.getType());
   1419     }
   1420 
   1421     /**
   1422      * Test that fillIn does not copy data type when already its already set in target Intent.
   1423      */
   1424     public void testFillIn_dataTypeSet() {
   1425         Intent sourceIntent = new Intent();
   1426         Intent destIntent = new Intent();
   1427         sourceIntent.setType(TEST_TYPE);
   1428         destIntent.setType(ANOTHER_TEST_TYPE);
   1429         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1430         assertEquals(ANOTHER_TEST_TYPE, destIntent.getType());
   1431     }
   1432 
   1433     /**
   1434      * Test that fillIn overrides data type when {@link Intent#FILL_IN_DATA} flag is set.
   1435      */
   1436     public void testFillIn_dataTypeOverride() {
   1437         Intent sourceIntent = new Intent();
   1438         Intent destIntent = new Intent();
   1439         sourceIntent.setType(TEST_TYPE);
   1440         destIntent.setType(ANOTHER_TEST_TYPE);
   1441         assertEquals(Intent.FILL_IN_DATA, destIntent.fillIn(sourceIntent, Intent.FILL_IN_DATA));
   1442         assertEquals(TEST_TYPE, destIntent.getType());
   1443     }
   1444 
   1445     /**
   1446      * Test component is not copied by fillIn method when {@link Intent#FILL_IN_COMPONENT} flag is
   1447      * not set.
   1448      */
   1449     public void testFillIn_componentNoCopy() {
   1450         Intent sourceIntent = new Intent();
   1451         Intent destIntent = new Intent();
   1452         sourceIntent.setComponent(mComponentName);
   1453         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1454         assertEquals(null, destIntent.getComponent());
   1455     }
   1456 
   1457     /**
   1458      * Test that fillIn copies component when {@link Intent#FILL_IN_COMPONENT} flag is set.
   1459      */
   1460     public void testFillIn_componentOverride() {
   1461         Intent sourceIntent = new Intent();
   1462         Intent destIntent = new Intent();
   1463         sourceIntent.setComponent(mComponentName);
   1464         destIntent.setComponent(mAnotherComponentName);
   1465         assertEquals(Intent.FILL_IN_COMPONENT, destIntent.fillIn(sourceIntent,
   1466                 Intent.FILL_IN_COMPONENT));
   1467         assertEquals(mComponentName, destIntent.getComponent());
   1468     }
   1469 
   1470     /**
   1471      * Test that fillIn copies categories.
   1472      */
   1473     public void testFillIn_category() {
   1474         Intent sourceIntent = new Intent();
   1475         Intent destIntent = new Intent();
   1476         // add two categories to ensure all categories are copied
   1477         sourceIntent.addCategory(TEST_CATEGORY);
   1478         sourceIntent.addCategory(ANOTHER_TEST_CATEGORY);
   1479         assertEquals(Intent.FILL_IN_CATEGORIES, destIntent.fillIn(sourceIntent, 0));
   1480         assertEquals(2, destIntent.getCategories().size());
   1481         assertTrue(destIntent.getCategories().contains(TEST_CATEGORY));
   1482         assertTrue(destIntent.getCategories().contains(ANOTHER_TEST_CATEGORY));
   1483     }
   1484 
   1485     /**
   1486      * Test fillIn does not copy categories by default when already set.
   1487      */
   1488     public void testFillIn_categorySet() {
   1489         Intent sourceIntent = new Intent();
   1490         Intent destIntent = new Intent();
   1491         sourceIntent = new Intent();
   1492         sourceIntent.addCategory(TEST_CATEGORY);
   1493         destIntent.addCategory(ANOTHER_TEST_CATEGORY);
   1494 
   1495         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1496         assertEquals(1, destIntent.getCategories().size());
   1497         assertTrue(destIntent.getCategories().contains(ANOTHER_TEST_CATEGORY));
   1498         assertFalse(destIntent.getCategories().contains(TEST_CATEGORY));
   1499     }
   1500 
   1501     /**
   1502      * Test that fillIn adds categories when {@link Intent#FILL_IN_CATEGORIES} flag is set.
   1503      */
   1504     public void testFillIn_categoryOverride() {
   1505         Intent sourceIntent = new Intent();
   1506         Intent destIntent = new Intent();
   1507         sourceIntent = new Intent();
   1508         sourceIntent.addCategory(TEST_CATEGORY);
   1509         destIntent.addCategory(ANOTHER_TEST_CATEGORY);
   1510 
   1511         assertEquals(Intent.FILL_IN_CATEGORIES, destIntent.fillIn(sourceIntent, Intent.FILL_IN_CATEGORIES));
   1512         assertEquals(1, destIntent.getCategories().size());
   1513         assertFalse(destIntent.getCategories().contains(ANOTHER_TEST_CATEGORY));
   1514         assertTrue(destIntent.getCategories().contains(TEST_CATEGORY));
   1515     }
   1516 
   1517     /**
   1518      * Test fillIn copies package.
   1519      */
   1520     public void testFillIn_package() {
   1521         Intent sourceIntent = new Intent();
   1522         Intent destIntent = new Intent();
   1523         sourceIntent.setPackage(TEST_PACKAGE);
   1524         assertEquals(Intent.FILL_IN_PACKAGE, destIntent.fillIn(sourceIntent, 0));
   1525         assertEquals(TEST_PACKAGE, destIntent.getPackage());
   1526     }
   1527 
   1528     /**
   1529      * Test fillIn does not copy package by default when already set.
   1530      */
   1531     public void testFillIn_packageSet() {
   1532         Intent sourceIntent = new Intent();
   1533         Intent destIntent = new Intent();
   1534         sourceIntent.setPackage(TEST_PACKAGE);
   1535         destIntent.setPackage(ANOTHER_TEST_PACKAGE);
   1536         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1537         assertEquals(ANOTHER_TEST_PACKAGE, destIntent.getPackage());
   1538     }
   1539 
   1540     /**
   1541      * Test that fillIn overrides package when {@link Intent#FILL_IN_PACKAGE} flag is set.
   1542      */
   1543     public void testFillIn_packageOverride() {
   1544         Intent sourceIntent = new Intent();
   1545         Intent destIntent = new Intent();
   1546         sourceIntent.setPackage(TEST_PACKAGE);
   1547         destIntent.setPackage(ANOTHER_TEST_PACKAGE);
   1548         assertEquals(Intent.FILL_IN_PACKAGE, destIntent.fillIn(sourceIntent, Intent.FILL_IN_PACKAGE));
   1549         assertEquals(TEST_PACKAGE, destIntent.getPackage());
   1550     }
   1551 
   1552     /**
   1553      * Test that fillIn copies extras.
   1554      */
   1555     public void testFillIn_extras() {
   1556         Intent sourceIntent = new Intent();
   1557         Intent destIntent = new Intent();
   1558         final Bundle bundle = new Bundle();
   1559         bundle.putBoolean(TEST_EXTRA_NAME, true);
   1560         sourceIntent.putExtras(bundle);
   1561         assertEquals(0, destIntent.fillIn(sourceIntent, 0));
   1562         assertTrue(destIntent.getExtras().getBoolean(TEST_EXTRA_NAME));
   1563     }
   1564 
   1565     public void testGetExtras() {
   1566         assertNull(mIntent.getExtras());
   1567         final String expected = "testString";
   1568         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1569         assertNotNull(mIntent.getExtras());
   1570         assertEquals(expected, mIntent.getExtras().getString(TEST_EXTRA_NAME));
   1571     }
   1572 
   1573     public void testGetBooleanExtra() {
   1574         assertFalse(mIntent.getBooleanExtra(TEST_EXTRA_NAME, false));
   1575         mIntent.putExtra(TEST_EXTRA_NAME, true);
   1576         assertTrue(mIntent.getBooleanExtra(TEST_EXTRA_NAME, false));
   1577         mIntent.putExtra(TEST_EXTRA_NAME, false);
   1578         assertFalse(mIntent.getBooleanExtra(TEST_EXTRA_NAME, false));
   1579     }
   1580 
   1581     public void testGetFloatExtra() {
   1582         float expected = 2f;
   1583         assertEquals(1f, mIntent.getFloatExtra(TEST_EXTRA_NAME, 1f));
   1584         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1585         assertEquals(expected, mIntent.getFloatExtra(TEST_EXTRA_NAME, 1f));
   1586     }
   1587 
   1588     public void testGetShortArrayExtra() {
   1589         final short[] expected = { 1, 2, 3 };
   1590         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1591         assertEquals(expected, mIntent.getShortArrayExtra(TEST_EXTRA_NAME));
   1592     }
   1593 
   1594     public void testGetStringArrayExtra() {
   1595         final String[] expected = { "1d", "2d", "3d" };
   1596         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1597         assertEquals(expected, mIntent.getStringArrayExtra(TEST_EXTRA_NAME));
   1598     }
   1599 
   1600     public void testGetCharSequenceArrayExtra() {
   1601         final String[] expected = { "1d", "2d", "3d" };
   1602         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1603         assertEquals(expected, mIntent.getCharSequenceArrayExtra(TEST_EXTRA_NAME));
   1604     }
   1605 
   1606     public void testGetByteArrayExtra() {
   1607         final byte[] expected = TEST_ACTION.getBytes();
   1608         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1609         assertEquals(expected, mIntent.getByteArrayExtra(TEST_EXTRA_NAME));
   1610     }
   1611 
   1612     public void testHasFileDescriptors() {
   1613         Bundle bundle = mIntent.getExtras();
   1614         assertEquals(bundle != null && bundle.hasFileDescriptors(), mIntent.hasFileDescriptors());
   1615         final byte[] expected = TEST_ACTION.getBytes();
   1616         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1617         bundle = mIntent.getExtras();
   1618         assertEquals(bundle != null && bundle.hasFileDescriptors(), mIntent.hasFileDescriptors());
   1619     }
   1620 
   1621     public void testGetBooleanArrayExtra() {
   1622         final boolean[] expected = { true, true, false };
   1623         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1624         assertEquals(expected, mIntent.getBooleanArrayExtra(TEST_EXTRA_NAME));
   1625     }
   1626 
   1627     public void testGetLongExtra() {
   1628         final long expected = 2l;
   1629         assertEquals(1l, mIntent.getLongExtra(TEST_EXTRA_NAME, 1l));
   1630         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1631         assertEquals(expected, mIntent.getLongExtra(TEST_EXTRA_NAME, 1l));
   1632     }
   1633 
   1634     public void testRemoveCategory() {
   1635         assertNull(mIntent.getCategories());
   1636         mIntent.addCategory(TEST_CATEGORY);
   1637         assertNotNull(mIntent.getCategories());
   1638         assertEquals(1, mIntent.getCategories().size());
   1639         assertEquals(TEST_CATEGORY, (String) (mIntent.getCategories().toArray()[0]));
   1640         mIntent.removeCategory(TEST_CATEGORY);
   1641         assertFalse(mIntent.hasCategory(TEST_CATEGORY));
   1642     }
   1643 
   1644     public void testFilterEquals() {
   1645         assertFalse(mIntent.filterEquals(null));
   1646 
   1647         Intent target = new Intent();
   1648         assertTrue(mIntent.filterEquals(target));
   1649 
   1650         target.setAction(TEST_ACTION);
   1651         assertFalse(mIntent.filterEquals(target));
   1652         mIntent.setAction(TEST_ACTION + "test");
   1653         assertFalse(mIntent.filterEquals(target));
   1654         mIntent.setAction(null);
   1655         assertFalse(mIntent.filterEquals(target));
   1656         mIntent.setAction(TEST_ACTION);
   1657         assertTrue(mIntent.filterEquals(target));
   1658 
   1659         target.setData(TEST_URI);
   1660         assertFalse(mIntent.filterEquals(target));
   1661         mIntent.setData(Uri.parse("myURI"));
   1662         assertFalse(mIntent.filterEquals(target));
   1663         mIntent.setData(null);
   1664         assertFalse(mIntent.filterEquals(target));
   1665         mIntent.setData(TEST_URI);
   1666         assertTrue(mIntent.filterEquals(target));
   1667 
   1668         target.setType(TEST_TYPE);
   1669         assertFalse(mIntent.filterEquals(target));
   1670         mIntent.setType(TEST_TYPE + "test");
   1671         assertFalse(mIntent.filterEquals(target));
   1672         mIntent.setType(null);
   1673         assertFalse(mIntent.filterEquals(target));
   1674         mIntent.setType(TEST_TYPE);
   1675         assertTrue(mIntent.filterEquals(target));
   1676 
   1677         target.setComponent(mComponentName);
   1678         assertFalse(mIntent.filterEquals(target));
   1679         mIntent.setComponent(new ComponentName(mContext, MockReceiver.class));
   1680         assertFalse(mIntent.filterEquals(target));
   1681         mIntent.setComponent(null);
   1682         assertFalse(mIntent.filterEquals(target));
   1683         mIntent.setComponent(mComponentName);
   1684         assertTrue(mIntent.filterEquals(target));
   1685 
   1686         target.addCategory(TEST_CATEGORY);
   1687         assertFalse(mIntent.filterEquals(target));
   1688         mIntent.addCategory(TEST_CATEGORY + "test");
   1689         assertFalse(mIntent.filterEquals(target));
   1690         mIntent.addCategory(TEST_CATEGORY);
   1691         assertFalse(mIntent.filterEquals(target));
   1692     }
   1693 
   1694     public void testPutExtras1() {
   1695         final Intent intent = new Intent();
   1696         mIntent.putExtras(intent);
   1697         assertEquals(intent.getExtras(), mIntent.getExtras());
   1698         intent.putExtra("test2", true);
   1699         mIntent.putExtras(intent);
   1700         assertEquals(intent.getExtras().toString(), mIntent.getExtras().toString());
   1701     }
   1702 
   1703     public void testPutExtras2() {
   1704         final Bundle bundle = new Bundle();
   1705         mIntent.putExtras(bundle);
   1706         assertEquals(0, mIntent.getExtras().size());
   1707         String expected = "testString";
   1708         bundle.putString(TEST_EXTRA_NAME, expected);
   1709         mIntent.putExtras(bundle);
   1710         assertEquals(1, mIntent.getExtras().size());
   1711         assertEquals(expected, mIntent.getExtras().getString(TEST_EXTRA_NAME));
   1712         mIntent.putExtra(TEST_EXTRA_NAME, bundle);
   1713         assertEquals(bundle, mIntent.getBundleExtra(TEST_EXTRA_NAME));
   1714     }
   1715 
   1716     public void testGetByteExtra() {
   1717         final byte expected = Byte.valueOf("1");
   1718         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1719         assertEquals(expected, mIntent.getByteExtra(TEST_EXTRA_NAME, Byte.valueOf("1")));
   1720     }
   1721 
   1722     public void testGetSerializableExtra() {
   1723         TestSerializable expected = new TestSerializable();
   1724         expected.Name = "testName";
   1725         mIntent.putExtra(TEST_EXTRA_NAME, expected);
   1726         assertEquals(expected, mIntent.getSerializableExtra(TEST_EXTRA_NAME));
   1727         TestSerializable target = (TestSerializable) mIntent.getSerializableExtra(TEST_EXTRA_NAME);
   1728         assertEquals(expected.Name, target.Name);
   1729     }
   1730 
   1731     public void testReplaceExtras() {
   1732         Bundle extras = new Bundle();
   1733         String bundleKey = "testKey";
   1734         String bundleValue = "testValue";
   1735         extras.putString(bundleKey, bundleValue);
   1736 
   1737         Intent intent = mIntent.replaceExtras(extras);
   1738         assertSame(mIntent, intent);
   1739         String actualValue = intent.getExtras().getString(bundleKey);
   1740         assertEquals(bundleValue, actualValue);
   1741 
   1742         Intent src = new Intent();
   1743         String intentName = "srcName";
   1744         String intentValue = "srcValue";
   1745         src.putExtra(intentName, intentValue);
   1746 
   1747         intent = mIntent.replaceExtras(src);
   1748         assertSame(mIntent, intent);
   1749         actualValue = intent.getExtras().getString(intentName);
   1750         assertEquals(intentValue, actualValue);
   1751     }
   1752 
   1753     public void testNormalizeMimeType() {
   1754         assertEquals(null, Intent.normalizeMimeType(null));
   1755         assertEquals("text/plain", Intent.normalizeMimeType("text/plain; charset=UTF-8"));
   1756         assertEquals("text/x-vcard", Intent.normalizeMimeType("text/x-vCard"));
   1757         assertEquals("foo/bar", Intent.normalizeMimeType("   foo/bar    "));
   1758     }
   1759 
   1760     public void testRemoveUnsafeExtras() {
   1761         final Intent intent = new Intent();
   1762         final DummyParcelable dummyParcelable = new DummyParcelable();
   1763         intent.removeUnsafeExtras();
   1764         assertNull(intent.getExtras());
   1765 
   1766         // Check that removeUnsafeExtras keeps the same bundle if no changes are made.
   1767         Bundle origExtras = new Bundle();
   1768         origExtras.putString("foo", "bar");
   1769         intent.replaceExtras(origExtras);
   1770         intent.removeUnsafeExtras();
   1771         Bundle newExtras = intent.getExtras();
   1772         assertEquals(1, newExtras.size());
   1773         assertEquals("bar", newExtras.get("foo"));
   1774 
   1775         // Check that removeUnsafeExtras will strip non-framework parcelables without modifying
   1776         // the original extras bundle.
   1777         origExtras.putParcelable("baddy", dummyParcelable);
   1778         intent.replaceExtras(origExtras);
   1779         intent.removeUnsafeExtras();
   1780         newExtras = intent.getExtras();
   1781         assertEquals(1, newExtras.size());
   1782         assertEquals("bar", newExtras.get("foo"));
   1783         assertEquals(2, origExtras.size());
   1784         assertEquals("bar", origExtras.get("foo"));
   1785         assertSame(dummyParcelable, origExtras.get("baddy"));
   1786 
   1787         // Check that nested bad values will be stripped.
   1788         Bundle origSubExtras = new Bundle();
   1789         origSubExtras.putParcelable("baddy", dummyParcelable);
   1790         origExtras.putBundle("baddy", origSubExtras);
   1791         intent.replaceExtras(origExtras);
   1792         intent.removeUnsafeExtras();
   1793         newExtras = intent.getExtras();
   1794         assertEquals(2, newExtras.size());
   1795         assertEquals("bar", newExtras.get("foo"));
   1796         Bundle newSubExtras = newExtras.getBundle("baddy");
   1797         assertNotSame(origSubExtras, newSubExtras);
   1798         assertEquals(0, newSubExtras.size());
   1799         assertEquals(1, origSubExtras.size());
   1800         assertSame(dummyParcelable, origSubExtras.get("baddy"));
   1801     }
   1802 
   1803     private static class TestSerializable implements Serializable {
   1804         static final long serialVersionUID = 1l;
   1805         public String Name;
   1806     }
   1807 }
   1808