/**
* The contents of this file are subject to the OpenMRS Public License
* Version 1.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://license.openmrs.org
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* Copyright (C) OpenMRS, LLC. All Rights Reserved.
*/
package org.openmrs.report;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.fail;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.junit.Test;
/**
*
*/
public class EvaluationContextTest {
@Test
public void shouldEvaluateExpression() throws Exception {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startingDate = df.parse("2007-01-10 10:30:17");
String expression0 = "${report.d1}";
String expression1 = "${report.d1-15d}";
String expression2 = "${report.d1+3w}";
String expression3 = "${report.d1-12m}";
String expression4 = "${report.d1-1y}";
String expression5 = "${report.d1+37d}";
String expression6 = "${report.d1-10w}";
String expression7 = "${report.doesNotExist}";
String expression8 = "${report.gender}";
String expression9 = "report.gender";
String expression10 = "hello ${report.gender} person";
String expression11 = "This report is from ${report.d1} to ${report.d1+3w} for ${report.gender} patients";
EvaluationContext context = new EvaluationContext();
context.addParameterValue(new Parameter("report.d1", "", Date.class, ""), startingDate);
context.addParameterValue(new Parameter("report.gender", "", String.class, ""), "male");
assertEquals(context.evaluateExpression(expression0), df.parse("2007-01-10 10:30:17"));
assertEquals(context.evaluateExpression(expression1), df.parse("2006-12-26 10:30:17"));
assertEquals(context.evaluateExpression(expression2), df.parse("2007-01-31 10:30:17"));
assertEquals(context.evaluateExpression(expression3), df.parse("2006-01-10 10:30:17"));
assertEquals(context.evaluateExpression(expression4), df.parse("2006-01-10 10:30:17"));
assertEquals(context.evaluateExpression(expression5), df.parse("2007-02-16 10:30:17"));
assertEquals(context.evaluateExpression(expression6), df.parse("2006-11-01 10:30:17"));
assertNotSame(context.evaluateExpression(expression6), df.parse("2006-11-01 00:00:00"));
try {
context.evaluateExpression(expression7);
fail("Missing required parameters should throw an exception");
}
catch (Exception e) {
assertEquals(e.getClass(), ParameterException.class);
}
assertEquals(context.evaluateExpression(expression8).toString(), "male");
assertEquals(context.evaluateExpression(expression9).toString(), "report.gender");
assertEquals(context.evaluateExpression(expression10).toString(), "hello male person");
assertEquals(context.evaluateExpression(expression11).toString(),
"This report is from 2007-01-10 10:30:17 to 2007-01-31 10:30:17 for male patients");
}
}