/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.tika.parser; import org.apache.tika.Tika; import org.apache.tika.config.TikaConfig; import org.apache.tika.exception.TikaConfigException; import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import org.xml.sax.SAXException; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class ParameterizedParserTest { private static final Map<String, String> expcted = new HashMap<String, String>() { { put("testparam", "testparamval"); put("xshort", "1000"); put("xint", "999999999"); put("xlong", "9999999999999"); put("xbigint", "99999999999999999999999999999999999999999999999"); put("xfloat", "10.2"); put("xbool", "true"); put("xdouble", "4.6"); put("xurl", "http://apache.org"); put("xfile", "somefile"); put("xuri", "tika://customuri?param=value"); put("inner", "inner"); put("missing", "default"); } }; @Test public void testConfigurableParserTypes() throws Exception { Metadata md = getMetadata("TIKA-1986-parameterized.xml"); for (Map.Entry<String, String> entry : expcted.entrySet()) { assertEquals("mismatch for " + entry.getKey(), entry.getValue(), md.get(entry.getKey())); } } @Test public void testConfigurableParserTypesDecorated() throws Exception { Metadata md = getMetadata("TIKA-1986-parameterized-decorated.xml"); for (Map.Entry<String, String> entry : expcted.entrySet()) { assertEquals("mismatch for " + entry.getKey(), entry.getValue(), md.get(entry.getKey())); } } @Test public void testSomeParams() throws Exception { //test that a parameterized parser can read a config file //with only some changes to the initial values Metadata md = getMetadata("TIKA-1986-some-parameters.xml"); assertEquals("-6.0", md.get("xdouble")); assertEquals("testparamval", md.get("testparam")); assertEquals("false", md.get("xbool")); } @Test public void testBadValue() throws Exception { boolean ex = false; try { Metadata m = getMetadata("TIKA-1986-bad-values.xml"); fail("should have thrown exception"); } catch (TikaConfigException e) { ex = true; } assertTrue("No TikaConfigException", ex); } @Test public void testBadType() throws Exception { //TODO: should this be a TikaConfigException instead of Runtime? boolean ex = false; try { Metadata m = getMetadata("TIKA-1986-bad-types.xml"); fail("should have thrown exception"); } catch (RuntimeException e) { ex = true; } assertTrue("No RuntimeException", ex); } //TODO later -- add a test for a parser that isn't configurable //but that has params in the config file private Metadata getMetadata(String name) throws TikaException, IOException, SAXException { URL url = this.getClass().getResource("/org/apache/tika/config/"+name); assertNotNull("couldn't find: "+name, url); TikaConfig tikaConfig = new TikaConfig(url); Tika tika = new Tika(tikaConfig); Metadata metadata = new Metadata(); tika.parse(url.openStream(), metadata); return metadata; } }