/*
 * Copyright (C) 2016 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.carrierdefaultapp;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.test.ActivityUnitTestCase;
import android.util.Log;

import org.mockito.MockitoAnnotations;

import java.util.HashMap;

public class CarrierDefaultActivityTestCase<T extends Activity> extends ActivityUnitTestCase<T> {

    protected TestContext mContext;

    private T mActivity;

    CarrierDefaultActivityTestCase(Class<T> activityClass) {
        super(activityClass);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        MockitoAnnotations.initMocks(this);
        mContext = new TestContext(getInstrumentation().getTargetContext());
        setActivityContext(mContext);
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    protected T startActivity() throws Throwable {
        runTestOnUiThread(new Runnable() {
            @Override
            public void run() {
                mActivity = startActivity(createActivityIntent(), null, null);
            }
        });
        return mActivity;
    }

    protected void stopActivity() throws Exception {
        getInstrumentation().callActivityOnStop(mActivity);
    }

    protected Intent createActivityIntent() {
        Intent intent = new Intent();
        return intent;
    }

    protected <S> void injectSystemService(Class<S> cls, S service) {
        mContext.injectSystemService(cls, service);
    }
}