1/*
2 * Copyright (C) 2011 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
17package com.android.email.activity;
18
19import com.android.email.R;
20
21import android.app.Activity;
22import android.content.Context;
23import android.test.AndroidTestCase;
24import android.view.View;
25
26import java.util.Locale;
27
28public class UiUtilitiesTests extends AndroidTestCase {
29    public void testFormatSize() {
30        if (!"en".equalsIgnoreCase(Locale.getDefault().getLanguage())) {
31            return; // Only works on the EN locale.
32        }
33        assertEquals("0B", UiUtilities.formatSize(getContext(), 0));
34        assertEquals("1B", UiUtilities.formatSize(getContext(), 1));
35        assertEquals("1023B", UiUtilities.formatSize(getContext(), 1023));
36        assertEquals("1KB", UiUtilities.formatSize(getContext(), 1024));
37        assertEquals("1023KB", UiUtilities.formatSize(getContext(), 1024 * 1024 - 1));
38        assertEquals("1MB", UiUtilities.formatSize(getContext(), 1024 * 1024));
39        assertEquals("1023MB", UiUtilities.formatSize(getContext(), 1024 * 1024 * 1024 - 1));
40        assertEquals("1GB", UiUtilities.formatSize(getContext(), 1024 * 1024 * 1024));
41        assertEquals("5GB", UiUtilities.formatSize(getContext(), 5L * 1024 * 1024 * 1024));
42    }
43
44    public void testGetMessageCountForUi() {
45        final Context c = getContext();
46
47        // Negavive valeus not really expected, but at least shouldn't crash.
48        assertEquals("-1", UiUtilities.getMessageCountForUi(c, -1, true));
49        assertEquals("-1", UiUtilities.getMessageCountForUi(c, -1, false));
50
51        assertEquals("", UiUtilities.getMessageCountForUi(c, 0, true));
52        assertEquals("0", UiUtilities.getMessageCountForUi(c, 0, false));
53
54        assertEquals("1", UiUtilities.getMessageCountForUi(c, 1, true));
55        assertEquals("1", UiUtilities.getMessageCountForUi(c, 1, false));
56
57        assertEquals("999", UiUtilities.getMessageCountForUi(c, 999, true));
58        assertEquals("999", UiUtilities.getMessageCountForUi(c, 999, false));
59
60        final String moreThan999 = c.getString(R.string.more_than_999);
61
62        assertEquals(moreThan999, UiUtilities.getMessageCountForUi(c, 1000, true));
63        assertEquals(moreThan999, UiUtilities.getMessageCountForUi(c, 1000, false));
64
65        assertEquals(moreThan999, UiUtilities.getMessageCountForUi(c, 1001, true));
66        assertEquals(moreThan999, UiUtilities.getMessageCountForUi(c, 1001, false));
67    }
68
69    public void testGetView() {
70        // Test for getView(Activity, int)
71        DummyActivity a = new DummyActivity();
72        DummyView v = new DummyView(getContext());
73
74        a.mDummyViewId = 10;
75        a.mDummyView = v;
76        assertEquals(v, UiUtilities.getView(a, 10));
77
78        try {
79            assertEquals(v, UiUtilities.getView(a, 11));
80            fail();
81        } catch (IllegalArgumentException expected) {
82        }
83
84        // TODO Test for getView(View, int)?
85        // Unfortunately View.findViewById is final, so can't use the same approach.
86        // Also it's a huge pain to set up an actual, nested views in unit tests, so let's leave
87        // it for now.
88    }
89
90    public void testSetVisibilitySafe() {
91        {
92            DummyView v = new DummyView(getContext());
93            UiUtilities.setVisibilitySafe(v, View.VISIBLE);
94            assertEquals(View.VISIBLE, v.mVisibility);
95
96            // Shouldn't crash
97            UiUtilities.setVisibilitySafe(null, View.VISIBLE);
98        }
99
100        {
101            DummyActivity a = new DummyActivity();
102            DummyView v = new DummyView(getContext());
103            a.mDummyViewId = 3;
104            a.mDummyView = v;
105
106            UiUtilities.setVisibilitySafe(a, 3, View.VISIBLE);
107            assertEquals(View.VISIBLE, v.mVisibility);
108
109            // shouldn't crash
110            UiUtilities.setVisibilitySafe(a, 5, View.VISIBLE);
111        }
112        // No test for setVisibilitySafe(View, int, int) -- see testGetView().
113    }
114
115    private static class DummyActivity extends Activity {
116        public int mDummyViewId;
117        public View mDummyView;
118
119        @Override
120        public View findViewById(int id) {
121            return (id == mDummyViewId) ? mDummyView : null;
122        }
123    }
124
125    private static class DummyView extends View {
126        public int mVisibility = View.GONE;
127
128        public DummyView(Context context) {
129            super(context);
130        }
131
132        @Override
133        public void setVisibility(int visibility) {
134            mVisibility = visibility;
135        }
136    }
137}
138