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