public void testDownloadedFromWorker() throws Exception {
    DownloadedFromWorker worker = new DownloadedFromWorker();

    for (String goodString :
        Arrays.asList(
            "Downloaded from http://www.example.com/",
            "Downloaded from http://www.example.com",
            "Downloaded from www.example.com")) {
      worker.process(
          MockPdfTokenStream.parse(
              // ---- begin PDF stream ----
              "BT "
                  + "(This is irrelevant.) Tj "
                  + "1 2 3 4 5 6 Tm "
                  + "(This is irrelevant.) Tj "
                  + "("
                  + goodString
                  + ") Tj "
                  + "(This is irrelevant.) Tj "
                  + "ET"
              // ---- end PDF stream ----
              ));
      assertTrue(worker.result);
    }

    worker.process(
        MockPdfTokenStream.parse(
            // ---- begin PDF stream ----
            "BT "
                + "(This is irrelevant.) Tj "
                + "1 2 3 4 5 6 Tm "
                + "(This is irrelevant.) Tj "
                + "(Downloaded from www.example.com) Tj "
                + "(This is irrelevant.) Tj "
                + "ET "
                + "(This is irrelevant.) Tj"
            // ---- end PDF stream ----
            ));
    assertFalse(worker.result);

    worker.process(
        MockPdfTokenStream.parse(
            // ---- begin PDF stream ----
            "(This is irrelevant.) Tj"
                + "BT "
                + "(This is irrelevant.) Tj "
                + "1 2 3 4 5 6 Tm "
                + "(This is irrelevant.) Tj "
                + "(Downloaded from www.example.com) Tj "
                + "(This is irrelevant.) Tj "
                + "ET "
            // ---- end PDF stream ----
            ));
    assertFalse(worker.result);

    worker.process(
        MockPdfTokenStream.parse(
            // ---- begin PDF stream ----
            "(This is irrelevant.) Tj"
                + "BT "
                + "(This is irrelevant.) Tj "
                + "1 2 3 4 5 6 Tm "
                + "(This is irrelevant.) Tj "
                + "(Downloaded from www.example.com) Tj "
                + "(This is irrelevant.) Tj "
                + "ET "
            // ---- end PDF stream ----
            ));
    assertFalse(worker.result);

    worker.process(
        MockPdfTokenStream.parse(
            // ---- begin PDF stream ----
            "BT "
                + "(This is irrelevant.) Tj "
                + "1 2 3 4 5 6 Tm "
                + "(This is irrelevant.) Tj "
                + "(Not the right string.) Tj "
                + "(This is irrelevant.) Tj "
                + "ET "
            // ---- end PDF stream ----
            ));
    assertFalse(worker.result);

    worker.process(
        MockPdfTokenStream.parse(
            // ---- begin PDF stream ----
            "(This is irrelevant.) Tj "
                + "1 2 3 4 5 6 Tm "
                + "(This is irrelevant.) Tj "
                + "(Downloaded from www.example.com) Tj "
                + "(This is irrelevant.) Tj "
            // ---- end PDF stream ----
            ));
    assertFalse(worker.result);
  }
  public void testForPersonalUseWorker() throws Exception {
    ForPersonalUseWorker worker = new ForPersonalUseWorker();

    for (String goodString :
        Arrays.asList(
            "by <something something> on 01/02/03. For personal use only.",
            "by <something something> on 99/99/99. For personal use only.",
            "   \t\t\t   by <something something> on 01/03/03. For personal use only.   \t\t\t")) {
      worker.process(
          MockPdfTokenStream.parse(
              // ---- begin PDF stream ----
              "BT "
                  + "(This is irrelevant.) Tj "
                  + "1 2 3 4 5 6 Tm "
                  + "(This is irrelevant.) Tj "
                  + "("
                  + goodString
                  + ") Tj "
                  + "(This is irrelevant.) Tj "
                  + "ET"
              // ---- end PDF stream ----
              ));
      assertTrue(worker.result);
    }

    worker.process(
        MockPdfTokenStream.parse(
            // ---- begin PDF stream ----
            "BT "
                + "(This is irrelevant.) Tj "
                + "1 2 3 4 5 6 Tm "
                + "(This is irrelevant.) Tj "
                + "(by <something something> on 01/02/03. For personal use only.) Tj "
                + "(This is irrelevant.) Tj "
                + "ET"
                + "(This is irrelevant.) Tj "
            // ---- end PDF stream ----
            ));
    assertFalse(worker.result);

    worker.process(
        MockPdfTokenStream.parse(
            // ---- begin PDF stream ----
            "(This is irrelevant.) Tj "
                + "BT "
                + "(This is irrelevant.) Tj "
                + "1 2 3 4 5 6 Tm "
                + "(This is irrelevant.) Tj "
                + "(by <something something> on 01/02/03. For personal use only.) Tj "
                + "(This is irrelevant.) Tj "
                + "ET"
            // ---- end PDF stream ----
            ));
    assertFalse(worker.result);

    worker.process(
        MockPdfTokenStream.parse(
            // ---- begin PDF stream ----
            "(This is irrelevant.) Tj "
                + "BT "
                + "(This is irrelevant.) Tj "
                + "1 2 3 4 5 6 Tm "
                + "(This is irrelevant.) Tj "
                + "(by <not the right date format> on 01/02/2003. For personal use only.) Tj "
                + "(This is irrelevant.) Tj "
                + "ET"
            // ---- end PDF stream ----
            ));
    assertFalse(worker.result);

    worker.process(
        MockPdfTokenStream.parse(
            // ---- begin PDF stream ----
            "BT "
                + "(This is irrelevant.) Tj "
                + "(This is irrelevant.) Tj "
                + "(by <something something> on 01/02/03. For personal use only.) Tj "
                + "(This is irrelevant.) Tj "
                + "ET"
            // ---- end PDF stream ----
            ));
    assertFalse(worker.result);
  }