//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.annotators.regex;
import static org.junit.Assert.assertEquals;
import org.apache.uima.fit.util.JCasUtil;
import org.junit.Test;
import uk.gov.dstl.baleen.annotators.regex.internals.MoneyRegex;
import uk.gov.dstl.baleen.annotators.testing.AbstractAnnotatorTest;
import uk.gov.dstl.baleen.types.common.Money;
public class MoneyTest extends AbstractAnnotatorTest {
public MoneyTest() {
super(MoneyRegex.class);
}
@Test
public void test() throws Exception{
assertFoundMoney("The price is £3", 3.0, "GBP");
assertFoundMoney("The price is £3.50", 3.5, "GBP");
assertFoundMoney("The price is £3000", 3000.0, "GBP");
assertFoundMoney("The price is £3,000", 3000.0, "GBP");
assertFoundMoney("The price is £2,999.99", 2999.99, "GBP");
assertFoundMoney("The price is £2999.99", 2999.99, "GBP");
assertFoundMoney("The price is £2 999.99", 2999.99, "GBP");
assertFoundMoney("The price is £2,999,999.99", 2999999.99, "GBP");
assertFoundMoney("The price is £2,999,999", 2999999.0, "GBP");
assertFoundMoney("The price is $1,234,567.89", 1234567.89, "USD");
assertFoundMoney("The price is $1 234 567.89", 1234567.89, "USD");
assertFoundMoney("The price is 1€", 1.0, "EUR");
assertFoundMoney("The price is 1 €", 1.0, "EUR");
assertFoundMoney("The price is 1,23€", 1.23, "EUR");
assertFoundMoney("The price is 1.23 €", 1.23, "EUR");
assertFoundMoney("The price is 123 456,78€", 123456.78, "EUR");
assertFoundMoney("The price is 123,456.78 €", 123456.78, "EUR");
assertFoundMoney("The price is 123.456,78 €", 123456.78, "EUR");
assertFoundMoney("The price is 123.456.789,99€", 123456789.99, "EUR");
assertFoundMoney("The price is 123.456.789 €", 123456789.0, "EUR");
assertFoundMoney("The price is 1.234 €", 1234.0, "EUR");
assertFoundMoney("The price is 50p", 0.5, "GBP");
assertFoundMoney("The price is £1.99p", 1.99, "GBP");
assertFoundMoney("The price is 47¢", 0.47, "USD");
assertFoundMoney("The price is 47c", 0.47, "EUR");
assertFoundMoney("The price is $1.99¢", 1.99, "USD");
assertFoundMoney("The price is £37 million", 37000000.0, "GBP");
assertFoundMoney("The price is £37m", 37000000.0, "GBP");
assertFoundMoney("The price is $20k", 20000.0, "USD");
assertFoundMoney("The price is 47 thousand €", 47000.0, "EUR");
assertFoundMoney("The price is 47 € thousand", 47000.0, "EUR");
assertFoundMoney("The price is ¥3000", 3000.0, "JPY");
assertFoundMoney("The price is SEK 47,000", 47000.0, "SEK");
assertFoundMoney("The price is 47,000 IQD", 47000.0, "IQD");
assertFoundMoney("The price is \u0024100", 100.0, "USD");
assertFoundMoney("The price is \u20AC100", 100.0, "EUR");
assertFoundMoney("The price is \u00A3100", 100.0, "GBP");
assertFoundMoney("The price is \u00A5100", 100.0, "JPY");
assertFoundMoney("The price is 47 Fr", 47.0, "CHF");
assertFoundMoney("The price is Fr 47", 47.0, "CHF");
assertFoundMoney("£47", 47.0, "GBP");
assertEquals("£1.25", assertFoundMoney("The price is £1.25 and not a penny less", 1.25, "GBP"));
assertEquals("£1.25", assertFoundMoney("The price is £1.25.", 1.25, "GBP"));
assertEquals("£1.25", assertFoundMoney("The price is £1.25\nshe said.", 1.25, "GBP"));
assertEquals("£1.25", assertFoundMoney("£1.25, the price is.", 1.25, "GBP"));
}
@Test
public void testFalse() throws Exception{
assertNotFoundMoney("£47.00.00");
assertNotFoundMoney("$47,000.000,00");
assertNotFoundMoney("£47.000,000.00");
assertNotFoundMoney("£47,000,000.000.000");
assertNotFoundMoney("47");
assertNotFoundMoney("47.00");
assertNotFoundMoney("8.51 pm");
assertNotFoundMoney("The price is 47,000\n\nTOP");
}
private String assertFoundMoney(String text, Double amount, String currency) throws Exception{
jCas.reset();
jCas.setDocumentText(text);
processJCas();
assertEquals(1, JCasUtil.select(jCas, Money.class).size());
Money m = JCasUtil.selectByIndex(jCas, Money.class, 0);
assertEquals(amount, m.getAmount(), 0.00000001);
assertEquals(currency, m.getCurrency());
return m.getValue();
}
private void assertNotFoundMoney(String text) throws Exception{
jCas.reset();
jCas.setDocumentText(text);
processJCas();
assertEquals(0, JCasUtil.select(jCas, Money.class).size());
}
}