Source code for tests.test_filehandler_kcd

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
test_filehandler_kcd
----------------------------------

Tests for `filehandler_kcd` module.
"""

import contextlib
import copy
import os
import sys
import unittest

assert sys.version_info >= (3, 3, 0), "Python version 3.3 or later required!"

from can4python import canframe_definition
from can4python import configuration
from can4python import exceptions
from can4python import filehandler_kcd

try:
    from .test_configuration import FRAME_ID_SEND, TESTCONFIG1
except SystemError:  # When running this file directly
    from test_configuration import FRAME_ID_SEND, TESTCONFIG1

INPUT_FILENAME = "testfile_input.kcd"
INPUT_FILENAME_NO_BUSDEFINITION = "testfile_input_no_busdefinition.kcd"

[docs]class TestConfiguration(unittest.TestCase): OUTPUT_FILENAME_1 = "test_out_1_TEMPORARY.kcd" OUTPUT_FILENAME_2 = "test_out_2_TEMPORARY.kcd" OUTPUT_FILENAME_3 = "test_out_3_TEMPORARY.kcd" OUTPUT_FILENAME_10 = "test_out_10_TEMPORARY.kcd"
[docs] def setUp(self): self.config = copy.deepcopy(TESTCONFIG1) parent_directory = os.path.dirname(__file__) self.input_filename = os.path.join(parent_directory, INPUT_FILENAME) self.input_filename_no_busdefinition = os.path.join(parent_directory, INPUT_FILENAME_NO_BUSDEFINITION)
[docs] def tearDown(self): for filename in [self.OUTPUT_FILENAME_1, self.OUTPUT_FILENAME_2, self.OUTPUT_FILENAME_3, self.OUTPUT_FILENAME_10]: with contextlib.suppress(FileNotFoundError): os.remove(filename)
[docs] def testReadKcdFile(self): config = filehandler_kcd.FilehandlerKcd.read(self.input_filename, "Mainbus") self.assertEqual(config.busname, "Mainbus") self.assertEqual(config.framedefinitions[1].frame_id, 1) self.assertEqual(config.framedefinitions[1].name, 'testframedef1') self.assertEqual(config.framedefinitions[1].dlc, 8) self.assertEqual(config.framedefinitions[1].frame_format, 'standard') self.assertEqual(config.framedefinitions[1].cycletime, None) self.assertEqual(len(config.framedefinitions[1].signaldefinitions), 4) self.assertEqual(config.framedefinitions[1].signaldefinitions[0].signalname, 'testsignal11') self.assertEqual(config.framedefinitions[1].signaldefinitions[0].startbit, 56) self.assertEqual(config.framedefinitions[1].signaldefinitions[0].numberofbits, 1) self.assertEqual(config.framedefinitions[1].signaldefinitions[0].scalingfactor, 1) self.assertEqual(config.framedefinitions[1].signaldefinitions[0].valueoffset, 0) self.assertEqual(config.framedefinitions[1].signaldefinitions[0].endianness, 'little') self.assertEqual(config.framedefinitions[1].signaldefinitions[0].signaltype, 'unsigned') self.assertEqual(config.framedefinitions[1].signaldefinitions[0].minvalue, None) self.assertEqual(config.framedefinitions[1].signaldefinitions[0].maxvalue, None) self.assertEqual(config.framedefinitions[1].signaldefinitions[0].defaultvalue, 0) self.assertEqual(config.framedefinitions[1].signaldefinitions[0].unit, "") self.assertEqual(config.framedefinitions[1].signaldefinitions[0].comment, "") self.assertEqual(config.framedefinitions[1].signaldefinitions[1].signalname, 'testsignal12') self.assertEqual(config.framedefinitions[1].signaldefinitions[1].startbit, 8) self.assertEqual(config.framedefinitions[1].signaldefinitions[1].numberofbits, 16) self.assertEqual(config.framedefinitions[1].signaldefinitions[1].scalingfactor, 1) self.assertEqual(config.framedefinitions[1].signaldefinitions[1].valueoffset, 0) self.assertEqual(config.framedefinitions[1].signaldefinitions[1].endianness, 'little') self.assertEqual(config.framedefinitions[1].signaldefinitions[1].signaltype, 'unsigned') self.assertEqual(config.framedefinitions[1].signaldefinitions[1].minvalue, 0) self.assertEqual(config.framedefinitions[1].signaldefinitions[1].maxvalue, 100) self.assertEqual(config.framedefinitions[1].signaldefinitions[1].defaultvalue, 0) self.assertEqual(config.framedefinitions[1].signaldefinitions[1].unit, 'm/s') self.assertEqual(config.framedefinitions[1].signaldefinitions[1].comment, "Test signal number 2") self.assertEqual(config.framedefinitions[1].signaldefinitions[2].signalname, 'testsignal13') self.assertEqual(config.framedefinitions[1].signaldefinitions[2].startbit, 24) self.assertEqual(config.framedefinitions[1].signaldefinitions[2].numberofbits, 16) self.assertEqual(config.framedefinitions[1].signaldefinitions[2].scalingfactor, 1) self.assertEqual(config.framedefinitions[1].signaldefinitions[2].valueoffset, 0) self.assertEqual(config.framedefinitions[1].signaldefinitions[2].endianness, 'little') self.assertEqual(config.framedefinitions[1].signaldefinitions[2].signaltype, 'unsigned') self.assertEqual(config.framedefinitions[1].signaldefinitions[2].minvalue, None) self.assertEqual(config.framedefinitions[1].signaldefinitions[2].maxvalue, None) self.assertEqual(config.framedefinitions[1].signaldefinitions[2].defaultvalue, 0) self.assertEqual(config.framedefinitions[1].signaldefinitions[2].unit, '') self.assertEqual(config.framedefinitions[1].signaldefinitions[2].comment, "") self.assertEqual(config.framedefinitions[1].signaldefinitions[3].signalname, 'testsignal14') self.assertEqual(config.framedefinitions[1].signaldefinitions[3].startbit, 40) self.assertEqual(config.framedefinitions[1].signaldefinitions[3].numberofbits, 2) self.assertEqual(config.framedefinitions[1].signaldefinitions[3].scalingfactor, 2) self.assertEqual(config.framedefinitions[1].signaldefinitions[3].valueoffset, 20) self.assertEqual(config.framedefinitions[1].signaldefinitions[3].endianness, 'big') self.assertEqual(config.framedefinitions[1].signaldefinitions[3].signaltype, 'unsigned') self.assertEqual(config.framedefinitions[1].signaldefinitions[3].minvalue, 21) self.assertEqual(config.framedefinitions[1].signaldefinitions[3].maxvalue, 25) self.assertEqual(config.framedefinitions[1].signaldefinitions[3].defaultvalue, 20) self.assertEqual(config.framedefinitions[1].signaldefinitions[3].unit, 'm/s') self.assertEqual(config.framedefinitions[1].signaldefinitions[3].comment, "Test signal number 4") fr_def = config.framedefinitions[0x12345678] self.assertEqual(fr_def.frame_id, 0x12345678) self.assertEqual(fr_def.name, 'testframedef2') self.assertEqual(fr_def.dlc, 4) self.assertEqual(fr_def.frame_format, 'extended') self.assertEqual(fr_def.cycletime, 50) self.assertEqual(len(fr_def.signaldefinitions), 1) self.assertEqual(fr_def.signaldefinitions[0].signalname, 'testsignal21') self.assertEqual(fr_def.signaldefinitions[0].startbit, 5) self.assertEqual(fr_def.signaldefinitions[0].numberofbits, 1) self.assertEqual(fr_def.signaldefinitions[0].scalingfactor, 1) self.assertEqual(fr_def.signaldefinitions[0].valueoffset, 0) self.assertEqual(fr_def.signaldefinitions[0].endianness, 'little') self.assertEqual(fr_def.signaldefinitions[0].signaltype, 'unsigned') self.assertEqual(fr_def.signaldefinitions[0].minvalue, None) self.assertEqual(fr_def.signaldefinitions[0].maxvalue, None) self.assertEqual(fr_def.signaldefinitions[0].defaultvalue, 0) self.assertEqual(fr_def.signaldefinitions[0].unit, "") self.assertEqual(fr_def.signaldefinitions[0].comment, "")
[docs] def testReadKcdFileFaulty(self): self.assertRaises(exceptions.CanException, filehandler_kcd.FilehandlerKcd.read, self.input_filename_no_busdefinition, None)
[docs] def testReadKcdFileWrongBusname(self): self.assertRaises(exceptions.CanException, filehandler_kcd.FilehandlerKcd.read, self.input_filename, "ABC")
[docs] def testReadKcdFileNoBusnameGiven(self): config = filehandler_kcd.FilehandlerKcd.read(self.input_filename, None) self.assertEqual(config.busname, "Mainbus")
[docs] def testWriteKcdFile(self): with contextlib.suppress(FileNotFoundError): os.remove(self.OUTPUT_FILENAME_1) filehandler_kcd.FilehandlerKcd.write(self.config, self.OUTPUT_FILENAME_1) self.assertTrue(os.path.exists(self.OUTPUT_FILENAME_1))
# TODO: Verify result in more detail
[docs] def testSaveLoadedConfigurationToFile(self): with contextlib.suppress(FileNotFoundError): os.remove(self.OUTPUT_FILENAME_2) config = filehandler_kcd.FilehandlerKcd.read(self.input_filename, None) self.assertEqual(config.busname, "Mainbus") filehandler_kcd.FilehandlerKcd.write(config, self.OUTPUT_FILENAME_2) self.assertTrue(os.path.exists(self.OUTPUT_FILENAME_2))
# TODO: Check manually that the input and output files are similar
[docs] def testWriteKcdFileNoBusnameGiven(self): with contextlib.suppress(FileNotFoundError): os.remove(self.OUTPUT_FILENAME_3) config = configuration.Configuration() self.assertEqual(config.busname, None) filehandler_kcd.FilehandlerKcd.write(config, self.OUTPUT_FILENAME_3) with open(self.OUTPUT_FILENAME_3, 'r') as file: self.assertTrue(any("Mainbus" in line for line in file.readlines()))
[docs] def testWriteKcdFileNoProducerGiven(self): with contextlib.suppress(FileNotFoundError): os.remove(self.OUTPUT_FILENAME_10) config = configuration.Configuration() fr_def = canframe_definition.CanFrameDefinition(1, 'testframedef10') config.add_framedefinition(fr_def) filehandler_kcd.FilehandlerKcd.write(config, self.OUTPUT_FILENAME_10)
if __name__ == '__main__': unittest.main()