// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.geo; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * Tests for the BoundingBoxParser class. * * @author arnej27959 */ public class BoundingBoxParserTestCase { private static final double delta = 0.000000000001; private BoundingBoxParser parser; private void allZero(BoundingBoxParser data) { assertEquals(0d, data.n, delta); assertEquals(0d, data.s, delta); assertEquals(0d, data.e, delta); assertEquals(0d, data.w, delta); } private void all1234(BoundingBoxParser data) { assertEquals(1d, data.n, delta); assertEquals(2d, data.s, delta); assertEquals(3d, data.e, delta); assertEquals(4d, data.w, delta); } /** * Tests different inputs that should all produce 0 */ @Test public void testZero() { parser = new BoundingBoxParser("n=0,s=0,e=0,w=0"); allZero(parser); parser = new BoundingBoxParser("N=0,S=0,E=0,W=0"); allZero(parser); parser = new BoundingBoxParser("NORTH=0,SOUTH=0,EAST=0,WEST=0"); allZero(parser); parser = new BoundingBoxParser("north=0,south=0,east=0,west=0"); allZero(parser); parser = new BoundingBoxParser("n=0.0,s=0.0e-17,e=0.0e0,w=0.0e100"); allZero(parser); parser = new BoundingBoxParser("s:0.0,w:0.0,n:0.0,e:0.0"); allZero(parser); parser = new BoundingBoxParser("s:0.0,w:0.0,n:0.0,e:0.0"); allZero(parser); } @Test public void testOneTwoThreeFour() { parser = new BoundingBoxParser("n=1,s=2,e=3,w=4"); all1234(parser); parser = new BoundingBoxParser("n=1.0,s=2.0,e=3.0,w=4.0"); all1234(parser); parser = new BoundingBoxParser("s=2,w=4,n=1,e=3"); all1234(parser); parser = new BoundingBoxParser("N=1,S=2,E=3,W=4"); all1234(parser); parser = new BoundingBoxParser("S=2,W=4,N=1,E=3"); all1234(parser); parser = new BoundingBoxParser("north=1.0,south=2.0,east=3.0,west=4.0"); all1234(parser); parser = new BoundingBoxParser("South=2.0 West=4.0 North=1.0 East=3.0"); all1234(parser); } @Test public void testGeoPlanetExample() { /* example XML: 40.183868 -74.819519 40.248291 -74.728798 can be input as: s=40.183868,w=-74.819519,n=40.248291,e=-74.728798 */ parser = new BoundingBoxParser("south=40.183868,west=-74.819519,north=40.248291,east=-74.728798"); assertEquals(40.183868d, parser.s, 0.0000001); assertEquals(-74.819519d, parser.w, 0.0000001); assertEquals(40.248291d, parser.n, 0.0000001); assertEquals(-74.728798d, parser.e, 0.0000001); } @Test public void testGwsExample() { /* example XML: 37.4489937.3323-121.98241-122.06566 can be input as: north:37.44899 south:37.3323, east:-121.98241 west:-122.06566 */ parser = new BoundingBoxParser(" north:37.44899 south:37.3323, east:-121.98241 west:-122.06566 "); assertEquals(37.44899d, parser.n, 0.000001); assertEquals(37.33230d, parser.s, 0.000001); assertEquals(-121.98241d, parser.e, 0.000001); assertEquals(-122.06566d, parser.w, 0.000001); } /** * Tests various inputs that contain syntax errors. */ @Test public void testInputErrors() { String message = ""; try { parser = new BoundingBoxParser("n=10.11,e=2.02"); } catch (IllegalArgumentException e) { message = e.getMessage(); } assertEquals("Missing bounding box limits, n=true s=false e=true w=false", message); try { parser = new BoundingBoxParser("n=11.01,s=10.11,e=xyzzy,w=-122.2"); } catch (IllegalArgumentException e) { message = e.getMessage(); } assertEquals("Could not parse e limit 'xyzzy' as a number", message); try { parser = new BoundingBoxParser("n=11.01,n=10.11,e=-122.0,w=-122.2"); } catch (IllegalArgumentException e) { message = e.getMessage(); } assertEquals("multiple limits for 'n' boundary", message); try { parser = new BoundingBoxParser("s=11.01,s=10.11,e=-122.0,w=-122.2"); } catch (IllegalArgumentException e) { message = e.getMessage(); } assertEquals("multiple limits for 's' boundary", message); try { parser = new BoundingBoxParser("n=11.01,s=10.11,e=-122.0,e=-122.2"); } catch (IllegalArgumentException e) { message = e.getMessage(); } assertEquals("multiple limits for 'e' boundary", message); try { parser = new BoundingBoxParser("n=11.01,s=10.11,w=-122.0,w=-122.2"); } catch (IllegalArgumentException e) { message = e.getMessage(); } assertEquals("multiple limits for 'w' boundary", message); } }