Exponent can't be first in number
+ tests for NumberInputFilter
This commit is contained in:
parent
76b8901a4e
commit
28a573c777
@ -61,7 +61,7 @@ public class NumberInputFilter implements InputFilter {
|
|||||||
findChars(dest, dend, dest.length(), end - start, CHARS);
|
findChars(dest, dend, dest.length(), end - start, CHARS);
|
||||||
|
|
||||||
SpannableStringBuilder filtered = null;
|
SpannableStringBuilder filtered = null;
|
||||||
for (int i = end - 1; i >= start; i--) {
|
for (int i = start; i < end; i++) {
|
||||||
final char c = source.charAt(i);
|
final char c = source.charAt(i);
|
||||||
|
|
||||||
boolean filter = false;
|
boolean filter = false;
|
||||||
@ -93,6 +93,9 @@ public class NumberInputFilter implements InputFilter {
|
|||||||
} else if (CHARS[CHAR_POINT] >= 0 && CHARS[CHAR_POINT] > i + dstart) {
|
} else if (CHARS[CHAR_POINT] >= 0 && CHARS[CHAR_POINT] > i + dstart) {
|
||||||
// no exponent before decimal point
|
// no exponent before decimal point
|
||||||
filter = true;
|
filter = true;
|
||||||
|
} else if (i + dstart == 0) {
|
||||||
|
// exponent can't be first
|
||||||
|
filter = true;
|
||||||
} else {
|
} else {
|
||||||
CHARS[CHAR_EXP] = i + dstart;
|
CHARS[CHAR_EXP] = i + dstart;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,112 @@
|
|||||||
|
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());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user