1914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal/*
2ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * Copyright 2018 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
17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.browser.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;
29914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
3088f23f4c3c9d439cf8b300195962cb9a4e5f3165Aurimas Liutikasimport androidx.testutils.PollingCheck;
3188f23f4c3c9d439cf8b300195962cb9a4e5f3165Aurimas Liutikas
32914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport org.junit.Before;
33914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport org.junit.Rule;
34914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport org.junit.Test;
35914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport org.junit.runner.RunWith;
36914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
37914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalimport java.util.concurrent.TimeoutException;
38914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
39914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal/**
40914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal * Tests for {@link PostMessageServiceConnection} with no {@link CustomTabsService} component.
41914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal */
42914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal@RunWith(AndroidJUnit4.class)
43914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal@SmallTest
44914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysalpublic class PostMessageServiceConnectionTest {
45914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    @Rule
46914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    public final ServiceTestRule mServiceRule;
47914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    @Rule
48914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    public final ActivityTestRule<TestActivity> mActivityTestRule;
49914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    private TestCustomTabsCallback mCallback;
50914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    private Context mContext;
51914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    private PostMessageServiceConnection mConnection;
52914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    private boolean mServiceConnected;
53914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
54914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
55914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    public PostMessageServiceConnectionTest() {
56914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mActivityTestRule = new ActivityTestRule<TestActivity>(TestActivity.class);
57914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mServiceRule = new ServiceTestRule();
58914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    }
59914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
60914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    @Before
61914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    public void setup() {
62914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mCallback = new TestCustomTabsCallback();
63914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mContext = mActivityTestRule.getActivity();
64914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mConnection = new PostMessageServiceConnection(
65914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal                new CustomTabsSessionToken(mCallback.getStub())) {
66e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas            @Override
67914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            public void onPostMessageServiceConnected() {
68914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal                mServiceConnected = true;
69914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            }
70914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
71914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            @Override
72914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            public void onPostMessageServiceDisconnected() {
73914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal                mServiceConnected = false;
74914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            }
75914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        };
76914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        Intent intent = new Intent();
77914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        intent.setClassName(mContext.getPackageName(), PostMessageService.class.getName());
78914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        try {
79914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            mServiceRule.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
80914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        } catch (TimeoutException e) {
81914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            fail();
82914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        }
83914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    }
84914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal
85914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    @Test
86914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    public void testNotifyChannelCreationAndSendMessages() {
87914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        PollingCheck.waitFor(500, new PollingCheck.PollingCheckCondition() {
88914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            @Override
89914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            public boolean canProceed() {
90914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal                return mServiceConnected;
91914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal            }
92914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        });
93914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        assertTrue(mServiceConnected);
94914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mConnection.notifyMessageChannelReady(null);
95914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        assertTrue(mCallback.isMessageChannelReady());
96914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mConnection.postMessage("message1", null);
97914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        assertEquals(mCallback.getMessages().size(), 1);
98914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        mConnection.postMessage("message2", null);
99914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal        assertEquals(mCallback.getMessages().size(), 2);
100914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal    }
101914073c7cf933229a3f51ddeddb63bb9725a70beYusuf Ozuysal}
102