|
|
@@ -7,11 +7,12 @@
|
|
|
package net.ranides.assira.text;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
-import java.io.PrintStream;
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.BigInteger;
|
|
|
+import java.text.ChoiceFormat;
|
|
|
import java.time.Instant;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
|
import java.util.GregorianCalendar;
|
|
|
import java.util.regex.Matcher;
|
|
|
@@ -90,8 +91,22 @@ public class ResolveFormatTest {
|
|
|
assertEquals("-150'456.5", ResolveFormat.compile("{fvalue,number,c++}").format(ITEM) );
|
|
|
}
|
|
|
|
|
|
- @Test
|
|
|
- public void testParse_Number_int() {
|
|
|
+ @Test
|
|
|
+ public void testParse_Errors() {
|
|
|
+ Integer[] out= new Integer[3];
|
|
|
+ ResolveFormat rf = ResolveFormat.compile("{0,number} / {1,number,java} / {2,number,java}");
|
|
|
+ assertThrows(IllegalArgumentException.class, ()->{
|
|
|
+ rf.parse("12z / 33 / 55_100", out);
|
|
|
+ });
|
|
|
+ assertThrows(IllegalArgumentException.class, ()->{
|
|
|
+ rf.parse("12 33 / 55_100", out);
|
|
|
+ });
|
|
|
+ rf.parse("12 / 33 / 55_100", out);
|
|
|
+ rf.parse("12,4 / 33 / 55_100", out);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testParse_Number() {
|
|
|
Integer[] out= new Integer[3];
|
|
|
ResolveFormat rf = ResolveFormat.compile("{0,number} / {1,number,java} / {2,number,java}");
|
|
|
rf.parse("12 / 33 / 55_100", out);
|
|
|
@@ -102,8 +117,8 @@ public class ResolveFormatTest {
|
|
|
assertArrayEquals(new Double[]{14.3,35.0,55.0}, out2);
|
|
|
|
|
|
Double[] out3= new Double[3];
|
|
|
- ResolveFormat.compile("US","{0,number} / {1,number,java} / {2,number,java}").parse("14.3 / 35 / 55", out3);
|
|
|
- assertArrayEquals(new Double[]{14.3,35.0,55.0}, out3);
|
|
|
+ ResolveFormat.compile("US","{0,number} / {1,number,percent} / {2,number,java}").parse("14.3 / 35% / 55", out3);
|
|
|
+ assertArrayEquals(new Double[]{14.3, 0.35, 55.0}, out3);
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -133,6 +148,37 @@ public class ResolveFormatTest {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void testParse_Date() {
|
|
|
+ Date[] out1 = new Date[5];
|
|
|
+ ResolveFormat
|
|
|
+ .compile("PL","{0,date} / {1,date,short} / {2,date,medium} / {3,date,long} / {4,date,full}")
|
|
|
+ .parse("2014-06-11 / 14-06-12 / 2014-06-13 / 14 czerwca 2014 / niedziela, 15 czerwca 2014", out1);
|
|
|
+ assertEquals(
|
|
|
+ "[Wed Jun 11 00:00:00 CEST 2014, Thu Jun 12 00:00:00 CEST 2014, Fri Jun 13 00:00:00 CEST 2014, Sat Jun 14 00:00:00 CEST 2014, Sun Jun 15 00:00:00 CEST 2014]",
|
|
|
+ Arrays.toString(out1)
|
|
|
+ );
|
|
|
+
|
|
|
+ Date[] out2 = new Date[4];
|
|
|
+ ResolveFormat
|
|
|
+ .compile("PL","{0,date,iso} / {1,date,gnu} / {2,date,trace} / {3,date,local}")
|
|
|
+ .parse("2014-06-11T11:25Z / 201406121325 / 2014-06-13 14:25:10.000 / 2014-06-14 18:25:10", out2);
|
|
|
+ assertEquals(
|
|
|
+ "[Wed Jun 11 11:25:00 CEST 2014, Thu Jun 12 13:25:00 CEST 2014, Fri Jun 13 14:25:10 CEST 2014, Sat Jun 14 18:25:10 CEST 2014]",
|
|
|
+ Arrays.toString(out2)
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ Date[] out3 = new Date[5];
|
|
|
+ ResolveFormat
|
|
|
+ .compile("US","{0,date} | {1,date,short} | {2,date,medium} | {3,date,long} | {4,date,full}")
|
|
|
+ .parse("Jun 11, 2014 | 6/12/14 | Jun 13, 2014 | June 14, 2014 | Sunday, June 15, 2014", out3);
|
|
|
+ assertEquals(
|
|
|
+ "[Wed Jun 11 00:00:00 CEST 2014, Thu Jun 12 00:00:00 CEST 2014, Fri Jun 13 00:00:00 CEST 2014, Sat Jun 14 00:00:00 CEST 2014, Sun Jun 15 00:00:00 CEST 2014]",
|
|
|
+ Arrays.toString(out3)
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void testFormat_Instant() {
|
|
|
assertEquals("2014-06-15T11:25:10.777Z", ResolveFormat.compile("{date2}").format(ITEM) );
|
|
|
@@ -322,6 +368,30 @@ public class ResolveFormatTest {
|
|
|
assertEquals("Hello 77 t world ?", r2);
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void testFormat_Choice() {
|
|
|
+ ResolveFormat rf = ResolveFormat.compile("value = {0,number} {1,choice,-1#negative|0#zero|1#one|2#two|2<positive}");
|
|
|
+
|
|
|
+ assertEquals("value = -3 negative", rf.vformat(-3,-3));
|
|
|
+ assertEquals("value = -1 negative", rf.vformat(-1,-1));
|
|
|
+ assertEquals("value = 0 zero", rf.vformat(0,0));
|
|
|
+ assertEquals("value = 1,5 one", rf.vformat(1.5,1.5));
|
|
|
+ assertEquals("value = 3 positive", rf.vformat(3.0,3.0));
|
|
|
+
|
|
|
+ Double[] out1 = new Double[2];
|
|
|
+ rf.parse("value = 3 negative", out1);
|
|
|
+ assertEquals("[3.0, -1.0]", Arrays.toString(out1));
|
|
|
+
|
|
|
+ Double[] out2 = new Double[2];
|
|
|
+ rf.parse("value = 77 one", out2);
|
|
|
+ assertEquals("[77.0, 1.0]", Arrays.toString(out2));
|
|
|
+
|
|
|
+ assertThrows(ResolveFormat.ResolveException.class, ()->{
|
|
|
+ rf.parse("value = 77 four", out2);
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
private static final class Wrapper {
|
|
|
public Object[] items;
|
|
|
|
|
|
@@ -372,9 +442,10 @@ public class ResolveFormatTest {
|
|
|
}
|
|
|
|
|
|
|
|
|
- // @todo (assira #2) test: ResolveFormat# parse
|
|
|
-
|
|
|
- // @todo (assira #3) test: ResolveFormat# choice pattern
|
|
|
+ // @todo (assira #0) test: ResolveFormat# parse FHexArray
|
|
|
+ // @todo (assira #0) test: ResolveFormat# parse FHexStream
|
|
|
+ // @todo (assira #0) test: ResolveFormat# parse FEngineer
|
|
|
+ // @todo (assira #0) test: ResolveFormat# parse FGeneric
|
|
|
|
|
|
private static final Object ITEM = new Object(){
|
|
|
|