package br.com.citframework.util.geo;
import org.junit.Assert;
import org.junit.Test;
/**
* Classe de testes para valida��o do comportamento de {@link GeoUtils}
*
* @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a>
* @since 22/09/2014
*
*/
public final class GeoUtilsTest {
private static final String LATITUDE_FIELD_NAME = "latitude";
private static final String LONGITUDE_FIELD_NAME = "longitude";
private static final String EXPECTED_DISTANCE_WHERE_QUERY_WITHOUT_INDEX = " acos(sin(?) * sin(radians(latitude)) + cos(?) * cos(radians(latitude)) * cos(radians(longitude) - (?))) * 6371 <= ? ";
private static final String EXPECTED_DISTANCE_WHERE_QUERY_WITH_INDEX = " (radians(latitude) >= ? AND radians(latitude) <= ?) AND (radians(longitude) >= ? AND radians(longitude) <= ?) AND acos(sin(?) * sin(radians(latitude)) + cos(?) * cos(radians(latitude)) * cos(radians(longitude) - (?))) <= ? ";
@Test
public void testWhenLatitudeIsValid() {
final Boolean result = GeoUtils.validLatitude(-89.5498767D);
Assert.assertTrue(result);
}
@Test
public void testWhenLatitudeStringIsValid() {
final Boolean result = GeoUtils.validLatitude("-89.5498767");
Assert.assertTrue(result);
}
@Test
public void testWhenLatitudeIsInvalid() {
final Boolean result = GeoUtils.validLatitude(Double.MAX_VALUE);
Assert.assertFalse(result);
}
@Test
public void testWhenLatitudeStringIsInvalid() {
final Boolean result = GeoUtils.validLatitude(new Double(Double.MAX_VALUE).toString());
Assert.assertFalse(result);
}
@Test
public void testWhenLongitudeIsValid() {
final Boolean result = GeoUtils.validLongitude(-176.5498767D);
Assert.assertTrue(result);
}
@Test
public void testWhenLongitudeStringIsValid() {
final Boolean result = GeoUtils.validLongitude("-176.5498767");
Assert.assertTrue(result);
}
@Test
public void testWhenLongitudeIsInvalid() {
final Boolean result = GeoUtils.validLongitude(Double.MAX_VALUE);
Assert.assertFalse(result);
}
@Test
public void testWhenLongitudeStringIsInvalid() {
final Boolean result = GeoUtils.validLongitude(new Double(Double.MAX_VALUE).toString());
Assert.assertFalse(result);
}
@Test
public void testWhenCoordinatesIsValid() {
final Boolean result = GeoUtils.validCoordinates(246.00000000000000056, 0.0);
Assert.assertFalse(result);
}
@Test
public void testWhenCoordinatesStringIsValid() {
final Boolean result = GeoUtils.validCoordinates("246.00000000000000056", "0");
Assert.assertFalse(result);
}
@Test
public void testWhenLatitudeAndLongitudeAreValidCoordinates() {
final Boolean result = GeoUtils.validCoordinates(46.00000000000000056, 90.0);
Assert.assertTrue(result);
}
@Test
public void testWhenLatitudeIsValidAndLongitudeIsInValidCoordinates() {
final Boolean result = GeoUtils.validCoordinates(89.0000005620000056, Double.MAX_VALUE);
Assert.assertFalse(result);
}
@Test
public void testWhenLatitudeIsInvalidAndLongitudeIsValidCoordinates() {
final Boolean result = GeoUtils.validCoordinates(Double.MAX_VALUE, 89.0004620000000056);
Assert.assertFalse(result);
}
@Test
public void testWhenLatitudeAndLongitudeAreInvalidCoordinates() {
final Boolean result = GeoUtils.validCoordinates(Double.MAX_VALUE, Double.MAX_VALUE);
Assert.assertFalse(result);
}
@Test
public void testWhenCoordinatesStringIsInvalid() {
final Boolean result = GeoUtils.validCoordinates("246.00008645000000056", "0");
Assert.assertFalse(result);
}
@Test(expected = IllegalArgumentException.class)
public void testWhenLatitudeIsNull() {
GeoUtils.validLatitude((Double) null);
}
@Test(expected = IllegalArgumentException.class)
public void testWhenLongitudeIsNull() {
GeoUtils.validLongitude((Double) null);
}
private final String INVALID = "This is invalid!!!";
@Test(expected = NumberFormatException.class)
public void testWhenLatitudeStringFormatIsNotValid() {
GeoUtils.validLatitude(INVALID);
}
@Test(expected = NumberFormatException.class)
public void testWhenLongitudeStringFormatIsNotValid() {
GeoUtils.validLongitude(INVALID);
}
@Test
public void testGetSQLWherePieceForDistanceWithoutIndex() {
final String result = GeoUtils.getSQLWherePieceForDistanceWithoutIndex(LATITUDE_FIELD_NAME, LONGITUDE_FIELD_NAME);
Assert.assertEquals(EXPECTED_DISTANCE_WHERE_QUERY_WITHOUT_INDEX, result);
}
@Test(expected = IllegalArgumentException.class)
public void testGetSQLWherePieceForDistanceWithoutIndexWithEmptyLatitudeFieldName() {
GeoUtils.getSQLWherePieceForDistanceWithoutIndex("", LONGITUDE_FIELD_NAME);
}
@Test(expected = IllegalArgumentException.class)
public void testGetSQLWherePieceForDistanceWithoutIndexWithNullLatitudeFieldName() {
GeoUtils.getSQLWherePieceForDistanceWithoutIndex(null, LONGITUDE_FIELD_NAME);
}
@Test(expected = IllegalArgumentException.class)
public void testGetSQLWherePieceForDistanceWithoutIndexWithEmptyLongitudeFieldName() {
GeoUtils.getSQLWherePieceForDistanceWithoutIndex(LATITUDE_FIELD_NAME, "");
}
@Test(expected = IllegalArgumentException.class)
public void testGetSQLWherePieceForDistanceWithoutIndexWithNullLongitudeFieldName() {
GeoUtils.getSQLWherePieceForDistanceWithoutIndex(LATITUDE_FIELD_NAME, null);
}
@Test
public void testGetSQLWherePieceForDistanceWithIndex() {
final String result = GeoUtils.getSQLWherePieceForDistanceWithIndex(LATITUDE_FIELD_NAME, LONGITUDE_FIELD_NAME, false);
Assert.assertEquals(EXPECTED_DISTANCE_WHERE_QUERY_WITH_INDEX, result);
}
@Test(expected = IllegalArgumentException.class)
public void testGetSQLWherePieceForDistanceWithIndexWithEmptyLatitudeFieldName() {
GeoUtils.getSQLWherePieceForDistanceWithIndex("", LONGITUDE_FIELD_NAME, false);
}
@Test(expected = IllegalArgumentException.class)
public void testGetSQLWherePieceForDistanceWithIndexWithNullLatitudeFieldName() {
GeoUtils.getSQLWherePieceForDistanceWithIndex(null, LONGITUDE_FIELD_NAME, false);
}
@Test(expected = IllegalArgumentException.class)
public void testGetSQLWherePieceForDistanceWithIndexWithEmptyLongitudeFieldName() {
GeoUtils.getSQLWherePieceForDistanceWithIndex(LATITUDE_FIELD_NAME, "", false);
}
@Test(expected = IllegalArgumentException.class)
public void testGetSQLWherePieceForDistanceWithIndexWithNullLongitudeFieldName() {
GeoUtils.getSQLWherePieceForDistanceWithIndex(LATITUDE_FIELD_NAME, null, false);
}
}