package com.gisgraphy.importer; import java.util.ArrayList; import java.util.List; import net.sf.jstester.util.Assert; import org.easymock.EasyMock; import org.junit.Test; import com.gisgraphy.domain.geoloc.entity.HouseNumber; import com.gisgraphy.domain.geoloc.entity.OpenStreetMap; import com.gisgraphy.domain.repository.IOpenStreetMapDao; import com.gisgraphy.domain.valueobject.HouseNumberType; import com.gisgraphy.domain.valueobject.Pagination; import com.gisgraphy.fulltext.FulltextQuery; import com.gisgraphy.fulltext.FulltextResultsDto; import com.gisgraphy.fulltext.IFullTextSearchEngine; import com.gisgraphy.fulltext.SolrResponseDto; import com.gisgraphy.helper.GeolocHelper; import com.gisgraphy.importer.dto.AddressInclusion; import com.gisgraphy.importer.dto.AssociatedStreetHouseNumber; import com.gisgraphy.importer.dto.AssociatedStreetMember; import com.gisgraphy.importer.dto.InterpolationHouseNumber; import com.gisgraphy.importer.dto.InterpolationMember; import com.gisgraphy.importer.dto.InterpolationType; import com.gisgraphy.importer.dto.NodeHouseNumber; import com.vividsolutions.jts.geom.Point; public class OpenStreetMapHouseNumberSimpleImporterTest { boolean findNearestStreetCalled=false; boolean buildHouseNumberFromAssociatedHouseNumberCalled=false; @Test public void parseAssociatedStreetHouseNumber() { String line = "A " + "2069647 1661205474___0101000020E6100000046DBC85BFA81D40DA7D22AA4BDD4540___24___housename1___Avenue de Fontvieille___city___zip___suburb___0102000020E6100000070000002CB583B641206340D4F36E2C28723BC0F07F91E142206340187FDB1324723BC0E4E8E04F43206340EBE74D452A723BC0A638FD8F42206340311812E62C723BC0F6FA496B42206340EB9F96D52A723BC070E01F004220634061E4654D2C723BC02CB583B641206340D4F36E2C28723BC0___N___house___" + "8035911___0101000020E61000002CDEB7197720634062A071EC8A753BC0______Kelvin Grove Road___Kelvin Grove Road___city___zip___suburb______W___street___" + "178308979___0101000020E610000084BCC39277206340114C7F40B1753BC0______Kelvin Grove Road___Kelvin Grove Road_______________W___street"; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); AssociatedStreetHouseNumber actual = importer.parseAssociatedStreetHouseNumber(line); //TODO wrong number of fields, null Assert.assertEquals("2069647", actual.getRelationID()); Assert.assertNotNull(actual.getAssociatedStreetMember()); Assert.assertEquals(3,actual.getAssociatedStreetMember().size()); AssociatedStreetMember m1 = new AssociatedStreetMember("1661205474", (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000046DBC85BFA81D40DA7D22AA4BDD4540"),"24","Avenue de Fontvieille","N","house","housename1","city","zip","suburb", GeolocHelper.convertFromHEXEWKBToGeometry("0102000020E6100000070000002CB583B641206340D4F36E2C28723BC0F07F91E142206340187FDB1324723BC0E4E8E04F43206340EBE74D452A723BC0A638FD8F42206340311812E62C723BC0F6FA496B42206340EB9F96D52A723BC070E01F004220634061E4654D2C723BC02CB583B641206340D4F36E2C28723BC0")); AssociatedStreetMember m2 = new AssociatedStreetMember("8035911", (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E61000002CDEB7197720634062A071EC8A753BC0"),null,"Kelvin Grove Road","W","street","Kelvin Grove Road","city","zip","suburb", null); AssociatedStreetMember m3 = new AssociatedStreetMember("178308979", (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000084BCC39277206340114C7F40B1753BC0"),null,"Kelvin Grove Road","W","street","Kelvin Grove Road",null,null,null, null); Assert.assertEquals(actual.getAssociatedStreetMember().get(0),m1); Assert.assertEquals(actual.getAssociatedStreetMember().get(1),m2); Assert.assertEquals(actual.getAssociatedStreetMember().get(2),m3); } @Test public void parseAssociatedStreetHouseNumber_noMembers() { String line = "A 1021328 "; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); AssociatedStreetHouseNumber actual = importer.parseAssociatedStreetHouseNumber(line); Assert.assertNull(actual); } @Test public void parseAssociatedStreetHouseNumberWrongType() { String line = "X " + "2069647 1661205474___0101000020E6100000046DBC85BFA81D40DA7D22AA4BDD4540___24___Avenue de Fontvieille___N___house___" + "158189815___0101000020E61000002AA4070C99A81D40227F492749DD4540___Avenue de Fontvieille___Avenue de Fontvieille___W___street___" + "176577460___0101000020E61000004522EE9504A81D4081BAA66957DD4540___Avenue de Fontvieille___Avenue de Fontvieille___W___street"; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Assert.assertNull(importer.parseAssociatedStreetHouseNumber(line)); } @Test public void parseAssociatedStreetHouseNumberUnderscoreInName() { String line = "A " + "2069647 1661205474___0101000020E6100000046DBC85BFA81D40DA7D22AA4BDD4540___24___housename1___Avenue de Fontvieille___city___zip___suburb___0102000020E6100000070000002CB583B641206340D4F36E2C28723BC0F07F91E142206340187FDB1324723BC0E4E8E04F43206340EBE74D452A723BC0A638FD8F42206340311812E62C723BC0F6FA496B42206340EB9F96D52A723BC070E01F004220634061E4654D2C723BC02CB583B641206340D4F36E2C28723BC0___N___house___" + "8035911___0101000020E61000002CDEB7197720634062A071EC8A753BC0______Kelvin_Grove Road___Kelvin Grove_Road___ci_ty___z_ip___s_uburb______W___street___" + "178308979___0101000020E610000084BCC39277206340114C7F40B1753BC0______Kelvin_Grove Road___Kelvin Grove_Road_______________W___street"; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); AssociatedStreetHouseNumber actual = importer.parseAssociatedStreetHouseNumber(line); //TODO wrong number of fields, null Assert.assertEquals("2069647", actual.getRelationID()); Assert.assertNotNull(actual.getAssociatedStreetMember()); Assert.assertEquals(3,actual.getAssociatedStreetMember().size()); AssociatedStreetMember m1 = new AssociatedStreetMember("1661205474", (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000046DBC85BFA81D40DA7D22AA4BDD4540"),"24","Avenue de Fontvieille","N","house","housename1","city","zip","suburb", GeolocHelper.convertFromHEXEWKBToGeometry("0102000020E6100000070000002CB583B641206340D4F36E2C28723BC0F07F91E142206340187FDB1324723BC0E4E8E04F43206340EBE74D452A723BC0A638FD8F42206340311812E62C723BC0F6FA496B42206340EB9F96D52A723BC070E01F004220634061E4654D2C723BC02CB583B641206340D4F36E2C28723BC0")); AssociatedStreetMember m2 = new AssociatedStreetMember("8035911", (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E61000002CDEB7197720634062A071EC8A753BC0"),null,"Kelvin Grove_Road","W","street","Kelvin_Grove Road","ci_ty","z_ip","s_uburb", null); AssociatedStreetMember m3 = new AssociatedStreetMember("178308979", (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000084BCC39277206340114C7F40B1753BC0"),null,"Kelvin Grove_Road","W","street","Kelvin_Grove Road",null,null,null, null); Assert.assertEquals(actual.getAssociatedStreetMember().get(0),m1); Assert.assertEquals(actual.getAssociatedStreetMember().get(1),m2); Assert.assertEquals(actual.getAssociatedStreetMember().get(2),m3); } @Test public void parseAssociatedStreetHouseNumberWrongHouseNumberType() { String line = "B " + "2069647 1661205474___0101000020E6100000046DBC85BFA81D40DA7D22AA4BDD4540___24___Avenue de Fontvieille___N___house___" + "158189815___0101000020E61000002AA4070C99A81D40227F492749DD4540___Avenue de Fontvieille___Avenue de Fontvieille___W___street___" + "176577460___0101000020E61000004522EE9504A81D4081BAA66957DD4540___Avenue de Fontvieille___Avenue de Fontvieille___W___street"; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Assert.assertNull(importer.parseAssociatedStreetHouseNumber(line)); } @Test public void parseAssociatedStreetHouseNumberWrongNumberOFields() { String line = "A " + "2069647 "; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Assert.assertNull(importer.parseAssociatedStreetHouseNumber(line)); } @Test public void parseAssociatedStreetHouseNumberNullOrEmptyLine() { String line =null; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Assert.assertNull(importer.parseAssociatedStreetHouseNumber(line)); Assert.assertNull(importer.parseAssociatedStreetHouseNumber("")); } /*--------------------------------------------------interpolation-----------------------------------------------*/ @Test public void parseInterpolationHouseNumberWrongNumberOFields() { String line = "I " + "2069647 "; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Assert.assertNull(importer.parseInterpolationHouseNumber(line)); } @Test public void parseInterpolationHouseNumberNullOrEmptyLine() { String line =null; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Assert.assertNull(importer.parseInterpolationHouseNumber(line)); Assert.assertNull(importer.parseInterpolationHouseNumber("")); } @Test public void parseInterpolationHouseNumber() { String line = "I 168365171 1796478450___0___0101000020E61000009A023EE4525350C0959C137B682F38C0_________" +"1796453793___2___0101000020E610000038691A144D5350C023ADE75A6A2F38C0___600___ba_r___" +"1366275082___1___0101000020E610000068661CD94B5350C0B055270C6F2F38C0______foo___" +"1796453794___3___0101000020E6100000F38F6390605350C028A6666A6D2F38C0___698___ sname even actual"; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); InterpolationHouseNumber interpolation = importer.parseInterpolationHouseNumber(line); InterpolationHouseNumber actual = interpolation; //TODO wrong number of fields, null Assert.assertEquals("168365171", actual.getWayId()); Assert.assertEquals(InterpolationType.even,actual.getInterpolationType()); Assert.assertEquals("sname",actual.getStreetName()); Assert.assertEquals(AddressInclusion.actual,actual.getAddressInclusion()); Assert.assertEquals(4,actual.getMembers().size()); InterpolationMember m0 = new InterpolationMember("1796478450", 0, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E61000009A023EE4525350C0959C137B682F38C0"),null,null); InterpolationMember m1 = new InterpolationMember("1366275082", 1, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000068661CD94B5350C0B055270C6F2F38C0"),null,"foo"); InterpolationMember m2 = new InterpolationMember("1796453793", 2, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000038691A144D5350C023ADE75A6A2F38C0"),"600","ba_r"); InterpolationMember m3 = new InterpolationMember("1796453794", 3, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000F38F6390605350C028A6666A6D2F38C0"),"698",null); Assert.assertEquals("members should be sorted",m0,actual.getMembers().get(0)); Assert.assertEquals(m1,actual.getMembers().get(1)); Assert.assertEquals(m2,actual.getMembers().get(2)); Assert.assertEquals(m3,actual.getMembers().get(3)); //other common test line = "I 168365171 1796478450___0___0101000020E61000009A023EE4525350C0959C137B682F38C0_________" +"1796453793___2___0101000020E610000038691A144D5350C023ADE75A6A2F38C0___600___ba_r___" +"1366275082___1___0101000020E610000068661CD94B5350C0B055270C6F2F38C0______foo___" +"1796453794___3___0101000020E6100000F38F6390605350C028A6666A6D2F38C0___698___ sname even "; interpolation = importer.parseInterpolationHouseNumber(line); Assert.assertNotNull("address inclusion is empty",interpolation); Assert.assertEquals(4,interpolation.getMembers().size()); line ="I 169508709 1806691488___0___0101000020E610000045C3BD8D28404DC0E08211A04B4D41C0___3702___Tinogasta___1806691490___1___0101000020E6100000C3FF0C2549404DC0F924C1655F4D41C0___3800___Tinogasta even actual"; Assert.assertNotNull(interpolation); Assert.assertEquals(4,interpolation.getMembers().size()); } @Test public void parseInterpolationHouseNumber_NoInterpolationType() { String line = "I 168365171 1796478450___0___0101000020E61000009A023EE4525350C0959C137B682F38C0_________" +"1796453793___2___0101000020E610000038691A144D5350C023ADE75A6A2F38C0___600___ba_r___" +"1366275082___1___0101000020E610000068661CD94B5350C0B055270C6F2F38C0______foo___" +"1796453794___3___0101000020E6100000F38F6390605350C028A6666A6D2F38C0___698___ sname actual"; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); InterpolationHouseNumber interpolation = importer.parseInterpolationHouseNumber(line); InterpolationHouseNumber actual = interpolation; //TODO wrong number of fields, null Assert.assertEquals("168365171", actual.getWayId()); Assert.assertEquals("By default interpolation is all",InterpolationType.all,actual.getInterpolationType()); } //parseNodeHouseNumber @Test public void parseNodeHouseNumberWrongNumberOFields() { String line = "N " + "2069647 "; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Assert.assertNull(importer.parseNodeHouseNumber(line)); } //parseNodeHouseNumber @Test public void parseNodeHouseNumberWrongNumberOFields_W() { String line = "W " + "2069647 "; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Assert.assertNull(importer.parseNodeHouseNumber(line)); } @Test public void parseNodeHouseNumberNullOrEmptyLine() { String line =null; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Assert.assertNull(importer.parseNodeHouseNumber(line)); Assert.assertNull(importer.parseNodeHouseNumber("")); } @Test public void parseNodeHouseNumber(){ String line = "N 247464344 0101000020E610000044BC1A457B304DC018737C597F4B41C0 405 Museo Ferroviario Avenida Del Libertador city zip suburb "; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); NodeHouseNumber actual = importer.parseNodeHouseNumber(line); NodeHouseNumber expected = new NodeHouseNumber("247464344",(Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000044BC1A457B304DC018737C597F4B41C0"),"405","Museo Ferroviario","Avenida Del Libertador","city","zip","suburb",null) ; Assert.assertEquals(expected, actual); } @Test public void parseNodeHouseNumber_W(){ String line = "W 247464344 0101000020E610000044BC1A457B304DC018737C597F4B41C0 405 Museo Ferroviario Avenida Del Libertador city zip suburb 0102000020E61000000700000048066FFE15216340CA79B5920C813BC04E0B5EF4152163403510CB660E813BC0348D81D0152163404D24873E0E813BC0AEE584BF1521634081A1A24511813BC0D1590B581721634020C1430713813BC036AC4E731721634082AD122C0E813BC048066FFE15216340CA79B5920C813BC0"; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); NodeHouseNumber actual = importer.parseNodeHouseNumber(line); NodeHouseNumber expected = new NodeHouseNumber("247464344",(Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000044BC1A457B304DC018737C597F4B41C0"),"405","Museo Ferroviario","Avenida Del Libertador","city","zip","suburb",null) ; Assert.assertEquals(expected, actual); } @Test public void segmentize(){ /* 0 5 15 |------|------|------|------|-----| 0 6 12 18 24 30 */ OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Point p1 = GeolocHelper.createPoint(1f, 1f); Point p2 = GeolocHelper.createPoint(1f, 1.045225f); Point p3 = GeolocHelper.createPoint(1f, 1.13567f); Point p4 = GeolocHelper.createPoint(1f, 1.27133f); /* System.out.println(GeolocHelper.distance(p1, p2)); System.out.println(GeolocHelper.distance(p2, p3)); System.out.println(GeolocHelper.distance(p3, p4));*/ List<Point> points = new ArrayList<Point>(); points.add(p1); points.add(p2); points.add(p3); points.add(p4); List<Point> result = importer.segmentize(points, 4); Assert.assertEquals(6, result.size()); for (int i =0; i<5;i++){ double distance = GeolocHelper.distance(result.get(i), result.get(i+1)); System.out.println(distance); Assert.assertTrue(Math.abs(distance-6000)<10); } } @Test public void segmentize_onePoint(){ /* 0 5 15 30 |------|------|------|------|-----| 0 6 12 18 24 30 */ OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Point p1 = GeolocHelper.createPoint(1f, 1f); Point p2 = GeolocHelper.createPoint(1f, 1.045225f); Point p3 = GeolocHelper.createPoint(1f, 1.13567f); Point p4 = GeolocHelper.createPoint(1f, 1.27133f); /* System.out.println(GeolocHelper.distance(p1, p2)); System.out.println(GeolocHelper.distance(p2, p3)); System.out.println(GeolocHelper.distance(p3, p4));*/ List<Point> points = new ArrayList<Point>(); points.add(p1); points.add(p2); points.add(p3); points.add(p4); List<Point> result = importer.segmentize(points, 1); Assert.assertEquals(3, result.size()); for (int i =0; i<2;i++){ double distance = GeolocHelper.distance(result.get(i), result.get(i+1)); System.out.println(distance); Assert.assertTrue(Math.abs(distance-15000)<10); } } @Test public void buildHouseNumberFromAssociatedHouseNumber(){ AssociatedStreetMember houseMember = new AssociatedStreetMember(); String number = "3"; String id = "234"; String type = "house"; Point point = GeolocHelper.createPoint(3F, 2F); houseMember.setHouseNumber(number); houseMember.setLocation(point); houseMember.setId(id); houseMember.setType(type); OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); HouseNumber houseNumber = importer.buildHouseNumberFromAssociatedHouseNumber(houseMember); Assert.assertEquals(number,houseNumber.getNumber() ); Assert.assertEquals(234, houseNumber.getOpenstreetmapId().intValue()); Assert.assertEquals(HouseNumberType.ASSOCIATED, houseNumber.getType()); } @Test public void findNearestStreet_oneResult(){ List<SolrResponseDto> results = new ArrayList<SolrResponseDto>(); SolrResponseDto solrResponseDto = EasyMock.createMock(SolrResponseDto.class); long openstreetmapId = 233L; EasyMock.expect(solrResponseDto.getOpenstreetmap_id()).andStubReturn(openstreetmapId); EasyMock.replay(solrResponseDto); results.add(solrResponseDto); FulltextResultsDto mockResultDTO = EasyMock.createMock(FulltextResultsDto.class); EasyMock.expect(mockResultDTO.getResultsSize()).andReturn(1); EasyMock.expect(mockResultDTO.getResults()).andReturn(results); EasyMock.replay(mockResultDTO); String streetName="streetname"; FulltextQuery query = new FulltextQuery(streetName, Pagination.DEFAULT_PAGINATION, OpenStreetMapHouseNumberSimpleImporter.MEDIUM_OUTPUT, com.gisgraphy.fulltext.Constants.STREET_PLACETYPE, null); Point point = GeolocHelper.createPoint(2F, 3F); query.around(point); query.withRadius(OpenStreetMapHouseNumberSimpleImporter.DEFAULT_SEARCH_DISTANCE); query.withAllWordsRequired(false).withoutSpellChecking(); OpenStreetMap osm = new OpenStreetMap(); osm.setOpenstreetmapId(openstreetmapId); IOpenStreetMapDao osmDaoMock = EasyMock.createMock(IOpenStreetMapDao.class); EasyMock.expect(osmDaoMock.getByOpenStreetMapId(openstreetmapId)).andStubReturn(osm); EasyMock.expect(osmDaoMock.save(osm)).andReturn(osm); EasyMock.replay(osmDaoMock); IFullTextSearchEngine fulltextEngine = EasyMock.createMock(IFullTextSearchEngine.class); OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); EasyMock.expect(fulltextEngine.executeQuery(query)).andStubReturn(mockResultDTO); EasyMock.replay(fulltextEngine); importer.setFullTextSearchEngine(fulltextEngine); importer.setOpenStreetMapDao(osmDaoMock); OpenStreetMap result = importer.findNearestStreet(streetName, point); Assert.assertEquals(osm, result); EasyMock.verify(fulltextEngine); } @Test public void findNearestStreet_errorsShouldBeCatched(){ String streetName="foo"; FulltextQuery query = new FulltextQuery(streetName, Pagination.DEFAULT_PAGINATION, OpenStreetMapHouseNumberSimpleImporter.MEDIUM_OUTPUT, com.gisgraphy.fulltext.Constants.STREET_PLACETYPE, null); Point point = GeolocHelper.createPoint(2F, 3F); query.around(point); query.withRadius(OpenStreetMapHouseNumberSimpleImporter.DEFAULT_SEARCH_DISTANCE); query.withAllWordsRequired(false).withoutSpellChecking(); IFullTextSearchEngine fulltextEngine = EasyMock.createMock(IFullTextSearchEngine.class); OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); EasyMock.expect(fulltextEngine.executeQuery(query)).andThrow(new RuntimeException()); EasyMock.replay(fulltextEngine); importer.setFullTextSearchEngine(fulltextEngine); OpenStreetMap result = importer.findNearestStreet(streetName, point); EasyMock.verify(fulltextEngine); } @Test public void findNearestStreet_severalResults(){ List<SolrResponseDto> results = new ArrayList<SolrResponseDto>(); SolrResponseDto solrResponseDto = EasyMock.createMock(SolrResponseDto.class); long openstreetmapId = 233L; EasyMock.expect(solrResponseDto.getOpenstreetmap_id()).andStubReturn(openstreetmapId); EasyMock.replay(solrResponseDto); results.add(solrResponseDto); SolrResponseDto solrResponseDto2 = EasyMock.createMock(SolrResponseDto.class); long openstreetmapId2 = 344L; EasyMock.expect(solrResponseDto2.getOpenstreetmap_id()).andStubReturn(openstreetmapId2); EasyMock.replay(solrResponseDto2); results.add(solrResponseDto2); FulltextResultsDto mockResultDTO = EasyMock.createMock(FulltextResultsDto.class); EasyMock.expect(mockResultDTO.getResultsSize()).andReturn(2); EasyMock.expect(mockResultDTO.getResults()).andReturn(results); EasyMock.replay(mockResultDTO); String streetName="streetname"; FulltextQuery query = new FulltextQuery(streetName, Pagination.DEFAULT_PAGINATION, OpenStreetMapHouseNumberSimpleImporter.MEDIUM_OUTPUT, com.gisgraphy.fulltext.Constants.STREET_PLACETYPE, null); Point point = GeolocHelper.createPoint(2F, 3F); query.around(point); query.withRadius(OpenStreetMapHouseNumberSimpleImporter.DEFAULT_SEARCH_DISTANCE); query.withAllWordsRequired(false).withoutSpellChecking(); OpenStreetMap osm = new OpenStreetMap(); osm.setOpenstreetmapId(openstreetmapId); IOpenStreetMapDao osmDaoMock = EasyMock.createMock(IOpenStreetMapDao.class); List<Long> ids = new ArrayList<Long>(); ids.add(openstreetmapId); ids.add(openstreetmapId2); EasyMock.expect(osmDaoMock.getNearestByosmIds(point, ids )).andStubReturn(osm); EasyMock.expect(osmDaoMock.save(osm)).andReturn(osm); EasyMock.replay(osmDaoMock); IFullTextSearchEngine fulltextEngine = EasyMock.createMock(IFullTextSearchEngine.class); OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); EasyMock.expect(fulltextEngine.executeQuery(query)).andStubReturn(mockResultDTO); EasyMock.replay(fulltextEngine); importer.setFullTextSearchEngine(fulltextEngine); importer.setOpenStreetMapDao(osmDaoMock); OpenStreetMap result = importer.findNearestStreet(streetName, point); Assert.assertEquals(osm, result); EasyMock.verify(fulltextEngine); } @Test public void findNearestStreet_nullPoint(){ OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Point point = GeolocHelper.createPoint(2F, 3F); org.junit.Assert.assertNull(importer.findNearestStreet("foo", null)); } @Test public void findNearestStreet_nullQuery(){ OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Point point = GeolocHelper.createPoint(2F, 3F); IOpenStreetMapDao openStreetMapDao = EasyMock.createMock(IOpenStreetMapDao.class); OpenStreetMap openStreetMap = new OpenStreetMap(); EasyMock.expect(openStreetMapDao.getNearestFrom(point,OpenStreetMapHouseNumberSimpleImporter.DEFAULT_SEARCH_DISTANCE)).andReturn(openStreetMap); EasyMock.replay(openStreetMapDao); importer.openStreetMapDao=openStreetMapDao; org.junit.Assert.assertEquals(openStreetMap,importer.findNearestStreet(null, point)); EasyMock.verify(openStreetMapDao); } @Test public void findNearestStreet_EmptyQuery(){ OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Point point = GeolocHelper.createPoint(2F, 3F); IOpenStreetMapDao openStreetMapDao = EasyMock.createMock(IOpenStreetMapDao.class); OpenStreetMap openStreetMap = new OpenStreetMap(); EasyMock.expect(openStreetMapDao.getNearestFrom(point,OpenStreetMapHouseNumberSimpleImporter.DEFAULT_SEARCH_DISTANCE)).andReturn(openStreetMap); EasyMock.replay(openStreetMapDao); importer.openStreetMapDao=openStreetMapDao; org.junit.Assert.assertEquals(openStreetMap,importer.findNearestStreet("", point)); EasyMock.verify(openStreetMapDao); } @Test public void findNearestStreet_doubleQuoteQuery(){ OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); Point point = GeolocHelper.createPoint(2F, 3F); IOpenStreetMapDao openStreetMapDao = EasyMock.createMock(IOpenStreetMapDao.class); OpenStreetMap openStreetMap = new OpenStreetMap(); EasyMock.expect(openStreetMapDao.getNearestFrom(point,OpenStreetMapHouseNumberSimpleImporter.DEFAULT_SEARCH_DISTANCE)).andReturn(openStreetMap); EasyMock.replay(openStreetMapDao); importer.openStreetMapDao=openStreetMapDao; org.junit.Assert.assertEquals(openStreetMap,importer.findNearestStreet("\"\"", point)); EasyMock.verify(openStreetMapDao); } @Test public void processAssociatedStreet_nohouse(){ OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); AssociatedStreetHouseNumber associatedStreetHouseNumber = new AssociatedStreetHouseNumber(); importer.processAssociatedStreet(associatedStreetHouseNumber); } @Test public void processAssociatedStreet_noStreetMember(){ //setup Long openstreetmapId =123L; OpenStreetMap osm = new OpenStreetMap(); osm.setOpenstreetmapId(openstreetmapId); IOpenStreetMapDao osmDaoMock = EasyMock.createMock(IOpenStreetMapDao.class); EasyMock.expect(osmDaoMock.getByOpenStreetMapId(openstreetmapId )).andStubReturn(osm); EasyMock.expect(osmDaoMock.save(osm)).andReturn(osm); EasyMock.replay(osmDaoMock); final OpenStreetMap openStreetMap = new OpenStreetMap(); final Point point = (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000046DBC85BFA81D40DA7D22AA4BDD4540"); final AssociatedStreetHouseNumber associatedStreetHouseNumber = new AssociatedStreetHouseNumber(); final AssociatedStreetMember number = new AssociatedStreetMember("1661205474", point,"24","Avenue de Fontvieille","N","house","housename1","city","zip","suburb", GeolocHelper.createLineString("LINESTRING (0 0, 10 10, 20 30)")); associatedStreetHouseNumber.addMember(number); findNearestStreetCalled=false; buildHouseNumberFromAssociatedHouseNumberCalled=false; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(){ @Override protected OpenStreetMap findNearestStreet(String streetName, Point location) { if ("Avenue de Fontvieille".equals(streetName) && location==point){ findNearestStreetCalled=true; return openStreetMap; } else { Assert.fail("find nearest street is not called with the correct parameters"); return null; } } @Override protected HouseNumber buildHouseNumberFromAssociatedHouseNumber( AssociatedStreetMember houseMember) { if (houseMember==number){ buildHouseNumberFromAssociatedHouseNumberCalled=true; return new HouseNumber(); }else { Assert.fail("buildHouseNumberFromAssociatedHouseNumber is not call with correct parameter"); return null; } } }; importer.setOpenStreetMapDao(osmDaoMock); //exercise importer.processAssociatedStreet(associatedStreetHouseNumber); //verify EasyMock.verify(osmDaoMock); Assert.assertTrue(findNearestStreetCalled); Assert.assertTrue(buildHouseNumberFromAssociatedHouseNumberCalled); } @Test public void processAssociatedStreet_noStreetMember_nostreetfound(){ //setup IOpenStreetMapDao osmDaoMock = EasyMock.createMock(IOpenStreetMapDao.class); EasyMock.replay(osmDaoMock); final Point point = (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000046DBC85BFA81D40DA7D22AA4BDD4540"); final AssociatedStreetHouseNumber associatedStreetHouseNumber = new AssociatedStreetHouseNumber(); final AssociatedStreetMember number = new AssociatedStreetMember("1661205474", point,"24","Avenue de Fontvieille","N","house","housename1","city","zip","suburb", GeolocHelper.createLineString("LINESTRING (0 0, 10 10, 20 30)")); associatedStreetHouseNumber.addMember(number); findNearestStreetCalled=false; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(){ @Override protected OpenStreetMap findNearestStreet(String streetName, Point location) { if ("Avenue de Fontvieille".equals(streetName) && location==point){ findNearestStreetCalled=true; return null; } else { Assert.fail("find nearest street is not called with the correct parameters"); return null; } } }; importer.setOpenStreetMapDao(osmDaoMock); //exercise importer.processAssociatedStreet(associatedStreetHouseNumber); //verify EasyMock.verify(osmDaoMock); Assert.assertTrue(findNearestStreetCalled); } @Test public void processAssociatedStreet_OneStreetMember(){ //setup Long openstreetmapId =158189815L; OpenStreetMap osm = new OpenStreetMap(); osm.setOpenstreetmapId(openstreetmapId); IOpenStreetMapDao osmDaoMock = EasyMock.createMock(IOpenStreetMapDao.class); EasyMock.expect(osmDaoMock.getByOpenStreetMapId(openstreetmapId )).andStubReturn(osm); EasyMock.expect(osmDaoMock.save(osm)).andReturn(osm); EasyMock.replay(osmDaoMock); final AssociatedStreetHouseNumber associatedStreetHouseNumber = new AssociatedStreetHouseNumber(); final AssociatedStreetMember number = new AssociatedStreetMember("1661205474", (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000046DBC85BFA81D40DA7D22AA4BDD4540"),"24","Avenue de Fontvieille","N","house","housename1","city","zip","suburb", GeolocHelper.createLineString("LINESTRING (0 0, 10 10, 20 20)")); final AssociatedStreetMember street = new AssociatedStreetMember("158189815", (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E61000002AA4070C99A81D40227F492749DD4540"),"Avenue de Fontvieille","Avenue de Fontvieille","W","street","housename2","city","zip","suburb", GeolocHelper.createLineString("LINESTRING (0 0, 10 10, 20 30)")); associatedStreetHouseNumber.addMember(number); associatedStreetHouseNumber.addMember(street); buildHouseNumberFromAssociatedHouseNumberCalled=false; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(){ @Override protected HouseNumber buildHouseNumberFromAssociatedHouseNumber( AssociatedStreetMember houseMember) { if (houseMember==number){ buildHouseNumberFromAssociatedHouseNumberCalled=true; return new HouseNumber(); }else { Assert.fail("buildHouseNumberFromAssociatedHouseNumber is not call with correct parameter"); return null; } } }; importer.setOpenStreetMapDao(osmDaoMock); //exercise importer.processAssociatedStreet(associatedStreetHouseNumber); //verify EasyMock.verify(osmDaoMock); Assert.assertTrue(buildHouseNumberFromAssociatedHouseNumberCalled); } @Test public void processAssociatedStreet_SeveralStreetMember(){ //setup Long openstreetmapId =158189815L; Long openstreetmapId2 =158189815L; List<Long> ids = new ArrayList<Long>(); ids.add(openstreetmapId); ids.add(openstreetmapId2); OpenStreetMap osm = new OpenStreetMap(); osm.setOpenstreetmapId(openstreetmapId); final AssociatedStreetHouseNumber associatedStreetHouseNumber = new AssociatedStreetHouseNumber(); IOpenStreetMapDao osmDaoMock = EasyMock.createMock(IOpenStreetMapDao.class); EasyMock.expect(osmDaoMock.getNearestByosmIds(EasyMock.anyObject(Point.class),EasyMock.anyObject(List.class) )).andStubReturn(osm); EasyMock.expect(osmDaoMock.save(osm)).andReturn(osm); EasyMock.replay(osmDaoMock); Point point = (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000046DBC85BFA81D40DA7D22AA4BDD4540"); final AssociatedStreetMember number = new AssociatedStreetMember("1661205474", point,"24","Avenue de Fontvieille","N","house","housename1","city","zip","suburb", GeolocHelper.createLineString("LINESTRING (0 0, 10 10, 20 30)")); final AssociatedStreetMember street = new AssociatedStreetMember("158189815", (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E61000002AA4070C99A81D40227F492749DD4540"),"Avenue de Fontvieille","Avenue de Fontvieille","W","street","housename2","city","zip","suburb", GeolocHelper.createLineString("LINESTRING (0 0, 10 10, 20 30)")); AssociatedStreetMember street2 = new AssociatedStreetMember("176577460", (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E61000004522EE9504A81D4081BAA66957DD4540"),"Avenue de Fontvieille","Avenue de Fontvieille","W","street","housename3","city","zip","suburb", GeolocHelper.createLineString("LINESTRING (0 0, 10 10, 20 30)")); associatedStreetHouseNumber.addMember(number); associatedStreetHouseNumber.addMember(street); associatedStreetHouseNumber.addMember(street2); buildHouseNumberFromAssociatedHouseNumberCalled=false; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(){ @Override protected HouseNumber buildHouseNumberFromAssociatedHouseNumber( AssociatedStreetMember houseMember) { if (houseMember==number){ buildHouseNumberFromAssociatedHouseNumberCalled=true; return new HouseNumber(); }else { Assert.fail("buildHouseNumberFromAssociatedHouseNumber is not call with correct parameter"); return null; } } }; importer.setOpenStreetMapDao(osmDaoMock); //exercise importer.processAssociatedStreet(associatedStreetHouseNumber); //verify EasyMock.verify(osmDaoMock); Assert.assertTrue(buildHouseNumberFromAssociatedHouseNumberCalled); } @Test public void processNodeHouseNumber_populateOsmFields(){ Long openstreetmapId =247464344L; final NodeHouseNumber house = new NodeHouseNumber(openstreetmapId+"",(Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000044BC1A457B304DC018737C597F4B41C0"),"405","Museo Ferroviario","Avenida Del Libertador","city","zip","suburb",null) ; house.setHouseNumber("12345"); house.setName("name"); house.setStreetName("streetName"); final Point point = GeolocHelper.createPoint(2F, 1F); house.setLocation(point); house.setCity("city"); house.setSuburb("suburb"); house.setZipCode("zipCode"); HouseNumber houseNumber = new HouseNumber(); houseNumber.setNumber(house.getHouseNumber()); houseNumber.setName(house.getName()); houseNumber.setType(HouseNumberType.NODE); Point location = house.getLocation(); houseNumber.setLocation(location); houseNumber.setOpenstreetmapId(openstreetmapId); final OpenStreetMap osm = new OpenStreetMap(); osm.setCityConfident(false); OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(){ @Override protected OpenStreetMap findNearestStreet(String streetName, Point location) { return osm; } @Override protected void saveOsm(OpenStreetMap osm) { Assert.assertEquals("isInPlace should be filled",house.getSuburb(), osm.getIsInPlace()); Assert.assertEquals("isIn should be filled if it is not city confident",house.getCity(), osm.getIsIn()); Assert.assertTrue("zip should be filled",osm.getIsInZip().contains(house.getZipCode())); super.saveOsm(osm); } }; importer.processNodeHouseNumber(house); } @Test public void processNodeHouseNumber_populateOsmFields_cityconfident(){ Long openstreetmapId =247464344L; final NodeHouseNumber house = new NodeHouseNumber(openstreetmapId+"",(Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000044BC1A457B304DC018737C597F4B41C0"),"405","Museo Ferroviario","Avenida Del Libertador","city","zip","suburb",null) ; house.setHouseNumber("12345"); house.setName("name"); house.setStreetName("streetName"); final Point point = GeolocHelper.createPoint(2F, 1F); house.setLocation(point); house.setCity("city"); house.setSuburb("suburb"); house.setZipCode("zipCode"); HouseNumber houseNumber = new HouseNumber(); houseNumber.setNumber(house.getHouseNumber()); houseNumber.setName(house.getName()); houseNumber.setType(HouseNumberType.NODE); Point location = house.getLocation(); houseNumber.setLocation(location); houseNumber.setOpenstreetmapId(openstreetmapId); final OpenStreetMap osm = new OpenStreetMap(); osm.setIsIn("isIn"); osm.setCityConfident(true); OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(){ @Override protected OpenStreetMap findNearestStreet(String streetName, Point location) { return osm; } @Override protected void saveOsm(OpenStreetMap osm) { Assert.assertEquals("isIn should not be filled if it is city confident","isIn", osm.getIsIn()); super.saveOsm(osm); } }; importer.processNodeHouseNumber(house); } @Test public void processNodeHouseNumber(){ Long openstreetmapId =247464344L; NodeHouseNumber house = new NodeHouseNumber(openstreetmapId+"",(Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000044BC1A457B304DC018737C597F4B41C0"),"405","Museo Ferroviario","Avenida Del Libertador","city","zip","suburb",null) ; house.setHouseNumber("12345"); house.setName("name"); house.setStreetName("streetName"); final Point point = GeolocHelper.createPoint(2F, 1F); house.setLocation(point); HouseNumber houseNumber = new HouseNumber(); houseNumber.setNumber(house.getHouseNumber()); houseNumber.setName(house.getName()); houseNumber.setType(HouseNumberType.NODE); Point location = house.getLocation(); houseNumber.setLocation(location); houseNumber.setOpenstreetmapId(openstreetmapId); final OpenStreetMap osm = EasyMock.createMock(OpenStreetMap.class); EasyMock.expect(osm.getOpenstreetmapId()).andStubReturn(openstreetmapId); EasyMock.expect(osm.getIsInZip()).andStubReturn(null); EasyMock.expect(osm.isCityConfident()).andStubReturn(true); osm.setIsInPlace(house.getSuburb()); osm.addHouseNumber(houseNumber); EasyMock.replay(osm); final SolrResponseDto solrResponseDto = EasyMock.createNiceMock(SolrResponseDto.class); EasyMock.expect(solrResponseDto.getOpenstreetmap_id()).andStubReturn(openstreetmapId); EasyMock.replay(solrResponseDto); findNearestStreetCalled=false; OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(){ @Override protected OpenStreetMap findNearestStreet(String streetName, Point location) { if ("streetName".equals(streetName) && location==point){ findNearestStreetCalled=true; return osm; } else { Assert.fail("find nearest street is not called with the correct parameters"); return null; } } };; IOpenStreetMapDao osmDaoMock = EasyMock.createMock(IOpenStreetMapDao.class); EasyMock.expect(osmDaoMock.getByOpenStreetMapId(openstreetmapId )).andStubReturn(osm); EasyMock.expect(osmDaoMock.save(osm)).andReturn(osm); EasyMock.replay(osmDaoMock); importer.setOpenStreetMapDao(osmDaoMock); HouseNumber actual = importer.processNodeHouseNumber(house); Assert.assertEquals(point, actual.getLocation()); Assert.assertEquals("name", actual.getName()); Assert.assertEquals("12345", actual.getNumber()); Assert.assertEquals(247464344L, actual.getOpenstreetmapId().longValue()); Assert.assertEquals(HouseNumberType.NODE, actual.getType()); EasyMock.verify(osmDaoMock); EasyMock.verify(solrResponseDto); EasyMock.verify(osm); Assert.assertTrue(findNearestStreetCalled); } @Test public void processInterpolationHouseNumber(){ InterpolationHouseNumber interpolationHouseNumber = new InterpolationHouseNumber(); InterpolationMember m0 = new InterpolationMember("1796478450", 0, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E61000009A023EE4525350C0959C137B682F38C0"),null,null); InterpolationMember m1 = new InterpolationMember("1366275082", 1, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000068661CD94B5350C0B055270C6F2F38C0"),null,"foo"); InterpolationMember m2 = new InterpolationMember("1796453793", 2, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000038691A144D5350C023ADE75A6A2F38C0"),"600","ba_r"); InterpolationMember m3 = new InterpolationMember("1796453794", 3, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000F38F6390605350C028A6666A6D2F38C0"),"607",null); interpolationHouseNumber.addMember(m0); interpolationHouseNumber.addMember(m1); interpolationHouseNumber.addMember(m2); interpolationHouseNumber.addMember(m3); interpolationHouseNumber.setInterpolationType(InterpolationType.even); interpolationHouseNumber.setStreetName("california street"); OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); List<HouseNumber> houseNumbers = importer.processInterpolationHouseNumber(interpolationHouseNumber); Assert.assertEquals(5, houseNumbers.size());//600,602,604,606,608 //check the first point Assert.assertEquals("600", houseNumbers.get(0).getNumber()); Assert.assertEquals(1796453793L, houseNumbers.get(0).getOpenstreetmapId().longValue()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(0).getType()); //check intermediary point Assert.assertEquals("602", houseNumbers.get(1).getNumber()); Assert.assertEquals(null, houseNumbers.get(1).getOpenstreetmapId()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(1).getType()); //check the last point Assert.assertEquals("the number should be round to the even value","608", houseNumbers.get(4).getNumber()); Assert.assertEquals(1796453794L, houseNumbers.get(4).getOpenstreetmapId().longValue()); Assert.assertEquals(null, houseNumbers.get(0).getName()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(0).getType()); } @Test public void processInterpolationHouseNumber_multipleInterpolation(){ InterpolationHouseNumber interpolationHouseNumber = new InterpolationHouseNumber(); InterpolationMember m0 = new InterpolationMember("1796478450", 0, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E61000009A023EE4525350C0959C137B682F38C0"),null,null); InterpolationMember m1 = new InterpolationMember("1366275082", 1, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000068661CD94B5350C0B055270C6F2F38C0"),null,"foo"); InterpolationMember m2 = new InterpolationMember("1796453793", 2, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000038691A144D5350C023ADE75A6A2F38C0"),"600","ba_r"); InterpolationMember m3 = new InterpolationMember("1796453794", 3, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000F38F6390605350C028A6666A6D2F38C0"),"607",null); InterpolationMember m4 = new InterpolationMember("1796453795", 4, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000B85B9203765350C03A0664AF772F38C0"),"611",null); interpolationHouseNumber.addMember(m0); interpolationHouseNumber.addMember(m1); interpolationHouseNumber.addMember(m2); interpolationHouseNumber.addMember(m3); interpolationHouseNumber.addMember(m4); interpolationHouseNumber.setInterpolationType(InterpolationType.even); interpolationHouseNumber.setStreetName("california street"); OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); List<HouseNumber> houseNumbers = importer.processInterpolationHouseNumber(interpolationHouseNumber); Assert.assertEquals(7, houseNumbers.size());//600,602,604,606,608,610,612 //check the first point Assert.assertEquals("600", houseNumbers.get(0).getNumber()); Assert.assertEquals(1796453793L, houseNumbers.get(0).getOpenstreetmapId().longValue()); Assert.assertEquals(null, houseNumbers.get(0).getName()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(0).getType()); //check intermediary point Assert.assertEquals("602", houseNumbers.get(1).getNumber()); Assert.assertEquals(null, houseNumbers.get(1).getOpenstreetmapId()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(1).getType()); //check the last point of the first interpolation Assert.assertEquals("the number should be round to the even value","608", houseNumbers.get(4).getNumber()); Assert.assertEquals(1796453794L, houseNumbers.get(4).getOpenstreetmapId().longValue()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(4).getType()); //check the interpolate point of the 2nd interpolation Assert.assertEquals("the number is not corrst","610", houseNumbers.get(5).getNumber()); Assert.assertEquals(null, houseNumbers.get(5).getOpenstreetmapId()); Assert.assertEquals(null, houseNumbers.get(5).getName()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(5).getType()); //check the last point of the 2nd interpolation Assert.assertEquals("the number should be round to the even value","612", houseNumbers.get(6).getNumber()); Assert.assertEquals(1796453795L, houseNumbers.get(6).getOpenstreetmapId().longValue()); Assert.assertEquals(null, houseNumbers.get(6).getName()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(6).getType()); } @Test public void processInterpolationHouseNumber_multipleInterpolation_no_even_correction(){ InterpolationHouseNumber interpolationHouseNumber = new InterpolationHouseNumber(); InterpolationMember m0 = new InterpolationMember("1796478450", 0, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E61000009A023EE4525350C0959C137B682F38C0"),null,null); InterpolationMember m1 = new InterpolationMember("1366275082", 1, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000068661CD94B5350C0B055270C6F2F38C0"),null,"foo"); InterpolationMember m2 = new InterpolationMember("1796453793", 2, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E610000038691A144D5350C023ADE75A6A2F38C0"),"600","ba_r"); InterpolationMember m3 = new InterpolationMember("1796453794", 3, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000F38F6390605350C028A6666A6D2F38C0"),"608",null); InterpolationMember m4 = new InterpolationMember("1796453795", 4, (Point)GeolocHelper.convertFromHEXEWKBToGeometry("0101000020E6100000B85B9203765350C03A0664AF772F38C0"),"612",null); interpolationHouseNumber.addMember(m0); interpolationHouseNumber.addMember(m1); interpolationHouseNumber.addMember(m2); interpolationHouseNumber.addMember(m3); interpolationHouseNumber.addMember(m4); interpolationHouseNumber.setInterpolationType(InterpolationType.even); interpolationHouseNumber.setStreetName("california street"); OpenStreetMapHouseNumberSimpleImporter importer = new OpenStreetMapHouseNumberSimpleImporter(); List<HouseNumber> houseNumbers = importer.processInterpolationHouseNumber(interpolationHouseNumber); Assert.assertEquals(7, houseNumbers.size());//600,602,604,606,608,610,612 //check the first point Assert.assertEquals("600", houseNumbers.get(0).getNumber()); Assert.assertEquals(1796453793L, houseNumbers.get(0).getOpenstreetmapId().longValue()); Assert.assertEquals(null, houseNumbers.get(0).getName()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(0).getType()); //check intermediary point Assert.assertEquals("602", houseNumbers.get(1).getNumber()); Assert.assertEquals(null, houseNumbers.get(1).getOpenstreetmapId()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(1).getType()); //check the last point of the first interpolation Assert.assertEquals("the number should be round to the even value","608", houseNumbers.get(4).getNumber()); Assert.assertEquals(1796453794L, houseNumbers.get(4).getOpenstreetmapId().longValue()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(4).getType()); //check the interpolate point of the 2nd interpolation Assert.assertEquals("the number is not corrst","610", houseNumbers.get(5).getNumber()); Assert.assertEquals(null, houseNumbers.get(5).getOpenstreetmapId()); Assert.assertEquals(null, houseNumbers.get(5).getName()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(5).getType()); //check the last point of the 2nd interpolation Assert.assertEquals("the number should be round to the even value","612", houseNumbers.get(6).getNumber()); Assert.assertEquals(1796453795L, houseNumbers.get(6).getOpenstreetmapId().longValue()); Assert.assertEquals(null, houseNumbers.get(6).getName()); Assert.assertEquals(HouseNumberType.INTERPOLATION, houseNumbers.get(6).getType()); } }