package org.solovyev.android.text.method;
import android.os.Build;
import android.text.Editable;
import android.text.InputFilter;
import android.text.SpannableStringBuilder;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import org.solovyev.android.calculator.BuildConfig;
import static org.junit.Assert.assertEquals;
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)
@RunWith(RobolectricGradleTestRunner.class)
public class NumberInputFilterTest {
private Editable editable;
@Before
public void setUp() throws Exception {
editable = new SpannableStringBuilder();
editable.setFilters(new InputFilter[]{new NumberInputFilter()});
}
@Test
public void testShouldNotInsertExponentInTheBeginning() throws Exception {
editable.insert(0, "E");
assertEquals("", editable.toString());
}
@Test
public void testShouldInsertExponentAtTheEnd() throws Exception {
editable.insert(0, "1");
editable.insert(1, "E");
assertEquals("1E", editable.toString());
}
@Test
public void testShouldNotInsertSecondMinusSign() throws Exception {
editable.insert(0, "-");
editable.insert(1, "-");
assertEquals("-", editable.toString());
}
@Test
public void testShouldNotInsertTwoMinusSigns() throws Exception {
editable.insert(0, "--");
assertEquals("-", editable.toString());
}
@Test
public void testShouldInsertSecondMinusSignAfterExponent() throws Exception {
editable.insert(0, "-");
editable.insert(1, "E");
editable.insert(2, "-");
assertEquals("-E-", editable.toString());
}
@Test
public void testShouldInsertSecondMinusSignAlongWithExponent() throws Exception {
editable.insert(0, "-");
editable.insert(1, "E-");
assertEquals("-E-", editable.toString());
}
@Test
public void testShouldNotInsertMinusSignBeforeExistingMinusSIgn() throws Exception {
editable.insert(0, "-");
editable.insert(0, "-");
assertEquals("-", editable.toString());
}
@Test
public void testShouldNotInsertSecondDecimalPoint() throws Exception {
editable.insert(0, "0.2");
editable.insert(3, ".");
assertEquals("0.2", editable.toString());
}
@Test
public void testShouldNotInsertTwoDecimalPoints() throws Exception {
editable.insert(0, "..");
assertEquals(".", editable.toString());
}
@Test
public void testShouldNotInsertDecimalPointAfterExponent() throws Exception {
editable.insert(0, "2E");
editable.insert(2, ".");
assertEquals("2E", editable.toString());
editable.clear();
editable.insert(0, "2E.");
assertEquals("2E", editable.toString());
}
@Test
public void testShouldNotInsertTwoExcponents() throws Exception {
editable.insert(0, "2EE");
assertEquals("2E", editable.toString());
}
@Test
public void testShouldNotInsertExponentBeforeDecimalPoint() throws Exception {
editable.insert(0, "0.2");
editable.insert(0, "E");
assertEquals("0.2", editable.toString());
}
}