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