• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2020 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 package android.searchuiservice.cts;
17 
18 import static com.google.common.truth.Truth.assertThat;
19 import static androidx.test.InstrumentationRegistry.getContext;
20 
21 import android.app.search.SearchAction;
22 import android.app.search.SearchTarget;
23 import android.appwidget.AppWidgetProviderInfo;
24 import android.content.ComponentName;
25 import android.content.Intent;
26 import android.content.pm.ShortcutInfo;
27 import android.net.Uri;
28 import android.os.Bundle;
29 import android.os.Parcel;
30 import android.os.UserHandle;
31 
32 import androidx.annotation.NonNull;
33 import androidx.test.ext.junit.runners.AndroidJUnit4;
34 
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 
38 /**
39  * Tests for {@link SearchTarget}
40  *
41  * atest CtsSearchUiServiceTestCases
42  */
43 @RunWith(AndroidJUnit4.class)
44 public class SearchTargetTest {
45     private static final String ID = "ID";
46     private static final String ID2 = "ID2";
47     private static final String PARENTID = "PARENTID";
48     private static final String TITLE = "TITLE";
49     private static final String LAYOUT_TYPE = "hero";
50     private static final int RESULT_CORPUS = 1 << 0;
51     private static final String PACKAGE_NAME = "package name";
52     private static final Bundle EXTRAS = new Bundle();
53     private static final float SCORE = 0.5f;
54     private static final boolean SHOULD_HIDE = false;
55     private static final SearchAction SEARCH_ACTION = new SearchAction.Builder(ID2, TITLE)
56             .setIntent(new Intent())
57             .build();
58     private static final Uri SLICE_URI = Uri.EMPTY;
59 
60     SearchTarget.Builder mBuilderAction = new SearchTarget.Builder(RESULT_CORPUS, LAYOUT_TYPE, ID)
61             .setPackageName(PACKAGE_NAME)
62             .setUserHandle(UserHandle.CURRENT)
63             .setSearchAction(SEARCH_ACTION)
64             .setScore(SCORE)
65             .setHidden(SHOULD_HIDE)
66             .setParentId(PARENTID)
67             .setExtras(EXTRAS);
68 
69     SearchTarget.Builder mBuilderSlice = new SearchTarget.Builder(RESULT_CORPUS, LAYOUT_TYPE, ID)
70             .setPackageName(PACKAGE_NAME)
71             .setUserHandle(UserHandle.CURRENT)
72             .setSliceUri(Uri.EMPTY);
73 
74     @Test
testBuilderSearchAction()75     public void testBuilderSearchAction() {
76         SearchTarget target = mBuilderAction.build();
77         assertEverythingSearchAction(target);
78         SearchTarget clone = cloneThroughParcel(target);
79         assertEverythingSearchAction(clone);
80     }
81 
assertEverythingSearchAction(@onNull SearchTarget target)82     private void assertEverythingSearchAction(@NonNull SearchTarget target) {
83         assertThat(target.getResultType()).isEqualTo(RESULT_CORPUS);
84         assertThat(target.getLayoutType()).isEqualTo(LAYOUT_TYPE);
85         assertThat(target.getId()).isEqualTo(ID);
86         assertThat(target.getUserHandle()).isEqualTo(UserHandle.CURRENT);
87         assertThat(target.getScore()).isEqualTo(SCORE);
88         assertThat(target.getParentId()).isEqualTo(PARENTID);
89         assertThat(target.getSearchAction()).isEqualTo(SEARCH_ACTION);
90         assertThat(target.getPackageName()).isEqualTo(PACKAGE_NAME);
91         assertThat(target.getExtras().size()).isEqualTo(EXTRAS.size());
92         assertThat(target.isHidden()).isEqualTo(SHOULD_HIDE);
93     }
94 
95     @Test
testBuilderSliceUri()96     public void testBuilderSliceUri() {
97         SearchTarget target = mBuilderSlice.build();
98         assertThat(target.getSliceUri()).isEqualTo(Uri.EMPTY);
99         SearchTarget clone = cloneThroughParcel(target);
100         assertThat(clone.getSliceUri()).isEqualTo(Uri.EMPTY);
101     }
102 
103     @Test
testBuilderShortcutInfo()104     public void testBuilderShortcutInfo() {
105         ShortcutInfo shortcut = new ShortcutInfo.Builder(getContext(), ID2).build();
106         SearchTarget target = new SearchTarget.Builder(RESULT_CORPUS, LAYOUT_TYPE, ID)
107                 .setPackageName(shortcut.getPackage())
108                 .setUserHandle(UserHandle.CURRENT)
109                 .setShortcutInfo(shortcut)
110                 .build();
111         assertThat(target.getShortcutInfo()).isEqualTo(shortcut);
112         SearchTarget clone = cloneThroughParcel(target);
113         assertThat(clone.getShortcutInfo().getId()).isEqualTo(shortcut.getId());
114     }
115 
116     @Test
testBuilderAppWidget()117     public void testBuilderAppWidget() {
118         AppWidgetProviderInfo info = new AppWidgetProviderInfo();
119         info.provider = new ComponentName(PACKAGE_NAME, "classname");
120         SearchTarget target = new SearchTarget.Builder(RESULT_CORPUS, LAYOUT_TYPE, ID)
121                 .setPackageName(PACKAGE_NAME)
122                 .setUserHandle(UserHandle.CURRENT)
123                 .setAppWidgetProviderInfo(info)
124                 .build();
125         assertThat(target.getAppWidgetProviderInfo()).isEqualTo(info);
126     }
127 
cloneThroughParcel(@onNull SearchTarget target)128     private SearchTarget cloneThroughParcel(@NonNull SearchTarget target) {
129         final Parcel parcel = Parcel.obtain();
130 
131         try {
132             // Write to parcel
133             parcel.setDataPosition(0);
134             target.writeToParcel(parcel, 0);
135 
136             // Read from parcel
137             parcel.setDataPosition(0);
138             final SearchTarget clone = SearchTarget.CREATOR
139                     .createFromParcel(parcel);
140             assertThat(clone).isNotNull();
141             return clone;
142         } finally {
143             parcel.recycle();
144         }
145     }
146 }
147