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 static android.os.PatternMatcher.PATTERN_LITERAL; 20 import static android.os.PatternMatcher.PATTERN_PREFIX; 21 import static android.os.PatternMatcher.PATTERN_SIMPLE_GLOB; 22 23 import java.io.ByteArrayInputStream; 24 import java.io.ByteArrayOutputStream; 25 import java.io.IOException; 26 import java.io.InputStream; 27 import java.util.HashSet; 28 import java.util.Iterator; 29 import java.util.Set; 30 31 import org.kxml2.io.KXmlParser; 32 import org.xmlpull.v1.XmlPullParser; 33 import org.xmlpull.v1.XmlPullParserException; 34 import org.xmlpull.v1.XmlSerializer; 35 36 import android.app.cts.MockActivity; 37 import android.content.ComponentName; 38 import android.content.ContentResolver; 39 import android.content.Intent; 40 import android.content.IntentFilter; 41 import android.content.IntentFilter.AuthorityEntry; 42 import android.content.IntentFilter.MalformedMimeTypeException; 43 import android.content.pm.ActivityInfo; 44 import android.content.pm.PackageManager; 45 import android.content.pm.PackageManager.NameNotFoundException; 46 import android.net.Uri; 47 import android.os.Parcel; 48 import android.os.PatternMatcher; 49 import android.provider.Contacts.People; 50 import android.test.AndroidTestCase; 51 import android.util.Printer; 52 import android.util.StringBuilderPrinter; 53 54 import com.android.internal.util.FastXmlSerializer; 55 56 57 public class IntentFilterTest extends AndroidTestCase { 58 59 private IntentFilter mIntentFilter; 60 private static final String ACTION = "testAction"; 61 private static final String CATEGORY = "testCategory"; 62 private static final String DATA_TYPE = "vnd.android.cursor.dir/person"; 63 private static final String DATA_SCHEME = "testDataSchemes."; 64 private static final String HOST = "testHost"; 65 private static final int PORT = 80; 66 private static final String DATA_PATH = "testDataPath"; 67 private static final Uri URI = People.CONTENT_URI; 68 69 @Override setUp()70 protected void setUp() throws Exception { 71 super.setUp(); 72 mIntentFilter = new IntentFilter(); 73 } 74 testConstructor()75 public void testConstructor() throws MalformedMimeTypeException { 76 77 IntentFilter filter = new IntentFilter(); 78 verifyContent(filter, null, null); 79 80 filter = new IntentFilter(ACTION); 81 verifyContent(filter, ACTION, null); 82 83 final IntentFilter actionTypeFilter = new IntentFilter(ACTION, DATA_TYPE); 84 verifyContent(actionTypeFilter, ACTION, DATA_TYPE); 85 86 filter = new IntentFilter(actionTypeFilter); 87 verifyContent(filter, ACTION, DATA_TYPE); 88 89 final String dataType = "testdataType"; 90 try { 91 new IntentFilter(ACTION, dataType); 92 fail("Should throw MalformedMimeTypeException "); 93 } catch (MalformedMimeTypeException e) { 94 // expected 95 } 96 } 97 98 /** 99 * Assert that the given filter contains the given action and dataType. If 100 * action or dataType are null, assert that the filter has no actions or 101 * dataTypes registered. 102 */ verifyContent(IntentFilter filter, String action, String dataType)103 private void verifyContent(IntentFilter filter, String action, String dataType) { 104 if (action != null) { 105 assertEquals(1, filter.countActions()); 106 assertEquals(action, filter.getAction(0)); 107 } else { 108 assertEquals(0, filter.countActions()); 109 } 110 if (dataType != null) { 111 assertEquals(1, filter.countDataTypes()); 112 assertEquals(dataType, filter.getDataType(0)); 113 } else { 114 assertEquals(0, filter.countDataTypes()); 115 } 116 } 117 testCategories()118 public void testCategories() { 119 for (int i = 0; i < 10; i++) { 120 mIntentFilter.addCategory(CATEGORY + i); 121 } 122 assertEquals(10, mIntentFilter.countCategories()); 123 Iterator<String> iter = mIntentFilter.categoriesIterator(); 124 String actual = null; 125 int i = 0; 126 while (iter.hasNext()) { 127 actual = iter.next(); 128 assertEquals(CATEGORY + i, actual); 129 assertEquals(CATEGORY + i, mIntentFilter.getCategory(i)); 130 assertTrue(mIntentFilter.hasCategory(CATEGORY + i)); 131 assertFalse(mIntentFilter.hasCategory(CATEGORY + i + 10)); 132 i++; 133 } 134 IntentFilter filter = new Match(null, new String[] { "category1" }, null, null, null, null); 135 checkMatches(filter, new MatchCondition[] { 136 new MatchCondition(IntentFilter.MATCH_CATEGORY_EMPTY, null, null, null, null), 137 new MatchCondition(IntentFilter.MATCH_CATEGORY_EMPTY, null, 138 new String[] { "category1" }, null, null), 139 new MatchCondition(IntentFilter.NO_MATCH_CATEGORY, null, 140 new String[] { "category2" }, null, null), 141 new MatchCondition(IntentFilter.NO_MATCH_CATEGORY, null, new String[] { 142 "category1", "category2" }, null, null), }); 143 144 filter = new Match(null, new String[] { "category1", "category2" }, null, null, null, null); 145 checkMatches(filter, new MatchCondition[] { 146 new MatchCondition(IntentFilter.MATCH_CATEGORY_EMPTY, null, null, null, null), 147 new MatchCondition(IntentFilter.MATCH_CATEGORY_EMPTY, null, 148 new String[] { "category1" }, null, null), 149 new MatchCondition(IntentFilter.MATCH_CATEGORY_EMPTY, null, 150 new String[] { "category2" }, null, null), 151 new MatchCondition(IntentFilter.MATCH_CATEGORY_EMPTY, null, new String[] { 152 "category1", "category2" }, null, null), 153 new MatchCondition(IntentFilter.NO_MATCH_CATEGORY, null, 154 new String[] { "category3" }, null, null), 155 new MatchCondition(IntentFilter.NO_MATCH_CATEGORY, null, new String[] { 156 "category1", "category2", "category3" }, null, null), }); 157 } 158 testMimeTypes()159 public void testMimeTypes() throws Exception { 160 IntentFilter filter = new Match(null, null, new String[] { "which1/what1" }, null, null, 161 null); 162 checkMatches(filter, new MatchCondition[] { 163 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, null, null), 164 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which1/what1", 165 null), 166 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which1/*", null), 167 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "*/*", null), 168 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, "which2/what2", null), 169 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, "which2/*", null), 170 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, "which1/what2", null), 171 }); 172 173 filter = new Match(null, null, new String[] { "which1/what1", "which2/what2" }, null, null, 174 null); 175 checkMatches(filter, new MatchCondition[] { 176 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, null, null), 177 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which1/what1", 178 null), 179 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which1/*", null), 180 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "*/*", null), 181 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which2/what2", 182 null), 183 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which2/*", null), 184 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, "which1/what2", null), 185 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, "which3/what3", null), 186 }); 187 188 filter = new Match(null, null, new String[] { "which1/*" }, null, null, null); 189 checkMatches(filter, new MatchCondition[] { 190 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, null, null), 191 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which1/what1", 192 null), 193 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which1/*", null), 194 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "*/*", null), 195 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, "which2/what2", null), 196 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, "which2/*", null), 197 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which1/what2", 198 null), 199 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, "which3/what3", null), 200 }); 201 202 filter = new Match(null, null, new String[] { "*/*" }, null, null, null); 203 checkMatches(filter, new MatchCondition[] { 204 new MatchCondition(IntentFilter.NO_MATCH_TYPE, null, null, null, null), 205 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which1/what1", 206 null), 207 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which1/*", null), 208 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "*/*", null), 209 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which2/what2", 210 null), 211 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which2/*", null), 212 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which1/what2", 213 null), 214 new MatchCondition(IntentFilter.MATCH_CATEGORY_TYPE, null, null, "which3/what3", 215 null), }); 216 } 217 testAccessPriority()218 public void testAccessPriority() { 219 final int expected = 1; 220 mIntentFilter.setPriority(expected); 221 assertEquals(expected, mIntentFilter.getPriority()); 222 } 223 testDataSchemes()224 public void testDataSchemes() { 225 for (int i = 0; i < 10; i++) { 226 mIntentFilter.addDataScheme(DATA_SCHEME + i); 227 } 228 assertEquals(10, mIntentFilter.countDataSchemes()); 229 final Iterator<String> iter = mIntentFilter.schemesIterator(); 230 String actual = null; 231 int i = 0; 232 while (iter.hasNext()) { 233 actual = iter.next(); 234 assertEquals(DATA_SCHEME + i, actual); 235 assertEquals(DATA_SCHEME + i, mIntentFilter.getDataScheme(i)); 236 assertTrue(mIntentFilter.hasDataScheme(DATA_SCHEME + i)); 237 assertFalse(mIntentFilter.hasDataScheme(DATA_SCHEME + i + 10)); 238 i++; 239 } 240 IntentFilter filter = new Match(null, null, null, new String[] { "scheme1" }, null, null); 241 checkMatches(filter, new MatchCondition[] { 242 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 243 new MatchCondition(IntentFilter.MATCH_CATEGORY_SCHEME, null, null, null, 244 "scheme1:foo"), 245 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, "scheme2:foo"), }); 246 247 filter = new Match(null, null, null, new String[] { "scheme1", "scheme2" }, null, null); 248 checkMatches(filter, new MatchCondition[] { 249 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 250 new MatchCondition(IntentFilter.MATCH_CATEGORY_SCHEME, null, null, null, 251 "scheme1:foo"), 252 new MatchCondition(IntentFilter.MATCH_CATEGORY_SCHEME, null, null, null, 253 "scheme2:foo"), 254 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, "scheme3:foo"), }); 255 } 256 testCreate()257 public void testCreate() { 258 IntentFilter filter = IntentFilter.create(ACTION, DATA_TYPE); 259 assertNotNull(filter); 260 verifyContent(filter, ACTION, DATA_TYPE); 261 } 262 testAuthorities()263 public void testAuthorities() { 264 for (int i = 0; i < 10; i++) { 265 mIntentFilter.addDataAuthority(HOST + i, String.valueOf(PORT + i)); 266 } 267 assertEquals(10, mIntentFilter.countDataAuthorities()); 268 269 final Iterator<AuthorityEntry> iter = mIntentFilter.authoritiesIterator(); 270 AuthorityEntry actual = null; 271 int i = 0; 272 while (iter.hasNext()) { 273 actual = iter.next(); 274 assertEquals(HOST + i, actual.getHost()); 275 assertEquals(PORT + i, actual.getPort()); 276 AuthorityEntry ae = new AuthorityEntry(HOST + i, String.valueOf(PORT + i)); 277 assertEquals(ae.getHost(), mIntentFilter.getDataAuthority(i).getHost()); 278 assertEquals(ae.getPort(), mIntentFilter.getDataAuthority(i).getPort()); 279 Uri uri = Uri.parse("http://" + HOST + i + ":" + String.valueOf(PORT + i)); 280 assertTrue(mIntentFilter.hasDataAuthority(uri)); 281 Uri uri2 = Uri.parse("http://" + HOST + i + 10 + ":" + PORT + i + 10); 282 assertFalse(mIntentFilter.hasDataAuthority(uri2)); 283 i++; 284 } 285 IntentFilter filter = new Match(null, null, null, new String[] { "scheme1" }, 286 new String[] { "authority1" }, new String[] { null }); 287 checkMatches(filter, new MatchCondition[] { 288 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 289 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, "scheme1:foo"), 290 new MatchCondition(IntentFilter.MATCH_CATEGORY_HOST, null, null, null, 291 "scheme1://authority1/"), 292 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 293 "scheme1://authority2/"), 294 new MatchCondition(IntentFilter.MATCH_CATEGORY_HOST, null, null, null, 295 "scheme1://authority1:100/"), }); 296 297 filter = new Match(null, null, null, new String[] { "scheme1" }, 298 new String[] { "authority1" }, new String[] { "100" }); 299 checkMatches(filter, new MatchCondition[] { 300 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 301 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, "scheme1:foo"), 302 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 303 "scheme1://authority1/"), 304 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 305 "scheme1://authority2/"), 306 new MatchCondition(IntentFilter.MATCH_CATEGORY_PORT, null, null, null, 307 "scheme1://authority1:100/"), 308 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 309 "scheme1://authority1:200/"), }); 310 311 filter = new Match(null, null, null, new String[] { "scheme1" }, 312 new String[] { "authority1", "authority2" }, new String[] { "100", null }); 313 checkMatches(filter, new MatchCondition[] { 314 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 315 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, "scheme1:foo"), 316 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 317 "scheme1://authority1/"), 318 new MatchCondition(IntentFilter.MATCH_CATEGORY_HOST, null, null, null, 319 "scheme1://authority2/"), 320 new MatchCondition(IntentFilter.MATCH_CATEGORY_PORT, null, null, null, 321 "scheme1://authority1:100/"), 322 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 323 "scheme1://authority1:200/"), }); 324 } 325 testDataTypes()326 public void testDataTypes() throws MalformedMimeTypeException { 327 for (int i = 0; i < 10; i++) { 328 mIntentFilter.addDataType(DATA_TYPE + i); 329 } 330 assertEquals(10, mIntentFilter.countDataTypes()); 331 final Iterator<String> iter = mIntentFilter.typesIterator(); 332 String actual = null; 333 int i = 0; 334 while (iter.hasNext()) { 335 actual = iter.next(); 336 assertEquals(DATA_TYPE + i, actual); 337 assertEquals(DATA_TYPE + i, mIntentFilter.getDataType(i)); 338 assertTrue(mIntentFilter.hasDataType(DATA_TYPE + i)); 339 assertFalse(mIntentFilter.hasDataType(DATA_TYPE + i + 10)); 340 i++; 341 } 342 } 343 testMatchData()344 public void testMatchData() throws MalformedMimeTypeException { 345 int expected = IntentFilter.MATCH_CATEGORY_EMPTY + IntentFilter.MATCH_ADJUSTMENT_NORMAL; 346 assertEquals(expected, mIntentFilter.matchData(null, null, null)); 347 assertEquals(expected, mIntentFilter.matchData(null, DATA_SCHEME, null)); 348 349 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.matchData(null, DATA_SCHEME, URI)); 350 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.matchData(DATA_TYPE, DATA_SCHEME, 351 URI)); 352 353 mIntentFilter.addDataScheme(DATA_SCHEME); 354 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.matchData(DATA_TYPE, 355 "mDataSchemestest", URI)); 356 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.matchData(DATA_TYPE, "", URI)); 357 358 expected = IntentFilter.MATCH_CATEGORY_SCHEME + IntentFilter.MATCH_ADJUSTMENT_NORMAL; 359 assertEquals(expected, mIntentFilter.matchData(null, DATA_SCHEME, URI)); 360 assertEquals(IntentFilter.NO_MATCH_TYPE, mIntentFilter.matchData(DATA_TYPE, DATA_SCHEME, 361 URI)); 362 363 mIntentFilter.addDataType(DATA_TYPE); 364 assertEquals(IntentFilter.MATCH_CATEGORY_TYPE + IntentFilter.MATCH_ADJUSTMENT_NORMAL, 365 mIntentFilter.matchData(DATA_TYPE, DATA_SCHEME, URI)); 366 367 mIntentFilter.addDataAuthority(HOST, String.valueOf(PORT)); 368 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.matchData(null, DATA_SCHEME, URI)); 369 370 final Uri uri = Uri.parse("http://" + HOST + ":" + PORT); 371 mIntentFilter.addDataPath(DATA_PATH, PatternMatcher.PATTERN_LITERAL); 372 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.matchData(null, DATA_SCHEME, uri)); 373 } 374 testActions()375 public void testActions() { 376 for (int i = 0; i < 10; i++) { 377 mIntentFilter.addAction(ACTION + i); 378 } 379 assertEquals(10, mIntentFilter.countActions()); 380 final Iterator<String> iter = mIntentFilter.actionsIterator(); 381 String actual = null; 382 int i = 0; 383 while (iter.hasNext()) { 384 actual = iter.next(); 385 assertEquals(ACTION + i, actual); 386 assertEquals(ACTION + i, mIntentFilter.getAction(i)); 387 assertTrue(mIntentFilter.hasAction(ACTION + i)); 388 assertFalse(mIntentFilter.hasAction(ACTION + i + 10)); 389 assertTrue(mIntentFilter.matchAction(ACTION + i)); 390 assertFalse(mIntentFilter.matchAction(ACTION + i + 10)); 391 i++; 392 } 393 IntentFilter filter = new Match(new String[] { "action1" }, null, null, null, null, null); 394 checkMatches(filter, new MatchCondition[] { 395 new MatchCondition(IntentFilter.MATCH_CATEGORY_EMPTY, null, null, null, null), 396 new MatchCondition(IntentFilter.MATCH_CATEGORY_EMPTY, "action1", null, null, null), 397 new MatchCondition(IntentFilter.NO_MATCH_ACTION, "action2", null, null, null), }); 398 399 filter = new Match(new String[] { "action1", "action2" }, null, null, null, null, null); 400 checkMatches(filter, new MatchCondition[] { 401 new MatchCondition(IntentFilter.MATCH_CATEGORY_EMPTY, null, null, null, null), 402 new MatchCondition(IntentFilter.MATCH_CATEGORY_EMPTY, "action1", null, null, null), 403 new MatchCondition(IntentFilter.MATCH_CATEGORY_EMPTY, "action2", null, null, null), 404 new MatchCondition(IntentFilter.NO_MATCH_ACTION, "action3", null, null, null), }); 405 } 406 testWriteToXml()407 public void testWriteToXml() throws IllegalArgumentException, IllegalStateException, 408 IOException, MalformedMimeTypeException, XmlPullParserException { 409 XmlSerializer xml; 410 ByteArrayOutputStream out; 411 412 xml = new FastXmlSerializer(); 413 out = new ByteArrayOutputStream(); 414 xml.setOutput(out, "utf-8"); 415 mIntentFilter.addAction(ACTION); 416 mIntentFilter.addCategory(CATEGORY); 417 mIntentFilter.addDataAuthority(HOST, String.valueOf(PORT)); 418 mIntentFilter.addDataPath(DATA_PATH, 1); 419 mIntentFilter.addDataScheme(DATA_SCHEME); 420 mIntentFilter.addDataType(DATA_TYPE); 421 mIntentFilter.writeToXml(xml); 422 xml.flush(); 423 final KXmlParser parser = new KXmlParser(); 424 final InputStream in = new ByteArrayInputStream(out.toByteArray()); 425 parser.setInput(in, "utf-8"); 426 final IntentFilter intentFilter = new IntentFilter(); 427 intentFilter.readFromXml(parser); 428 assertEquals(ACTION, intentFilter.getAction(0)); 429 assertEquals(CATEGORY, intentFilter.getCategory(0)); 430 assertEquals(DATA_TYPE, intentFilter.getDataType(0)); 431 assertEquals(DATA_SCHEME, intentFilter.getDataScheme(0)); 432 assertEquals(DATA_PATH, intentFilter.getDataPath(0).getPath()); 433 assertEquals(HOST, intentFilter.getDataAuthority(0).getHost()); 434 assertEquals(PORT, intentFilter.getDataAuthority(0).getPort()); 435 out.close(); 436 } 437 testMatchCategories()438 public void testMatchCategories() { 439 assertNull(mIntentFilter.matchCategories(null)); 440 Set<String> cat = new HashSet<String>(); 441 assertNull(mIntentFilter.matchCategories(cat)); 442 443 final String expected = "mytest"; 444 cat.add(expected); 445 assertEquals(expected, mIntentFilter.matchCategories(cat)); 446 447 cat = new HashSet<String>(); 448 cat.add(CATEGORY); 449 mIntentFilter.addCategory(CATEGORY); 450 assertNull(mIntentFilter.matchCategories(cat)); 451 cat.add(expected); 452 assertEquals(expected, mIntentFilter.matchCategories(cat)); 453 } 454 testMatchDataAuthority()455 public void testMatchDataAuthority() { 456 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.matchDataAuthority(null)); 457 mIntentFilter.addDataAuthority(HOST, String.valueOf(PORT)); 458 final Uri uri = Uri.parse("http://" + HOST + ":" + PORT); 459 assertEquals(IntentFilter.MATCH_CATEGORY_PORT, mIntentFilter.matchDataAuthority(uri)); 460 } 461 testDescribeContents()462 public void testDescribeContents() { 463 assertEquals(0, mIntentFilter.describeContents()); 464 } 465 testReadFromXml()466 public void testReadFromXml() throws NameNotFoundException, XmlPullParserException, IOException { 467 XmlPullParser parser = null; 468 ActivityInfo ai = null; 469 470 final ComponentName mComponentName = new ComponentName(mContext, MockActivity.class); 471 final PackageManager pm = mContext.getPackageManager(); 472 ai = pm.getActivityInfo(mComponentName, PackageManager.GET_META_DATA); 473 474 parser = ai.loadXmlMetaData(pm, "android.app.intent.filter"); 475 476 int type; 477 while ((type = parser.next()) != XmlPullParser.END_DOCUMENT 478 && type != XmlPullParser.START_TAG) { 479 } 480 481 final String nodeName = parser.getName(); 482 483 if (!"intent-filter".equals(nodeName)) { 484 throw new RuntimeException(); 485 } 486 487 mIntentFilter.readFromXml(parser); 488 489 assertEquals("testAction", mIntentFilter.getAction(0)); 490 assertEquals("testCategory", mIntentFilter.getCategory(0)); 491 assertEquals("vnd.android.cursor.dir/person", mIntentFilter.getDataType(0)); 492 assertEquals("testScheme", mIntentFilter.getDataScheme(0)); 493 assertEquals("testHost", mIntentFilter.getDataAuthority(0).getHost()); 494 assertEquals(80, mIntentFilter.getDataAuthority(0).getPort()); 495 496 assertEquals("test", mIntentFilter.getDataPath(0).getPath()); 497 assertEquals("test", mIntentFilter.getDataPath(1).getPath()); 498 assertEquals("test", mIntentFilter.getDataPath(2).getPath()); 499 } 500 testDataPaths()501 public void testDataPaths() { 502 for (int i = 0; i < 10; i++) { 503 mIntentFilter.addDataPath(DATA_PATH + i, PatternMatcher.PATTERN_PREFIX); 504 } 505 assertEquals(10, mIntentFilter.countDataPaths()); 506 Iterator<PatternMatcher> iter = mIntentFilter.pathsIterator(); 507 PatternMatcher actual = null; 508 int i = 0; 509 while (iter.hasNext()) { 510 actual = iter.next(); 511 assertEquals(DATA_PATH + i, actual.getPath()); 512 assertEquals(PatternMatcher.PATTERN_PREFIX, actual.getType()); 513 PatternMatcher p = new PatternMatcher(DATA_PATH + i, PatternMatcher.PATTERN_PREFIX); 514 assertEquals(p.getPath(), mIntentFilter.getDataPath(i).getPath()); 515 assertEquals(p.getType(), mIntentFilter.getDataPath(i).getType()); 516 assertTrue(mIntentFilter.hasDataPath(DATA_PATH + i)); 517 assertTrue(mIntentFilter.hasDataPath(DATA_PATH + i + 10)); 518 i++; 519 } 520 521 mIntentFilter = new IntentFilter(); 522 i = 0; 523 for (i = 0; i < 10; i++) { 524 mIntentFilter.addDataPath(DATA_PATH + i, PatternMatcher.PATTERN_LITERAL); 525 } 526 assertEquals(10, mIntentFilter.countDataPaths()); 527 iter = mIntentFilter.pathsIterator(); 528 i = 0; 529 while (iter.hasNext()) { 530 actual = iter.next(); 531 assertEquals(DATA_PATH + i, actual.getPath()); 532 assertEquals(PatternMatcher.PATTERN_LITERAL, actual.getType()); 533 PatternMatcher p = new PatternMatcher(DATA_PATH + i, PatternMatcher.PATTERN_LITERAL); 534 assertEquals(p.getPath(), mIntentFilter.getDataPath(i).getPath()); 535 assertEquals(p.getType(), mIntentFilter.getDataPath(i).getType()); 536 assertTrue(mIntentFilter.hasDataPath(DATA_PATH + i)); 537 assertFalse(mIntentFilter.hasDataPath(DATA_PATH + i + 10)); 538 i++; 539 } 540 mIntentFilter = new IntentFilter(); 541 i = 0; 542 for (i = 0; i < 10; i++) { 543 mIntentFilter.addDataPath(DATA_PATH + i, PatternMatcher.PATTERN_SIMPLE_GLOB); 544 } 545 assertEquals(10, mIntentFilter.countDataPaths()); 546 iter = mIntentFilter.pathsIterator(); 547 i = 0; 548 while (iter.hasNext()) { 549 actual = iter.next(); 550 assertEquals(DATA_PATH + i, actual.getPath()); 551 assertEquals(PatternMatcher.PATTERN_SIMPLE_GLOB, actual.getType()); 552 PatternMatcher p = new PatternMatcher(DATA_PATH + i, 553 PatternMatcher.PATTERN_SIMPLE_GLOB); 554 assertEquals(p.getPath(), mIntentFilter.getDataPath(i).getPath()); 555 assertEquals(p.getType(), mIntentFilter.getDataPath(i).getType()); 556 assertTrue(mIntentFilter.hasDataPath(DATA_PATH + i)); 557 assertFalse(mIntentFilter.hasDataPath(DATA_PATH + i + 10)); 558 i++; 559 } 560 561 IntentFilter filter = new Match(null, null, null, new String[] { "scheme1" }, 562 new String[] { "authority1" }, new String[] { null }); 563 checkMatches(filter, new MatchCondition[] { 564 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 565 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, "scheme1:foo"), 566 new MatchCondition(IntentFilter.MATCH_CATEGORY_HOST, null, null, null, 567 "scheme1://authority1/"), 568 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 569 "scheme1://authority2/"), 570 new MatchCondition(IntentFilter.MATCH_CATEGORY_HOST, null, null, null, 571 "scheme1://authority1:100/"), }); 572 573 filter = new Match(null, null, null, new String[] { "scheme1" }, 574 new String[] { "authority1" }, new String[] { "100" }); 575 checkMatches(filter, new MatchCondition[] { 576 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 577 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, "scheme1:foo"), 578 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 579 "scheme1://authority1/"), 580 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 581 "scheme1://authority2/"), 582 new MatchCondition(IntentFilter.MATCH_CATEGORY_PORT, null, null, null, 583 "scheme1://authority1:100/"), 584 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 585 "scheme1://authority1:200/"), }); 586 587 filter = new Match(null, null, null, new String[] { "scheme1" }, 588 new String[] { "authority1", "authority2" }, new String[] { "100", null }); 589 checkMatches(filter, new MatchCondition[] { 590 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 591 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, "scheme1:foo"), 592 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 593 "scheme1://authority1/"), 594 new MatchCondition(IntentFilter.MATCH_CATEGORY_HOST, null, null, null, 595 "scheme1://authority2/"), 596 new MatchCondition(IntentFilter.MATCH_CATEGORY_PORT, null, null, null, 597 "scheme1://authority1:100/"), 598 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 599 "scheme1://authority1:200/"), }); 600 } 601 testMatchWithIntent()602 public void testMatchWithIntent() throws MalformedMimeTypeException { 603 final ContentResolver resolver = mContext.getContentResolver(); 604 605 Intent intent = new Intent(ACTION); 606 assertEquals(IntentFilter.NO_MATCH_ACTION, mIntentFilter.match(resolver, intent, true, 607 null)); 608 mIntentFilter.addAction(ACTION); 609 assertEquals(IntentFilter.MATCH_CATEGORY_EMPTY + IntentFilter.MATCH_ADJUSTMENT_NORMAL, 610 mIntentFilter.match(resolver, intent, true, null)); 611 612 final Uri uri = Uri.parse(DATA_SCHEME + "://" + HOST + ":" + PORT); 613 intent.setData(uri); 614 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(resolver, intent, true, null)); 615 mIntentFilter.addDataAuthority(HOST, String.valueOf(PORT)); 616 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(resolver, intent, true, null)); 617 intent.setType(DATA_TYPE); 618 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(resolver, intent, true, null)); 619 620 mIntentFilter.addDataType(DATA_TYPE); 621 622 assertEquals(IntentFilter.MATCH_CATEGORY_TYPE + IntentFilter.MATCH_ADJUSTMENT_NORMAL, 623 mIntentFilter.match(resolver, intent, true, null)); 624 assertEquals(IntentFilter.MATCH_CATEGORY_TYPE + IntentFilter.MATCH_ADJUSTMENT_NORMAL, 625 mIntentFilter.match(resolver, intent, false, null)); 626 intent.addCategory(CATEGORY); 627 assertEquals(IntentFilter.NO_MATCH_CATEGORY, mIntentFilter.match(resolver, intent, true, 628 null)); 629 mIntentFilter.addCategory(CATEGORY); 630 assertEquals(IntentFilter.MATCH_CATEGORY_TYPE + IntentFilter.MATCH_ADJUSTMENT_NORMAL, 631 mIntentFilter.match(resolver, intent, true, null)); 632 633 intent.setDataAndType(uri, DATA_TYPE); 634 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(resolver, intent, true, null)); 635 636 } 637 testMatchWithIntentData()638 public void testMatchWithIntentData() throws MalformedMimeTypeException { 639 Set<String> cat = new HashSet<String>(); 640 assertEquals(IntentFilter.NO_MATCH_ACTION, mIntentFilter.match(ACTION, null, null, null, 641 null, null)); 642 mIntentFilter.addAction(ACTION); 643 644 assertEquals(IntentFilter.MATCH_CATEGORY_EMPTY + IntentFilter.MATCH_ADJUSTMENT_NORMAL, 645 mIntentFilter.match(ACTION, null, null, null, null, null)); 646 assertEquals(IntentFilter.MATCH_CATEGORY_EMPTY + IntentFilter.MATCH_ADJUSTMENT_NORMAL, 647 mIntentFilter.match(ACTION, null, DATA_SCHEME, null, null, null)); 648 649 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.matchData(null, DATA_SCHEME, URI)); 650 651 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(ACTION, DATA_TYPE, 652 DATA_SCHEME, URI, null, null)); 653 654 mIntentFilter.addDataScheme(DATA_SCHEME); 655 assertEquals(IntentFilter.NO_MATCH_TYPE, mIntentFilter.match(ACTION, DATA_TYPE, 656 DATA_SCHEME, URI, null, null)); 657 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(ACTION, DATA_TYPE, "", URI, 658 null, null)); 659 mIntentFilter.addDataType(DATA_TYPE); 660 661 assertEquals(IntentFilter.MATCH_CATEGORY_TYPE + IntentFilter.MATCH_ADJUSTMENT_NORMAL, 662 mIntentFilter.match(ACTION, DATA_TYPE, DATA_SCHEME, URI, null, null)); 663 664 assertEquals(IntentFilter.NO_MATCH_TYPE, mIntentFilter.match(ACTION, null, DATA_SCHEME, 665 URI, null, null)); 666 667 assertEquals(IntentFilter.NO_MATCH_TYPE, mIntentFilter.match(ACTION, null, DATA_SCHEME, 668 URI, cat, null)); 669 670 cat.add(CATEGORY); 671 assertEquals(IntentFilter.NO_MATCH_CATEGORY, mIntentFilter.match(ACTION, DATA_TYPE, 672 DATA_SCHEME, URI, cat, null)); 673 cat = new HashSet<String>(); 674 mIntentFilter.addDataAuthority(HOST, String.valueOf(PORT)); 675 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(ACTION, null, DATA_SCHEME, 676 URI, null, null)); 677 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(ACTION, DATA_TYPE, 678 DATA_SCHEME, URI, null, null)); 679 680 final Uri uri = Uri.parse(DATA_SCHEME + "://" + HOST + ":" + PORT); 681 mIntentFilter.addDataPath(DATA_PATH, PatternMatcher.PATTERN_LITERAL); 682 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(ACTION, DATA_TYPE, 683 DATA_SCHEME, uri, null, null)); 684 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(ACTION, DATA_TYPE, 685 DATA_SCHEME, URI, null, null)); 686 687 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(ACTION, DATA_TYPE, 688 DATA_SCHEME, URI, cat, null)); 689 cat.add(CATEGORY); 690 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(ACTION, DATA_TYPE, 691 DATA_SCHEME, URI, cat, null)); 692 mIntentFilter.addCategory(CATEGORY); 693 assertEquals(IntentFilter.NO_MATCH_DATA, mIntentFilter.match(ACTION, DATA_TYPE, 694 DATA_SCHEME, URI, cat, null)); 695 } 696 testWriteToParcel()697 public void testWriteToParcel() throws MalformedMimeTypeException { 698 mIntentFilter.addAction(ACTION); 699 mIntentFilter.addCategory(CATEGORY); 700 mIntentFilter.addDataAuthority(HOST, String.valueOf(PORT)); 701 mIntentFilter.addDataPath(DATA_PATH, 1); 702 mIntentFilter.addDataScheme(DATA_SCHEME); 703 mIntentFilter.addDataType(DATA_TYPE); 704 Parcel parcel = Parcel.obtain(); 705 mIntentFilter.writeToParcel(parcel, 1); 706 parcel.setDataPosition(0); 707 IntentFilter target = IntentFilter.CREATOR.createFromParcel(parcel); 708 assertEquals(mIntentFilter.getAction(0), target.getAction(0)); 709 assertEquals(mIntentFilter.getCategory(0), target.getCategory(0)); 710 assertEquals(mIntentFilter.getDataAuthority(0).getHost(), 711 target.getDataAuthority(0).getHost()); 712 assertEquals(mIntentFilter.getDataAuthority(0).getPort(), 713 target.getDataAuthority(0).getPort()); 714 assertEquals(mIntentFilter.getDataPath(0).getPath(), target.getDataPath(0).getPath()); 715 assertEquals(mIntentFilter.getDataScheme(0), target.getDataScheme(0)); 716 } 717 testAddDataType()718 public void testAddDataType() throws MalformedMimeTypeException { 719 try { 720 mIntentFilter.addDataType("test"); 721 fail("should throw MalformedMimeTypeException"); 722 } catch (MalformedMimeTypeException e) { 723 // expected 724 } 725 726 mIntentFilter.addDataType(DATA_TYPE); 727 assertEquals(DATA_TYPE, mIntentFilter.getDataType(0)); 728 } 729 730 private static class Match extends IntentFilter { Match(String[] actions, String[] categories, String[] mimeTypes, String[] schemes, String[] authorities, String[] ports)731 Match(String[] actions, String[] categories, String[] mimeTypes, String[] schemes, 732 String[] authorities, String[] ports) { 733 if (actions != null) { 734 for (int i = 0; i < actions.length; i++) { 735 addAction(actions[i]); 736 } 737 } 738 if (categories != null) { 739 for (int i = 0; i < categories.length; i++) { 740 addCategory(categories[i]); 741 } 742 } 743 if (mimeTypes != null) { 744 for (int i = 0; i < mimeTypes.length; i++) { 745 try { 746 addDataType(mimeTypes[i]); 747 } catch (IntentFilter.MalformedMimeTypeException e) { 748 throw new RuntimeException("Bad mime type", e); 749 } 750 } 751 } 752 if (schemes != null) { 753 for (int i = 0; i < schemes.length; i++) { 754 addDataScheme(schemes[i]); 755 } 756 } 757 if (authorities != null) { 758 for (int i = 0; i < authorities.length; i++) { 759 addDataAuthority(authorities[i], ports != null ? ports[i] : null); 760 } 761 } 762 } 763 Match(String[] actions, String[] categories, String[] mimeTypes, String[] schemes, String[] authorities, String[] ports, String[] paths, int[] pathTypes)764 Match(String[] actions, String[] categories, String[] mimeTypes, String[] schemes, 765 String[] authorities, String[] ports, String[] paths, int[] pathTypes) { 766 this(actions, categories, mimeTypes, schemes, authorities, ports); 767 if (paths != null) { 768 for (int i = 0; i < paths.length; i++) { 769 addDataPath(paths[i], pathTypes[i]); 770 } 771 } 772 } 773 } 774 775 private static class MatchCondition { 776 public final int result; 777 public final String action; 778 public final String mimeType; 779 public final Uri data; 780 public final String[] categories; 781 MatchCondition(int _result, String _action, String[] _categories, String _mimeType, String _data)782 public MatchCondition(int _result, String _action, String[] _categories, String _mimeType, 783 String _data) { 784 result = _result; 785 action = _action; 786 mimeType = _mimeType; 787 data = _data != null ? Uri.parse(_data) : null; 788 categories = _categories; 789 } 790 } 791 checkMatches(IntentFilter filter, MatchCondition[] results)792 private static void checkMatches(IntentFilter filter, MatchCondition[] results) { 793 for (int i = 0; i < results.length; i++) { 794 MatchCondition mc = results[i]; 795 HashSet<String> categories = null; 796 if (mc.categories != null) { 797 for (int j = 0; j < mc.categories.length; j++) { 798 if (categories == null) { 799 categories = new HashSet<String>(); 800 } 801 categories.add(mc.categories[j]); 802 } 803 } 804 int result = filter.match(mc.action, mc.mimeType, mc.data != null ? mc.data.getScheme() 805 : null, mc.data, categories, "test"); 806 if ((result & IntentFilter.MATCH_CATEGORY_MASK) != 807 (mc.result & IntentFilter.MATCH_CATEGORY_MASK)) { 808 StringBuilder msg = new StringBuilder(); 809 msg.append("Error matching against IntentFilter:\n"); 810 filter.dump(new StringBuilderPrinter(msg), " "); 811 msg.append("Match action: "); 812 msg.append(mc.action); 813 msg.append("\nMatch mimeType: "); 814 msg.append(mc.mimeType); 815 msg.append("\nMatch data: "); 816 msg.append(mc.data); 817 msg.append("\nMatch categories: "); 818 if (mc.categories != null) { 819 for (int j = 0; j < mc.categories.length; j++) { 820 if (j > 0) 821 msg.append(", "); 822 msg.append(mc.categories[j]); 823 } 824 } 825 msg.append("\nExpected result: 0x"); 826 msg.append(Integer.toHexString(mc.result)); 827 msg.append(", got result: 0x"); 828 msg.append(Integer.toHexString(result)); 829 throw new RuntimeException(msg.toString()); 830 } 831 } 832 } 833 testPaths()834 public void testPaths() throws Exception { 835 IntentFilter filter = new Match(null, null, null, 836 new String[]{"scheme"}, new String[]{"authority"}, null, 837 new String[]{"/literal1", "/2literal"}, 838 new int[]{PATTERN_LITERAL, PATTERN_LITERAL}); 839 checkMatches(filter, new MatchCondition[] { 840 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 841 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 842 "scheme://authority/literal1"), 843 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 844 "scheme://authority/2literal"), 845 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 846 "scheme://authority/literal"), 847 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 848 "scheme://authority/literal12"), }); 849 filter = new Match(null, null, null, 850 new String[]{"scheme"}, new String[]{"authority"}, null, 851 new String[]{"/literal1", "/2literal"}, new int[]{PATTERN_PREFIX, PATTERN_PREFIX}); 852 checkMatches(filter, new MatchCondition[] { 853 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 854 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 855 "scheme://authority/literal1"), 856 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 857 "scheme://authority/2literal"), 858 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 859 "scheme://authority/literal"), 860 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 861 "scheme://authority/literal12"), }); 862 filter = new Match(null, null, null, 863 new String[]{"scheme"}, new String[]{"authority"}, null, new String[]{"/.*"}, 864 new int[]{PATTERN_SIMPLE_GLOB}); 865 checkMatches(filter, new MatchCondition[] { 866 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 867 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 868 "scheme://authority/literal1"), 869 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 870 "scheme://authority/"), 871 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 872 "scheme://authority"), }); 873 filter = new Match(null, null, null, 874 new String[]{"scheme"}, new String[]{"authority"}, null, new String[]{".*"}, 875 new int[]{PATTERN_SIMPLE_GLOB}); 876 checkMatches(filter, new MatchCondition[] { 877 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 878 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 879 "scheme://authority/literal1"), 880 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 881 "scheme://authority/"), 882 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 883 "scheme://authority"), }); 884 filter = new Match(null, null, null, 885 new String[]{"scheme"}, new String[]{"authority"}, null, new String[]{"/a1*b"}, 886 new int[]{PATTERN_SIMPLE_GLOB}); 887 checkMatches(filter, new MatchCondition[] { 888 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 889 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 890 "scheme://authority/ab"), 891 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 892 "scheme://authority/a1b"), 893 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 894 "scheme://authority/a11b"), 895 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 896 "scheme://authority/a2b"), 897 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 898 "scheme://authority/a1bc"), 899 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 900 "scheme://authority/"), }); 901 filter = new Match(null, null, null, 902 new String[]{"scheme"}, new String[]{"authority"}, null, new String[]{"/a1*"}, 903 new int[]{PATTERN_SIMPLE_GLOB}); 904 checkMatches(filter, new MatchCondition[] { 905 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 906 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 907 "scheme://authority/a1"), 908 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 909 "scheme://authority/ab"), 910 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 911 "scheme://authority/a11"), 912 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 913 "scheme://authority/a1b"), 914 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 915 "scheme://authority/a11"), 916 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 917 "scheme://authority/a2"), }); 918 filter = new Match(null, null, null, 919 new String[]{"scheme"}, new String[]{"authority"}, null, new String[]{"/a\\.*b"}, 920 new int[]{PATTERN_SIMPLE_GLOB}); 921 checkMatches(filter, new MatchCondition[] { 922 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 923 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 924 "scheme://authority/ab"), 925 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 926 "scheme://authority/a.b"), 927 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 928 "scheme://authority/a..b"), 929 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 930 "scheme://authority/a2b"), 931 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 932 "scheme://authority/a.bc"), 933 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 934 "scheme://authority/"), }); 935 filter = new Match(null, null, null, 936 new String[]{"scheme"}, new String[]{"authority"}, null, new String[]{"/a.*b"}, 937 new int[]{PATTERN_SIMPLE_GLOB}); 938 checkMatches(filter, new MatchCondition[] { 939 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 940 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 941 "scheme://authority/ab"), 942 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 943 "scheme://authority/a.b"), 944 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 945 "scheme://authority/a.1b"), 946 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 947 "scheme://authority/a2b"), 948 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 949 "scheme://authority/a.bc"), 950 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 951 "scheme://authority/"), }); 952 filter = new Match(null, null, null, 953 new String[]{"scheme"}, new String[]{"authority"}, null, new String[]{"/a.*"}, 954 new int[]{PATTERN_SIMPLE_GLOB}); 955 checkMatches(filter, new MatchCondition[] { 956 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 957 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 958 "scheme://authority/ab"), 959 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 960 "scheme://authority/a.b"), 961 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 962 "scheme://authority/a.1b"), 963 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 964 "scheme://authority/a2b"), 965 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 966 "scheme://authority/a.bc"), 967 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 968 "scheme://authority/"), }); 969 filter = new Match(null, null, null, 970 new String[]{"scheme"}, new String[]{"authority"}, null, new String[]{"/a.\\*b"}, 971 new int[]{PATTERN_SIMPLE_GLOB}); 972 checkMatches(filter, new MatchCondition[] { 973 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 974 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 975 "scheme://authority/ab"), 976 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 977 "scheme://authority/a.*b"), 978 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 979 "scheme://authority/a1*b"), 980 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 981 "scheme://authority/a2b"), 982 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 983 "scheme://authority/a.bc"), 984 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 985 "scheme://authority/"), }); 986 filter = new Match(null, null, null, 987 new String[]{"scheme"}, new String[]{"authority"}, null, new String[]{"/a.\\*"}, 988 new int[]{PATTERN_SIMPLE_GLOB}); 989 checkMatches(filter, new MatchCondition[] { 990 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, null), 991 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 992 "scheme://authority/ab"), 993 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 994 "scheme://authority/a.*"), 995 new MatchCondition(IntentFilter.MATCH_CATEGORY_PATH, null, null, null, 996 "scheme://authority/a1*"), 997 new MatchCondition(IntentFilter.NO_MATCH_DATA, null, null, null, 998 "scheme://authority/a1b"), }); 999 } 1000 testDump()1001 public void testDump() throws MalformedMimeTypeException { 1002 TestPrinter printer = new TestPrinter(); 1003 String prefix = "TestIntentFilter"; 1004 IntentFilter filter = new IntentFilter(ACTION, DATA_TYPE); 1005 filter.dump(printer, prefix); 1006 assertTrue(printer.isPrintlnCalled); 1007 } 1008 1009 private class TestPrinter implements Printer { 1010 public boolean isPrintlnCalled; println(String x)1011 public void println(String x) { 1012 isPrintlnCalled = true; 1013 } 1014 } 1015 } 1016