/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.vtype; import java.util.Arrays; import java.util.List; import org.junit.Test; import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; import static org.diirt.vtype.ValueFactory.*; import org.diirt.util.array.ArrayByte; import org.diirt.util.array.ArrayDouble; import org.diirt.util.array.ArrayFloat; import org.diirt.util.array.ArrayInt; import org.diirt.util.array.ArrayShort; import org.diirt.util.array.ListByte; import org.diirt.util.array.ListDouble; import org.diirt.util.array.ListFloat; import org.diirt.util.array.ListInt; import org.diirt.util.array.ListShort; import org.diirt.util.text.NumberFormats; import org.mockito.Mockito; /** * * @author carcassi */ public class SimpleValueFormatTest { Display display = newDisplay(Double.MIN_VALUE, Double.MIN_VALUE, Double.MIN_VALUE, "", NumberFormats.format(3), Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE, Double.MIN_VALUE, Double.MAX_VALUE); Display displayInt = newDisplay(Double.MIN_VALUE, Double.MIN_VALUE, Double.MIN_VALUE, "", NumberFormats.format(0), Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE, Double.MIN_VALUE, Double.MAX_VALUE); @Test public void defaultPrecision() { ValueFormat f = new SimpleValueFormat(3); assertThat(f.format(newVDouble(1234.5678, display)), equalTo("1234.568")); assertThat(f.format(newVIntArray(new ArrayInt(1, 2, 3), alarmNone(), timeNow(), displayInt)), equalTo("[1, 2, 3]")); assertThat(f.format(newVIntArray(new ArrayInt(1), alarmNone(), timeNow(), displayInt)), equalTo("[1]")); assertThat(f.format(newVIntArray(new ArrayInt(1, 2, 3, 4, 5), alarmNone(), timeNow(), displayInt)), equalTo("[1, 2, 3, ...]")); assertThat(f.format(newVFloatArray(new ArrayFloat(new float[] {1, 2, 3}), alarmNone(), timeNow(), display)), equalTo("[1.000, 2.000, 3.000]")); assertThat(f.format(newVFloatArray(new ArrayFloat(new float[] {1}), alarmNone(), timeNow(), display)), equalTo("[1.000]")); assertThat(f.format(newVFloatArray(new ArrayFloat(new float[] {1, 2, 3, 4, 5}), alarmNone(), timeNow(), display)), equalTo("[1.000, 2.000, 3.000, ...]")); assertThat(f.format(newVDoubleArray(new ArrayDouble(1, 2, 3), alarmNone(), timeNow(), display)), equalTo("[1.000, 2.000, 3.000]")); assertThat(f.format(newVDoubleArray(new ArrayDouble(1), alarmNone(), timeNow(), display)), equalTo("[1.000]")); assertThat(f.format(newVDoubleArray(new ArrayDouble(1, 2, 3, 4, 5), alarmNone(), timeNow(), display)), equalTo("[1.000, 2.000, 3.000, ...]")); assertThat(f.format(newVStringArray(Arrays.asList("A", "B", "C"), alarmNone(), timeNow())), equalTo("[A, B, C]")); assertThat(f.format(newVStringArray(Arrays.asList("A"), alarmNone(), timeNow())), equalTo("[A]")); assertThat(f.format(newVStringArray(Arrays.asList("A", "B", "C", "D", "E"), alarmNone(), timeNow())), equalTo("[A, B, C, ...]")); assertThat(f.format(newVEnumArray(new ArrayInt(2, 0, 0), Arrays.asList("A", "B", "C"), alarmNone(), timeNow())), equalTo("[C, A, A]")); assertThat(f.format(newVEnumArray(new ArrayInt(2), Arrays.asList("A", "B", "C"), alarmNone(), timeNow())), equalTo("[C]")); assertThat(f.format(newVEnumArray(new ArrayInt(2, 0, 0, 1, 0), Arrays.asList("A", "B", "C"), alarmNone(), timeNow())), equalTo("[C, A, A, ...]")); } @Test public void testMandatedPrecision() { Display display = newDisplay(Double.MIN_VALUE, Double.MIN_VALUE, Double.MIN_VALUE, "", NumberFormats.format(3), Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE, Double.MIN_VALUE, Double.MAX_VALUE); Display displayInt = newDisplay(Double.MIN_VALUE, Double.MIN_VALUE, Double.MIN_VALUE, "", NumberFormats.format(0), Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE, Double.MIN_VALUE, Double.MAX_VALUE); ValueFormat f = new SimpleValueFormat(3); f.setNumberFormat(NumberFormats.format(2)); assertThat(f.format(newVDouble(1234.5678, display)), equalTo("1234.57")); assertThat(f.format(newVIntArray(new ArrayInt(1, 2, 3), alarmNone(), timeNow(), displayInt)), equalTo("[1.00, 2.00, 3.00]")); assertThat(f.format(newVIntArray(new ArrayInt(1), alarmNone(), timeNow(), displayInt)), equalTo("[1.00]")); assertThat(f.format(newVIntArray(new ArrayInt(1, 2, 3, 4, 5), alarmNone(), timeNow(), displayInt)), equalTo("[1.00, 2.00, 3.00, ...]")); assertThat(f.format(newVFloatArray(new ArrayFloat(new float[] {1, 2, 3}), alarmNone(), timeNow(), display)), equalTo("[1.00, 2.00, 3.00]")); assertThat(f.format(newVFloatArray(new ArrayFloat(new float[] {1}), alarmNone(), timeNow(), display)), equalTo("[1.00]")); assertThat(f.format(newVFloatArray(new ArrayFloat(new float[] {1, 2, 3, 4, 5}), alarmNone(), timeNow(), display)), equalTo("[1.00, 2.00, 3.00, ...]")); assertThat(f.format(newVDoubleArray(new ArrayDouble(1, 2, 3), alarmNone(), timeNow(), display)), equalTo("[1.00, 2.00, 3.00]")); assertThat(f.format(newVDoubleArray(new ArrayDouble(1), alarmNone(), timeNow(), display)), equalTo("[1.00]")); assertThat(f.format(newVDoubleArray(new ArrayDouble(1, 2, 3, 4, 5), alarmNone(), timeNow(), display)), equalTo("[1.00, 2.00, 3.00, ...]")); assertThat(f.format(newVStringArray(Arrays.asList("A", "B", "C"), alarmNone(), timeNow())), equalTo("[A, B, C]")); assertThat(f.format(newVStringArray(Arrays.asList("A"), alarmNone(), timeNow())), equalTo("[A]")); assertThat(f.format(newVStringArray(Arrays.asList("A", "B", "C", "D", "E"), alarmNone(), timeNow())), equalTo("[A, B, C, ...]")); } @Test public void parseVDouble1() { ValueFormat f = new SimpleValueFormat(3); VDouble reference = newVDouble(3.0); assertThat(f.parseObject("3.14", reference), equalTo((Object) 3.14)); assertThat(f.parseDouble("3.14"), equalTo(3.14)); assertThat(f.parseDouble("1333"), equalTo(1333.0)); } @Test public void parseVFloat1() { ValueFormat f = new SimpleValueFormat(3); VFloat reference = Mockito.mock(VFloat.class); assertThat(f.parseObject("3.14", reference), equalTo((Object) 3.14f)); assertThat(f.parseFloat("3.14"), equalTo(3.14f)); assertThat(f.parseFloat("1333"), equalTo(1333.0f)); } @Test public void parseVInt1() { ValueFormat f = new SimpleValueFormat(3); VInt reference = Mockito.mock(VInt.class); assertThat(f.parseObject("314", reference), equalTo((Object) 314)); assertThat(f.parseInt("314"), equalTo(314)); assertThat(f.parseInt("1333"), equalTo(1333)); } @Test public void parseVShort1() { ValueFormat f = new SimpleValueFormat(3); VShort reference = Mockito.mock(VShort.class); assertThat(f.parseObject("314", reference), equalTo((Object) (short) 314)); assertThat(f.parseShort("314"), equalTo((short) 314)); assertThat(f.parseShort("1333"), equalTo((short) 1333)); } @Test public void parseVByte1() { ValueFormat f = new SimpleValueFormat(3); VByte reference = Mockito.mock(VByte.class); assertThat(f.parseObject("23", reference), equalTo((Object) (byte) 23)); assertThat(f.parseByte("23"), equalTo((byte) 23)); assertThat(f.parseByte("112"), equalTo((byte) 112)); } @Test public void parseVString1() { ValueFormat f = new SimpleValueFormat(3); VString reference = Mockito.mock(VString.class); assertThat(f.parseObject("Testing", reference), equalTo((Object) "Testing")); assertThat(f.parseString("Testing"), equalTo("Testing")); assertThat(f.parseString("Foo"), equalTo("Foo")); } @Test public void parseVEnum1() { ValueFormat f = new SimpleValueFormat(3); List<String> labels = Arrays.asList("A", "B", "C"); VEnum reference = newVEnum(0, labels, alarmNone(), timeNow()); assertThat(f.parseObject("A", reference), equalTo((Object) 0)); assertThat(f.parseEnum("A", labels), equalTo(0)); assertThat(f.parseEnum("B", labels), equalTo(1)); } @Test public void parseVDoubleArray1() { ValueFormat f = new SimpleValueFormat(3); VDoubleArray reference = Mockito.mock(VDoubleArray.class); assertThat(f.parseObject("3.14", reference), equalTo((Object) new ArrayDouble(3.14))); assertThat(f.parseDoubleArray("3.14"), equalTo((ListDouble) new ArrayDouble(3.14))); assertThat(f.parseDoubleArray("1333, 3.14"), equalTo((ListDouble) new ArrayDouble(1333, 3.14))); assertThat(f.parseDoubleArray("1.0, 2.0, 3.0, 4.0"), equalTo((ListDouble) new ArrayDouble(1.0, 2.0, 3.0, 4.0))); } @Test public void parseVFloatArray1() { ValueFormat f = new SimpleValueFormat(3); VFloatArray reference = Mockito.mock(VFloatArray.class); assertThat(f.parseObject("3.14", reference), equalTo((Object) new ArrayFloat(3.14f))); assertThat(f.parseFloatArray("3.14"), equalTo((ListFloat) new ArrayFloat(3.14f))); assertThat(f.parseFloatArray("1333, 3.14"), equalTo((ListFloat) new ArrayFloat(1333f, 3.14f))); assertThat(f.parseFloatArray("1.0, 2.0, 3.0, 4.0"), equalTo((ListFloat) new ArrayFloat(1.0f, 2.0f, 3.0f, 4.0f))); } @Test public void parseVIntArray1() { ValueFormat f = new SimpleValueFormat(3); VIntArray reference = Mockito.mock(VIntArray.class); assertThat(f.parseObject("3", reference), equalTo((Object) new ArrayInt(3))); assertThat(f.parseIntArray("3"), equalTo((ListInt) new ArrayInt(3))); assertThat(f.parseIntArray("1333, 3"), equalTo((ListInt) new ArrayInt(1333, 3))); assertThat(f.parseIntArray("1, 2, 3, 4"), equalTo((ListInt) new ArrayInt(1, 2, 3, 4))); } @Test public void parseVShortArray1() { ValueFormat f = new SimpleValueFormat(3); VShortArray reference = Mockito.mock(VShortArray.class); assertThat(f.parseObject("3", reference), equalTo((Object) new ArrayShort((short) 3))); assertThat(f.parseShortArray("3"), equalTo((ListShort) new ArrayShort((short) 3))); assertThat(f.parseShortArray("1333, 3"), equalTo((ListShort) new ArrayShort(new short[]{1333, 3}))); assertThat(f.parseShortArray("1, 2, 3, 4"), equalTo((ListShort) new ArrayShort(new short[]{1, 2, 3, 4}))); } @Test public void parseVByteArray1() { ValueFormat f = new SimpleValueFormat(3); VByteArray reference = Mockito.mock(VByteArray.class); assertThat(f.parseObject("3", reference), equalTo((Object) new ArrayByte(new byte[] {3}))); assertThat(f.parseByteArray("3"), equalTo((ListByte) new ArrayByte(new byte[] {3}))); assertThat(f.parseByteArray("113, 3"), equalTo((ListByte) new ArrayByte(new byte[] {113, 3}))); assertThat(f.parseByteArray("1, 2, 3, 4"), equalTo((ListByte) new ArrayByte(new byte[] {1, 2, 3, 4}))); } @Test public void parseVStringArray1() { ValueFormat f = new SimpleValueFormat(3); VStringArray reference = Mockito.mock(VStringArray.class); assertThat(f.parseObject("test", reference), equalTo((Object) Arrays.asList("test"))); assertThat(f.parseStringArray("test"), equalTo(Arrays.asList("test"))); assertThat(f.parseStringArray("a, b"), equalTo(Arrays.asList("a", "b"))); assertThat(f.parseStringArray("a, b, c, d"), equalTo(Arrays.asList("a", "b", "c", "d"))); } @Test public void parseVEnumArray1() { ValueFormat f = new SimpleValueFormat(3); List<String> labels = Arrays.asList("A", "B", "C"); VEnumArray reference = newVEnumArray(new ArrayInt(1), labels, alarmNone(), timeNow()); assertThat(f.parseObject("A", reference), equalTo((Object) new ArrayInt(0))); assertThat(f.parseEnumArray("A", labels), equalTo((ListInt) new ArrayInt(0))); assertThat(f.parseEnumArray("B, A", labels), equalTo((ListInt) new ArrayInt(1, 0))); assertThat(f.parseEnumArray("B, A, C,A", labels), equalTo((ListInt) new ArrayInt(1, 0, 2, 0))); } }