@BeforeClass
 public static void initClass() {
   FieldInfo fieldInfo1 =
       FieldInfo.newInstance(FieldInfo.class).addPlainEntry("05 field1 picture X(10)").build();
   fieldInfo1.setEncoding(ENCODING);
   FieldInfo fieldInfo2 =
       FieldInfo.newInstance(FieldInfo.class).addPlainEntry("05 field2 picture X").build();
   fieldInfo2.setEncoding(ENCODING);
   fieldInfo2.setDefaultValue("O");
   ROOT.addChildren(
       Field.newInstance(PictureField.class).addFieldInfo(fieldInfo1),
       Field.newInstance(PictureField.class).addFieldInfo(fieldInfo2));
 }
/** @author natiz */
public final class PlainPictureFieldTest {

  private static final ContainerField ROOT =
      Field.newInstance(CompositeField.class)
          .addFieldInfo(FieldInfo.newInstance(FieldInfo.class).addPlainEntry("01 ROOT").build());
  private static final String ENCODING = "ISO-8859-1";
  private static final Marshaller<Boolean> BOOLEAN_MARSHALLER =
      Marshaller.newInstance(BooleanMarshaller.class);

  @BeforeClass
  public static void initClass() {
    FieldInfo fieldInfo1 =
        FieldInfo.newInstance(FieldInfo.class).addPlainEntry("05 field1 picture X(10)").build();
    fieldInfo1.setEncoding(ENCODING);
    FieldInfo fieldInfo2 =
        FieldInfo.newInstance(FieldInfo.class).addPlainEntry("05 field2 picture X").build();
    fieldInfo2.setEncoding(ENCODING);
    fieldInfo2.setDefaultValue("O");
    ROOT.addChildren(
        Field.newInstance(PictureField.class).addFieldInfo(fieldInfo1),
        Field.newInstance(PictureField.class).addFieldInfo(fieldInfo2));
  }

  @Before
  public void initTest() {
    assertEquals(ROOT, ROOT.find("field1").getParent());
    assertEquals(ROOT, ROOT.find("field2").getParent());
    assertSame(ROOT.find("field1").getParent(), ROOT.find("field2").getParent());
    assertEquals(Integer.valueOf(10), ((PictureField) ROOT.find("field1")).getCardinal());
    assertEquals(Integer.valueOf(1), ((PictureField) ROOT.find("field2")).getCardinal());

    assertNull(((PictureField) ROOT.find("field1")).getScale());
    assertNull(((PictureField) ROOT.find("field2")).getScale());

    assertFalse(((PictureField) ROOT.find("field1")).isSigned());
  }

  @Test
  public void siblings() {
    assertEquals(Integer.valueOf(2), Integer.valueOf(ROOT.find("field1").getSiblings().size()));
    assertEquals(Integer.valueOf(2), Integer.valueOf(ROOT.find("field2").getSiblings().size()));

    assertEquals(ROOT.find("field1").getSiblings().get(0), ROOT.find("field1"));
    assertEquals(ROOT.find("field1").getSiblings().get(1), ROOT.find("field2"));

    assertEquals(ROOT.find("field2").getSiblings().get(0), ROOT.find("field1"));
    assertEquals(ROOT.find("field2").getSiblings().get(1), ROOT.find("field2"));
  }

  @Test
  public void cloneField() {
    assertEquals(ROOT.find("field1"), ROOT.find("field1").duplicate());
    assertEquals(ROOT.find("field2"), ROOT.find("field2").duplicate());
  }

  @Test
  public void buffer() throws Exception {
    // Exactly 10 letters as the field storage length (10)
    ROOT.find("field1").setStorage("0123456789".getBytes(ENCODING));
    assertEquals("0123456789", new String(ROOT.find("field1").getStorage(), ENCODING));

    // Exactly one letter as the field storage length (1). O equals
    // TRUE
    ROOT.find("field2").setStorage("O".getBytes(ENCODING));
    assertEquals(Boolean.TRUE, BOOLEAN_MARSHALLER.getValue((PictureField) ROOT.find("field2")));

    // Exactly one letter as the field storage length (1). N equals
    // FALSE
    ROOT.find("field2").setStorage("N".getBytes(ENCODING));
    assertEquals(Boolean.FALSE, BOOLEAN_MARSHALLER.getValue((PictureField) ROOT.find("field2")));

    // Exactly one letter as the field storage length (1). Other Value
    // equals FALSE too.
    ROOT.find("field2").setStorage("Y".getBytes(ENCODING));
    assertEquals(Boolean.FALSE, BOOLEAN_MARSHALLER.getValue((PictureField) ROOT.find("field2")));
  }

  @Test(expected = IllegalArgumentException.class, timeout = 1000)
  public void wrongBuffer() throws Exception {
    // Less letters than the 11 letters of the field storage length
    ROOT.find("field1").setStorage("An example".getBytes(ENCODING));

    // More letters than the 11 letters of the field storage length
    ROOT.find("field1").setStorage("The simple example".getBytes(ENCODING));

    // Less letters than the 1 letter of the field storage length
    ROOT.find("field2").setStorage("".getBytes(ENCODING));

    // More letters than the one letter of the field storage length
    ROOT.find("field2").setStorage("The simple example".getBytes(ENCODING));
  }
}