@Override
    public void parse(InputStream stream, ContentHandler handler, Metadata metadata,
                      ParseContext context) throws IOException, SAXException, TikaException {

        if (!stringsPresent) {
            return;
        }
        StringsConfig stringsConfig = context.get(StringsConfig.class, defaultStringsConfig);

        try (TemporaryResources tmp = new TemporaryResources()) {
            TikaInputStream tis = TikaInputStream.get(stream, tmp, metadata);
            File input = tis.getFile();

            // Metadata
            metadata.set("strings:min-len", "" + stringsConfig.getMinLength());
            metadata.set("strings:encoding", stringsConfig.toString());
            metadata.set("strings:file_output", doFile(tis));

            int totalBytes = 0;

            // Content
            XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata);

            xhtml.startDocument();

            totalBytes = doStrings(input, stringsConfig, xhtml);

            xhtml.endDocument();

            // Metadata
            metadata.set("strings:length", "" + totalBytes);
        }
    }
@Test
    public void testParse() throws Exception {
        assumeTrue(canRun());

        String resource = "/test-documents/testOCTET_header.dbase3";

        String[] content = {"CLASSNO", "TITLE", "ITEMNO", "LISTNO", "LISTDATE"};

        String[] met_attributes = {"min-len", "encoding", "strings:file_output"};

        StringsConfig stringsConfig = new StringsConfig();

        Parser parser = new StringsParser();
        ((Initializable) parser).initialize(Collections.emptyMap());
        ContentHandler handler = new BodyContentHandler();
        Metadata metadata = new Metadata();

        ParseContext context = new ParseContext();
        context.set(StringsConfig.class, stringsConfig);

        try (InputStream stream = StringsParserTest.class.getResourceAsStream(resource)) {
            parser.parse(stream, handler, metadata, context);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Content
        for (String word : content) {
            assertTrue(handler.toString().contains(word), "can't find " + word);
        }

        // Metadata
        Arrays.equals(met_attributes, metadata.names());
    }