@Test
  public void testPluginCallsServeForRightPlugin() {
    BasePlugin bp1 = createBasePlugin("/f1");
    BasePlugin bp2 = createBasePlugin("/f2");

    AggregateMimePlugin aggregateMimePlugin = new AggregateMimePlugin(bp1, bp2);

    String uri = "/f1";
    Map<String, String> headers = mock(Map.class);
    NanoHTTPD.IHTTPSession session = mock(NanoHTTPD.IHTTPSession.class);
    File f = mock(File.class);
    String mime = HttpTools.MimeType.APP_JSON;

    aggregateMimePlugin.serveFile(uri, headers, session, f, mime);
    verify(bp1, times(1)).serveFile(uri, headers, session, f, mime);

    String uri2 = "/f2";
    Map<String, String> headers2 = mock(Map.class);
    NanoHTTPD.IHTTPSession session2 = mock(NanoHTTPD.IHTTPSession.class);
    File f2 = mock(File.class);
    String mime2 = HttpTools.MimeType.APP_JSON;

    aggregateMimePlugin.serveFile(uri2, headers2, session2, f2, mime2);
    verify(bp1, times(1)).serveFile(uri, headers, session, f, mime);
    verify(bp2, times(1)).serveFile(uri2, headers2, session2, f2, mime2);
  }
 @Test(expected = IllegalStateException.class)
 public void testPluginChecksSameMimesNegative() {
   BasePlugin bp1 = createBasePlugin("/f1");
   BasePlugin bp2 = createBasePlugin(HttpTools.MimeType.APP_OCTET, "/f2");
   AggregateMimePlugin aggregateMimePlugin = new AggregateMimePlugin(bp1, bp2);
   assertEquals(HttpTools.MimeType.APP_JSON, aggregateMimePlugin.mimeType());
 }
 @Test
 public void testPluginChecksSameMimesPositive() {
   BasePlugin bp1 = createBasePlugin("/f1");
   BasePlugin bp2 = createBasePlugin("/f2");
   AggregateMimePlugin aggregateMimePlugin = new AggregateMimePlugin(bp1, bp2);
   assertEquals(HttpTools.MimeType.APP_JSON, aggregateMimePlugin.mimeType());
 }
  @Test
  public void testPluginSelectsRightPlugin() {
    BasePlugin bp1 = createBasePlugin("/f1");
    BasePlugin bp2 = createBasePlugin("/f2");

    AggregateMimePlugin aggregateMimePlugin = new AggregateMimePlugin(bp1, bp2);
    assertNull(aggregateMimePlugin.getServeCandidate("/f3", null));
    assertTrue(bp1 == aggregateMimePlugin.getServeCandidate("/f1", null));
    assertTrue(bp2 == aggregateMimePlugin.getServeCandidate("/f2", null));
  }
  @Test
  public void testPluginMergesFiles() {
    BasePlugin bp1 = createBasePlugin("/f1");
    BasePlugin bp2 = createBasePlugin("/f2");

    AggregateMimePlugin aggregateMimePlugin = new AggregateMimePlugin(bp1, bp2);
    String[] files = aggregateMimePlugin.files();
    Arrays.sort(files);
    assertArrayEquals(new String[] {"/f1", "/f2"}, files);
  }