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