1914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal/*
2914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal * Copyright (C) 2017 The Android Open Source Project
3914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal *
4914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal * Licensed under the Apache License, Version 2.0 (the "License");
5914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal * you may not use this file except in compliance with the License.
6914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal * You may obtain a copy of the License at
7914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal *
8914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal *      http://www.apache.org/licenses/LICENSE-2.0
9914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal *
10914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal * Unless required by applicable law or agreed to in writing, software
11914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal * distributed under the License is distributed on an "AS IS" BASIS,
12914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal * See the License for the specific language governing permissions and
14914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal * limitations under the License.
15914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal */
16914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
17914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalpackage android.support.customtabs;
18914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
19914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport static org.junit.Assert.assertEquals;
20914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport static org.junit.Assert.assertTrue;
21914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport static org.junit.Assert.fail;
22914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
23914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport android.content.Context;
24914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport android.content.Intent;
25914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport android.support.test.filters.SmallTest;
26914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport android.support.test.rule.ActivityTestRule;
27914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport android.support.test.rule.ServiceTestRule;
28914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport android.support.test.runner.AndroidJUnit4;
296d20a527c6adad79f5fb48ec8bc02d738db1e1d2Aurimas Liutikasimport android.support.testutils.PollingCheck;
30914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
31914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport org.junit.Before;
32914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport org.junit.Rule;
33914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport org.junit.Test;
34914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport org.junit.runner.RunWith;
35914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
36914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport java.util.concurrent.TimeoutException;
37914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
38914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal/**
39914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal * Tests for {@link PostMessageServiceConnection} with no {@link CustomTabsService} component.
40914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal */
41914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal@RunWith(AndroidJUnit4.class)
42914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal@SmallTest
43914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalpublic class PostMessageServiceConnectionTest {
44914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    @Rule
45914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    public final ServiceTestRule mServiceRule;
46914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    @Rule
47914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    public final ActivityTestRule<TestActivity> mActivityTestRule;
48914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    private TestCustomTabsCallback mCallback;
49914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    private Context mContext;
50914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    private PostMessageServiceConnection mConnection;
51914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    private boolean mServiceConnected;
52914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
53914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
54914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    public PostMessageServiceConnectionTest() {
55914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mActivityTestRule = new ActivityTestRule<TestActivity>(TestActivity.class);
56914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mServiceRule = new ServiceTestRule();
57914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    }
58914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
59914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    @Before
60914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    public void setup() {
61914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mCallback = new TestCustomTabsCallback();
62914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mContext = mActivityTestRule.getActivity();
63914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mConnection = new PostMessageServiceConnection(
64914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal                new CustomTabsSessionToken(mCallback.getStub())) {
65e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas            @Override
66914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            public void onPostMessageServiceConnected() {
67914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal                mServiceConnected = true;
68914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            }
69914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
70914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            @Override
71914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            public void onPostMessageServiceDisconnected() {
72914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal                mServiceConnected = false;
73914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            }
74914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        };
75914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        Intent intent = new Intent();
76914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        intent.setClassName(mContext.getPackageName(), PostMessageService.class.getName());
77914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        try {
78914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            mServiceRule.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
79914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        } catch (TimeoutException e) {
80914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            fail();
81914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        }
82914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    }
83914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
84914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    @Test
85914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    public void testNotifyChannelCreationAndSendMessages() {
86914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        PollingCheck.waitFor(500, new PollingCheck.PollingCheckCondition() {
87914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            @Override
88914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            public boolean canProceed() {
89914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal                return mServiceConnected;
90914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            }
91914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        });
92914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        assertTrue(mServiceConnected);
93914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mConnection.notifyMessageChannelReady(null);
94914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        assertTrue(mCallback.isMessageChannelReady());
95914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mConnection.postMessage("message1", null);
96914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        assertEquals(mCallback.getMessages().size(), 1);
97914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mConnection.postMessage("message2", null);
98914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        assertEquals(mCallback.getMessages().size(), 2);
99914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    }
100914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal}
101