/* $Id$ */ /** * 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.manifoldcf.crawler.connectors.webcrawler; import org.apache.manifoldcf.agents.transformation.forcedmetadata.*; import org.apache.manifoldcf.agents.interfaces.RepositoryDocument; import java.io.*; import java.util.*; import org.junit.*; import static org.junit.Assert.*; public class ExpressionTest { @Test public void simpleExpressions() throws Exception { RepositoryDocument inputDoc = new RepositoryDocument(); inputDoc.addField("stringfield",new String[]{"stringa","stringb","stringc"}); inputDoc.addField("readerfield",new Reader[]{new StringReader("readera"),new StringReader("readerb")}); inputDoc.addField("datefield",new Date[]{new Date(0L), new Date(100000000L)}); FieldDataFactory fdf = new FieldDataFactory(inputDoc); try { arrayEquals(new String[]{"stringa","stringb","stringc"}, (String[])(ForcedMetadataConnector.processExpression("${stringfield}", fdf).getRawForm())); arrayEquals(new String[]{"prefixstringapostfix","prefixstringbpostfix","prefixstringcpostfix"}, (String[])(ForcedMetadataConnector.processExpression("prefix${stringfield}postfix", fdf).getRawForm())); arrayEquals(new Reader[]{new StringReader("readera"),new StringReader("readerb")}, (Reader[])(ForcedMetadataConnector.processExpression("${readerfield}", fdf).getRawForm())); // Second access of reader fields, without prior string conversion, also must work arrayEquals(new Reader[]{new StringReader("readera"),new StringReader("readerb")}, (Reader[])(ForcedMetadataConnector.processExpression("${readerfield}", fdf).getRawForm())); arrayEquals(new String[]{"prefixreaderapostfix","prefixreaderbpostfix"}, (String[])(ForcedMetadataConnector.processExpression("prefix${readerfield}postfix", fdf).getRawForm())); arrayEquals(new String[]{"prefixapostfix","prefixbpostfix","prefixcpostfix"}, (String[])(ForcedMetadataConnector.processExpression("prefix${stringfield|string([abc])|1}postfix", fdf).getRawForm())); arrayEquals(new String[]{"prefixApostfix","prefixBpostfix","prefixCpostfix"}, (String[])(ForcedMetadataConnector.processExpression("prefix${stringfield|string([abc])|1u}postfix", fdf).getRawForm())); } finally { fdf.close(); } } protected static void arrayEquals(Reader[] expected, Reader[] actual) throws Exception { assertEquals(expected.length,actual.length); Set<String> expectedSet = new HashSet<String>(); for (Reader expectedValue : expected) { expectedSet.add(readData(expectedValue)); } for (Reader actualValue : actual) { assertEquals(true,expectedSet.contains(readData(actualValue))); } } protected static String readData(Reader r) throws IOException { StringBuilder sb = new StringBuilder(); char[] buffer = new char[65536]; while (true) { int amt = r.read(buffer); if (amt == -1) break; sb.append(buffer,0,amt); } return sb.toString(); } protected static void arrayEquals(String[] expected, String[] actual) throws Exception { assertEquals(expected.length,actual.length); Set<String> expectedSet = new HashSet<String>(); for (String expectedValue : expected) { expectedSet.add(expectedValue); } for (String actualValue : actual) { assertEquals(true,expectedSet.contains(actualValue)); } } }