package org.fastcatsearch.ir.field; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import org.fastcatsearch.ir.field.AStringField; import org.fastcatsearch.ir.field.AStringMvField; import org.fastcatsearch.ir.field.DatetimeField; import org.fastcatsearch.ir.field.Field; import org.fastcatsearch.ir.field.IntField; import org.fastcatsearch.ir.io.BytesDataInput; import org.fastcatsearch.ir.io.BytesDataOutput; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class FieldTest { protected static Logger logger = LoggerFactory.getLogger(FieldTest.class); private BytesDataInput write(Field field) throws IOException{ BytesDataOutput output = new BytesDataOutput(); field.writeTo(output); byte[] array = output.array(); return new BytesDataInput(array, 0, array.length); } private BytesDataInput writeFixedDataTo(Field field) throws IOException{ BytesDataOutput output = new BytesDataOutput(); field.writeFixedDataTo(output); byte[] array = output.array(); return new BytesDataInput(array, 0, array.length); } private BytesDataInput writeRawString(Field field) throws IOException{ BytesDataOutput output = new BytesDataOutput(); field.writeRawTo(output); byte[] array = output.array(); return new BytesDataInput(array, 0, array.length); } @Test public void testRawField() throws IOException, FieldDataParseException { UStringMvField field = new UStringMvField("tags", "강아지", 10); field.parseIndexable(); System.out.println(field.getDataString()); } @Test public void testIntegerField() throws IOException, FieldDataParseException { String value = "1231435"; IntField field = new IntField("A", value); assertEquals(value, field.rawString()); field.parseIndexable(); BytesDataInput input = write(field); IntField field2 = new IntField("A"); field2.readFrom(input); assertEquals(null, field2.rawString()); String value2 = field2.getValue().toString(); assertEquals(value, value2); System.out.println(value2); } @Test public void testRawIntegerField() throws IOException, FieldDataParseException { String value = "4163526"; IntField field = new IntField("A", value); assertEquals(value, field.rawString()); field.parseIndexable(); BytesDataInput input = writeRawString(field); IntField field2 = new IntField("A"); field2.readRawFrom(input); assertEquals(value, field2.rawString()); field2.parseIndexable(); String value2 = field2.getValue().toString(); assertEquals(value, value2); } @Test public void testDatetimeField() throws IOException, FieldDataParseException { String value = "2013-06-12 12:30:11"; DatetimeField field = new DatetimeField("A", value); BytesDataInput input = write(field); DatetimeField field2 = new DatetimeField("A"); field2.readFrom(input); SimpleDateFormat sdfc = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = (Date) field2.getValue(); String value2 = sdfc.format(date); assertEquals(value, value2); System.out.println(value2); } @Test public void testDatetimeFieldFilter() throws IOException, FieldDataParseException { String value = "2001-11-17 11"; DatetimeField field = new DatetimeField("A", value); BytesDataOutput output = new BytesDataOutput(); field.writeFixedDataTo(output); byte[] array = output.array(); logger.info("{}", array); } String avalue = "It really depends on what kind of Stream you're working with. " + "For instance System.console().readLine() (new in Java 6) is pretty easy. " + "Same with BufferedReader's readLine()"; @Test public void testStringField() throws IOException, FieldDataParseException { AStringField field = new AStringField("A", avalue); BytesDataInput input = write(field); AStringField field2 = new AStringField("A"); field2.readFrom(input); String value2 = field2.getValue().toString(); assertEquals(avalue, value2); System.out.println(value2); } @Test public void testFixedStringField() throws IOException, FieldDataParseException { int size = 10; AStringField field = new AStringField("A", avalue, size); BytesDataInput input = write(field); AStringField field2 = new AStringField("A"); field2.readFrom(input); String value2 = field2.getValue().toString(); assertEquals(avalue.substring(0, size), value2); System.out.println(field.getValue()); } @Test public void testFixedStringMvField() throws IOException, FieldDataParseException { int size = 10; String[] values = new String[]{"123456789011", "223456789011", "323456789011"}; AStringMvField field = new AStringMvField("A", size); field.addValue(values[0]); field.addValue(values[1]); field.addValue(values[2]); BytesDataInput input = write(field); AStringMvField field2 = new AStringMvField("A"); field2.readFrom(input); Iterator<Object> iterator = field2.getMultiValueIterator(); int i = 0; while(iterator.hasNext()){ String val = iterator.next().toString(); if(values[i].length() > size){ values[i] = values[i].substring(0, size); } assertEquals(values[i++], val); } System.out.println(field.getValue()); } @Test public void testRawFixedStringMvField() throws IOException, FieldDataParseException { int size = 10; String[] values = new String[]{"123456789011", "223456789011", "323456789011"}; String value = "123456789011,223456789011,323456789011"; AStringMvField field = new AStringMvField("A", value, size); BytesDataInput input = writeRawString(field); AStringMvField field2 = new AStringMvField("A", size); field2.readRawFrom(input); assertEquals(value, field.rawString()); assertEquals(value, field2.rawString()); field2.parseIndexable(","); Iterator<Object> iterator = field2.getMultiValueIterator(); int i = 0; while(iterator.hasNext()){ String val = iterator.next().toString(); if(values[i].length() > size){ values[i] = values[i].substring(0, size); } assertEquals(values[i++], val); System.out.println(val); } } }