package com.vaadin.addon.spreadsheet.test.junit;
import static org.junit.Assert.assertEquals;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import org.junit.Before;
import org.junit.Test;
import com.vaadin.addon.spreadsheet.CellValueFormatter;
public class CellValueShorteningTest {
private CellValueFormatter cellValueFormatter;
@Before
public void setUp() throws Exception {
cellValueFormatter = new CellValueFormatter();
cellValueFormatter.setLocaleDecimalSymbols(DecimalFormatSymbols
.getInstance(Locale.US));
}
@Test
public void cellValueShortening_differentInputValues_InputRoundedAccordingToColumnWidth() {
assertCorrectRounding("10", "10", 2);
assertCorrectRounding("15", "15", 2);
assertCorrectRounding("19", "19", 2);
assertCorrectRounding("#", "15", 1);
assertCorrectRounding("#", "10", 1);
assertCorrectRounding("#", "19", 1);
assertCorrectRounding("##", "199", 2);
assertCorrectRounding("###", "1999", 3);
assertCorrectRounding("####", "19999", 4);
assertCorrectRounding("19999", "19999", 5);
assertCorrectRounding("0.0000345", "0.0000345", 9);
assertCorrectRounding("3.45E-5", "0.0000345", 7);
assertCorrectRounding("3.4E-5", "0.0000345", 6);
assertCorrectRounding("3E-5", "0.0000345", 5);
assertCorrectRounding("0.1", "0.10", 3);
assertCorrectRounding("0", "0.10", 2);
assertCorrectRounding("0.55", "0.55", 4);
assertCorrectRounding("0.6", "0.55", 3);
assertCorrectRounding("1", "0.55", 2);
assertCorrectRounding("0.99", "0.99", 4);
assertCorrectRounding("1", "0.99", 3);
assertCorrectRounding("1", "0.99", 2);
assertCorrectRounding("0.09", "0.09", 4);
assertCorrectRounding("0.1", "0.09", 3);
assertCorrectRounding("0", "0.09", 2);
assertCorrectRounding("10000", "10000", 6);
assertCorrectRounding("10000", "10000", 5);
assertCorrectRounding("110000", "110000", 6);
assertCorrectRounding("1E5", "110000", 5);
assertCorrectRounding("####", "110000", 4);
assertCorrectRounding("11.11111111", "11.1111111119", 11);
assertCorrectRounding("11.111111112", "11.1111111119", 12);
assertCorrectRounding("11.1111111119", "11.1111111119", 13);
assertCorrectRounding("999999999999", "999999999999", 12);
assertCorrectRounding("1E12", "999999999999", 11);
assertCorrectRounding("99999999999.9", "99999999999.9", 13);
assertCorrectRounding("100000000000", "99999999999.9", 12);
assertCorrectRounding("9999999999.99", "9999999999.99", 13);
assertCorrectRounding("10000000000", "9999999999.99", 12);
assertCorrectRounding("999999999.999", "999999999.999", 13);
assertCorrectRounding("1000000000", "999999999.999", 12);
assertCorrectRounding("1000000000", "999999999.9999", 10);
assertCorrectRounding("1000000000", "999999999.9999", 9);
assertCorrectRounding("123456789199.999", "123456789199.999", 16);
assertCorrectRounding("123456789200", "123456789199.999", 15);
assertCorrectRounding("123456789200", "123456789199.999", 12);
assertCorrectRounding("1.234568E11", "123456789199.999", 11);
assertCorrectRounding("1234567.89", "1234567.89", 13);
assertCorrectRounding("1234567.89", "1234567.89", 12);
assertCorrectRounding("1234567.89", "1234567.89", 11);
assertCorrectRounding("1234567.89", "1234567.89", 10);
assertCorrectRounding("1234567.9", "1234567.89", 9);
assertCorrectRounding("1234568", "1234567.89", 8);
assertCorrectRounding("1234568", "1234567.89", 7);
assertCorrectRounding("1.2E6", "1234567.89", 6); // differs from Excel,
// but acceptable
assertCorrectRounding("1E6", "1234567.89", 5);
assertCorrectRounding("1E6", "1234567.89", 4);
assertCorrectRounding("1E6", "1234567.89", 3);
assertCorrectRounding("##", "1234567.89", 2);
}
private void assertCorrectRounding(String expected, String input, int width) {
String result = cellValueFormatter
.getScientificNotationStringForNumericCell(
Double.parseDouble(input), input, 1, width);
assertEquals(String.format(
"Rounding of %s to %s was wrong, expected %s", input, result,
expected), expected, result);
}
}