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