aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/pyunit/dom/Expressions.py
blob: 8ef013ef770da14db76176b499f4bc71210fc7c1 (plain)
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
from pathlib  import Path
from textwrap import dedent
from unittest import TestCase

from pyGHDL.dom import Expression
from pyGHDL.dom.Misc       import Design, Document
from pyGHDL.dom.Symbol import SimpleObjectSymbol
from pyGHDL.dom.Object import Constant
from pyGHDL.dom.Expression import InverseExpression

if __name__ == "__main__":
    print("ERROR: you called a testcase declaration file as an executable module.")
    print("Use: 'python -m unitest <testcase module>'")
    exit(1)


class Expressions(TestCase):
    _root = Path(__file__).resolve().parent.parent

    def test_NotExpression(self):
        self._filename: Path = self._root / "{className}.vhdl".format(className=self.__class__.__name__)

        sourceCode = dedent("""\
            package package_1 is
              constant c0 : boolean := not true;
            end package;
            """)

        with self._filename.open(mode="w", encoding="utf-8") as file:
            file.write(sourceCode)

        design = Design()
        document = Document(self._filename)
        design.Documents.append(document)

        self.assertEqual(len(design.Documents[0].Packages), 1)
        package = design.Documents[0].Packages[0]
        self.assertTrue(package.Name == "package_1")
        self.assertEqual(len(package.DeclaredItems), 1)

        item: Constant = package.DeclaredItems[0]
        self.assertTrue(isinstance(item, Constant))
        self.assertTrue(item.Name == "c0")
        self.assertTrue(item.SubType.SymbolName == "boolean")

        default: Expression = item.DefaultExpression
        self.assertTrue(isinstance(default, InverseExpression))
        self.assertTrue(isinstance(default.Operand, SimpleObjectSymbol))
        self.assertTrue(default.Operand.SymbolName == "true")