1c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki/*
2c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki * Copyright (C) 2015 The Android Open Source Project
3c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki *
4c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License");
5c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki * you may not use this file except in compliance with the License.
6c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki * You may obtain a copy of the License at
7c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki *
8c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki *      http://www.apache.org/licenses/LICENSE-2.0
9c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki *
10c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki * Unless required by applicable law or agreed to in writing, software
11c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS,
12c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki * See the License for the specific language governing permissions and
14c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki * limitations under the License.
15c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki */
16c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
17c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onukipackage android.text.format;
18c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
19c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onukiimport android.content.res.Configuration;
20c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onukiimport android.content.res.Resources;
21c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onukiimport android.test.AndroidTestCase;
22c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onukiimport android.test.suitebuilder.annotation.SmallTest;
23c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onukiimport android.text.format.Formatter.BytesResult;
24c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
25c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onukiimport java.util.Locale;
26c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
27c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onukipublic class FormatterTest extends AndroidTestCase {
28c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
29c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    private Locale mOriginalLocale;
30c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
31c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    @Override
32c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    protected void setUp() throws Exception {
33c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        super.setUp();
34c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
35c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        mOriginalLocale = mContext.getResources().getConfiguration().locale;
36c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    }
37c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
38c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    @Override
39c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    protected void tearDown() throws Exception {
40c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        if (mOriginalLocale != null) {
41c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki            setLocale(mOriginalLocale);
42c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        }
43c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        super.tearDown();
44c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    }
45c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
46c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    private void setLocale(Locale locale) {
47c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        Resources res = getContext().getResources();
48c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        Configuration config = res.getConfiguration();
49c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        config.locale = locale;
50c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        res.updateConfiguration(config, res.getDisplayMetrics());
51c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
52c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        Locale.setDefault(locale);
53c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    }
54c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
55c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    @SmallTest
56c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    public void testFormatBytes() {
57c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        setLocale(Locale.ENGLISH);
58c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
594059d7dbfadab1b127dc93d0d4c175dc585445d4Roozbeh Pournader        checkFormatBytes(0, true, "0", 0);
604059d7dbfadab1b127dc93d0d4c175dc585445d4Roozbeh Pournader        checkFormatBytes(0, false, "0", 0);
61c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
624059d7dbfadab1b127dc93d0d4c175dc585445d4Roozbeh Pournader        checkFormatBytes(1, true, "1", 1);
634059d7dbfadab1b127dc93d0d4c175dc585445d4Roozbeh Pournader        checkFormatBytes(1, false, "1", 1);
64c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
65c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(12, true, "12", 12);
664059d7dbfadab1b127dc93d0d4c175dc585445d4Roozbeh Pournader        checkFormatBytes(12, false, "12", 12);
67c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
68c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(123, true, "123", 123);
69c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(123, false, "123", 123);
70c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
71c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(812, true, "812", 812);
72c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(812, false, "812", 812);
73c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
74c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(912, true, "0.89", 911);
75c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(912, false, "0.89", 911);
76c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
77c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(9123, true, "8.9", 9113);
78c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(9123, false, "8.91", 9123);
79c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
80c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(9123000, true, "8.7", 9122611);
81c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(9123000, false, "8.70", 9122611);
82c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
834059d7dbfadab1b127dc93d0d4c175dc585445d4Roozbeh Pournader        checkFormatBytes(-1, true, "-1", -1);
844059d7dbfadab1b127dc93d0d4c175dc585445d4Roozbeh Pournader        checkFormatBytes(-1, false, "-1", -1);
854059d7dbfadab1b127dc93d0d4c175dc585445d4Roozbeh Pournader
864059d7dbfadab1b127dc93d0d4c175dc585445d4Roozbeh Pournader        checkFormatBytes(-912, true, "-0.89", -911);
874059d7dbfadab1b127dc93d0d4c175dc585445d4Roozbeh Pournader        checkFormatBytes(-912, false, "-0.89", -911);
88c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
89c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        // Missing FLAG_CALCULATE_ROUNDED case.
90c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        BytesResult r = Formatter.formatBytes(getContext().getResources(), 1, 0);
914059d7dbfadab1b127dc93d0d4c175dc585445d4Roozbeh Pournader        assertEquals("1", r.value);
92c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        assertEquals(0, r.roundedBytes); // Didn't pass FLAG_CALCULATE_ROUNDED
93c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
94c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        // Make sure it works on different locales.
95c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        setLocale(new Locale("es", "ES"));
96c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        checkFormatBytes(9123000, false, "8,70", 9122611);
97c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    }
98c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki
99c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    private void checkFormatBytes(long bytes, boolean useShort,
100c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki            String expectedString, long expectedRounded) {
101c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        BytesResult r = Formatter.formatBytes(getContext().getResources(), bytes,
102c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki                Formatter.FLAG_CALCULATE_ROUNDED | (useShort ? Formatter.FLAG_SHORTER : 0));
103c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        assertEquals(expectedString, r.value);
104c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki        assertEquals(expectedRounded, r.roundedBytes);
105c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki    }
106c7a14e442dcab7efd89af1bc671e6869904d19f6Makoto Onuki}
107