blob: 5de2412b825a2e80db737c224bd66149fdc7e938 [file] [log] [blame]
/*
* 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.solr.client.solrj.io.stream.eval;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.collections4.map.HashedMap;
import org.apache.solr.client.solrj.io.Tuple;
import org.apache.solr.client.solrj.io.eval.ConversionEvaluator;
import org.apache.solr.client.solrj.io.eval.RawValueEvaluator;
import org.apache.solr.client.solrj.io.eval.StreamEvaluator;
import org.apache.solr.client.solrj.io.stream.StreamContext;
import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
/**
* Test ConversionEvaluators
*/
public class ConversionEvaluatorsTest {
StreamFactory factory;
Map<String, Object> values;
public ConversionEvaluatorsTest() {
super();
factory = new StreamFactory();
factory.withFunctionName("convert", ConversionEvaluator.class).withFunctionName("raw", RawValueEvaluator.class);
values = new HashedMap<>();
}
@Test
public void testInvalidExpression() throws Exception {
StreamEvaluator evaluator;
try {
evaluator = factory.constructEvaluator("convert(inches)");
StreamContext streamContext = new StreamContext();
evaluator.setStreamContext(streamContext);
assertTrue(false);
} catch (IOException e) {
assertEquals("Invalid expression convert(inches) - expecting exactly 3 parameters but found 1", e.getCause().getCause().getMessage());
}
try {
evaluator = factory.constructEvaluator("convert(inches, yards, 3)");
StreamContext streamContext = new StreamContext();
evaluator.setStreamContext(streamContext);
@SuppressWarnings({"rawtypes"})
Tuple tuple = new Tuple(new HashMap());
evaluator.evaluate(tuple);
assertTrue(false);
} catch (IOException e) {
assertTrue(e.getCause().getCause().getMessage().contains("No conversion available from INCHES to YARDS"));
}
}
@Test
public void testInches() throws Exception {
testFunction("convert(inches, centimeters, 2)", (2*2.54));
testFunction("convert(inches, meters, 2)", (2*0.0254));
testFunction("convert(inches, millimeters, 2)", (2*25.40));
}
@Test
public void testYards() throws Exception {
testFunction("convert(yards, meters, 2)", (2*.91));
testFunction("convert(yards, kilometers, 2)", (2*.00091));
}
@Test
public void testMiles() throws Exception {
testFunction("convert(miles, kilometers, 2)", (2*1.61));
}
@Test
public void testMillimeters() throws Exception {
testFunction("convert(millimeters, inches, 2)", (2*.039));
}
@Test
public void testCentimeters() throws Exception {
testFunction("convert(centimeters, inches, 2)", (2*.39));
}
@Test
public void testMeters() throws Exception {
testFunction("convert(meters, feet, 2)", (2*3.28));
}
@Test
public void testKiloMeters() throws Exception {
testFunction("convert(kilometers, feet, 2)", (2*3280.8));
testFunction("convert(kilometers, miles, 2)", (2*.62));
}
public void testFunction(String expression, Number expected) throws Exception {
StreamEvaluator evaluator = factory.constructEvaluator(expression);
StreamContext streamContext = new StreamContext();
evaluator.setStreamContext(streamContext);
Object result = evaluator.evaluate(new Tuple(values));
assertTrue(result instanceof Number);
assertEquals(expected, result);
}
}