101ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang/*
201ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang * Copyright (C) 2017 The Android Open Source Project
301ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang *
401ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang * Licensed under the Apache License, Version 2.0 (the "License");
501ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang * you may not use this file except in compliance with the License.
601ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang * You may obtain a copy of the License at
701ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang *
801ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang *      http://www.apache.org/licenses/LICENSE-2.0
901ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang *
1001ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang * Unless required by applicable law or agreed to in writing, software
1101ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang * distributed under the License is distributed on an "AS IS" BASIS,
1201ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1301ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang * See the License for the specific language governing permissions and
1401ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang * limitations under the License.
1501ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang */
1601ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
1701ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangpackage com.android.settings.print;
1801ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
1901ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport static org.mockito.Mockito.mock;
2001ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport static org.mockito.Mockito.verify;
2101ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport static org.mockito.Mockito.when;
2201ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
2301ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport android.app.Activity;
2401ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport android.content.res.Resources;
25206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhangimport android.print.PrintJob;
26206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhangimport android.print.PrintJobInfo;
2701ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport android.print.PrintManager;
2801ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport android.printservice.PrintServiceInfo;
2901ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
3001ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport com.android.settings.R;
3101ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport com.android.settings.TestConfig;
3201ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport com.android.settings.dashboard.SummaryLoader;
339f1e911759dc6fedaac9fa65afb79f6a93022bf4Andrew Sappersteinimport com.android.settings.testutils.SettingsRobolectricTestRunner;
3401ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
3501ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport org.junit.Before;
3601ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport org.junit.Test;
3701ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport org.junit.runner.RunWith;
3801ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport org.mockito.Mock;
39206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhangimport org.mockito.Mockito;
4001ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport org.mockito.MockitoAnnotations;
4101ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport org.robolectric.annotation.Config;
4201ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
43206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhangimport java.util.ArrayList;
4401ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangimport java.util.List;
4501ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
4601ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
4701ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang@RunWith(SettingsRobolectricTestRunner.class)
4801ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
4901ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhangpublic class PrintSettingsFragmentTest {
5001ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
5101ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    @Mock
5201ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    private PrintSettingsFragment.PrintSummaryProvider.PrintManagerWrapper mPrintManager;
5301ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    @Mock
5401ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    private Activity mActivity;
5501ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    @Mock
5601ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    private Resources mRes;
5701ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    @Mock
5801ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    private SummaryLoader mSummaryLoader;
5901ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    private SummaryLoader.SummaryProvider mSummaryProvider;
6001ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
6101ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    @Before
6201ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    public void setUp() {
6301ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        MockitoAnnotations.initMocks(this);
6401ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        when(mActivity.getResources()).thenReturn(mRes);
6501ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        mSummaryProvider = new PrintSettingsFragment.PrintSummaryProvider(mActivity, mSummaryLoader,
6601ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang                mPrintManager);
6701ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    }
6801ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
6901ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    @Test
70206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang    public void testSummary_hasActiveJob_shouldSetSummaryToNumberOfJobs() {
71206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang        final List<PrintJob> printJobs = new ArrayList<>();
72206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang        final PrintJob job = mock(PrintJob.class, Mockito.RETURNS_DEEP_STUBS);
73206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang        printJobs.add(job);
74206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang        when(job.getInfo().getState()).thenReturn(PrintJobInfo.STATE_STARTED);
75206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang        when(mPrintManager.getPrintJobs()).thenReturn(printJobs);
76206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang
77206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang        mSummaryProvider.setListening(true);
78206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang
79206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang        verify(mRes).getQuantityString(R.plurals.print_jobs_summary, 1, 1);
80206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang    }
81206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang
82206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang    @Test
8301ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    public void testSummary_shouldSetSummaryToNumberOfPrintServices() {
8401ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        final List<PrintServiceInfo> printServices = mock(List.class);
8501ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        when(printServices.isEmpty()).thenReturn(false);
8601ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        when(printServices.size()).thenReturn(2);
8701ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        // 2 services
88c5f4120484386fe841f1123cff96f806e56e111eDoris Ling        when(mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES))
89206b774f79716ad6c02e5f5c5066d3eea7e72bf8Fan Zhang                .thenReturn(printServices);
9001ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
9101ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        mSummaryProvider.setListening(true);
9201ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
9301ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        verify(mRes).getQuantityString(R.plurals.print_settings_summary, 2, 2);
9401ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
9501ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        // No service
96c5f4120484386fe841f1123cff96f806e56e111eDoris Ling        when(mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES)).thenReturn(null);
9701ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
9801ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        mSummaryProvider.setListening(true);
9901ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang
10001ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang        verify(mActivity).getString(R.string.print_settings_summary_no_service);
10101ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang    }
10201ece62faa6bfc05b6a344a9069896b2f5097242Fan Zhang}
103