Last active
March 16, 2019 21:10
-
-
Save hborders/99486e99406bfd8965011d43f6f839ce to your computer and use it in GitHub Desktop.
Demonstrates that CompactDecimalFormat#setMaximumFractionDigits and CompactDecimalFormat#setMaximumIntegerDigits don't work on Android API 24, but work on Android API 28.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.icu.text.CompactDecimalFormat; | |
import androidx.test.runner.AndroidJUnit4; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import java.util.Locale; | |
import static org.junit.Assert.assertEquals; | |
@RunWith(AndroidJUnit4.class) | |
public class CompactDecimalFormatTest { | |
private final CompactDecimalFormat testObject = CompactDecimalFormat.getInstance( | |
Locale.ENGLISH, | |
CompactDecimalFormat.CompactStyle.SHORT | |
); | |
// Fails on API 24. Works on API 28 | |
@Test | |
public void testSignificantDigitsUsedFalseThenSetMaximumIntegerDigitsThenSetMaximumFractionDigitsForOneThousandish() { | |
testObject.setSignificantDigitsUsed(false); | |
testObject.setMaximumIntegerDigits(3); | |
testObject.setMaximumFractionDigits(1); | |
final String actual = testObject.format(1_234); | |
assertEquals("1.2K", actual); | |
// API 24: "1K" | |
// API 28: "1.2K" | |
} | |
// Fails on API 24. Works on API 28 | |
@Test | |
public void testSetMaximumIntegerDigitsThenSetMaximumFractionDigitsThenSetSignificantDigitsUsedFalseOneThousandish() { | |
testObject.setMaximumIntegerDigits(3); | |
testObject.setMaximumFractionDigits(1); | |
testObject.setSignificantDigitsUsed(false); | |
final String actual = testObject.format(1_234); | |
assertEquals("1.2K", actual); | |
// API 24: "1K" | |
// API 28: "1.2K" | |
} | |
// Works on API 24 and API 28 | |
@Test | |
public void testSetMaximumSignificantDigitsOneThousandish() { | |
testObject.setMaximumSignificantDigits(2); | |
final String actual = testObject.format(1_234); | |
assertEquals("1.2K", actual); | |
} | |
// Fails on API 24. Works on API 28 | |
@Test | |
public void testSignificantDigitsUsedFalseThenSetMaximumIntegerDigitsThenSetMaximumFractionDigitsForTenThousandish() { | |
testObject.setSignificantDigitsUsed(false); | |
testObject.setMaximumIntegerDigits(3); | |
testObject.setMaximumFractionDigits(1); | |
final String actual = testObject.format(12_345); | |
assertEquals("12.3K", actual); | |
// API 24: "10K" | |
// API 28: "12.3K" | |
} | |
// Fails on API 24. Works on API 28 | |
@Test | |
public void testSetMaximumIntegerDigitsThenSetMaximumFractionDigitsThenSetSignificantDigitsUsedFalseTenThousandish() { | |
testObject.setMaximumIntegerDigits(3); | |
testObject.setMaximumFractionDigits(1); | |
testObject.setSignificantDigitsUsed(false); | |
final String actual = testObject.format(12_345); | |
assertEquals("12.3K", actual); | |
// API 24: "10K" | |
// API 28: "12.3K" | |
} | |
// Works on API 24 and API 28 | |
@Test | |
public void testSetMaximumSignificantDigitsTenThousandish() { | |
testObject.setMaximumSignificantDigits(3); | |
final String actual = testObject.format(12_345); | |
assertEquals("12.3K", actual); | |
} | |
// Fails on API 24. Works on API 28 | |
@Test | |
public void testSignificantDigitsUsedFalseThenSetMaximumIntegerDigitsThenSetMaximumFractionDigitsForHundredThousandish() { | |
testObject.setSignificantDigitsUsed(false); | |
testObject.setMaximumIntegerDigits(3); | |
testObject.setMaximumFractionDigits(1); | |
final String actual = testObject.format(123_456); | |
assertEquals("123.5K", actual); // rounding | |
// API 24: "100K" | |
// API 28: "123.5K" | |
} | |
// Fails on API 24. Works on API 28 | |
@Test | |
public void testSetMaximumIntegerDigitsThenSetMaximumFractionDigitsThenSetSignificantDigitsUsedFalseHundredThousandish() { | |
testObject.setMaximumIntegerDigits(3); | |
testObject.setMaximumFractionDigits(1); | |
testObject.setSignificantDigitsUsed(false); | |
final String actual = testObject.format(123_456); | |
assertEquals("123.5K", actual); // rounding | |
// API 24: "100K" | |
// API 28: "123.5K" | |
} | |
// Works on API 24 and API 28 | |
@Test | |
public void testSetMaximumSignificantDigitsHundredThousandish() { | |
testObject.setMaximumSignificantDigits(4); | |
final String actual = testObject.format(123_456); | |
assertEquals("123.5K", actual); // rounding | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment