@Test
  public void testHashCodeMethod() {
    // Create an instance...
    final AciServerDetails details1 = new AciServerDetails();
    details1.setHost("host1.example.com");
    details1.setPort(5790);
    details1.setCharsetName("UTF-8");

    // Create an instance...
    final AciServerDetails details2 = new AciServerDetails();
    details2.setHost("host1.example.com");
    details2.setPort(5790);
    details2.setCharsetName("UTF-8");

    // Create yet another instance...
    final AciServerDetails details3 = new AciServerDetails();
    details3.setHost("host2.example.com");
    details3.setPort(5790);
    details3.setCharsetName("UTF-8");

    // Assert that 1 & 2 are the same and 1 & 3 and 2 & 3 are different...
    assertThat("Hash codes should be equal", details1.hashCode() == details2.hashCode(), is(true));
    assertThat(
        "Hash codes should not be equal", details1.hashCode() == details3.hashCode(), is(false));
    assertThat(
        "Hash codes should not be equal", details2.hashCode() == details3.hashCode(), is(false));

    details1.setEncryptionCodec(new TestEncryptionCodec());
    assertThat(details1.hashCode() == details2.hashCode(), is(false));

    details2.setEncryptionCodec(new TestEncryptionCodec());
    assertThat(details1.hashCode() == details2.hashCode(), is(true));
  }
  @Test
  public void testEqualsMethod() {
    // Create an instance...
    final AciServerDetails details1 = new AciServerDetails();
    details1.setHost("host1.example.com");
    details1.setPort(5790);
    details1.setCharsetName("UTF-8");

    // Create another instance...
    final AciServerDetails details2 = new AciServerDetails();
    details2.setHost("host2.example.com");
    details2.setPort(5790);
    details2.setCharsetName("UTF-8");

    // Compare to itself and the other details...
    assertThat("Details should be equal to itself", details1.equals(details1), is(true));
    assertThat("Details should not be equal", details1.equals(details2), is(false));

    // Change details2 to have the same name so tecxhnically they'return the same...
    details2.setHost("host1.example.com");
    assertThat("Details should be equal", details1.equals(details2), is(true));

    // Compare it to some random object, it should be false...
    assertThat("Parameters should be equal", details1.equals(new Object()), is(false));

    // Create yet another instance...
    final AciServerDetails details3 = new AciServerDetails();
    details3.setHost("host1.example.com");
    details3.setPort(5790);
    details3.setCharsetName("UTF-8");
    details3.setEncryptionCodec(new TestEncryptionCodec());

    // Check against details1 which is the same apart from the codec...
    assertThat("Details should not be equal", details3.equals(details1), is(false));

    // Set the same codec on details1, it should now be the same as details3...
    details1.setEncryptionCodec(new TestEncryptionCodec());
    assertThat(details3.equals(details1), is(true));
  }
  @Test
  public void testCharsetNameProperty() {
    // Create an instance...
    final AciServerDetails details = new AciServerDetails();
    assertThat("charsetName property is not null", details.getCharsetName(), is("UTF-8"));

    // Set the charsetName to something...
    final String charsetName = "ISO-8859-1";
    details.setCharsetName(charsetName);
    assertThat(
        "charsetName property is not as expected",
        details.getCharsetName(),
        is(equalTo(charsetName)));

    // Set the charsetName to null and check....
    try {
      details.setCharsetName(null);
      fail("Should have thrown an IllegalArgumentException as charsetName is null.");
    } catch (final IllegalArgumentException iae) {
      // Expected...
    }

    // Set the charsetName to an illegal charset name and check....
    try {
      details.setCharsetName("_~@£$");
      fail("Should have thrown an IllegalCharsetNameException as charsetName is illegal.");
    } catch (final IllegalCharsetNameException icne) {
      // Expected...
    }

    // Set the charsetName to an unsupported charset and check....
    try {
      details.setCharsetName("wibble");
      fail("Should have thrown an UnsupportedCharsetException as charsetName is unsupported.");
    } catch (final UnsupportedCharsetException uce) {
      // Expected...
    }
  }