File: test_inheritance.py

package info (click to toggle)
python-openflow 2021.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,224 kB
  • sloc: python: 6,906; sh: 4; makefile: 4
file content (70 lines) | stat: -rw-r--r-- 2,600 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
"""Testing class inheritance attributes changes."""
import unittest

from pyof.foundation.base import GenericStruct
from pyof.foundation.basic_types import UBInt8, UBInt16, UBInt32, UBInt64


class TestInheritance(unittest.TestCase):
    """Testing GenericStruct class inheritance."""

    def setUp(self):
        """Basic Test Setup."""
        class MyClassA(GenericStruct):
            """Example class."""

            a1 = UBInt8(1)
            a2 = UBInt16(2)
            a3 = UBInt8(3)
            a4 = UBInt16(4)
            a5 = UBInt32(5)

        class MyClassB(MyClassA):
            """Example class."""

            a0 = UBInt32(0)
            a2 = UBInt64(2)
            b6 = UBInt8(6)

            _removed_attributes = ['a3']
            # _rename_attributes = [('a4', 'b4')]
            # _insert_attributes_before = {'a0': 'a1'}

        self.MyClassA = MyClassA
        self.MyClassB = MyClassB
        self.a_expected_names = ['a1', 'a2', 'a3', 'a4', 'a5']
        self.b_expected_names = ['a1', 'a2', 'a4', 'a5', 'a0', 'b6']
        # self.b_expected_names = ['a0', 'a1', 'a2', 'b4', 'a5', 'b6']

    def test_modifications(self):
        """[Foundation/Base/GenericStruct] - Attributes Modifications."""
        m1 = self.MyClassA()
        m2 = self.MyClassB()
        # Checking keys (attributes names) and its ordering
        self.assertEqual([attr[0] for attr in m1.get_class_attributes()],
                         self.a_expected_names)
        self.assertEqual([attr[0] for attr in m2.get_class_attributes()],
                         self.b_expected_names)

        # Check if there is no shared attribute between instances
        self.assertIsNot(m1, m2)
        self.assertIsNot(m1.a1, m2.a1)
        self.assertIsNot(m1.a2, m2.a2)
        self.assertIsNot(m1.a3, m2.a4)
        self.assertIsNot(m1.a4, m2.a4)
        self.assertIsNot(m1.a5, m2.a5)

        # Check attributes types on MyClassA
        self.assertIsInstance(self.MyClassA.a1, UBInt8)
        self.assertIsInstance(self.MyClassA.a2, UBInt16)
        self.assertIsInstance(self.MyClassA.a3, UBInt8)
        self.assertIsInstance(self.MyClassA.a4, UBInt16)
        self.assertIsInstance(self.MyClassA.a5, UBInt32)

        # Check attributes types on MyClassA
        self.assertIsInstance(self.MyClassB.a1, UBInt8)
        self.assertIsInstance(self.MyClassB.a2, UBInt64)
        self.assertIsInstance(self.MyClassB.a4, UBInt16)
        self.assertIsInstance(self.MyClassB.a5, UBInt32)
        self.assertIsInstance(self.MyClassB.a0, UBInt32)
        self.assertIsInstance(self.MyClassB.b6, UBInt8)