/*
* Milyn - Copyright (C) 2006 - 2010
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License (version 2.1) as published
* by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE.
*
* See the GNU Lesser General Public License for more details:
* http://www.gnu.org/licenses/lgpl.txt
*/
package org.milyn.rules.regex;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.milyn.container.MockExecutionContext;
/**
* Unit test for RegexProviderTest.
*
* @author <a href="mailto:danielbevenius@gmail.com">Daniel Bevenius</a>
*
*/
public class RegexProviderTest
{
private RegexProvider provider;
@Before
public void createProvider()
{
provider = new RegexProvider("/smooks-regex.properties");
provider.setName(RegexProvider.class.getSimpleName());
}
@Test (expected = IllegalArgumentException.class )
public void showThrowIfRuleNameIsNull()
{
provider.evaluate(null, "some text", new MockExecutionContext());
}
@Test (expected = IllegalArgumentException.class )
public void showThrowIfSelectedDataIsNull()
{
provider.evaluate("ruleName", null , new MockExecutionContext());
}
@Test
public void getProviderName()
{
assertEquals("RegexProvider", provider.getName());
}
@Test
public void setSrc()
{
final String regexFile = "/regex.properties";
provider.setSrc(regexFile);
assertEquals(regexFile, provider.getSrc());
}
@Test
public void evalutatePhoneNumberSE()
{
final String ruleName = "phoneNumberSE";
assertTrue(provider.evaluate(ruleName, "08-7549922", null).matched());
assertFalse(provider.evaluate(ruleName, "7549922", null).matched());
}
@Test
public void phoneNumberUnitedStates()
{
final String ruleName = "phoneNumberUS";
assertTrue(provider.evaluate(ruleName, "2405525009", null).matched());
assertTrue(provider.evaluate(ruleName, "1(240) 652-5009", null).matched());
assertTrue(provider.evaluate(ruleName, "240/752-5009 ext.55", null).matched());
assertFalse(provider.evaluate(ruleName, "(2405525009", null).matched());
assertFalse(provider.evaluate(ruleName, "2 (240) 652-5009", null).matched());
}
@Test
public void phoneNumberIndia()
{
final String ruleName = "phoneNumberIN";
assertTrue(provider.evaluate(ruleName, "0493 - 3227341", null).matched());
assertTrue(provider.evaluate(ruleName, "0493 3227341", null).matched());
assertTrue(provider.evaluate(ruleName, "493 3227341", null).matched());
assertFalse(provider.evaluate(ruleName, "93 02273419", null).matched());
assertFalse(provider.evaluate(ruleName, "493 322734111", null).matched());
assertFalse(provider.evaluate(ruleName, "493 -- 3227341", null).matched());
}
@Test
public void phoneNumberAustralia()
{
final String ruleName = "phoneNumberAU";
assertTrue(provider.evaluate(ruleName, "0732105432", null).matched());
assertTrue(provider.evaluate(ruleName, "1300333444", null).matched());
assertTrue(provider.evaluate(ruleName, "131313", null).matched());
assertFalse(provider.evaluate(ruleName, "32105432", null).matched());
assertFalse(provider.evaluate(ruleName, "13000456", null).matched());
}
@Test
public void phoneNumberUnitedKingdom()
{
final String ruleName = "phoneNumberGB";
assertTrue(provider.evaluate(ruleName, "+447222555555", null).matched());
assertTrue(provider.evaluate(ruleName, "+44 7222 555 555", null).matched());
assertTrue(provider.evaluate(ruleName, "(0722) 5555555 #2222", null).matched());
assertFalse(provider.evaluate(ruleName, "(+447222)555555", null).matched());
assertFalse(provider.evaluate(ruleName, "+44(7222)555555", null).matched());
assertFalse(provider.evaluate(ruleName, "(0722) 5555555 #22", null).matched());
}
@Test
public void phoneNumberItaly()
{
final String ruleName = "phoneNumberIT";
assertTrue(provider.evaluate(ruleName, "02-343536", null).matched());
assertTrue(provider.evaluate(ruleName, "02/343536", null).matched());
assertTrue(provider.evaluate(ruleName, "02 343536", null).matched());
assertFalse(provider.evaluate(ruleName, "02a343536", null).matched());
assertFalse(provider.evaluate(ruleName, "02+343536", null).matched());
}
@Test
public void phoneNumberNetherlands()
{
final String ruleName = "phoneNumberNL";
assertTrue(provider.evaluate(ruleName, "06 12345678", null).matched());
assertTrue(provider.evaluate(ruleName, "010-1234560", null).matched());
assertTrue(provider.evaluate(ruleName, "0111-101234", null).matched());
assertFalse(provider.evaluate(ruleName, "05-43021212", null).matched());
assertFalse(provider.evaluate(ruleName, "123-4567890", null).matched());
assertFalse(provider.evaluate(ruleName, "1234567890", null).matched());
}
@Test
public void email()
{
final String ruleName = "email";
assertTrue(provider.evaluate(ruleName, "daniel.bevenius@gmail.com", null).matched());
assertTrue(provider.evaluate(ruleName, "daniel@gmail.se", null).matched());
assertTrue(provider.evaluate(ruleName, "daniel.bevenius@gmail.uk.com", null).matched());
assertTrue(provider.evaluate(ruleName, "d.b@gmail.uk.com", null).matched());
assertTrue(provider.evaluate(ruleName, "db@gl.s", null).matched());
assertFalse(provider.evaluate(ruleName, "@gmail.com", null).matched());
}
@Test
public void dateMMddyyyyTime()
{
final String ruleName = "dateMMddyyyy";
assertTrue(provider.evaluate(ruleName, "12/30/2002", null).matched());
assertTrue(provider.evaluate(ruleName, "12/30/2002 9:35 pm", null).matched());
assertTrue(provider.evaluate(ruleName, "12/30/2002 19:35:02", null).matched());
assertFalse(provider.evaluate(ruleName, "18/22/2003", null).matched());
assertFalse(provider.evaluate(ruleName, "8/12/99", null).matched());
assertFalse(provider.evaluate(ruleName, "8/22/2003 25:00", null).matched());
}
@Test
public void dateyyyyMMdd()
{
final String ruleName = "dateyyyyMMdd";
assertTrue(provider.evaluate(ruleName, "2002-01-31", null).matched());
assertTrue(provider.evaluate(ruleName, "1997-04-30", null).matched());
assertTrue(provider.evaluate(ruleName, "2004-01-01", null).matched());
assertFalse(provider.evaluate(ruleName, "2002-01-32", null).matched());
assertFalse(provider.evaluate(ruleName, "2003-02-29", null).matched());
assertFalse(provider.evaluate(ruleName, "04-01-01", null).matched());
}
@Test
public void time()
{
final String ruleName = "time";
assertTrue(provider.evaluate(ruleName, "1 AM", null).matched());
assertTrue(provider.evaluate(ruleName, "1 PM", null).matched());
assertTrue(provider.evaluate(ruleName, "23:00:00", null).matched());
assertTrue(provider.evaluate(ruleName, "23:00", null).matched());
assertTrue(provider.evaluate(ruleName, "5:29:59 PM", null).matched());
assertFalse(provider.evaluate(ruleName, "13 PM", null).matched());
assertFalse(provider.evaluate(ruleName, "13:60:00", null).matched());
assertFalse(provider.evaluate(ruleName, "00:00:00 AM", null).matched());
}
@Test
public void test_Multiple_Providers() {
RegexProvider ordersProvider = new RegexProvider();
RegexProvider productsProvider = new RegexProvider();
productsProvider.setSrc("/org/milyn/rules/regex/rules-products.properties");
ordersProvider.setSrc("/org/milyn/rules/regex/rules-orders.properties");
assertTrue(ordersProvider.evaluate("id", "Z0123456789", null).matched());
assertFalse(ordersProvider.evaluate("id", "YZ012345678901234", null).matched());
assertFalse(productsProvider.evaluate("id", "Z0123456789", null).matched());
assertTrue(productsProvider.evaluate("id", "YZ012345678901234", null).matched());
}
}