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