public void testNameEqualsValueConstructor() throws Exception {
    String[] fields = new String[] {"name=testName", "descriptorType=testType"};
    DescriptorSupport descriptor = new DescriptorSupport(fields);
    assertTrue("Should be two fields", descriptor.getFields().length == 2);
    assertEquals("testName", descriptor.getFieldValue("name"));
    assertEquals("testType", descriptor.getFieldValue("descriptorType"));
    assertTrue("Should be valid", descriptor.isValid());

    descriptor = new DescriptorSupport((String[]) null);
    assertTrue("Should be empty", descriptor.getFields().length == 0);
    assertFalse("Should not be valid", descriptor.isValid());

    descriptor = new DescriptorSupport(new String[0]);
    assertTrue("Should be empty", descriptor.getFields().length == 0);
    assertFalse("Should not be valid", descriptor.isValid());

    String[] nullName = new String[] {"name=testName", "=rubbish"};
    boolean caught = false;
    try {
      descriptor = new DescriptorSupport(nullName);
    } catch (RuntimeOperationsException e) {
      caught = true;
    }
    assertTrue("Expected an exception for '=rubbish'", caught);

    // This is legal?
    String[] notEmptyName = new String[] {"name=testName", " =rubbish"};
    descriptor = new DescriptorSupport(notEmptyName);
    assertTrue("Should be two fields", descriptor.getFields().length == 2);
    assertEquals("testName", descriptor.getFieldValue("name"));
    assertEquals("rubbish", descriptor.getFieldValue(" "));
    assertFalse("Should not be valid", descriptor.isValid());
  }
  public void testCopyConstructor() throws Exception {
    DescriptorSupport descriptor = new DescriptorSupport((DescriptorSupport) null);
    assertTrue("Should be empty", descriptor.getFields().length == 0);
    assertFalse("Should not be valid", descriptor.isValid());

    descriptor = new DescriptorSupport(descriptor);
    assertTrue("Should be empty", descriptor.getFields().length == 0);
    assertFalse("Should not be valid", descriptor.isValid());

    descriptor.setField("name", "testName");
    descriptor.setField("descriptorType", "testType");
    descriptor = new DescriptorSupport(descriptor);
    assertTrue("Should be two fields", descriptor.getFields().length == 2);
    assertEquals("testName", descriptor.getFieldValue("name"));
    assertEquals("testType", descriptor.getFieldValue("descriptorType"));
    assertTrue("Should be valid", descriptor.isValid());
  }
  public void testSizeConstructor() throws Exception {
    DescriptorSupport descriptor = new DescriptorSupport(100);
    assertTrue("Should be empty", descriptor.getFields().length == 0);
    assertFalse("Should not be valid", descriptor.isValid());

    boolean caught = false;
    try {
      descriptor = new DescriptorSupport(-1);
    } catch (RuntimeOperationsException e) {
      caught = true;
    }
    assertTrue("Expected an exception for a negative size", caught);
  }
 public void testNameEqualsValueConstructorError() throws Exception {
   try {
     String[] fields = new String[] {"name=testName", "descriptorType=testType", "another="};
     DescriptorSupport descriptor = new DescriptorSupport(fields);
     assertTrue("Should be three fields", descriptor.getFields().length == 3);
     assertEquals("testName", descriptor.getFieldValue("name"));
     assertEquals("testType", descriptor.getFieldValue("descriptorType"));
     assertTrue("another should be null", descriptor.getFieldValue("another") == null);
     assertTrue("Should be valid", descriptor.isValid());
   } catch (Exception e) {
     fail("FAILS IN RI: 'another=' should be valid according to the javadoc " + e.toString());
   }
 }
  public void testNamesValuesConstructor() throws Exception {
    String[] names = new String[] {"name", "descriptorType"};
    Object[] values = new Object[] {"testName", "testType"};
    DescriptorSupport descriptor = new DescriptorSupport(names, values);
    assertTrue("Should be two fields", descriptor.getFields().length == 2);
    assertEquals("testName", descriptor.getFieldValue("name"));
    assertEquals("testType", descriptor.getFieldValue("descriptorType"));
    assertTrue("Should be valid", descriptor.isValid());

    descriptor = new DescriptorSupport(new String[0], new Object[0]);
    assertTrue("Should be empty", descriptor.getFields().length == 0);
    assertFalse("Should not be valid", descriptor.isValid());

    boolean caught = false;
    try {
      descriptor = new DescriptorSupport(null, null);
    } catch (RuntimeOperationsException e) {
      caught = true;
    }
    assertTrue("Expected an exception for null names and values", caught);

    caught = false;
    try {
      descriptor = new DescriptorSupport(null, values);
    } catch (RuntimeOperationsException e) {
      caught = true;
    }
    assertTrue("Expected an exception for null names", caught);

    caught = false;
    try {
      descriptor = new DescriptorSupport(names, null);
    } catch (RuntimeOperationsException e) {
      caught = true;
    }
    assertTrue("Expected an exception for null values", caught);

    Object[] tooManyValues = new Object[] {"testName", "testType", "tooMany"};
    caught = false;
    try {
      descriptor = new DescriptorSupport(names, tooManyValues);
    } catch (RuntimeOperationsException e) {
      caught = true;
    }
    assertTrue("Expected an exception for too many values", caught);

    Object[] tooFewValues = new Object[] {"testName"};
    caught = false;
    try {
      descriptor = new DescriptorSupport(names, tooFewValues);
    } catch (RuntimeOperationsException e) {
      caught = true;
    }
    assertTrue("Expected an exception for too few values", caught);

    String[] nullName = new String[] {"name", null};
    caught = false;
    try {
      descriptor = new DescriptorSupport(nullName, values);
    } catch (RuntimeOperationsException e) {
      caught = true;
    }
    assertTrue("Expected an exception for null name", caught);

    String[] emptyName = new String[] {"name", ""};
    caught = false;
    try {
      descriptor = new DescriptorSupport(emptyName, values);
    } catch (RuntimeOperationsException e) {
      caught = true;
    }
    assertTrue("Expected an exception for empty name ", caught);

    // This is legal?
    String[] notEmptyName = new String[] {"name", " "};
    descriptor = new DescriptorSupport(notEmptyName, values);
    assertTrue("Should be two fields", descriptor.getFields().length == 2);
    assertEquals("testName", descriptor.getFieldValue("name"));
    assertEquals("testType", descriptor.getFieldValue(" "));
    assertFalse("Should not be valid", descriptor.isValid());

    names = new String[] {"name", "descriptorType", "another"};
    values = new Object[] {"testName", "testType", null};
    descriptor = new DescriptorSupport(names, values);
    assertTrue("Should be three fields", descriptor.getFields().length == 3);
    assertEquals("testName", descriptor.getFieldValue("name"));
    assertEquals("testType", descriptor.getFieldValue("descriptorType"));
    assertTrue("another should be null", descriptor.getFieldValue("another") == null);
    assertTrue("Should be valid", descriptor.isValid());
  }
  private void validate(String[] names, Object[] values, boolean valid) {
    DescriptorSupport descriptor = null;
    RuntimeOperationsException caught = null;
    boolean descriptorValid = false;
    try {
      descriptor = new DescriptorSupport(names, values);
      descriptorValid = descriptor.isValid();
    } catch (RuntimeOperationsException e) {
      caught = e;
    }
    if (valid && caught != null) throw caught;
    assertEquals(
        "Expected "
            + valid
            + " for new Descriptor(String[], String[]) names="
            + Arrays.asList(names)
            + " values="
            + Arrays.asList(values),
        valid,
        descriptorValid);

    caught = null;
    descriptorValid = false;
    try {
      String[] fields = new String[names.length];
      for (int i = 0; i < fields.length; i++) {
        if (values[i] == null) fields[i] = names[i] + "=";
        else fields[i] = names[i] + "=" + values[i].toString();
      }
      descriptor = new DescriptorSupport(names, values);
      descriptorValid = descriptor.isValid();
    } catch (RuntimeOperationsException e) {
      caught = e;
    }
    if (valid && caught != null) throw caught;
    assertEquals(
        "Expected "
            + valid
            + " for new Descriptor(String[], String[]) names="
            + Arrays.asList(names)
            + " values="
            + Arrays.asList(values),
        valid,
        descriptorValid);

    caught = null;
    descriptorValid = false;
    try {
      descriptor = new DescriptorSupport();
      for (int i = 0; i < names.length; i++) descriptor.setField(names[i], values[i]);
      descriptorValid = descriptor.isValid();
    } catch (RuntimeOperationsException e) {
      caught = e;
    }
    if (valid && caught != null) throw caught;
    assertEquals(
        "Expected "
            + valid
            + " for new Descriptor(String[], String[]) names="
            + Arrays.asList(names)
            + " values="
            + Arrays.asList(values),
        valid,
        descriptorValid);

    caught = null;
    descriptorValid = false;
    try {
      descriptor = new DescriptorSupport();
      descriptor.setFields(names, values);
      descriptorValid = descriptor.isValid();
    } catch (RuntimeOperationsException e) {
      caught = e;
    }
    if (valid && caught != null) throw caught;
    assertEquals(
        "Expected "
            + valid
            + " for new Descriptor(String[], String[]) names="
            + Arrays.asList(names)
            + " values="
            + Arrays.asList(values),
        valid,
        descriptorValid);
  }
 public void testDefaultConstructor() throws Exception {
   DescriptorSupport descriptor = new DescriptorSupport();
   assertTrue("Should be empty", descriptor.getFields().length == 0);
   assertFalse("Should not be valid", descriptor.isValid());
 }