summaryrefslogtreecommitdiff
path: root/tests/src/com/android/incallui/CallTest.java
blob: 118ec38da4d5fdb11baac3c8c4abd0eed51da9ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */

package com.android.incallui;

import android.os.Bundle;
import android.telecom.Connection;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;

import java.util.ArrayList;
import java.util.Arrays;

// @formatter:off
/**
 * Run test with
 * adb shell am instrument -e class com.android.incallui.CallTest -w com.google.android.dialer.tests/android.test.InstrumentationTestRunner
 */
// @formatter:on

@SmallTest
public class CallTest extends AndroidTestCase {

    private TestCall mCall;

    private final static String CHILD_NUMBER = "123";
    private final static ArrayList<String> LAST_FORWARDED_NUMBER_LIST =
            new ArrayList(Arrays.asList("456", "789"));
    private final static String LAST_FORWARDED_NUMBER = "789";
    private final static String CALL_SUBJECT = "foo";

    @Override
    public void setUp() throws Exception {
        super.setUp();

        mCall = new TestCall();
    }

    @Override
    public void tearDown() throws Exception {
        super.tearDown();
    }

    public void testUpdateFromCallExtras() {
        mCall.updateFromCallExtras(getTestBundle());
        verifyTestBundleResult();
    }

    public void testUpdateFromCallExtras_corruptedBundle() {
        mCall.setBundleCorrupted(true);
        mCall.updateFromCallExtras(getTestBundle());

        assertEquals(mCall.getChildNumber(), null);
        assertEquals(mCall.getLastForwardedNumber(), null);
        assertEquals(mCall.getCallSubject(), null);
    }

    public void testUpdateFromCallExtras_corruptedBundleOverwrite() {

        mCall.updateFromCallExtras(getTestBundle());
        mCall.setBundleCorrupted(true);
        Bundle bundle = new Bundle();
        bundle.putString(Connection.EXTRA_CHILD_ADDRESS, "321");
        bundle.putStringArrayList(Connection.EXTRA_LAST_FORWARDED_NUMBER,
                new ArrayList(Arrays.asList("654", "987")));
        bundle.putString(Connection.EXTRA_CALL_SUBJECT, "bar");
        mCall.updateFromCallExtras(bundle);
        //corrupted bundle should not overwrite existing values.
        verifyTestBundleResult();
    }

    private Bundle getTestBundle() {
        Bundle bundle = new Bundle();
        bundle.putString(Connection.EXTRA_CHILD_ADDRESS, CHILD_NUMBER);
        bundle.putStringArrayList(Connection.EXTRA_LAST_FORWARDED_NUMBER,
                LAST_FORWARDED_NUMBER_LIST);
        bundle.putString(Connection.EXTRA_CALL_SUBJECT, CALL_SUBJECT);
        return bundle;
    }

    private void verifyTestBundleResult() {
        assertEquals(CHILD_NUMBER, mCall.getChildNumber());
        assertEquals(LAST_FORWARDED_NUMBER, mCall.getLastForwardedNumber());
        assertEquals(CALL_SUBJECT, mCall.getCallSubject());
    }

    private class TestCall extends Call {

        private boolean mBundleCorrupted = false;

        public TestCall() {
            super(Call.State.NEW);
        }

        @Override
        public void updateFromCallExtras(Bundle bundle) {
            super.updateFromCallExtras(bundle);
        }

        public void setBundleCorrupted(boolean value) {
            this.mBundleCorrupted = value;
        }

        @Override
        protected boolean areCallExtrasCorrupted(Bundle callExtras) {
            if (mBundleCorrupted) {
                return true;
            }
            return super.areCallExtrasCorrupted(callExtras);
        }
    }
}