• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.dialer.voicemail;
18 
19 import android.content.ContentUris;
20 import android.database.Cursor;
21 import android.net.Uri;
22 import android.test.suitebuilder.annotation.Suppress;
23 
24 import com.android.dialer.calllog.CallLogActivity;
25 import com.android.dialer.database.VoicemailArchiveContract;
26 import static com.android.dialer.voicemail.VoicemailAsyncTaskUtil.Tasks.ARCHIVE_VOICEMAIL_CONTENT;
27 import static com.android.dialer.voicemail.VoicemailPlaybackPresenter.Tasks.CHECK_FOR_CONTENT;
28 
29 /**
30  * Unit tests for {@link VoicemailPlaybackPresenter} and {@link VoicemailPlaybackLayout}.
31  */
32 public class VoicemailPlaybackTest
33         extends VoicemailActivityInstrumentationTestCase2<CallLogActivity> {
34 
VoicemailPlaybackTest()35     public VoicemailPlaybackTest() {
36         super(CallLogActivity.class);
37     }
38 
39     @Override
setUp()40     public void setUp() throws Exception {
41         super.setUp();
42         mPresenter = VoicemailPlaybackPresenter.getInstance(getActivity(), null);
43     }
44 
45     @Override
tearDown()46     public void tearDown() throws Exception {
47         cleanUpArchivedVoicemailUri();
48         super.tearDown();
49     }
50 
51     @Suppress
testWhenCheckForContentCompletes()52     public void testWhenCheckForContentCompletes() throws Throwable {
53         setUriForRealFileVoicemailEntry();
54         setPlaybackViewForPresenter();
55 
56         getInstrumentation().runOnMainSync(new Runnable() {
57             @Override
58             public void run() {
59                 mPresenter.resumePlayback();
60             }
61         });
62         mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
63         getInstrumentation().waitForIdleSync();
64 
65         assertStateTextContains("Loading voicemail");
66     }
67 
testArchiveContent()68     public void testArchiveContent() throws Throwable {
69         setUriForRealFileVoicemailEntry();
70         setPlaybackViewForPresenter();
71         mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
72 
73         getInstrumentation().runOnMainSync(new Runnable() {
74             @Override
75             public void run() {
76                 mPresenter.archiveContent(mVoicemailUri, true);
77             }
78         });
79         mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
80         mFakeAsyncTaskExecutor.runTask(ARCHIVE_VOICEMAIL_CONTENT);
81         getInstrumentation().waitForIdleSync();
82         assertVoicemailArchived();
83     }
84 
testShareContent()85     public void testShareContent() throws Throwable {
86         setUriForRealFileVoicemailEntry();
87         setPlaybackViewForPresenter();
88         mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
89 
90         getInstrumentation().runOnMainSync(new Runnable() {
91             @Override
92             public void run() {
93                 mPresenter.archiveContent(mVoicemailUri, false);
94             }
95         });
96         mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
97         mFakeAsyncTaskExecutor.runTask(ARCHIVE_VOICEMAIL_CONTENT);
98         getInstrumentation().waitForIdleSync();
99         assertVoicemailArchived();
100     }
101 
assertVoicemailArchived()102     private void assertVoicemailArchived() {
103         try (Cursor cursor = getArchivedVoicemailCursor()) {
104             assertTrue(hasContent(cursor));
105             assertEquals(ContentUris.parseId(mVoicemailUri), getRowServerId(cursor));
106         } catch (Exception e) {
107             fail("Voicemail was not archived: " + e.toString());
108         }
109     }
110 
cleanUpArchivedVoicemailUri()111     private void cleanUpArchivedVoicemailUri() {
112         try (Cursor cursor = getArchivedVoicemailCursor()) {
113             if (hasContent(cursor)) {
114                 getContentResolver().delete(getRowUri(cursor), null, null);
115             }
116         }
117     }
118 
getArchivedVoicemailCursor()119     private Cursor getArchivedVoicemailCursor() {
120         return getContentResolver().query(
121                 VoicemailArchiveContract.VoicemailArchive.CONTENT_URI,
122                 new String[] {
123                         VoicemailArchiveContract.VoicemailArchive._ID,
124                         VoicemailArchiveContract.VoicemailArchive.SERVER_ID
125                 },
126                 VoicemailArchiveContract.VoicemailArchive.SERVER_ID + "="
127                         + ContentUris.parseId(mVoicemailUri),
128                 null,
129                 null);
130     }
131 
getRowServerId(Cursor cursor)132     private int getRowServerId(Cursor cursor) {
133         return cursor
134                 .getInt(cursor.getColumnIndex(VoicemailArchiveContract.VoicemailArchive.SERVER_ID));
135     }
136 
getRowUri(Cursor cursor)137     private Uri getRowUri(Cursor cursor) {
138         return VoicemailArchiveContract.VoicemailArchive.buildWithId(cursor.getInt(
139                 cursor.getColumnIndex(VoicemailArchiveContract.VoicemailArchive._ID)));
140     }
141 
hasContent(Cursor cursor)142     private boolean hasContent(Cursor cursor) {
143         return cursor != null && cursor.moveToFirst();
144     }
145 }