[go: nahoru, domu]

11031c974855ff4117a6d7866e664295786840319Chris Wren/*
21031c974855ff4117a6d7866e664295786840319Chris Wren * Copyright (C) 2014 The Android Open Source Project
31031c974855ff4117a6d7866e664295786840319Chris Wren *
41031c974855ff4117a6d7866e664295786840319Chris Wren * Licensed under the Apache License, Version 2.0 (the "License");
51031c974855ff4117a6d7866e664295786840319Chris Wren * you may not use this file except in compliance with the License.
61031c974855ff4117a6d7866e664295786840319Chris Wren * You may obtain a copy of the License at
71031c974855ff4117a6d7866e664295786840319Chris Wren *
81031c974855ff4117a6d7866e664295786840319Chris Wren *      http://www.apache.org/licenses/LICENSE-2.0
91031c974855ff4117a6d7866e664295786840319Chris Wren *
101031c974855ff4117a6d7866e664295786840319Chris Wren * Unless required by applicable law or agreed to in writing, software
111031c974855ff4117a6d7866e664295786840319Chris Wren * distributed under the License is distributed on an "AS IS" BASIS,
121031c974855ff4117a6d7866e664295786840319Chris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131031c974855ff4117a6d7866e664295786840319Chris Wren * See the License for the specific language governing permissions and
141031c974855ff4117a6d7866e664295786840319Chris Wren * limitations under the License.
151031c974855ff4117a6d7866e664295786840319Chris Wren */
161031c974855ff4117a6d7866e664295786840319Chris Wrenpackage com.android.server.notification;
171031c974855ff4117a6d7866e664295786840319Chris Wren
185eab2b72afe5b20dc66c237b1cceedfc09de2d52Chris Wrenimport org.mockito.Mock;
195eab2b72afe5b20dc66c237b1cceedfc09de2d52Chris Wrenimport org.mockito.MockitoAnnotations;
205eab2b72afe5b20dc66c237b1cceedfc09de2d52Chris Wren
211031c974855ff4117a6d7866e664295786840319Chris Wrenimport android.app.Notification;
221031c974855ff4117a6d7866e664295786840319Chris Wrenimport android.os.UserHandle;
231031c974855ff4117a6d7866e664295786840319Chris Wrenimport android.service.notification.StatusBarNotification;
241031c974855ff4117a6d7866e664295786840319Chris Wrenimport android.test.AndroidTestCase;
251031c974855ff4117a6d7866e664295786840319Chris Wrenimport android.test.suitebuilder.annotation.SmallTest;
261031c974855ff4117a6d7866e664295786840319Chris Wren
271031c974855ff4117a6d7866e664295786840319Chris Wrenimport java.util.ArrayList;
281031c974855ff4117a6d7866e664295786840319Chris Wren
291031c974855ff4117a6d7866e664295786840319Chris Wrenpublic class RankingHelperTest extends AndroidTestCase {
305eab2b72afe5b20dc66c237b1cceedfc09de2d52Chris Wren    @Mock NotificationUsageStats mUsageStats;
3151017d0e23ce9855fabcf786a2067ceb19121fbcChris Wren    @Mock RankingHandler handler;
321031c974855ff4117a6d7866e664295786840319Chris Wren
331031c974855ff4117a6d7866e664295786840319Chris Wren    private Notification mNotiGroupGSortA;
341031c974855ff4117a6d7866e664295786840319Chris Wren    private Notification mNotiGroupGSortB;
351031c974855ff4117a6d7866e664295786840319Chris Wren    private Notification mNotiNoGroup;
361031c974855ff4117a6d7866e664295786840319Chris Wren    private Notification mNotiNoGroup2;
371031c974855ff4117a6d7866e664295786840319Chris Wren    private Notification mNotiNoGroupSortA;
381031c974855ff4117a6d7866e664295786840319Chris Wren    private NotificationRecord mRecordGroupGSortA;
391031c974855ff4117a6d7866e664295786840319Chris Wren    private NotificationRecord mRecordGroupGSortB;
401031c974855ff4117a6d7866e664295786840319Chris Wren    private NotificationRecord mRecordNoGroup;
411031c974855ff4117a6d7866e664295786840319Chris Wren    private NotificationRecord mRecordNoGroup2;
421031c974855ff4117a6d7866e664295786840319Chris Wren    private NotificationRecord mRecordNoGroupSortA;
431031c974855ff4117a6d7866e664295786840319Chris Wren    private RankingHelper mHelper;
441031c974855ff4117a6d7866e664295786840319Chris Wren
451031c974855ff4117a6d7866e664295786840319Chris Wren    @Override
461031c974855ff4117a6d7866e664295786840319Chris Wren    public void setUp() {
475eab2b72afe5b20dc66c237b1cceedfc09de2d52Chris Wren        MockitoAnnotations.initMocks(this);
481031c974855ff4117a6d7866e664295786840319Chris Wren        UserHandle user = UserHandle.ALL;
491031c974855ff4117a6d7866e664295786840319Chris Wren
505d25ee7a006fda7150ba251cff92c27130611f88Julia Reynolds        mHelper = new RankingHelper(getContext(), handler, mUsageStats,
51ef37f284364cc45c2ed91bfe04c489d2cedd32d2Julia Reynolds                new String[] {ImportanceExtractor.class.getName()});
521031c974855ff4117a6d7866e664295786840319Chris Wren
531031c974855ff4117a6d7866e664295786840319Chris Wren        mNotiGroupGSortA = new Notification.Builder(getContext())
541031c974855ff4117a6d7866e664295786840319Chris Wren                .setContentTitle("A")
551031c974855ff4117a6d7866e664295786840319Chris Wren                .setGroup("G")
561031c974855ff4117a6d7866e664295786840319Chris Wren                .setSortKey("A")
571031c974855ff4117a6d7866e664295786840319Chris Wren                .setWhen(1205)
581031c974855ff4117a6d7866e664295786840319Chris Wren                .build();
59bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren        mRecordGroupGSortA = new NotificationRecord(getContext(), new StatusBarNotification(
60bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren                "package", "package", 1, null, 0, 0, 0, mNotiGroupGSortA, user));
611031c974855ff4117a6d7866e664295786840319Chris Wren
621031c974855ff4117a6d7866e664295786840319Chris Wren        mNotiGroupGSortB = new Notification.Builder(getContext())
631031c974855ff4117a6d7866e664295786840319Chris Wren                .setContentTitle("B")
641031c974855ff4117a6d7866e664295786840319Chris Wren                .setGroup("G")
651031c974855ff4117a6d7866e664295786840319Chris Wren                .setSortKey("B")
661031c974855ff4117a6d7866e664295786840319Chris Wren                .setWhen(1200)
671031c974855ff4117a6d7866e664295786840319Chris Wren                .build();
68bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren        mRecordGroupGSortB = new NotificationRecord(getContext(), new StatusBarNotification(
69bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren                "package", "package", 1, null, 0, 0, 0, mNotiGroupGSortB, user));
701031c974855ff4117a6d7866e664295786840319Chris Wren
711031c974855ff4117a6d7866e664295786840319Chris Wren        mNotiNoGroup = new Notification.Builder(getContext())
721031c974855ff4117a6d7866e664295786840319Chris Wren                .setContentTitle("C")
731031c974855ff4117a6d7866e664295786840319Chris Wren                .setWhen(1201)
741031c974855ff4117a6d7866e664295786840319Chris Wren                .build();
75bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren        mRecordNoGroup = new NotificationRecord(getContext(), new StatusBarNotification(
76bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren                "package", "package", 1, null, 0, 0, 0, mNotiNoGroup, user));
771031c974855ff4117a6d7866e664295786840319Chris Wren
781031c974855ff4117a6d7866e664295786840319Chris Wren        mNotiNoGroup2 = new Notification.Builder(getContext())
791031c974855ff4117a6d7866e664295786840319Chris Wren                .setContentTitle("D")
801031c974855ff4117a6d7866e664295786840319Chris Wren                .setWhen(1202)
811031c974855ff4117a6d7866e664295786840319Chris Wren                .build();
82bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren        mRecordNoGroup2 = new NotificationRecord(getContext(), new StatusBarNotification(
83bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren                "package", "package", 1, null, 0, 0, 0, mNotiNoGroup2, user));
841031c974855ff4117a6d7866e664295786840319Chris Wren
851031c974855ff4117a6d7866e664295786840319Chris Wren        mNotiNoGroupSortA = new Notification.Builder(getContext())
861031c974855ff4117a6d7866e664295786840319Chris Wren                .setContentTitle("E")
871031c974855ff4117a6d7866e664295786840319Chris Wren                .setWhen(1201)
881031c974855ff4117a6d7866e664295786840319Chris Wren                .setSortKey("A")
891031c974855ff4117a6d7866e664295786840319Chris Wren                .build();
90bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren        mRecordNoGroupSortA = new NotificationRecord(getContext(), new StatusBarNotification(
91bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren                "package", "package", 1, null, 0, 0, 0, mNotiNoGroupSortA, user));
921031c974855ff4117a6d7866e664295786840319Chris Wren    }
931031c974855ff4117a6d7866e664295786840319Chris Wren
941031c974855ff4117a6d7866e664295786840319Chris Wren    @SmallTest
951031c974855ff4117a6d7866e664295786840319Chris Wren    public void testFindAfterRankingWithASplitGroup() throws Exception {
961031c974855ff4117a6d7866e664295786840319Chris Wren        ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>(3);
971031c974855ff4117a6d7866e664295786840319Chris Wren        notificationList.add(mRecordGroupGSortA);
981031c974855ff4117a6d7866e664295786840319Chris Wren        notificationList.add(mRecordGroupGSortB);
991031c974855ff4117a6d7866e664295786840319Chris Wren        notificationList.add(mRecordNoGroup);
1001031c974855ff4117a6d7866e664295786840319Chris Wren        notificationList.add(mRecordNoGroupSortA);
1011031c974855ff4117a6d7866e664295786840319Chris Wren        mHelper.sort(notificationList);
1021031c974855ff4117a6d7866e664295786840319Chris Wren        assertTrue(mHelper.indexOf(notificationList, mRecordGroupGSortA) >= 0);
1031031c974855ff4117a6d7866e664295786840319Chris Wren        assertTrue(mHelper.indexOf(notificationList, mRecordGroupGSortB) >= 0);
1041031c974855ff4117a6d7866e664295786840319Chris Wren        assertTrue(mHelper.indexOf(notificationList, mRecordNoGroup) >= 0);
1051031c974855ff4117a6d7866e664295786840319Chris Wren        assertTrue(mHelper.indexOf(notificationList, mRecordNoGroupSortA) >= 0);
1061031c974855ff4117a6d7866e664295786840319Chris Wren    }
1071031c974855ff4117a6d7866e664295786840319Chris Wren
1081031c974855ff4117a6d7866e664295786840319Chris Wren    @SmallTest
1091031c974855ff4117a6d7866e664295786840319Chris Wren    public void testSortShouldNotThrowWithPlainNotifications() throws Exception {
1101031c974855ff4117a6d7866e664295786840319Chris Wren        ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>(2);
1111031c974855ff4117a6d7866e664295786840319Chris Wren        notificationList.add(mRecordNoGroup);
1121031c974855ff4117a6d7866e664295786840319Chris Wren        notificationList.add(mRecordNoGroup2);
1131031c974855ff4117a6d7866e664295786840319Chris Wren        mHelper.sort(notificationList);
1141031c974855ff4117a6d7866e664295786840319Chris Wren    }
1151031c974855ff4117a6d7866e664295786840319Chris Wren
1161031c974855ff4117a6d7866e664295786840319Chris Wren    @SmallTest
1171031c974855ff4117a6d7866e664295786840319Chris Wren    public void testSortShouldNotThrowOneSorted() throws Exception {
1181031c974855ff4117a6d7866e664295786840319Chris Wren        ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>(2);
1191031c974855ff4117a6d7866e664295786840319Chris Wren        notificationList.add(mRecordNoGroup);
1201031c974855ff4117a6d7866e664295786840319Chris Wren        notificationList.add(mRecordNoGroupSortA);
1211031c974855ff4117a6d7866e664295786840319Chris Wren        mHelper.sort(notificationList);
1221031c974855ff4117a6d7866e664295786840319Chris Wren    }
1231031c974855ff4117a6d7866e664295786840319Chris Wren
1241031c974855ff4117a6d7866e664295786840319Chris Wren    @SmallTest
1251031c974855ff4117a6d7866e664295786840319Chris Wren    public void testSortShouldNotThrowOneNotification() throws Exception {
1261031c974855ff4117a6d7866e664295786840319Chris Wren        ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>(1);
1271031c974855ff4117a6d7866e664295786840319Chris Wren        notificationList.add(mRecordNoGroup);
1281031c974855ff4117a6d7866e664295786840319Chris Wren        mHelper.sort(notificationList);
1291031c974855ff4117a6d7866e664295786840319Chris Wren    }
1301031c974855ff4117a6d7866e664295786840319Chris Wren
1311031c974855ff4117a6d7866e664295786840319Chris Wren    @SmallTest
1321031c974855ff4117a6d7866e664295786840319Chris Wren    public void testSortShouldNotThrowOneSortKey() throws Exception {
1331031c974855ff4117a6d7866e664295786840319Chris Wren        ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>(1);
1341031c974855ff4117a6d7866e664295786840319Chris Wren        notificationList.add(mRecordGroupGSortB);
1351031c974855ff4117a6d7866e664295786840319Chris Wren        mHelper.sort(notificationList);
1361031c974855ff4117a6d7866e664295786840319Chris Wren    }
1371031c974855ff4117a6d7866e664295786840319Chris Wren
1381031c974855ff4117a6d7866e664295786840319Chris Wren    @SmallTest
1391031c974855ff4117a6d7866e664295786840319Chris Wren    public void testSortShouldNotThrowOnEmptyList() throws Exception {
1401031c974855ff4117a6d7866e664295786840319Chris Wren        ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>();
1411031c974855ff4117a6d7866e664295786840319Chris Wren        mHelper.sort(notificationList);
1421031c974855ff4117a6d7866e664295786840319Chris Wren    }
1431031c974855ff4117a6d7866e664295786840319Chris Wren}
144