1# -*- coding: utf-8 -*- 2 3import ephem, unittest 4 5tle_lines = ( 6 'ISS (ZARYA) ', 7 '1 25544U 98067A 09119.77864163 .00009789 00000-0 76089-4 0 7650', 8 '2 25544 51.6397 195.1243 0008906 304.8273 151.9344 15.72498628598335', 9 ) 10 11if not hasattr(unittest.TestCase, 'assertRaisesRegex'): 12 setattr(unittest.TestCase, 'assertRaisesRegex', 13 unittest.TestCase.assertRaisesRegexp) 14 15class SatelliteTests(unittest.TestCase): 16 def setUp(self): 17 self.iss = ephem.readtle(*tle_lines) 18 self.atlanta = ephem.city('Atlanta') 19 20 def test_TLE_checksum(self): 21 lines = list(tle_lines) 22 lines[1] = lines[1][:-1] + '1' 23 expected = 'incorrect TLE checksum at end of line' 24 self.assertRaisesRegex(ValueError, expected, ephem.readtle, *lines) 25 26 def test_normal_methods(self): 27 for which in ['previous', 'next']: 28 for event in ['transit', 'antitransit', 'rising', 'setting']: 29 method_name = which + '_' + event 30 method = getattr(self.atlanta, method_name) 31 self.assertRaises(TypeError, method, self.iss) 32 33 def test_attribute_values_and_roundtrips(self): 34 def check(): 35 self.assertEqual(self.iss.epoch, 39931.27864163) 36 self.assertEqual(self.iss.n, 15.72498628) 37 self.assertEqual(self.iss.inc, 51.63970184326172) 38 self.assertEqual(self.iss.raan, 195.12429809570312) 39 self.assertEqual(self.iss.e, 0.0008905999711714685) 40 self.assertEqual(self.iss.ap, 304.8273010253906) 41 self.assertEqual(self.iss.M, 151.9344024658203) 42 self.assertEqual(self.iss.decay, 9.788999886950478e-05) 43 self.assertEqual(self.iss.drag, 7.60890034143813e-05) 44 self.assertEqual(self.iss.orbit, 59833) 45 46 check() 47 48 self.iss.epoch = self.iss.epoch 49 self.iss.n = self.iss.n 50 self.iss.inc = self.iss.inc 51 self.iss.raan = self.iss.raan 52 self.iss.e = self.iss.e 53 self.iss.ap = self.iss.ap 54 self.iss.M = self.iss.M 55 self.iss.decay = self.iss.decay 56 self.iss.drag = self.iss.drag 57 self.iss.orbit = self.iss.orbit 58 59 check() 60 61 def test_next_pass(self): 62 iss = self.iss 63 self.atlanta.date = '2009/4/30' 64 rt, raz, tt, talt, st, saz = self.atlanta.next_pass(iss) 65 66 # Calsky says (using EST, and probably a different horizon): 67 # Rise(invis.) 1h02m17s --.-mag az:192.0° SSW 68 # Culmination 1h06m39s --.-mag az:128.2° SE h:16.0° 69 # Set (invis.) 1h11m04s --.-m az: 64.9° ENE 70 71 self.assertAlmostEqual(ephem.Date('2009/4/30 5:02:17'), rt, 3) 72 self.assertAlmostEqual(ephem.Date('2009/4/30 5:06:39'), tt, 3) 73 self.assertAlmostEqual(ephem.Date('2009/4/30 5:11:04'), st, 3) 74 75 self.assertAlmostEqual(ephem.degrees('192.0'), raz, 1) 76 self.assertAlmostEqual(ephem.degrees('16.0'), talt, 1) 77 self.assertAlmostEqual(ephem.degrees('64.9'), saz, 1) 78 79 def test_next_pass_consecutive(self): 80 # Issue #63 81 iss = self.iss 82 # At this time, the ISS is already above the horizon 83 self.atlanta.date = '2009/4/29 15:51:00' 84 rt, raz, tt, talt, st, saz = self.atlanta.next_pass(iss) 85 86 self.assertAlmostEqual(ephem.Date('2009/4/30 5:02:17'), rt, 3) 87 self.assertAlmostEqual(ephem.Date('2009/4/30 5:06:39'), tt, 3) 88 self.assertAlmostEqual(ephem.Date('2009/4/30 5:11:04'), st, 3) 89 90 self.assertAlmostEqual(ephem.degrees('192.0'), raz, 1) 91 self.assertAlmostEqual(ephem.degrees('16.0'), talt, 1) 92 self.assertAlmostEqual(ephem.degrees('64.9'), saz, 1) 93 94 def test_next_pass_notsinglepass(self): 95 # Issue #63 96 iss = self.iss 97 # At this time, the ISS is already above the horizon 98 self.atlanta.date = '2009/4/29 15:51:00' 99 rt, raz, tt, talt, st, saz = self.atlanta.next_pass(iss, singlepass=False) 100 101 self.assertAlmostEqual(ephem.Date('2009/4/30 5:02:17'), rt, 3) 102 self.assertAlmostEqual(ephem.Date('2009/4/29 15:51:35'), tt, 3) 103 self.assertAlmostEqual(ephem.Date('2009/4/29 15:54:01'), st, 3) 104 105 self.assertAlmostEqual(ephem.degrees('192.0'), raz, 1) 106 self.assertAlmostEqual(ephem.degrees('2.1'), talt, 1) 107 self.assertAlmostEqual(ephem.degrees('209.0'), saz, 1) 108 109 def test_more_than_one_year_before_TLE(self): 110 self.assertRaises(ValueError, self.iss.compute, '2008/4/28') 111 112 def test_more_than_one_year_after_TLE(self): 113 self.assertRaises(ValueError, self.iss.compute, '2010/4/30 20:00') 114