public void testFilePattern() {
    TestConvertor fallback = new TestConvertor();
    LineConvertor convertor =
        LineConvertors.proxy(
            LineConvertors.filePattern(
                null, Pattern.compile("myline:\\s*(myfile\\w*\\.\\w{3})\\s.*"), null, 1, -1),
            fallback);

    List<ConvertedLine> lines = new ArrayList<ConvertedLine>();
    lines.addAll(convertor.convert("otherline: something.txt"));
    lines.addAll(convertor.convert("myline: myfile01.txt other stuff"));
    lines.addAll(convertor.convert("total mess"));
    lines.addAll(convertor.convert("myline: myfile02.txt other stuff"));
    lines.addAll(convertor.convert("otherline: http://www.netbeans.org"));

    List<String> ignored = new ArrayList<String>();
    Collections.addAll(
        ignored, "otherline: something.txt", "total mess", "otherline: http://www.netbeans.org");
    assertEquals(ignored, fallback.getLines());

    assertEquals(2, lines.size());
    assertEquals("myline: myfile01.txt other stuff", lines.get(0).getText());
    assertEquals("myline: myfile02.txt other stuff", lines.get(1).getText());

    for (ConvertedLine line : lines) {
      assertNotNull(line.getListener());
    }
  }
  public void testHttpOpenHandler() throws MalformedURLException {
    LineConvertor convertor = LineConvertors.httpUrl();

    List<ConvertedLine> lines = new ArrayList<ConvertedLine>();
    assertNull(convertor.convert("nourl1"));
    lines.addAll(convertor.convert("NetBeans site: http://www.netbeans.org"));
    lines.addAll(convertor.convert("https://www.netbeans.org"));

    assertEquals(2, lines.size());
    assertEquals("NetBeans site: http://www.netbeans.org", lines.get(0).getText());
    assertEquals("https://www.netbeans.org", lines.get(1).getText());

    for (ConvertedLine line : lines) {
      assertNotNull(line.getListener());
      line.getListener().outputLineAction(null);
    }

    HttpOpenHandler handler = Lookup.getDefault().lookup(HttpOpenHandler.class);
    assertTrue(handler instanceof TestHttpOpenHandler);

    List<URL> opened = ((TestHttpOpenHandler) handler).getOpened();
    assertEquals(2, opened.size());
    assertEquals(new URL("http://www.netbeans.org"), opened.get(0));
    assertEquals(new URL("https://www.netbeans.org"), opened.get(1));
  }
  public void testFilePatternWithLocator() {
    TestConvertor fallback = new TestConvertor();
    TestFileLocator locator = new TestFileLocator();

    LineConvertor convertor =
        LineConvertors.proxy(
            LineConvertors.filePattern(
                locator, Pattern.compile("myline:\\s*(myfile\\w*\\.\\w{3})\\s.*"), null, 1, -1),
            fallback);

    List<ConvertedLine> lines = new ArrayList<ConvertedLine>();
    lines.addAll(convertor.convert("myline: myfile01.txt other stuff"));
    lines.addAll(convertor.convert("myline: myfile02.txt other stuff"));

    assertEquals(2, lines.size());
    assertEquals("myline: myfile01.txt other stuff", lines.get(0).getText());
    assertEquals("myline: myfile02.txt other stuff", lines.get(1).getText());

    for (ConvertedLine line : lines) {
      line.getListener()
          .outputLineAction(
              new OutputEvent(InputOutput.NULL) {
                @Override
                public String getLine() {
                  return "line";
                }
              });
    }

    List<String> paths = new ArrayList<String>();
    Collections.addAll(paths, "myfile01.txt", "myfile02.txt");
    assertEquals(paths, locator.getPaths());
  }
  public void testHttpUrl() {
    TestConvertor fallback = new TestConvertor();
    LineConvertor convertor = LineConvertors.proxy(LineConvertors.httpUrl(), fallback);

    List<ConvertedLine> lines = new ArrayList<ConvertedLine>();
    lines.addAll(convertor.convert("nourl1"));
    lines.addAll(convertor.convert("NetBeans site: http://www.netbeans.org"));
    lines.addAll(convertor.convert("nourl2"));
    lines.addAll(convertor.convert("https://www.netbeans.org"));
    lines.addAll(convertor.convert("nourl3"));

    List<String> ignored = new ArrayList<String>();
    Collections.addAll(ignored, "nourl1", "nourl2", "nourl3");
    assertEquals(ignored, fallback.getLines());

    assertEquals(2, lines.size());
    assertEquals("NetBeans site: http://www.netbeans.org", lines.get(0).getText());
    assertEquals("https://www.netbeans.org", lines.get(1).getText());

    for (ConvertedLine line : lines) {
      assertNotNull(line.getListener());
    }
  }