@Test public void testNewInstance_withTooSmallWindow_now() throws Exception { expectedException.expect(IllegalArgumentException.class); Trigger.executionWindow(60, 59); }
@NonNull private JobTrigger decodeTrigger(Bundle data) { switch (data.getInt(prefix + BundleProtocol.PACKED_PARAM_TRIGGER_TYPE)) { case BundleProtocol.TRIGGER_TYPE_IMMEDIATE: return Trigger.NOW; case BundleProtocol.TRIGGER_TYPE_EXECUTION_WINDOW: return Trigger.executionWindow( data.getInt(prefix + BundleProtocol.PACKED_PARAM_TRIGGER_WINDOW_START), data.getInt(prefix + BundleProtocol.PACKED_PARAM_TRIGGER_WINDOW_END)); case BundleProtocol.TRIGGER_TYPE_CONTENT_URI: String uris = data.getString(prefix + BundleProtocol.PACKED_PARAM_OBSERVED_URI); List<ObservedUri> observedUris = convertJsonToObservedUris(uris); return Trigger.contentUriTrigger(Collections.unmodifiableList(observedUris)); default: if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "Unsupported trigger."); } return null; } }
@Test(expected = IllegalArgumentException.class) public void constrains_emptyList() throws Exception { Trigger.contentUriTrigger(Collections.<ObservedUri>emptyList()); }
@Test(expected = IllegalArgumentException.class) public void constrains_null() throws Exception { Trigger.contentUriTrigger(null); }
@Test public void testNewInstance_withNegativeStart() throws Exception { expectedException.expect(IllegalArgumentException.class); Trigger.executionWindow(-10, 60); }
@Test public void testValidate_trigger() throws Exception { Map<JobTrigger, String> testCases = new HashMap<>(); testCases.put(Trigger.NOW, null); testCases.put(Trigger.executionWindow(0, 100), null); ContentUriTrigger contentUriTrigger = Trigger.contentUriTrigger( Arrays.asList( new ObservedUri( ContactsContract.AUTHORITY_URI, Flags.FLAG_NOTIFY_FOR_DESCENDANTS))); testCases.put(contentUriTrigger, null); for (Entry<JobTrigger, String> testCase : testCases.entrySet()) { List<String> validationErrors = validator.validate(testCase.getKey()); if (testCase.getValue() == null) { assertNull("Expected no validation errors for trigger", validationErrors); } else { assertTrue( "Expected validation errors to contain \"" + testCase.getValue() + "\"", validationErrors.contains(testCase.getValue())); } } }
static ContentUriTrigger getContentUriTrigger() { ObservedUri contactUri = new ObservedUri(ContactsContract.AUTHORITY_URI, Flags.FLAG_NOTIFY_FOR_DESCENDANTS); ObservedUri imageUri = new ObservedUri(Media.EXTERNAL_CONTENT_URI, 0); return Trigger.contentUriTrigger(Arrays.asList(contactUri, imageUri)); }
@Test public void testNewInstance_withNegativeEnd() throws Exception { expectedException.expect(IllegalArgumentException.class); Trigger.executionWindow(0, -1); }
case TIMED_TRIGGER: builder.setTrigger( Trigger.executionWindow(form.getWinStartSeconds(), form.getWinEndSeconds())); break; case CONTENT_URI_TRIGGER: notifyForDescendants.isChecked() ? ObservedUri.Flags.FLAG_NOTIFY_FOR_DESCENDANTS : 0; ObservedUri observedUri = new ObservedUri(uri, flags); builder.setTrigger(Trigger.contentUriTrigger(Arrays.asList(observedUri))); break; default:
@Test public void constrains_valid() throws Exception { List<ObservedUri> uris = Arrays.asList(new ObservedUri(ContactsContract.AUTHORITY_URI, 0)); ContentUriTrigger uriTrigger = Trigger.contentUriTrigger(uris); assertEquals(uris, uriTrigger.getUris()); } }
@Test public void testNewInstance_withTooSmallWindow_inFuture() throws Exception { expectedException.expect(IllegalArgumentException.class); Trigger.executionWindow(200, 100); } }
@Test public void onJobFinished_notRecurringContentJob_sendResult() { jobInvocationBuilder.setTrigger( Trigger.contentUriTrigger(Arrays.asList(new ObservedUri(Contacts.CONTENT_URI, 0)))); JobInvocation jobInvocation = receiver.prepareJob(callbackMock, TestUtil.getBundleForContentJobExecution()); receiver.onJobFinished(jobInvocation, JobService.RESULT_SUCCESS); verify(callbackMock).jobFinished(JobService.RESULT_SUCCESS); verifyZeroInteractions(driverMock); }
@Test public void testNewInstance_withReversedValues() throws Exception { expectedException.expect(IllegalArgumentException.class); Trigger.executionWindow(60, 0); }
@Test public void testWriteToBundle_contentUriTrigger() { ObservedUri observedUri = new ObservedUri(ContactsContract.AUTHORITY_URI, Flags.FLAG_NOTIFY_FOR_DESCENDANTS); ContentUriTrigger contentUriTrigger = Trigger.contentUriTrigger(Arrays.asList(observedUri)); Bundle bundle = writer.writeToBundle( initializeDefaultBuilder().setTrigger(contentUriTrigger).build(), new Bundle()); Uri[] uris = (Uri[]) bundle.getParcelableArray(BundleProtocol.PACKED_PARAM_CONTENT_URI_ARRAY); int[] flags = bundle.getIntArray(BundleProtocol.PACKED_PARAM_CONTENT_URI_FLAGS_ARRAY); assertTrue("Array size", uris.length == flags.length && flags.length == 1); assertEquals( BundleProtocol.PACKED_PARAM_CONTENT_URI_ARRAY, ContactsContract.AUTHORITY_URI, uris[0]); assertEquals( BundleProtocol.PACKED_PARAM_CONTENT_URI_FLAGS_ARRAY, Flags.FLAG_NOTIFY_FOR_DESCENDANTS, flags[0]); }
@Test public void testNewInstance_withValidWindow() throws Exception { JobTrigger.ExecutionWindowTrigger trigger = Trigger.executionWindow(0, 60); assertEquals(0, trigger.getWindowStart()); assertEquals(60, trigger.getWindowEnd()); }
private @NonNull Job createContentUriTriggerJob() { return createBuilder(INCOMING) .setTrigger(Trigger.contentUriTrigger(observedUris())) .setRecurring(true) .setLifetime(FOREVER) .setTag(CONTENT_TRIGGER_TAG) .build(); }
.setConstraints(Constraint.DEVICE_CHARGING) .setService(TestJobService.class) .setTrigger(Trigger.executionWindow(0, 60)) .setRecurring(false) .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
@Test public void testScheduleJobWithUnknownTrigger() throws Exception { final Job job = jobBuilder() .setTrigger(Trigger.contentUriTrigger(Collections.singletonList(new ObservedUri(Uri.parse("foo://bar"), 0)))) .build(); final int result = subject.schedule(job); assertThat(result).isEqualTo(SCHEDULE_RESULT_UNSUPPORTED_TRIGGER); }
.setTrigger(Trigger.executionWindow( SYNC_INTERVAL_SECONDS, SYNC_INTERVAL_SECONDS + SYNC_FLEXTIME_SECONDS))
.setTrigger(Trigger.executionWindow( SYNC_INTERVAL_SECONDS, SYNC_INTERVAL_SECONDS + SYNC_FLEXTIME_SECONDS))