def test_missingRequiredDateTimes(self): """ A warning should be raised if a blockette misses a required date. """ # blockette 10 - missing start time b010 = "0100034 2.408~2038,001~2009,001~~~" # strict raises an exception blockette = Blockette010(strict=True) self.assertRaises(SEEDParserException, blockette.parseSEED, b010) # If strict is false, a warning is raised. This is tested in # test_bug165. with warnings.catch_warnings(record=True): warnings.simplefilter("ignore", UserWarning) blockette = Blockette010() blockette.parseSEED(b010) self.assertEquals(b010, blockette.getSEED()) # blockette 10 - missing volume time b010 = "0100034 2.4082008,001~2038,001~~~~" # strict raises an exception blockette = Blockette010(strict=True) self.assertRaises(SEEDParserException, blockette.parseSEED, b010) # non-strict blockette = Blockette010() # The warning cannot be tested due to being issued only once. # A similar case is tested in test_bug165. blockette.parseSEED(b010) self.assertEquals(b010, blockette.getSEED())
def test_compareBlockettes(self): """ Tests the comparison of two blockettes. """ p = Parser() b010_1 = b"0100042 2.4082008,001~2038,001~2009,001~~~" blockette1 = Blockette010(strict=True, compact=True, xseed_version='1.0') blockette1.parseSEED(b010_1) blockette2 = Blockette010() blockette2.parseSEED(b010_1) b010_3 = b"0100042 2.4082009,001~2038,001~2009,001~~~" blockette3 = Blockette010(strict=True, compact=True) blockette3.parseSEED(b010_3) blockette4 = Blockette010(xseed_version='1.0') blockette4.parseSEED(b010_3) self.assertTrue(p._compareBlockettes(blockette1, blockette2)) self.assertFalse(p._compareBlockettes(blockette1, blockette3)) self.assertFalse(p._compareBlockettes(blockette2, blockette3)) self.assertTrue(p._compareBlockettes(blockette3, blockette4))
def test_multipleContinuedStationControlHeader(self): """ """ # create a valid blockette 010 with record length 256 b010 = b"0100042 2.4082008,001~2038,001~2009,001~~~" blockette = Blockette010(strict=True, compact=True) blockette.parseSEED(b010) self.assertEqual(b010, blockette.getSEED()) # create a valid blockette 054 b054 = b"0540960A0400300300000039" nr = b"" for i in range(0, 78): # 960 chars nr = nr + ("+1.000%02dE-03" % i).encode('ascii', 'strict') blockette = Blockette054(strict=True, compact=True) blockette.parseSEED(b054 + nr) self.assertEqual(b054 + nr, blockette.getSEED()) # create a blockette 051 b051 = b'05100271999,123~~0001000000' blockette = Blockette051(strict=False) # ignore user warning with warnings.catch_warnings(record=True): warnings.simplefilter("ignore") blockette.parseSEED(b051) # combine data (each line equals 256 chars) data = b"000001V " + b010 + (b' ' * 206) data += b"000002S " + b054 + nr[0:224] # 256-8-24 = 224 data += b"000003S*" + nr[224:472] # 256-8 = 248 data += b"000004S*" + nr[472:720] data += b"000005S*" + nr[720:] + b051 + b' ' * 5 # 5 spaces left self.assertEqual(len(data), 256 * 5) data += b"000006S " + b054 + nr[0:224] # 256-8-24 = 224 data += b"000007S*" + nr[224:472] # 256-8 = 248 data += b"000008S*" + nr[472:720] data += b"000009S*" + nr[720:] + b' ' * 32 # 32 spaces left self.assertEqual(len(data), 256 * 9) # read records parser = Parser(strict=False) with warnings.catch_warnings(): warnings.simplefilter("ignore") parser.read(data) # check results self.assertEqual(sorted(parser.blockettes.keys()), [10, 51, 54]) self.assertEqual(len(parser.blockettes[10]), 1) self.assertEqual(len(parser.blockettes[51]), 1) self.assertEqual(len(parser.blockettes[54]), 2)
def test_blocketteStartsAfterRecord(self): """ '... 058003504 1.00000E+00 0.00000E+0000 000006S*0543864 ... ' ' 0543864' -> results in Blockette 005 """ # create a valid blockette 010 with record length 256 b010 = "0100042 2.4082008,001~2038,001~2009,001~~~" blockette = Blockette010(strict=True, compact=True) blockette.parseSEED(b010) self.assertEquals(b010, blockette.getSEED()) # create a valid blockette 054 b054 = "0540240A0400300300000009" + ("+1.58748E-03" * 18) blockette = Blockette054(strict=True, compact=True) blockette.parseSEED(b054) self.assertEquals(b054, blockette.getSEED()) # combine data data = "000001V " + b010 + (' ' * 206) data += "000002S " + b054 + (' ' * 8) data += "000003S*" + b054 + (' ' * 8) # read records parser = Parser(strict=True) parser.read(data)