1e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen/*
2e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * Copyright (C) 2016 The Android Open Source Project
3e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen *
4e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * Licensed under the Apache License, Version 2.0 (the "License");
5e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * you may not use this file except in compliance with the License.
6e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * You may obtain a copy of the License at
7e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen *
8e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen *      http://www.apache.org/licenses/LICENSE-2.0
9e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen *
10e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * Unless required by applicable law or agreed to in writing, software
11e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * distributed under the License is distributed on an "AS IS" BASIS,
12e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * See the License for the specific language governing permissions and
14e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * limitations under the License
15e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen */
16e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
17e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yenpackage com.android.phone.vvm.omtp;
18e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
19e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yenimport android.content.Context;
20e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yenimport android.content.Intent;
21e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yenimport android.preference.PreferenceManager;
22e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yenimport android.test.AndroidTestCase;
23e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yenimport android.util.ArraySet;
24e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
25e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yenimport com.android.phone.vvm.omtp.OmtpBootCompletedReceiver.SubIdProcessor;
26e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
27e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yenimport java.util.Set;
28e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
29e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yenpublic class OmtpBootCompletedReceiverTests extends AndroidTestCase {
30e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    OmtpBootCompletedReceiver mReceiver = new OmtpBootCompletedReceiver();
31e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    @Override
32e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    public void setUp() {
33e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    }
34e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
35e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    @Override
36e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    public void tearDown() {
37e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        PreferenceManager
381ce834e2cb579fb0973186703c4f5f245202c793Jeff Sharkey                .getDefaultSharedPreferences(getContext().createDeviceProtectedStorageContext())
39e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen                .edit().clear().apply();
40e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    }
41e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
42e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    public void testReadWriteList() {
43e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        readWriteList(new int[] {1});
44e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    }
45e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
46e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    public void testReadWriteList_Multiple() {
47e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        readWriteList(new int[] {1, 2});
48e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    }
49e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
50e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    public void testReadWriteList_Duplicate() {
51e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        readWriteList(new int[] {1, 1});
52e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    }
53e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
54e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    private void readWriteList(int[] values) {
55e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        for (int value : values) {
56e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen            OmtpBootCompletedReceiver.addDeferredSubId(getContext(), value);
57e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        }
58e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        TestSubIdProcessor processor = new TestSubIdProcessor(values);
59e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        mReceiver.setSubIdProcessorForTest(processor);
60e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        Intent intent = new Intent(Intent.ACTION_BOOT_COMPLETED);
61e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        mReceiver.onReceive(getContext(), intent);
62e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        processor.assertMatch();
63e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        // after onReceive() is called the list should be empty
64e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        TestSubIdProcessor emptyProcessor = new TestSubIdProcessor(new int[] {});
65e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        mReceiver.setSubIdProcessorForTest(processor);
66e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        mReceiver.onReceive(getContext(), intent);
67e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        processor.assertMatch();
68e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    }
69e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
70e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    private static class TestSubIdProcessor implements SubIdProcessor {
71e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        private final Set<Integer> mExpectedSubIds;
72e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
73e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        public TestSubIdProcessor(int[] expectedSubIds) {
74e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen            mExpectedSubIds = new ArraySet<>();
75e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen            for(int subId : expectedSubIds){
76e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen                mExpectedSubIds.add(subId);
77e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen            }
78e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        }
79e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
80e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        @Override
81e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        public void process(Context context, int subId){
82e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen            assertTrue(mExpectedSubIds.contains(subId));
83e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen            mExpectedSubIds.remove(subId);
84e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        }
85e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen
86e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        public void assertMatch(){
87e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen            assertTrue(mExpectedSubIds.isEmpty());
88e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen        }
89e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen    }
90e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen}
91