/** @tests java.text.MessageFormat#setFormatsByArgumentIndex(java.text.Format[]) */
  @TestTargetNew(
      level = TestLevel.COMPLETE,
      notes = "",
      method = "setFormatsByArgumentIndex",
      args = {java.text.Format[].class})
  public void test_setFormatsByArgumentIndex$Ljava_text_Format() {
    // test for method setFormatByArgumentIndex(Format[])
    MessageFormat f1 = (MessageFormat) format1.clone();

    // test with repeating formats and max argument index < max offset
    // compare getFormatsByArgumentIndex() results after calls to
    // setFormatsByArgumentIndex(Format[])
    Format[] correctFormats =
        new Format[] {
          DateFormat.getTimeInstance(),
          new ChoiceFormat("0#off|1#on"),
          DateFormat.getTimeInstance(),
          NumberFormat.getCurrencyInstance(),
          new ChoiceFormat("1#few|2#ok|3#a lot")
        };

    f1.setFormatsByArgumentIndex(correctFormats);
    Format[] formats = f1.getFormatsByArgumentIndex();

    assertEquals("Test1A:Returned wrong number of formats:", correctFormats.length, formats.length);
    for (int i = 0; i < correctFormats.length; i++) {
      assertEquals(
          "Test1B:wrong format for argument index " + i + ":", correctFormats[i], formats[i]);
    }

    // compare getFormats() results after calls to
    // setFormatByArgumentIndex()
    formats = f1.getFormats();
    correctFormats =
        new Format[] {
          NumberFormat.getCurrencyInstance(),
          DateFormat.getTimeInstance(),
          DateFormat.getTimeInstance(),
          new ChoiceFormat("1#few|2#ok|3#a lot"),
          new ChoiceFormat("0#off|1#on"),
          DateFormat.getTimeInstance(),
        };

    assertEquals("Test1C:Returned wrong number of formats:", correctFormats.length, formats.length);
    for (int i = 0; i < correctFormats.length; i++) {
      assertEquals(
          "Test1D:wrong format for pattern index " + i + ":", correctFormats[i], formats[i]);
    }

    // test setting argumentIndexes that are not used
    MessageFormat f2 = (MessageFormat) format2.clone();
    Format[] inputFormats =
        new Format[] {
          DateFormat.getDateInstance(),
          new ChoiceFormat("0#off|1#on"),
          NumberFormat.getPercentInstance(),
          NumberFormat.getCurrencyInstance(),
          DateFormat.getTimeInstance(),
          null,
          null,
          null,
          DateFormat.getTimeInstance()
        };
    f2.setFormatsByArgumentIndex(inputFormats);

    formats = f2.getFormatsByArgumentIndex();
    correctFormats = format2.getFormatsByArgumentIndex();

    assertEquals("Test2A:Returned wrong number of formats:", correctFormats.length, formats.length);
    for (int i = 0; i < correctFormats.length; i++) {
      assertEquals(
          "Test2B:wrong format for argument index " + i + ":", correctFormats[i], formats[i]);
    }

    formats = f2.getFormats();
    correctFormats =
        new Format[] {
          NumberFormat.getCurrencyInstance(),
          DateFormat.getTimeInstance(),
          DateFormat.getDateInstance(),
          null,
          new ChoiceFormat("0#off|1#on"),
          DateFormat.getDateInstance()
        };

    assertEquals("Test2C:Returned wrong number of formats:", correctFormats.length, formats.length);
    for (int i = 0; i < correctFormats.length; i++) {
      assertEquals(
          "Test2D:wrong format for pattern index " + i + ":", correctFormats[i], formats[i]);
    }

    // test exceeding the argumentIndex number
    MessageFormat f3 = (MessageFormat) format3.clone();
    f3.setFormatsByArgumentIndex(inputFormats);

    formats = f3.getFormatsByArgumentIndex();
    assertEquals("Test3A:Returned wrong number of formats:", 0, formats.length);

    formats = f3.getFormats();
    assertEquals("Test3B:Returned wrong number of formats:", 0, formats.length);
  }