176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann/*
276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann * Copyright (C) 2016 The Android Open Source Project
376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann *
476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann * Licensed under the Apache License, Version 2.0 (the "License");
576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann * you may not use this file except in compliance with the License.
676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann * You may obtain a copy of the License at
776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann *
876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann *      http://www.apache.org/licenses/LICENSE-2.0
976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann *
1076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann * Unless required by applicable law or agreed to in writing, software
1176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann * distributed under the License is distributed on an "AS IS" BASIS,
1276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann * See the License for the specific language governing permissions and
1476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann * limitations under the License.
1576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann */
1676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
1776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannpackage android.print;
1876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
1913fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmannimport static android.print.test.Utils.assertException;
2013fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
211eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmannimport static org.junit.Assert.assertEquals;
221eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmannimport static org.junit.Assert.assertTrue;
231eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann
2476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.annotation.NonNull;
2576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.content.ComponentName;
2676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.content.Context;
2776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.os.Bundle;
2876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.os.CancellationSignal;
2976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.os.Handler;
3076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.os.Looper;
3176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.os.ParcelFileDescriptor;
3276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.os.Process;
3376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.os.ServiceManager;
3476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.os.UserHandle;
3576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.print.PrintAttributes.Margins;
3676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.print.PrintAttributes.MediaSize;
3776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport android.print.PrintAttributes.Resolution;
3813fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmannimport android.print.test.BasePrintTest;
3913fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmannimport android.print.test.services.FirstPrintService;
4013fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmannimport android.print.test.services.PrintServiceCallbacks;
4113fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmannimport android.print.test.services.PrinterDiscoverySessionCallbacks;
4213fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmannimport android.print.test.services.StubbablePrinterDiscoverySession;
431eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmannimport android.printservice.recommendation.IRecommendationsChangeListener;
443ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmannimport android.support.test.filters.LargeTest;
453ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmannimport android.support.test.filters.MediumTest;
463ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmannimport android.support.test.runner.AndroidJUnit4;
471eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann
4859b0fbd1048521fed9180d592b689c4aa3d81a97Philip P. Moltmannimport org.junit.Before;
493ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmannimport org.junit.Test;
503ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmannimport org.junit.runner.RunWith;
5176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
5276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport java.util.ArrayList;
5376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannimport java.util.List;
5476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
5576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann/**
5676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann * tests feeding all possible parameters to the IPrintManager Binder.
5776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann */
583ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann@RunWith(AndroidJUnit4.class)
5976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmannpublic class IPrintManagerParametersTest extends BasePrintTest {
6076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
6176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private final int BAD_APP_ID = 0xffffffff;
6276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
6376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private final int mAppId;
6476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private final int mUserId;
6576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private final PrintJobId mBadPrintJobId;
6676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
6776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private PrintJob mGoodPrintJob;
6876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private PrinterId mGoodPrinterId;
6976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private ComponentName mBadComponentName;
7076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
7176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private IPrintManager mIPrintManager;
7276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
7376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
7476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * Create a new IPrintManagerParametersTest and setup basic fields.
7576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
7676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    public IPrintManagerParametersTest() {
7776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        super();
7876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
7976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mAppId = UserHandle.getAppId(Process.myUid());
8076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mUserId = UserHandle.myUserId();
8176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mBadPrintJobId = new PrintJobId();
8276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mBadComponentName = new ComponentName("bad", "bad");
8376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
8476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
8576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
8676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * Create a mock PrintDocumentAdapter.
8776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     *
8876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * @return The adapter
8976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
9076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private @NonNull PrintDocumentAdapter createMockAdapter() {
9176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        return new PrintDocumentAdapter() {
9276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            @Override
9376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            public void onStart() {
9476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                onStartCalled();
9576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            }
9676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
9776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            @Override
9876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes,
9976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                    CancellationSignal cancellationSignal, LayoutResultCallback callback,
10076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                    Bundle extras) {
1013ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                callback.onLayoutFailed("not implemented");
10276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            }
10376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
10476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            @Override
10576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            public void onWrite(PageRange[] pages, ParcelFileDescriptor destination,
10676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                    CancellationSignal cancellationSignal, WriteResultCallback callback) {
10776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            }
10876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        };
10976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
11076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
11176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
11276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * Create mock print service callbacks.
11376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     *
11476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * @return the callbacks
11576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
11676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private PrintServiceCallbacks createMockCallbacks() {
11776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        return createMockPrintServiceCallbacks(
1183ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                invocation -> createMockPrinterDiscoverySessionCallbacks(invocation1 -> {
1193ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                    // Get the session.
1203ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                    StubbablePrinterDiscoverySession session =
1213ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                            ((PrinterDiscoverySessionCallbacks) invocation1
1223ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                            .getMock()).getSession();
1233ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann
1243ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                    if (session.getPrinters().isEmpty()) {
1253ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                        final String PRINTER_NAME = "good printer";
1263ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                        List<PrinterInfo> printers = new ArrayList<>();
1273ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann
1283ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                        // Add the printer.
1293ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                        mGoodPrinterId = session.getService()
1303ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                .generatePrinterId(PRINTER_NAME);
1313ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann
1323ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                        PrinterCapabilitiesInfo capabilities =
1333ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                new PrinterCapabilitiesInfo.Builder(mGoodPrinterId)
1343ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                        .setMinMargins(
1353ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                                new Margins(200, 200, 200, 200))
1363ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                        .addMediaSize(MediaSize.ISO_A4, true)
1373ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                        .addResolution(new Resolution("300x300",
1383ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                                "300x300", 300, 300),
1393ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                                true)
1403ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                        .setColorModes(
1413ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                                PrintAttributes.COLOR_MODE_COLOR,
1423ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                                PrintAttributes.COLOR_MODE_COLOR)
1433ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                        .build();
1443ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann
1453ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                        PrinterInfo printer = new PrinterInfo.Builder(
1463ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                mGoodPrinterId,
1473ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                PRINTER_NAME,
1483ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                PrinterInfo.STATUS_IDLE)
1493ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                        .setCapabilities(capabilities)
1503ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                        .build();
1513ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                        printers.add(printer);
1523ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann
1533ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                        session.addPrinters(printers);
15476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                    }
15513fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann                    onPrinterDiscoverySessionCreateCalled();
1563ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                    return null;
1573ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                }, null, null, null, null, null, null),
15876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                null, null);
15976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
16076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
16176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
16276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * Create a IPrintJobStateChangeListener object.
16376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     *
16476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * @return the object
16576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * @throws Exception if the object could not be created.
16676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
16776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private IPrintJobStateChangeListener createMockIPrintJobStateChangeListener() throws Exception {
16876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        return new PrintManager.PrintJobStateChangeListenerWrapper(null,
16976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                new Handler(Looper.getMainLooper()));
17076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
17176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
17276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
17366c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     * Create a IPrintServicesChangeListener object.
17466c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     *
17566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     * @return the object
17666c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     * @throws Exception if the object could not be created.
17766c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     */
17866c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    private IPrintServicesChangeListener createMockIPrintServicesChangeListener() throws Exception {
17966c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        return new PrintManager.PrintServicesChangeListenerWrapper(null,
18066c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann                new Handler(Looper.getMainLooper()));
18166c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    }
18266c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
1839dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    /**
1849dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann     * Create a IPrintServiceRecommendationsChangeListener object.
1859dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann     *
1869dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann     * @return the object
1879dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann     * @throws Exception if the object could not be created.
1889dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann     */
1899dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    private IRecommendationsChangeListener
1909dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    createMockIPrintServiceRecommendationsChangeListener() throws Exception {
1919dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann        return new PrintManager.PrintServiceRecommendationsChangeListenerWrapper(null,
1929dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann                new Handler(Looper.getMainLooper()));
1939dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    }
19466c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
19566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    /**
19676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * Create a IPrinterDiscoveryObserver object.
19776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     *
19876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * @return the object
19976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * @throws Exception if the object could not be created.
20076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
20176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    private IPrinterDiscoveryObserver createMockIPrinterDiscoveryObserver() throws Exception {
20276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        return new PrinterDiscoverySession.PrinterDiscoveryObserver(null);
20376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
20476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
20566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    private void startPrinting() {
20613fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        mGoodPrintJob = print(createMockAdapter(), (PrintAttributes) null);
20766c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
20866c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        // Wait for PrintActivity to be ready
20913fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        waitForAdapterStartCallbackCalled();
21066c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
21166c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        // Wait for printer discovery session to be ready
21213fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        waitForPrinterDiscoverySessionCreateCallbackCalled();
21313fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    }
21413fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
21513fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    private void endPrinting() {
21613fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        getUiDevice().pressBack();
21713fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        getUiDevice().pressBack();
21866c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    }
21966c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
2203ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    /**
2213ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann     * Return a printer Id that is not from any print service
2223ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann     *
2233ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann     * @return The bad printer id.
2243ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann     */
2253ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    private PrinterId getBadPrinterId() {
2263ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        return new PrinterId(getActivity().getComponentName(), "dummy printer");
2273ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    }
2283ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann
22959b0fbd1048521fed9180d592b689c4aa3d81a97Philip P. Moltmann    @Before
23059b0fbd1048521fed9180d592b689c4aa3d81a97Philip P. Moltmann    public void setUpMockService() throws Exception {
23113fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        FirstPrintService.setCallbacks(createMockCallbacks());
23276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
23376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager = IPrintManager.Stub
23476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                .asInterface(ServiceManager.getService(Context.PRINT_SERVICE));
23576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
23676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
23776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
23876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.getPrintJobInfo
23976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
24001527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @LargeTest
2413ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
24213fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testGetPrintJobInfo() throws Throwable {
24366c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        startPrinting();
24466c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
24576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        assertEquals(mGoodPrintJob.getId(), mIPrintManager.getPrintJobInfo(mGoodPrintJob.getId(),
24676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                        mAppId, mUserId).getId());
24776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        assertEquals(null, mIPrintManager.getPrintJobInfo(mBadPrintJobId, mAppId, mUserId));
24876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        assertEquals(null, mIPrintManager.getPrintJobInfo(null, mAppId, mUserId));
24976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
2503ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(
2513ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                () -> mIPrintManager.getPrintJobInfo(mGoodPrintJob.getId(), BAD_APP_ID, mUserId),
2523ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                SecurityException.class);
25376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
25476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
25513fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
25613fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        endPrinting();
25776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
25876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
25976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
26076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.getPrintJobInfos
26176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
26201527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @LargeTest
2633ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
26413fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testGetPrintJobInfos() throws Throwable {
26566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        startPrinting();
26666c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
26776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        List<PrintJobInfo> infos = mIPrintManager.getPrintJobInfos(mAppId, mUserId);
26876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
26976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        boolean foundPrintJob = false;
27076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        for (PrintJobInfo info : infos) {
27176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            if (info.getId().equals(mGoodPrintJob.getId())) {
27276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                assertEquals(PrintJobInfo.STATE_CREATED, info.getState());
27376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                foundPrintJob = true;
27476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            }
27576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        }
27676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        assertTrue(foundPrintJob);
27776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
2783ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.getPrintJobInfos(BAD_APP_ID, mUserId),
2793ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                SecurityException.class);
28076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
28176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
28213fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
28313fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        endPrinting();
28476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
28576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
28676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
28776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.print
28876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
28901527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @LargeTest
2903ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
29113fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testPrint() throws Throwable {
29276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final String name = "dummy print job";
29376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
29476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final IPrintDocumentAdapter adapter = new PrintManager
29576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann                .PrintDocumentAdapterDelegate(getActivity(), createMockAdapter());
29676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
29766c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        startPrinting();
29876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
2993ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.print(null, adapter, null,
3003ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                getActivity().getPackageName(), mAppId, mUserId),
3013ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                IllegalArgumentException.class);
30276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
3033ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.print(name, null, null,
3043ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                getActivity().getPackageName(), mAppId, mUserId),
3053ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
30676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
3073ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.print(name, adapter, null, null, mAppId, mUserId),
3083ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                IllegalArgumentException.class);
30976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
3103ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.print(name, adapter, null,
3113ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                mBadComponentName.getPackageName(), mAppId, mUserId),
3123ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                IllegalArgumentException.class);
31376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
3143ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.print(name, adapter, null,
3153ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                getActivity().getPackageName(), BAD_APP_ID, mUserId), SecurityException.class);
31676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
31776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
31813fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
31913fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        endPrinting();
32076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
32176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
32276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
32376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.cancelPrintJob
32476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
32501527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @LargeTest
3263ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
32713fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testCancelPrintJob() throws Throwable {
32866c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        startPrinting();
32966c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
33076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Invalid print jobs IDs do not produce an exception
33176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.cancelPrintJob(mBadPrintJobId, mAppId, mUserId);
33276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.cancelPrintJob(null, mAppId, mUserId);
33376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
3343ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(
3353ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                () -> mIPrintManager.cancelPrintJob(mGoodPrintJob.getId(), BAD_APP_ID, mUserId),
3363ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                SecurityException.class);
33776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
33876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
33976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
34076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Must be last as otherwise mGoodPrintJob will not be good anymore
34176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.cancelPrintJob(mGoodPrintJob.getId(), mAppId, mUserId);
34213fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
34313fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        endPrinting();
34476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
34576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
34676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
34776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.restartPrintJob
34876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
34901527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @LargeTest
3503ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
35113fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testRestartPrintJob() throws Throwable {
35266c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        startPrinting();
35366c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
35476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.restartPrintJob(mGoodPrintJob.getId(), mAppId, mUserId);
35576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
35676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Invalid print jobs IDs do not produce an exception
35776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.restartPrintJob(mBadPrintJobId, mAppId, mUserId);
35876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.restartPrintJob(null, mAppId, mUserId);
35976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
3603ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(
3613ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                () -> mIPrintManager.restartPrintJob(mGoodPrintJob.getId(), BAD_APP_ID, mUserId),
3623ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                SecurityException.class);
36376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
36476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
36513fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
36613fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        endPrinting();
36776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
36876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
36976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
37076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.addPrintJobStateChangeListener
37176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
37201527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @MediumTest
3733ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
37413fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
37513fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testAddPrintJobStateChangeListener() throws Throwable {
37676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final IPrintJobStateChangeListener listener = createMockIPrintJobStateChangeListener();
37776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
37876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.addPrintJobStateChangeListener(listener, mAppId, mUserId);
37976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
3803ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.addPrintJobStateChangeListener(null, mAppId, mUserId),
3813ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
38276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
3833ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(
3843ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                () -> mIPrintManager.addPrintJobStateChangeListener(listener, BAD_APP_ID, mUserId),
3853ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                SecurityException.class);
38676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
38776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
38876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
38976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
39076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
39176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.removePrintJobStateChangeListener
39276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
39301527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @MediumTest
3943ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
39513fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
39613fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testRemovePrintJobStateChangeListener() throws Throwable {
39776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final IPrintJobStateChangeListener listener = createMockIPrintJobStateChangeListener();
39876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
39976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.addPrintJobStateChangeListener(listener, mAppId, mUserId);
40076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.removePrintJobStateChangeListener(listener, mUserId);
40176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
40276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Removing unknown listeners is a no-op
40376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.removePrintJobStateChangeListener(listener, mUserId);
40476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
40576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.addPrintJobStateChangeListener(listener, mAppId, mUserId);
4063ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.removePrintJobStateChangeListener(null, mUserId),
4073ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
40876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
40976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
41076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
41176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
41276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
41366c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     * test IPrintManager.addPrintServicesChangeListener
41476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
41501527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @MediumTest
4163ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
41713fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
41813fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testAddPrintServicesChangeListener() throws Throwable {
41966c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        final IPrintServicesChangeListener listener = createMockIPrintServicesChangeListener();
42066c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
4211eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann        assertException(() ->  mIPrintManager.addPrintServicesChangeListener(listener, mUserId),
4221eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann                SecurityException.class);
42366c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
4243ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.addPrintServicesChangeListener(null, mUserId),
4253ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
42676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
42776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
42876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
42976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
43076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
43166c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     * test IPrintManager.removePrintServicesChangeListener
43276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
43301527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @MediumTest
4343ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
43513fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
43613fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testRemovePrintServicesChangeListener() throws Throwable {
43766c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        final IPrintServicesChangeListener listener = createMockIPrintServicesChangeListener();
43866c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
4391eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann        assertException(() ->  mIPrintManager.removePrintServicesChangeListener(listener, mUserId),
4401eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann                SecurityException.class);
44166c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
4421eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann        assertException(() ->  mIPrintManager.removePrintServicesChangeListener(null, mUserId),
4433ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
44466c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    }
44566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
44666c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    /**
44766c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     * test IPrintManager.getPrintServices
44866c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     */
44901527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @MediumTest
4503ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
45113fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
45213fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testGetPrintServices() throws Throwable {
4531eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann        assertException(() -> mIPrintManager.getPrintServices(PrintManager.ALL_SERVICES, mUserId),
4541eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann                SecurityException.class);
45576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
4561eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann        assertException(() -> mIPrintManager.getPrintServices(0, mUserId),
4571eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann                SecurityException.class);
45866c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
4593ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.getPrintServices(~PrintManager.ALL_SERVICES, mUserId),
4603ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                IllegalArgumentException.class);
46166c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
46266c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
46366c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    }
46466c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
46566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    /**
46666c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     * test IPrintManager.setPrintServiceEnabled
46766c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     */
46801527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @MediumTest
4693ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
47013fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
47113fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testSetPrintServiceEnabled() throws Throwable {
4723ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(
4733ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                () -> mIPrintManager.setPrintServiceEnabled(new ComponentName("bad", "name"), true,
4743ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                                mUserId), SecurityException.class);
47566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
4763ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.setPrintServiceEnabled(null, true, mUserId),
4773ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                SecurityException.class);
47866c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
47976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
4809dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    }
4819dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann
4829dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    /**
4839dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann     * test IPrintManager.addPrintServiceRecommendationsChangeListener
4849dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann     */
4859dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    @MediumTest
4863ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
48713fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
48813fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testAddPrintServiceRecommendationsChangeListener() throws Throwable {
4899dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann        final IRecommendationsChangeListener listener =
4909dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann                createMockIPrintServiceRecommendationsChangeListener();
4919dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann
4921eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann        assertException(() -> mIPrintManager.addPrintServiceRecommendationsChangeListener(listener,
4931eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann                mUserId), SecurityException.class);
4949dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann
4953ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(
4963ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                () -> mIPrintManager.addPrintServiceRecommendationsChangeListener(null, mUserId),
4973ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
4989dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann
4999dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
5009dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    }
5019dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann
5029dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    /**
5039dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann     * test IPrintManager.removePrintServicesChangeListener
5049dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann     */
5059dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    @MediumTest
5063ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
50713fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
50813fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testRemovePrintServiceRecommendationsChangeListener() throws Throwable {
5099dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann        final IRecommendationsChangeListener listener =
5109dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann                createMockIPrintServiceRecommendationsChangeListener();
5119dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann
5121eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann        assertException(() -> mIPrintManager.removePrintServiceRecommendationsChangeListener(
5131eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann                listener, mUserId), SecurityException.class);
5149dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann
5153ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(
5163ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                () -> mIPrintManager.removePrintServiceRecommendationsChangeListener(null, mUserId),
5173ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
5189dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann
5199dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
5209dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    }
5219dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann
5229dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    /**
5239dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann     * test IPrintManager.getPrintServiceRecommendations
5249dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann     */
5259dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann    @MediumTest
5263ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
52713fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
52813fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testGetPrintServiceRecommendations() throws Throwable {
5291eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann        assertException(() -> mIPrintManager.getPrintServiceRecommendations(mUserId),
5301eab696fae85bf2fa298f1eb63165b0501dee3d2Philip P. Moltmann                SecurityException.class);
5319dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann
5329dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
53376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
53476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
53576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
53676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.createPrinterDiscoverySession
53776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
53801527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @MediumTest
5393ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
54013fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
54113fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testCreatePrinterDiscoverySession() throws Throwable {
54276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final IPrinterDiscoveryObserver listener = createMockIPrinterDiscoveryObserver();
54376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
54476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.createPrinterDiscoverySession(listener, mUserId);
54576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
54676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        try {
5473ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann            assertException(() -> mIPrintManager.createPrinterDiscoverySession(null, mUserId),
5483ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                    NullPointerException.class);
54976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
55076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            // Cannot test bad user Id as these tests are allowed to call across users
55176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        } finally {
55276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            // Remove discovery session so that the next test create a new one. Usually a leaked
55376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            // session is removed on the next call from the print service. But in this case we want
55476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            // to force a new call to onPrinterDiscoverySessionStart in the next test.
55576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann            mIPrintManager.destroyPrinterDiscoverySession(listener, mUserId);
55676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        }
55776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
55876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
55976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
56076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.startPrinterDiscovery
56176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
56201527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @LargeTest
5633ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
56413fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testStartPrinterDiscovery() throws Throwable {
56566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        startPrinting();
56666c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
56776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final IPrinterDiscoveryObserver listener = createMockIPrinterDiscoveryObserver();
56876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final List<PrinterId> goodPrinters = new ArrayList<>();
56976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        goodPrinters.add(mGoodPrinterId);
57076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
57176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final List<PrinterId> badPrinters = new ArrayList<>();
5723ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        badPrinters.add(getBadPrinterId());
57376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
57476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final List<PrinterId> emptyPrinters = new ArrayList<>();
57576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
57676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final List<PrinterId> nullPrinters = new ArrayList<>();
57776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        nullPrinters.add(null);
57876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
57976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.startPrinterDiscovery(listener, goodPrinters, mUserId);
58076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
58176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Bad or no printers do no cause exceptions
58276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.startPrinterDiscovery(listener, badPrinters, mUserId);
58376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.startPrinterDiscovery(listener, emptyPrinters, mUserId);
58476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.startPrinterDiscovery(listener, null, mUserId);
58576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
5863ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.startPrinterDiscovery(listener, nullPrinters, mUserId),
5873ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
58876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
5893ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.startPrinterDiscovery(null, goodPrinters, mUserId),
5903ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
59176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
59276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
59313fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
59413fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        endPrinting();
59576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
59676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
59776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
59876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.stopPrinterDiscovery
59976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
60001527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @MediumTest
6013ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
60213fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
60313fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testStopPrinterDiscovery() throws Throwable {
60476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final IPrinterDiscoveryObserver listener = createMockIPrinterDiscoveryObserver();
60576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
60676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.startPrinterDiscovery(listener, null, mUserId);
60776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.stopPrinterDiscovery(listener, mUserId);
60876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
60976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Stopping an already stopped session is a no-op
61076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.stopPrinterDiscovery(listener, mUserId);
61176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
61276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.startPrinterDiscovery(listener, null, mUserId);
6133ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.stopPrinterDiscovery(null, mUserId),
6143ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
61576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
61676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
61776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
61876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
61976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
62076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.validatePrinters
62176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
62201527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @LargeTest
6233ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
62413fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testValidatePrinters() throws Throwable {
62566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        startPrinting();
62666c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
62776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final List<PrinterId> goodPrinters = new ArrayList<>();
62876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        goodPrinters.add(mGoodPrinterId);
62976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
63076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final List<PrinterId> badPrinters = new ArrayList<>();
6313ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        badPrinters.add(getBadPrinterId());
63276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
63376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final List<PrinterId> emptyPrinters = new ArrayList<>();
63476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
63576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final List<PrinterId> nullPrinters = new ArrayList<>();
63676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        nullPrinters.add(null);
63776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
63876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.validatePrinters(goodPrinters, mUserId);
63976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
64076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Bad or empty list of printers do no cause exceptions
64176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.validatePrinters(badPrinters, mUserId);
64276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.validatePrinters(emptyPrinters, mUserId);
64376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
6443ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.validatePrinters(null, mUserId),
6453ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
64676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
6473ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.validatePrinters(nullPrinters, mUserId),
6483ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
64976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
65076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
65113fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
65213fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        endPrinting();
65376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
65476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
65576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
65676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.startPrinterStateTracking
65776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
65801527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @LargeTest
6593ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
66013fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testStartPrinterStateTracking() throws Throwable {
66166c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        startPrinting();
66266c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
66376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.startPrinterStateTracking(mGoodPrinterId, mUserId);
66476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
66576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Bad printers do no cause exceptions
6663ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        mIPrintManager.startPrinterStateTracking(getBadPrinterId(), mUserId);
66776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
6683ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.startPrinterStateTracking(null, mUserId),
6693ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
67076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
67176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
67213fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
67313fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        endPrinting();
67476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
67576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
67676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
67776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.getCustomPrinterIcon
67876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
67901527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @LargeTest
6803ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
68113fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testGetCustomPrinterIcon() throws Throwable {
68266c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        startPrinting();
68366c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
68476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.getCustomPrinterIcon(mGoodPrinterId, mUserId);
68576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
68676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Bad printers do no cause exceptions
6873ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        mIPrintManager.getCustomPrinterIcon(getBadPrinterId(), mUserId);
68876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
6893ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.getCustomPrinterIcon(null, mUserId),
6903ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
69176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
69276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
69313fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
69413fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        endPrinting();
69576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
69676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
69776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
69876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.stopPrinterStateTracking
69976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
70001527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @LargeTest
7013ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
70213fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testStopPrinterStateTracking() throws Throwable {
70366c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        startPrinting();
70466c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
70576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.startPrinterStateTracking(mGoodPrinterId, mUserId);
70676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.stopPrinterStateTracking(mGoodPrinterId, mUserId);
70776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
70876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Stop to track a non-tracked printer is a no-op
70976d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.stopPrinterStateTracking(mGoodPrinterId, mUserId);
71076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
71176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Bad printers do no cause exceptions
7123ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        mIPrintManager.startPrinterStateTracking(getBadPrinterId(), mUserId);
7133ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        mIPrintManager.stopPrinterStateTracking(getBadPrinterId(), mUserId);
71476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
7153ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.stopPrinterStateTracking(null, mUserId),
7163ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
71776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
71876d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
71913fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann
72013fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann        endPrinting();
72176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
72276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
72376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    /**
72476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     * test IPrintManager.destroyPrinterDiscoverySession
72576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann     */
72601527ee6d029d2722ab7fb3b52ebd886e86580d9Philip P. Moltmann    @MediumTest
7273ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann    @Test
72813fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    @NoActivity
72913fba9dbe74de3c207eb55ecf3a28c35736bdc4cPhilip P. Moltmann    public void testDestroyPrinterDiscoverySession() throws Throwable {
73076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        final IPrinterDiscoveryObserver listener = createMockIPrinterDiscoveryObserver();
73176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
73276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.createPrinterDiscoverySession(listener, mUserId);
73376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.destroyPrinterDiscoverySession(listener, mUserId);
73476d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
73576d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Destroying already destroyed session is a no-op
73676d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        mIPrintManager.destroyPrinterDiscoverySession(listener, mUserId);
73776d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
7383ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann        assertException(() -> mIPrintManager.destroyPrinterDiscoverySession(null, mUserId),
7393ae33bd02802878f6d208c351c4721d832a920aePhilip P. Moltmann                NullPointerException.class);
74076d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann
74176d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann        // Cannot test bad user Id as these tests are allowed to call across users
74276d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann    }
74376d7e3ee70c4299b22b1a03505d2b4f108716c75Philip P. Moltmann}
744