@Test public void shouldRegisterContentObservers() { TestContentObserver co = new TestContentObserver(null); ShadowContentResolver scr = shadowOf(contentResolver); assertThat(scr.getContentObservers(EXTERNAL_CONTENT_URI)).isEmpty(); contentResolver.registerContentObserver(EXTERNAL_CONTENT_URI, true, co); assertThat(scr.getContentObservers(EXTERNAL_CONTENT_URI)).containsExactly((ContentObserver) co); assertThat(co.changed).isFalse(); contentResolver.notifyChange(EXTERNAL_CONTENT_URI, null); assertThat(co.changed).isTrue(); contentResolver.unregisterContentObserver(co); assertThat(scr.getContentObservers(EXTERNAL_CONTENT_URI)).isEmpty(); }
@Test public void shouldUnregisterContentObservers() { TestContentObserver co = new TestContentObserver(null); ShadowContentResolver scr = shadowOf(contentResolver); contentResolver.registerContentObserver(EXTERNAL_CONTENT_URI, true, co); assertThat(scr.getContentObservers(EXTERNAL_CONTENT_URI)).contains(co); contentResolver.unregisterContentObserver(co); assertThat(scr.getContentObservers(EXTERNAL_CONTENT_URI)).isEmpty(); assertThat(co.changed).isFalse(); contentResolver.notifyChange(EXTERNAL_CONTENT_URI, null); assertThat(co.changed).isFalse(); }
/** * Non-Android accessor. Returns one (which one is unspecified) of the content observers registered with * the given URI, or null if none is registered. * @param uri Given URI * @return The content observer * * @deprecated This method return random observer, {@link #getContentObservers} should be used instead. */ @Deprecated public ContentObserver getContentObserver( Uri uri ) { Collection<ContentObserver> observers = getContentObservers(uri); return observers.isEmpty() ? null : observers.iterator().next(); }
@Test public void testObserversRegistered() { Uri uri = Uri.parse("doist.com"); ShadowContentResolver contentResolver = shadowOf(context.getContentResolver()); assertEquals(0, contentResolver.getContentObservers(uri).size()); jobStore.add(JobStatus.createFromJobInfo( JobCreator.create(context, 0) .addTriggerContentUri(new JobInfo.TriggerContentUri(uri, 0)) .build(), AlarmScheduler.TAG)); service.startCommand(0, 0); assertEquals(1, contentResolver.getContentObservers(uri).size()); assertThat(contentResolver.getContentObservers(uri), hasItem(isA(ContentObserverService.Observer.class))); }
@Test public void testObserversFire() { Uri[] uris = new Uri[]{Uri.parse("doist.com"), Uri.parse("todoist.com"), Uri.parse("twistapp.com")}; for (int i = 0; i < uris.length; i++) { jobStore.add(JobStatus.createFromJobInfo( JobCreator.create(context, i, 5000) .addTriggerContentUri(new JobInfo.TriggerContentUri(uris[i], 0)) .build(), AlarmScheduler.TAG)); } service.startCommand(0, 0); ShadowApplication application = ShadowApplication.getInstance(); ShadowContentResolver contentResolver = shadowOf(context.getContentResolver()); for (Uri uri : uris) { assertEquals(0, application.getBoundServiceConnections().size()); assertEquals(1, contentResolver.getContentObservers(uri).size()); contentResolver.notifyChange(uri, null); DeviceTestUtils.advanceTime(JobStatus.DEFAULT_TRIGGER_MAX_DELAY); assertEquals(1, contentResolver.getContentObservers(uri).size()); assertEquals(AlarmJobService.class.getCanonicalName(), application.getNextStartedService().getComponent().getClassName()); } } }