view python/testhexfile.py @ 244:58155c7c4a8e

Add hexutil
author Windel Bouwman
date Wed, 24 Jul 2013 19:47:13 +0200
parents d3dccf12ca88
children 66912720d712
line wrap: on
line source

import unittest
import io
from hexfile import HexFile, HexFileException


class testHexFile(unittest.TestCase):
    def saveload(self, hf):
        f = io.StringIO()
        hf.save(f)
        hf2 = HexFile()
        hf2.load(io.StringIO(f.getvalue()))
        self.assertEqual(hf, hf2)
        
    def testSave(self):
        hf = HexFile()
        hf.addRegion(0x8000, bytes.fromhex('aabbcc'))
        self.saveload(hf)

    def testEqual(self):
        hf1 = HexFile()
        hf2 = HexFile()
        hf1.addRegion(10, bytes.fromhex('aabbcc'))
        hf2.addRegion(10, bytes.fromhex('aabbcc'))
        self.assertEqual(hf1, hf2)

    def testNotEqual(self):
        hf1 = HexFile()
        hf2 = HexFile()
        hf1.addRegion(10, bytes.fromhex('aabbcc'))
        hf2.addRegion(10, bytes.fromhex('aabbdc'))
        self.assertNotEqual(hf1, hf2)
        
    def testNotEqual2(self):
        hf1 = HexFile()
        hf2 = HexFile()
        hf1.addRegion(10, bytes.fromhex('aabbcc'))
        hf2.addRegion(10, bytes.fromhex('aabbcc'))
        hf2.addRegion(22, bytes.fromhex('aabbcc'))
        self.assertNotEqual(hf1, hf2)

    def testLoad(self):
        hf = HexFile()
        dummyhex = """
        :01400000aa15
        """
        f = io.StringIO(dummyhex)
        hf.load(f)
        self.assertEqual(1, len(hf.regions))
        self.assertEqual(0x4000, hf.regions[0].address)
        self.assertSequenceEqual(bytes.fromhex('aa'), hf.regions[0].data)

    def testIncorrectCrc(self):
        hf = HexFile()
        txt = ":01400000aabb"
        f = io.StringIO(txt)
        with self.assertRaisesRegex(HexFileException, 'crc'):
            hf.load(f)

    def testIncorrectLength(self):
        hf = HexFile()
        txt = ":0140002200aabb"
        f = io.StringIO(txt)
        with self.assertRaisesRegex(HexFileException, 'count'):
            hf.load(f)

if __name__ == '__main__':
    unittest.main()