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