package com.stylefeng.guns.modular.crossCity.server.impl; import org.junit.Test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class SiteServiceImplTest { private static final String SQUARE = "0,0;10,0;10,10;0,10"; @Test public void shouldRecognizePointInsidePolygon() { assertTrue(SiteServiceImpl.isPointInElectronicFence("5,5", SQUARE)); } @Test public void shouldRecognizePointOutsidePolygon() { assertFalse(SiteServiceImpl.isPointInElectronicFence("11,5", SQUARE)); } @Test public void shouldIncludePointOnEdgeAndVertex() { assertTrue(SiteServiceImpl.isPointInElectronicFence("10,5", SQUARE)); assertTrue(SiteServiceImpl.isPointInElectronicFence("0,0", SQUARE)); } @Test public void shouldRecognizeConcavePolygon() { String concavePolygon = "0,0;10,0;10,10;5,5;0,10"; assertTrue(SiteServiceImpl.isPointInElectronicFence("5,4", concavePolygon)); assertFalse(SiteServiceImpl.isPointInElectronicFence("5,8", concavePolygon)); } @Test public void shouldRecognizeAnyOfMultiplePolygons() { String multiplePolygons = SQUARE + "_20,20;30,20;30,30;20,30"; assertTrue(SiteServiceImpl.isPointInElectronicFence("25,25", multiplePolygons)); assertFalse(SiteServiceImpl.isPointInElectronicFence("15,15", multiplePolygons)); } @Test public void shouldHandleWhitespaceAndInvalidCoordinates() { assertTrue(SiteServiceImpl.isPointInElectronicFence(" 5 , 5 ", " 0,0 ; 10,0 ; 10,10 ; 0,10 ")); assertFalse(SiteServiceImpl.isPointInElectronicFence("invalid", SQUARE)); assertFalse(SiteServiceImpl.isPointInElectronicFence("5,5", "0,0;10,0")); assertFalse(SiteServiceImpl.isPointInElectronicFence("5,5", "0,0;invalid;10,10")); assertFalse(SiteServiceImpl.isPointInElectronicFence(null, SQUARE)); assertFalse(SiteServiceImpl.isPointInElectronicFence("5,5", null)); } }