Skip to content

Instantly share code, notes, and snippets.

@hborders
Last active March 16, 2019 21:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hborders/99486e99406bfd8965011d43f6f839ce to your computer and use it in GitHub Desktop.
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.
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