@Test
  public void testURLDecodeStringInvalid() {
    // %n rather than %nn should throw an IAE according to the Javadoc
    Exception exception = null;
    try {
      RequestUtil.URLDecode("%5xxxxx");
    } catch (Exception e) {
      exception = e;
    }
    assertTrue(exception instanceof IllegalArgumentException);

    // Edge case trying to trigger ArrayIndexOutOfBoundsException
    exception = null;
    try {
      RequestUtil.URLDecode("%5");
    } catch (Exception e) {
      exception = e;
    }
    assertTrue(exception instanceof IllegalArgumentException);
  }
  @Test
  public void testURLDecodeStringValidUtf8End() {

    String result = RequestUtil.URLDecode("xxxx%c3%aa", "UTF-8");
    assertEquals("xxxx\u00ea", result);
  }
 @Test
 public void testURLDecodeStringValidUtf8Start() {
   String result = RequestUtil.URLDecode("%c3%aaxxxx", "UTF-8");
   assertEquals("\u00eaxxxx", result);
 }
  @Test
  public void testURLDecodeStringValidIso88591End() {

    String result = RequestUtil.URLDecode("xxxx%41", "ISO-8859-1");
    assertEquals("xxxxA", result);
  }
  @Test
  public void testURLDecodeStringValidIso88591Start() {

    String result = RequestUtil.URLDecode("%41xxxx", "ISO-8859-1");
    assertEquals("Axxxx", result);
  }