def test_location(self): self.assertEqual(self.c.location, Point()) with self.subTest("automatic str conversion"): self.c.location = "S 36 51.918 E 174 46.725" self.assertEqual(self.c.location, Point.from_string("S 36 51.918 E 174 46.725")) with self.subTest("filter invalid"): with self.assertRaises(ValueError): self.c.location = "somewhere"
def test_search_rect(self): """Perform search by rect and check found caches.""" rect = Rectangle(Point(49.73, 13.38), Point(49.74, 13.39)) expected = {"GC1TYYG", "GC11PRW", "GC7JRR5", "GC161KR", "GC1GW54", "GC7KDWE", "GC93HA6", "GCZC5D"} orig_wait_for = TooManyRequestsError.wait_for with self.recorder.use_cassette("geocaching_search_rect") as vcr: with patch.object(TooManyRequestsError, "wait_for", autospec=True) as wait_for: wait_for.side_effect = orig_wait_for if vcr.current_cassette.is_recording() else None with self.subTest("default use"): caches = self.gc.search_rect(rect) waypoints = {cache.wp for cache in caches} self.assertSetEqual(waypoints, expected) with self.subTest("sort by distance"): with self.assertRaises(AssertionError): caches = list(self.gc.search_rect(rect, sort_by="distance")) origin = Point.from_string("N 49° 44.230 E 013° 22.858") caches = list(self.gc.search_rect(rect, sort_by=SortOrder.distance, origin=origin)) waypoints = {cache.wp for cache in caches} self.assertSetEqual(waypoints, expected) # Check if caches are sorted by distance to origin distances = [] for cache in caches: try: distances.append(great_circle(cache.location, origin).meters) except PMOnlyException: # can happend when getting accurate location continue self.assertEqual(distances, sorted(distances)) with self.subTest("sort by different criteria"): for sort_by in SortOrder: if sort_by is SortOrder.distance: continue caches = self.gc.search_rect(rect, sort_by=sort_by) waypoints = {cache.wp for cache in caches} self.assertSetEqual(waypoints, expected)
def test_search_rect(self): """Perform search by rect and check found caches.""" rect = Rectangle(Point(49.73, 13.38), Point(49.74, 13.39)) expected = {'GC1TYYG', 'GC11PRW', 'GC7JRR5', 'GC161KR', 'GC1GW54', 'GC7KDWE', 'GC8D303'} orig_wait_for = TooManyRequestsError.wait_for with self.recorder.use_cassette('geocaching_search_rect') as vcr: with patch.object(TooManyRequestsError, 'wait_for', autospec=True) as wait_for: wait_for.side_effect = orig_wait_for if vcr.current_cassette.is_recording() else None with self.subTest("default use"): caches = self.gc.search_rect(rect) waypoints = {cache.wp for cache in caches} self.assertSetEqual(waypoints, expected) with self.subTest("sort by distance"): with self.assertRaises(AssertionError): caches = list(self.gc.search_rect(rect, sort_by='distance')) origin = Point.from_string('N 49° 44.230 E 013° 22.858') caches = list(self.gc.search_rect(rect, sort_by=SortOrder.distance, origin=origin)) waypoints = [cache.wp for cache in caches] self.assertEqual(waypoints, [ 'GC11PRW', 'GC1TYYG', 'GC7JRR5', 'GC1GW54', 'GC161KR', 'GC7KDWE', 'GC8D303' ]) # Check if caches are sorted by distance to origin distances = [great_circle(cache.location, origin).meters for cache in caches] self.assertEqual(distances, sorted(distances)) with self.subTest("sort by different criteria"): for sort_by in SortOrder: if sort_by is SortOrder.distance: continue caches = self.gc.search_rect(rect, sort_by=sort_by) waypoints = {cache.wp for cache in caches} self.assertSetEqual(waypoints, expected)
def test_from_string(self): with self.subTest("normal"): self.assertEqual(Point.from_string("N 49 45.123 E 013 22.123"), Point(49.75205, 13.36872)) with self.subTest("south and west"): self.assertEqual(Point.from_string("S 49 45.123 W 013 22.123"), Point(-48.24795, -12.63128)) with self.subTest("letter together"): self.assertEqual(Point.from_string("N49 45.123 E013 22.123"), Point(49.75205, 13.36872)) with self.subTest("letter after"): self.assertEqual(Point.from_string("49N 45.123 013E 22.123"), Point(49.75205, 13.36872)) with self.subTest("south and west letter after"): self.assertEqual(Point.from_string("49S 45.123 013W 22.123"), Point(-48.24795, -12.63128)) with self.subTest("decimal separator: coma"): self.assertEqual(Point.from_string("N 49 45,123 E 013 22,123"), Point(49.75205, 13.36872)) with self.subTest("degree symbol"): self.assertEqual(Point.from_string("N 49° 45.123 E 013° 22.123"), Point(49.75205, 13.36872)) with self.subTest("coma between lat and lon"): self.assertEqual(Point.from_string("N 49 45.123, E 013 22.123"), Point(49.75205, 13.36872)) with self.subTest("marginal values: zeroes"): self.assertEqual(Point.from_string("N 49 45.000 E 13 0.0"), Point(49.75, 13.0)) with self.subTest("Include precision"): self.assertIn("precision", Point(49.75, 13.0).__dict__) with self.assertRaises(ValueError): Point.from_string("123")
def test_from_string(self): with self.subTest("normal"): self.assertEqual(Point.from_string("N 49 45.123 E 013 22.123"), Point(49.75205, 13.36872)) with self.subTest("south and west"): self.assertEqual(Point.from_string("S 49 45.123 W 013 22.123"), Point(-48.24795, -12.63128)) with self.subTest("letter together"): self.assertEqual(Point.from_string("N49 45.123 E013 22.123"), Point(49.75205, 13.36872)) with self.subTest("letter after"): self.assertEqual(Point.from_string("49N 45.123 013E 22.123"), Point(49.75205, 13.36872)) with self.subTest("south and west letter after"): self.assertEqual(Point.from_string("49S 45.123 013W 22.123"), Point(-48.24795, -12.63128)) with self.subTest("decimal separator: coma"): self.assertEqual(Point.from_string("N 49 45,123 E 013 22,123"), Point(49.75205, 13.36872)) with self.subTest("degree symbol"): self.assertEqual(Point.from_string("N 49° 45.123 E 013° 22.123"), Point(49.75205, 13.36872)) with self.subTest("coma between lat and lon"): self.assertEqual(Point.from_string("N 49 45.123, E 013 22.123"), Point(49.75205, 13.36872)) with self.subTest("marginal values: zeroes"): self.assertEqual(Point.from_string("N 49 45.000 E 13 0.0"), Point(49.75, 13.0)) with self.assertRaises(ValueError): Point.from_string("123")