From ea01dc521d292e5cabf10cca42b449e2cc6d87cc Mon Sep 17 00:00:00 2001
From: Jerome Lacoste <jerome.lacoste@gmail.com>
Date: Fri, 23 Dec 2011 12:44:18 +0100
Subject: [PATCH 5/7] TIKA-830 Tike.parseToString() caused ForkParser to try
 to serialize itself.

The problem comes with an integration test.
Also
* reenabled the tests from TIKA-808
* cleaned them up (they were: 1- picking the resources from the wrong location, 2- using wrong API by making ForkParser embed itself)

The tests won't pass until TIKA-808 is fixed.
---
 .../main/java/org/apache/tika/fork/ForkParser.java |    8 ++++
 .../parser/fork/ForkParserIntegrationTest.java     |   44 ++++++++++++--------
 2 files changed, 35 insertions(+), 17 deletions(-)

diff --git a/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java b/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java
index a7ce39a..29d42f4 100644
--- a/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java
+++ b/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java
@@ -127,6 +127,7 @@ public class ForkParser extends AbstractParser {
 
         boolean alive = false;
         ForkClient client = acquireClient();
+        ensureCorrectParserInContext(context);
         try {
             t = client.call("parse", stream, handler, metadata, context);
             alive = true;
@@ -152,6 +153,13 @@ public class ForkParser extends AbstractParser {
         }
     }
 
+    private void ensureCorrectParserInContext(ParseContext context) {
+        Parser oldParser = context.get(Parser.class);
+        if (oldParser != null && oldParser == this) {
+            context.set(Parser.class, parser);
+        }
+    }
+
     public synchronized void close() {
         for (ForkClient client : pool) {
             client.close();
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/fork/ForkParserIntegrationTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/fork/ForkParserIntegrationTest.java
index 1d06c7c..077ae86 100644
--- a/tika-parsers/src/test/java/org/apache/tika/parser/fork/ForkParserIntegrationTest.java
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/fork/ForkParserIntegrationTest.java
@@ -20,6 +20,8 @@ import java.io.InputStream;
 
 import junit.framework.TestCase;
 
+import org.apache.tika.Tika;
+import org.apache.tika.config.TikaConfig;
 import org.apache.tika.fork.ForkParser;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
@@ -33,40 +35,47 @@ import org.xml.sax.ContentHandler;
 public class ForkParserIntegrationTest extends TestCase {
     /**
      * Simple text parsing
-     * TODO Fix this test so it passes
      */
-    public void DISABLEDtestForkedTextParsing() throws Exception {
-       final ForkParser parser = new ForkParser(
-             ForkParserIntegrationTest.class.getClassLoader(),
-             new ForkParser());
+    public void testForkedTextParsing() throws Exception {
+       final ForkParser parser = new ForkParser();
 
        try {
           ContentHandler output = new BodyContentHandler();
-          InputStream stream = ForkParserIntegrationTest.class.getResourceAsStream("testTXT.txt");
+          InputStream stream = openResourceStream("/test-documents/testTXT.txt");
           ParseContext context = new ParseContext();
           parser.parse(stream, output, new Metadata(), context);
 
           String content = output.toString();
           assertTrue(content.contains("Test d'indexation"));
-          assertTrue(content.contains("http://www.apache.org/"));
+          assertTrue(content.contains("http://www.apache.org"));
        } finally {
           parser.close();
        }
     }
-   
+
+    public void testParseToString() throws Exception {
+        ForkParser parser = new ForkParser();
+        try {
+            Tika forkedTika = new Tika(TikaConfig.getDefaultConfig().getDetector(), parser);
+            InputStream stream = openResourceStream("/test-documents/testTXT.txt");
+            String content = forkedTika.parseToString(stream);
+            assertTrue(content.contains("Test d'indexation"));
+            assertTrue(content.contains("http://www.apache.org"));
+        } finally {
+            parser.close();
+        }
+    }
+
     /**
      * TIKA-808 - Ensure that parsing of our test PDFs work under
      *  the Fork Parser, to ensure that complex parsing behaves
-     * TODO Fix this test so it passes
      */
-    public void DISABLEDtestForkedPDFParsing() throws Exception {
-       final ForkParser parser = new ForkParser(
-             ForkParserIntegrationTest.class.getClassLoader(),
-             new ForkParser());
+    public void testForkedPDFParsing() throws Exception {
+       final ForkParser parser = new ForkParser();
        
        try {
           ContentHandler output = new BodyContentHandler();
-          InputStream stream = ForkParserIntegrationTest.class.getResourceAsStream("testPDF.pdf");
+          InputStream stream = openResourceStream("/test-documents/testPDF.pdf");
           ParseContext context = new ParseContext();
           parser.parse(stream, output, new Metadata(), context);
           
@@ -79,8 +88,9 @@ public class ForkParserIntegrationTest extends TestCase {
           parser.close();
       }
     }
-    
-    public void testDUMMY() {
-       // To avoid warnings about no tests while others are disabled
+
+    private InputStream openResourceStream(String resource) {
+        return ForkParserIntegrationTest.class.getResourceAsStream(resource);
     }
+
 }
-- 
1.7.7

