145fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park/* 245fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * Copyright (C) 2015 The Android Open Source Project 345fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * 445fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * Licensed under the Apache License, Version 2.0 (the "License"); 545fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * you may not use this file except in compliance with the License. 645fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * You may obtain a copy of the License at 745fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * 845fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * http://www.apache.org/licenses/LICENSE-2.0 945fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * 1045fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * Unless required by applicable law or agreed to in writing, software 1145fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * distributed under the License is distributed on an "AS IS" BASIS, 1245fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1345fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * See the License for the specific language governing permissions and 1445fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park * limitations under the License. 1545fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park */ 1645fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 1745fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Parkpackage com.android.support.car.apitest; 1845fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 1945fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Parkimport android.os.Looper; 2045fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Parkimport android.support.car.Car; 21ed493f7ffcfaf46819913825a4edddde7736b429Jason Tholstrupimport android.support.car.CarConnectionCallback; 2245fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Parkimport android.support.car.content.pm.CarPackageManager; 2345fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Parkimport android.test.AndroidTestCase; 242906c4461afa9ac0c5865768a3238281e5ecf26dPavel Maltsevimport android.test.suitebuilder.annotation.MediumTest; 2545fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 2645fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Parkimport java.util.concurrent.Semaphore; 2745fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Parkimport java.util.concurrent.TimeUnit; 2845fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 292906c4461afa9ac0c5865768a3238281e5ecf26dPavel Maltsev@MediumTest 3045fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Parkpublic class CarPackageManagerTest extends AndroidTestCase { 3145fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park private static final long DEFAULT_WAIT_TIMEOUT_MS = 3000; 3245fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 3345fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park private final Semaphore mConnectionWait = new Semaphore(0); 3445fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 3545fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park private Car mCar; 3645fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park private CarPackageManager mCarPackageManager; 3745fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 38ed493f7ffcfaf46819913825a4edddde7736b429Jason Tholstrup private final CarConnectionCallback mConnectionCallbacks = 39ed493f7ffcfaf46819913825a4edddde7736b429Jason Tholstrup new CarConnectionCallback() { 4045fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park @Override 41ed493f7ffcfaf46819913825a4edddde7736b429Jason Tholstrup public void onDisconnected(Car car) { 4245fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park assertMainThread(); 4345fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park } 4445fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 4545fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 4645fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park @Override 47ed493f7ffcfaf46819913825a4edddde7736b429Jason Tholstrup public void onConnected(Car car) { 4845fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park assertMainThread(); 4945fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park mConnectionWait.release(); 5045fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park } 5145fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park }; 5245fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 5345fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park private void assertMainThread() { 5445fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park assertTrue(Looper.getMainLooper().isCurrentThread()); 5545fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park } 561ac59caa6b1bc760aef0adb3c675b49bfa53af9fJason Tholstrup 5745fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park private void waitForConnection(long timeoutMs) throws InterruptedException { 5845fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park mConnectionWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS); 5945fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park } 6045fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 6145fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park @Override 6245fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park protected void setUp() throws Exception { 6345fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park super.setUp(); 649aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup mCar = Car.createCar(getContext(), mConnectionCallbacks); 6545fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park mCar.connect(); 6645fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park waitForConnection(DEFAULT_WAIT_TIMEOUT_MS); 6745fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park mCarPackageManager = (CarPackageManager) mCar.getCarManager(Car.PACKAGE_SERVICE); 6845fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park assertNotNull(mCarPackageManager); 6945fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park } 7045fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 7145fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park @Override 7245fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park protected void tearDown() throws Exception { 7345fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park super.tearDown(); 7445fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park mCar.disconnect(); 7545fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park } 7645fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park 7745fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park public void testCreate() throws Exception { 7845fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park //nothing to do for now 7945fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park } 8045fdcbaab5699d7d8153bfda058d0eea2049c8b8Keun-young Park} 81