/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app.timezone; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.hamcrest.MockitoHamcrest.argThat; import android.content.Context; import android.content.Intent; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.hamcrest.Matcher; import org.junit.Test; /** * Tests for {@link RulesUpdaterContract}. */ // TODO(nfuller) Move to CTS once this class is part of the SystemApi. http://b/31008728 public class RulesUpdaterContractTest { @Test public void createUpdaterIntent() throws Exception { String packageName = "foobar"; Intent intent = RulesUpdaterContract.createUpdaterIntent(packageName); assertEquals(RulesUpdaterContract.ACTION_TRIGGER_RULES_UPDATE_CHECK, intent.getAction()); assertEquals(packageName, intent.getPackage()); assertEquals(Intent.FLAG_INCLUDE_STOPPED_PACKAGES, intent.getFlags()); } @Test public void sendBroadcast() throws Exception { String packageName = "foobar"; byte[] tokenBytes = new byte[] { 1, 2, 3, 4, 5 }; Intent expectedIntent = RulesUpdaterContract.createUpdaterIntent(packageName); expectedIntent.putExtra(RulesUpdaterContract.EXTRA_CHECK_TOKEN, tokenBytes); Context mockContext = mock(Context.class); RulesUpdaterContract.sendBroadcast(mockContext, packageName, tokenBytes); verify(mockContext).sendBroadcast( filterEquals(expectedIntent), eq(RulesUpdaterContract.UPDATE_TIME_ZONE_RULES_PERMISSION)); } /** * Registers a mockito parameter matcher that uses {@link Intent#filterEquals(Intent)}. to * check the parameter against the intent supplied. */ private static Intent filterEquals(final Intent expected) { final Matcher<Intent> m = new BaseMatcher<Intent>() { @Override public boolean matches(Object actual) { return actual != null && expected.filterEquals((Intent) actual); } @Override public void describeTo(Description description) { description.appendText(expected.toString()); } }; return argThat(m); } }