1bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller/* 2bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * Copyright (C) 2017 The Android Open Source Project 3bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * 4bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * Licensed under the Apache License, Version 2.0 (the "License"); 5bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * you may not use this file except in compliance with the License. 6bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * You may obtain a copy of the License at 7bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * 8bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * http://www.apache.org/licenses/LICENSE-2.0 9bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * 10bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * Unless required by applicable law or agreed to in writing, software 11bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * distributed under the License is distributed on an "AS IS" BASIS, 12bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * See the License for the specific language governing permissions and 14bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * limitations under the License. 15bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller */ 16bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 17bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerpackage android.app.timezone; 18bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 19bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerimport static org.junit.Assert.assertEquals; 20bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerimport static org.mockito.Matchers.eq; 21bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerimport static org.mockito.Mockito.mock; 22bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerimport static org.mockito.Mockito.verify; 23bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerimport static org.mockito.hamcrest.MockitoHamcrest.argThat; 24bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 25bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerimport android.content.Context; 26bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerimport android.content.Intent; 2764d3b2642ac05bf75f407b0ac91cdca7669b831eDaniel Bonnevierimport android.os.UserHandle; 28bdbde55592792efe350acd6a46733f439f6a3f3dAurimas Liutikasimport android.support.test.filters.LargeTest; 29bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 30bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerimport org.hamcrest.BaseMatcher; 31bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerimport org.hamcrest.Description; 32bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerimport org.hamcrest.Matcher; 33bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerimport org.junit.Test; 34bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 35bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller/** 36bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * Tests for {@link RulesUpdaterContract}. 37bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller */ 38bdbde55592792efe350acd6a46733f439f6a3f3dAurimas Liutikas@LargeTest 39bede17c216815a849be0c43d5ce7daaf750a9facNeil Fullerpublic class RulesUpdaterContractTest { 40bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 41bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller @Test 42bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller public void createUpdaterIntent() throws Exception { 43bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller String packageName = "foobar"; 44bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller Intent intent = RulesUpdaterContract.createUpdaterIntent(packageName); 45bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 46bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller assertEquals(RulesUpdaterContract.ACTION_TRIGGER_RULES_UPDATE_CHECK, intent.getAction()); 47bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller assertEquals(packageName, intent.getPackage()); 48bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller assertEquals(Intent.FLAG_INCLUDE_STOPPED_PACKAGES, intent.getFlags()); 49bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller } 50bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 51bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller @Test 52bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller public void sendBroadcast() throws Exception { 53bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller String packageName = "foobar"; 54bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller byte[] tokenBytes = new byte[] { 1, 2, 3, 4, 5 }; 55bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 56bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller Intent expectedIntent = RulesUpdaterContract.createUpdaterIntent(packageName); 57bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller expectedIntent.putExtra(RulesUpdaterContract.EXTRA_CHECK_TOKEN, tokenBytes); 58bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 59bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller Context mockContext = mock(Context.class); 60bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 61bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller RulesUpdaterContract.sendBroadcast(mockContext, packageName, tokenBytes); 62bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 6364d3b2642ac05bf75f407b0ac91cdca7669b831eDaniel Bonnevier verify(mockContext).sendBroadcastAsUser( 64bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller filterEquals(expectedIntent), 6564d3b2642ac05bf75f407b0ac91cdca7669b831eDaniel Bonnevier eq(UserHandle.SYSTEM), 66bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller eq(RulesUpdaterContract.UPDATE_TIME_ZONE_RULES_PERMISSION)); 67bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller } 68bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller 69bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller /** 70bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * Registers a mockito parameter matcher that uses {@link Intent#filterEquals(Intent)}. to 71bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller * check the parameter against the intent supplied. 72bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller */ 73bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller private static Intent filterEquals(final Intent expected) { 74bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller final Matcher<Intent> m = new BaseMatcher<Intent>() { 75bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller @Override 76bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller public boolean matches(Object actual) { 77bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller return actual != null && expected.filterEquals((Intent) actual); 78bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller } 79bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller @Override 80bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller public void describeTo(Description description) { 81bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller description.appendText(expected.toString()); 82bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller } 83bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller }; 84bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller return argThat(m); 85bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller } 86bede17c216815a849be0c43d5ce7daaf750a9facNeil Fuller} 87