@Test
 public void testDefaultAppend() {
   assertEquals("foo", FormattableUtils.append("foo", new Formatter(), 0, -1, -1).toString());
   assertEquals("fo", FormattableUtils.append("foo", new Formatter(), 0, -1, 2).toString());
   assertEquals(" foo", FormattableUtils.append("foo", new Formatter(), 0, 4, -1).toString());
   assertEquals("   foo", FormattableUtils.append("foo", new Formatter(), 0, 6, -1).toString());
   assertEquals(" fo", FormattableUtils.append("foo", new Formatter(), 0, 3, 2).toString());
   assertEquals("   fo", FormattableUtils.append("foo", new Formatter(), 0, 5, 2).toString());
   assertEquals(
       "foo ", FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 4, -1).toString());
   assertEquals(
       "foo   ", FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 6, -1).toString());
   assertEquals(
       "fo ", FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 3, 2).toString());
   assertEquals(
       "fo   ", FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 5, 2).toString());
 }
 @Test
 public void testAlternatePadCharacter() {
   final char pad = '_';
   assertEquals("foo", FormattableUtils.append("foo", new Formatter(), 0, -1, -1, pad).toString());
   assertEquals("fo", FormattableUtils.append("foo", new Formatter(), 0, -1, 2, pad).toString());
   assertEquals("_foo", FormattableUtils.append("foo", new Formatter(), 0, 4, -1, pad).toString());
   assertEquals(
       "___foo", FormattableUtils.append("foo", new Formatter(), 0, 6, -1, pad).toString());
   assertEquals("_fo", FormattableUtils.append("foo", new Formatter(), 0, 3, 2, pad).toString());
   assertEquals("___fo", FormattableUtils.append("foo", new Formatter(), 0, 5, 2, pad).toString());
   assertEquals(
       "foo_",
       FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 4, -1, pad).toString());
   assertEquals(
       "foo___",
       FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 6, -1, pad).toString());
   assertEquals(
       "fo_", FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 3, 2, pad).toString());
   assertEquals(
       "fo___",
       FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 5, 2, pad).toString());
 }
  @Test
  public void testEllipsis() {
    assertEquals("foo", FormattableUtils.append("foo", new Formatter(), 0, -1, -1, "*").toString());
    assertEquals("f*", FormattableUtils.append("foo", new Formatter(), 0, -1, 2, "*").toString());
    assertEquals(" foo", FormattableUtils.append("foo", new Formatter(), 0, 4, -1, "*").toString());
    assertEquals(
        "   foo", FormattableUtils.append("foo", new Formatter(), 0, 6, -1, "*").toString());
    assertEquals(" f*", FormattableUtils.append("foo", new Formatter(), 0, 3, 2, "*").toString());
    assertEquals("   f*", FormattableUtils.append("foo", new Formatter(), 0, 5, 2, "*").toString());
    assertEquals(
        "foo ",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 4, -1, "*").toString());
    assertEquals(
        "foo   ",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 6, -1, "*").toString());
    assertEquals(
        "f* ", FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 3, 2, "*").toString());
    assertEquals(
        "f*   ",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 5, 2, "*").toString());

    assertEquals(
        "foo", FormattableUtils.append("foo", new Formatter(), 0, -1, -1, "+*").toString());
    assertEquals("+*", FormattableUtils.append("foo", new Formatter(), 0, -1, 2, "+*").toString());
    assertEquals(
        " foo", FormattableUtils.append("foo", new Formatter(), 0, 4, -1, "+*").toString());
    assertEquals(
        "   foo", FormattableUtils.append("foo", new Formatter(), 0, 6, -1, "+*").toString());
    assertEquals(" +*", FormattableUtils.append("foo", new Formatter(), 0, 3, 2, "+*").toString());
    assertEquals(
        "   +*", FormattableUtils.append("foo", new Formatter(), 0, 5, 2, "+*").toString());
    assertEquals(
        "foo ",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 4, -1, "+*").toString());
    assertEquals(
        "foo   ",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 6, -1, "+*").toString());
    assertEquals(
        "+* ",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 3, 2, "+*").toString());
    assertEquals(
        "+*   ",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 5, 2, "+*").toString());
  }
  @Test
  public void testAlternatePadCharAndEllipsis() {
    assertEquals(
        "foo", FormattableUtils.append("foo", new Formatter(), 0, -1, -1, '_', "*").toString());
    assertEquals(
        "f*", FormattableUtils.append("foo", new Formatter(), 0, -1, 2, '_', "*").toString());
    assertEquals(
        "_foo", FormattableUtils.append("foo", new Formatter(), 0, 4, -1, '_', "*").toString());
    assertEquals(
        "___foo", FormattableUtils.append("foo", new Formatter(), 0, 6, -1, '_', "*").toString());
    assertEquals(
        "_f*", FormattableUtils.append("foo", new Formatter(), 0, 3, 2, '_', "*").toString());
    assertEquals(
        "___f*", FormattableUtils.append("foo", new Formatter(), 0, 5, 2, '_', "*").toString());
    assertEquals(
        "foo_",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 4, -1, '_', "*").toString());
    assertEquals(
        "foo___",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 6, -1, '_', "*").toString());
    assertEquals(
        "f*_",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 3, 2, '_', "*").toString());
    assertEquals(
        "f*___",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 5, 2, '_', "*").toString());

    assertEquals(
        "foo", FormattableUtils.append("foo", new Formatter(), 0, -1, -1, '_', "+*").toString());
    assertEquals(
        "+*", FormattableUtils.append("foo", new Formatter(), 0, -1, 2, '_', "+*").toString());
    assertEquals(
        "_foo", FormattableUtils.append("foo", new Formatter(), 0, 4, -1, '_', "+*").toString());
    assertEquals(
        "___foo", FormattableUtils.append("foo", new Formatter(), 0, 6, -1, '_', "+*").toString());
    assertEquals(
        "_+*", FormattableUtils.append("foo", new Formatter(), 0, 3, 2, '_', "+*").toString());
    assertEquals(
        "___+*", FormattableUtils.append("foo", new Formatter(), 0, 5, 2, '_', "+*").toString());
    assertEquals(
        "foo_",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 4, -1, '_', "+*").toString());
    assertEquals(
        "foo___",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 6, -1, '_', "+*").toString());
    assertEquals(
        "+*_",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 3, 2, '_', "+*").toString());
    assertEquals(
        "+*___",
        FormattableUtils.append("foo", new Formatter(), LEFT_JUSTIFY, 5, 2, '_', "+*").toString());
  }
 @Test(expected = IllegalArgumentException.class)
 public void testIllegalEllipsis() {
   FormattableUtils.append("foo", new Formatter(), 0, -1, 1, "xx");
 }