Skip to content

Commit d122187

Browse files
committed
Fixed testcases after Symbol and Name changes.
1 parent a42ad96 commit d122187

File tree

2 files changed

+61
-66
lines changed

2 files changed

+61
-66
lines changed

pyVHDLModel/__init__.py

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ def LinkLibraryReferences(self) -> None:
761761
for libraryReference in designUnit._libraryReferences:
762762
# A library clause can have multiple comma-separated references
763763
for librarySymbol in libraryReference.Symbols:
764-
libraryIdentifier = librarySymbol.NormalizedIdentifier
764+
libraryIdentifier = librarySymbol.Name.NormalizedIdentifier
765765
try:
766766
library = self._libraries[libraryIdentifier]
767767
except KeyError:
@@ -813,30 +813,29 @@ def LinkPackageReferences(self) -> None:
813813

814814
for packageReference in designUnit.PackageReferences:
815815
# A use clause can have multiple comma-separated references
816-
for symbol in packageReference.Symbols:
817-
packageSymbol = symbol.Prefix
818-
librarySymbol = packageSymbol.Prefix
816+
for packageMemeberSymbol in packageReference.Symbols:
817+
packageName = packageMemeberSymbol.Name.Prefix
818+
libraryName = packageName.Prefix
819819

820-
libraryIdentifier = librarySymbol.NormalizedIdentifier
821-
packageIdentifier = packageSymbol.NormalizedIdentifier
820+
libraryIdentifier = libraryName.NormalizedIdentifier
821+
packageIdentifier = packageName.NormalizedIdentifier
822822

823823
# In case work is used, resolve to the real library name.
824824
if libraryIdentifier == "work":
825825
library: Library = designUnit.Library
826826
libraryIdentifier = library.NormalizedIdentifier
827827
elif libraryIdentifier not in designUnit._referencedLibraries:
828828
# TODO: This check doesn't trigger if it's the working library.
829-
raise VHDLModelException(f"Use clause references library '{librarySymbol.Identifier}', which was not referenced by a library clause.")
829+
raise VHDLModelException(f"Use clause references library '{libraryName.Identifier}', which was not referenced by a library clause.")
830830
else:
831831
library = self._libraries[libraryIdentifier]
832832

833833
try:
834834
package = library._packages[packageIdentifier]
835835
except KeyError:
836-
raise VHDLModelException(f"Package '{packageSymbol.Identifier}' not found in {'working ' if librarySymbol.NormalizedIdentifier == 'work' else ''}library '{library.Identifier}'.")
836+
raise VHDLModelException(f"Package '{packageName.Identifier}' not found in {'working ' if libraryName.NormalizedIdentifier == 'work' else ''}library '{library.Identifier}'.")
837837

838-
librarySymbol.Library = library
839-
packageSymbol.Package = package
838+
packageMemeberSymbol.Package = package
840839

841840
# TODO: warn duplicate package reference
842841
designUnit._referencedPackages[libraryIdentifier][packageIdentifier] = package
@@ -845,11 +844,11 @@ def LinkPackageReferences(self) -> None:
845844
dependency["kind"] = DependencyGraphEdgeKind.UseClause
846845

847846
# TODO: update the namespace with visible members
848-
if isinstance(symbol, AllPackageMembersReferenceSymbol):
847+
if isinstance(packageMemeberSymbol, AllPackageMembersReferenceSymbol):
849848
for componentIdentifier, component in package._components.items():
850849
designUnit._namespace._elements[componentIdentifier] = component
851850

852-
elif isinstance(symbol, PackageMembersReferenceSymbol):
851+
elif isinstance(packageMemeberSymbol, PackageMembersReferenceSymbol):
853852
raise NotImplementedError()
854853
else:
855854
raise VHDLModelException()
@@ -859,27 +858,26 @@ def LinkContextReferences(self) -> None:
859858
for contextReference in designUnit._contextReferences:
860859
# A context reference can have multiple comma-separated references
861860
for contextSymbol in contextReference.Symbols:
862-
librarySymbol = contextSymbol.Prefix
861+
libraryName = contextSymbol.Name.Prefix
863862

864-
libraryIdentifier = librarySymbol.NormalizedIdentifier
865-
contextIdentifier = contextSymbol.NormalizedIdentifier
863+
libraryIdentifier = libraryName.NormalizedIdentifier
864+
contextIdentifier = contextSymbol.Name.NormalizedIdentifier
866865

867866
# In case work is used, resolve to the real library name.
868867
if libraryIdentifier == "work":
869868
referencedLibrary = designUnit.Library
870869
libraryIdentifier = referencedLibrary.NormalizedIdentifier
871870
elif libraryIdentifier not in designUnit._referencedLibraries:
872871
# TODO: This check doesn't trigger if it's the working library.
873-
raise VHDLModelException(f"Context reference references library '{librarySymbol.Identifier}', which was not referenced by a library clause.")
872+
raise VHDLModelException(f"Context reference references library '{libraryName.Identifier}', which was not referenced by a library clause.")
874873
else:
875874
referencedLibrary = self._libraries[libraryIdentifier]
876875

877876
try:
878877
referencedContext = referencedLibrary._contexts[contextIdentifier]
879878
except KeyError:
880-
raise VHDLModelException(f"Context '{contextSymbol.Identifier}' not found in {'working ' if librarySymbol.NormalizedIdentifier == 'work' else ''}library '{referencedLibrary.Identifier}'.")
879+
raise VHDLModelException(f"Context '{contextSymbol.Identifier}' not found in {'working ' if libraryName.NormalizedIdentifier == 'work' else ''}library '{referencedLibrary.Identifier}'.")
881880

882-
librarySymbol.Library = referencedLibrary
883881
contextSymbol.Package = referencedContext
884882

885883
# TODO: warn duplicate referencedContext reference
@@ -925,33 +923,33 @@ def LinkInstantiations(self) -> None:
925923
for architecture in self.IterateDesignUnits(DesignUnitKind.Architecture):
926924
for instance in architecture.IterateInstantiations():
927925
if isinstance(instance, EntityInstantiation):
928-
libraryIdentifier = instance.Entity.Prefix.Identifier
929-
normalizedLibraryIdentifier = instance.Entity.Prefix.NormalizedIdentifier
926+
libraryName = instance.Entity.Name.Prefix
927+
libraryIdentifier = libraryName.Identifier
928+
normalizedLibraryIdentifier = libraryName.NormalizedIdentifier
930929
if normalizedLibraryIdentifier == "work":
931930
libraryIdentifier = architecture.Library.Identifier
932931
normalizedLibraryIdentifier = architecture.Library.NormalizedIdentifier
933932
elif normalizedLibraryIdentifier not in architecture._referencedLibraries:
934-
ex =Exception(f"Referenced library '{libraryIdentifier}' in direct entity instantiation '{instance.Label}: entity {instance.Entity.Prefix.Identifier}.{instance.Entity.Identifier}' not found in architecture '{architecture!r}'.")
933+
ex = VHDLModelException(f"Referenced library '{libraryIdentifier}' in direct entity instantiation '{instance.Label}: entity {instance.Entity.Prefix.Identifier}.{instance.Entity.Identifier}' not found in architecture '{architecture!r}'.")
935934
ex.add_note(f"Add a library reference to the architecture or entity using a library clause like: 'library {libraryIdentifier};'.")
936935
raise ex
937936

938937
try:
939938
library = self._libraries[normalizedLibraryIdentifier]
940939
except KeyError:
941-
ex = Exception(f"Referenced library '{libraryIdentifier}' in direct entity instantiation '{instance.Label}: entity {instance.Entity.Prefix.Identifier}.{instance.Entity.Identifier}' not found in design.")
940+
ex = VHDLModelException(f"Referenced library '{libraryIdentifier}' in direct entity instantiation '{instance.Label}: entity {instance.Entity.Prefix.Identifier}.{instance.Entity.Identifier}' not found in design.")
942941
ex.add_note(f"No design units were parsed into library '{libraryIdentifier}'. Thus it doesn't exist in design.")
943942
raise ex
944943

945944
try:
946-
entity = library._entities[instance.Entity.NormalizedIdentifier]
945+
entity = library._entities[instance.Entity.Name.NormalizedIdentifier]
947946
except KeyError:
948-
ex = Exception(f"Referenced entity '{instance.Entity.Identifier}' in direct entity instantiation '{instance.Label}: entity {instance.Entity.Prefix.Identifier}.{instance.Entity.Identifier}' not found in {'working ' if instance.Entity.Prefix.NormalizedIdentifier == 'work' else ''}library '{libraryIdentifier}'.")
947+
ex = VHDLModelException(f"Referenced entity '{instance.Entity.Identifier}' in direct entity instantiation '{instance.Label}: entity {instance.Entity.Prefix.Identifier}.{instance.Entity.Identifier}' not found in {'working ' if instance.Entity.Prefix.NormalizedIdentifier == 'work' else ''}library '{libraryIdentifier}'.")
949948
libs = [library.Identifier for library in self._libraries.values() for entityIdentifier in library._entities.keys() if entityIdentifier == instance.Entity.NormalizedIdentifier]
950949
if libs:
951-
ex.add_note(f"Found entity '{instance.Entity.Identifier}' in other libraries: {', '.join(libs)}")
950+
ex.add_note(f"Found entity '{instance.Entity!s}' in other libraries: {', '.join(libs)}")
952951
raise ex
953952

954-
instance.Entity.Prefix.Library = library
955953
instance.Entity.Entity = entity
956954

957955
dependency = architecture._dependencyVertex.EdgeToVertex(entity._dependencyVertex, edgeValue=instance)
@@ -1350,7 +1348,7 @@ def _AddDesignUnit(self, item: DesignUnit) -> None:
13501348
if isinstance(item, Entity):
13511349
self._entities[identifier] = item
13521350
elif isinstance(item, Architecture):
1353-
entityIdentifier = item.Entity.NormalizedIdentifier
1351+
entityIdentifier = item.Entity.Name.NormalizedIdentifier
13541352
try:
13551353
architectures = self._architectures[entityIdentifier]
13561354
if identifier in architectures:

tests/unit/Instantiate.py

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ class Symbols(TestCase):
5757
def test_LibraryReferenceSymbol(self):
5858
symbol = LibraryReferenceSymbol(SimpleName("Lib"))
5959

60-
self.assertEqual("Lib", symbol.Identifier)
61-
self.assertEqual("lib", symbol.NormalizedIdentifier)
62-
self.assertIs(symbol, symbol.Root)
63-
self.assertIsNone(symbol.Prefix)
64-
self.assertFalse(symbol.HasPrefix)
60+
self.assertEqual("Lib", symbol.Name.Identifier)
61+
self.assertEqual("lib", symbol.Name.NormalizedIdentifier)
62+
self.assertIs(symbol.Name, symbol.Name.Root)
63+
self.assertIsNone(symbol.Name.Prefix)
64+
self.assertFalse(symbol.Name.HasPrefix)
6565
self.assertFalse(symbol.IsResolved)
6666

6767
library = Library("liB")
@@ -73,44 +73,41 @@ def test_LibraryReferenceSymbol(self):
7373
def test_PackageReferenceSymbol(self):
7474
symbol = PackageReferenceSymbol(SelectedName("pack", SimpleName("Lib")))
7575

76-
self.assertEqual("pack", symbol.NormalizedIdentifier)
77-
self.assertEqual("lib", symbol.Prefix.NormalizedIdentifier)
78-
self.assertTrue(symbol.HasPrefix)
76+
self.assertEqual("pack", symbol.Name.NormalizedIdentifier)
77+
self.assertEqual("lib", symbol.Name.Prefix.NormalizedIdentifier)
78+
self.assertTrue(symbol.Name.HasPrefix)
7979

80-
library = Library("liB")
80+
# library = Library("liB")
8181
package = Package("Pack")
8282
symbol.Package = package
83-
symbol.Prefix.Library = library
8483

8584
self.assertTrue(symbol.IsResolved)
86-
self.assertTrue(symbol.Prefix.IsResolved)
87-
self.assertIs(library, symbol.Prefix.Library)
8885
self.assertIs(package, symbol.Package)
8986

9087
def test_PackageMembersReferenceSymbol(self):
9188
symbol = PackageMembersReferenceSymbol(SelectedName("obj", SelectedName("pack", SimpleName("Lib"))))
9289

93-
self.assertEqual("obj", symbol.NormalizedIdentifier)
94-
self.assertEqual("pack", symbol.Prefix.NormalizedIdentifier)
95-
self.assertEqual("lib", symbol.Prefix.Prefix.NormalizedIdentifier)
90+
self.assertEqual("obj", symbol.Name.NormalizedIdentifier)
91+
self.assertEqual("pack", symbol.Name.Prefix.NormalizedIdentifier)
92+
self.assertEqual("lib", symbol.Name.Prefix.Prefix.NormalizedIdentifier)
9693

9794
def test_AllPackageMembersReferenceSymbol(self):
9895
symbol = AllPackageMembersReferenceSymbol(AllName(SelectedName("pack", SimpleName("Lib"))))
9996

100-
self.assertEqual("all", symbol.NormalizedIdentifier)
101-
self.assertEqual("pack", symbol.Prefix.NormalizedIdentifier)
102-
self.assertEqual("lib", symbol.Prefix.Prefix.NormalizedIdentifier)
97+
self.assertEqual("all", symbol.Name.NormalizedIdentifier)
98+
self.assertEqual("pack", symbol.Name.Prefix.NormalizedIdentifier)
99+
self.assertEqual("lib", symbol.Name.Prefix.Prefix.NormalizedIdentifier)
103100

104101
def test_ContextReferenceSymbol(self):
105102
symbol = ContextReferenceSymbol(SelectedName("ctx", SimpleName("Lib")))
106103

107-
self.assertEqual("ctx", symbol.NormalizedIdentifier)
108-
self.assertEqual("lib", symbol.Prefix.NormalizedIdentifier)
104+
self.assertEqual("ctx", symbol.Name.NormalizedIdentifier)
105+
self.assertEqual("lib", symbol.Name.Prefix.NormalizedIdentifier)
109106

110107
def test_EntitySymbol(self):
111108
symbol = EntitySymbol(SimpleName("ent"))
112109

113-
self.assertEqual("ent", symbol.NormalizedIdentifier)
110+
self.assertEqual("ent", symbol.Name.NormalizedIdentifier)
114111

115112
# def test_ArchitectureSymbol(self):
116113
# symbol = ArchitectureSymbol("rtl")
@@ -120,23 +117,23 @@ def test_EntitySymbol(self):
120117
def test_PackageSymbol(self):
121118
symbol = PackageSymbol(SimpleName("pack"))
122119

123-
self.assertEqual("pack", symbol.NormalizedIdentifier)
120+
self.assertEqual("pack", symbol.Name.NormalizedIdentifier)
124121

125122
def test_EntityInstantiationSymbol(self):
126123
symbol = EntityInstantiationSymbol(SelectedName("ent", SimpleName("Lib")))
127124

128-
self.assertEqual("ent", symbol.NormalizedIdentifier)
129-
self.assertEqual("lib", symbol.Prefix.NormalizedIdentifier)
125+
self.assertEqual("ent", symbol.Name.NormalizedIdentifier)
126+
self.assertEqual("lib", symbol.Name.Prefix.NormalizedIdentifier)
130127

131128
def test_ComponentInstantiationSymbol(self):
132129
symbol = ComponentInstantiationSymbol(SimpleName("comp"))
133130

134-
self.assertEqual("comp", symbol.NormalizedIdentifier)
131+
self.assertEqual("comp", symbol.Name.NormalizedIdentifier)
135132

136133
def test_ConfigurationInstantiationSymbol(self):
137134
symbol = ConfigurationInstantiationSymbol(SimpleName("cfg"))
138135

139-
self.assertEqual("cfg", symbol.NormalizedIdentifier)
136+
self.assertEqual("cfg", symbol.Name.NormalizedIdentifier)
140137

141138

142139
class SimpleInstance(TestCase):
@@ -188,8 +185,8 @@ def test_Entity(self):
188185
self.assertEqual(0, len(entity.Statements))
189186

190187
def test_Architecture(self):
191-
entity = EntitySymbol("entity_1")
192-
architecture = Architecture("arch_1", entity)
188+
entitySymbol = EntitySymbol(SimpleName("entity_1"))
189+
architecture = Architecture("arch_1", entitySymbol)
193190

194191
self.assertIsNotNone(architecture)
195192
self.assertEqual("arch_1", architecture.Identifier)
@@ -204,7 +201,7 @@ def test_Package(self):
204201
self.assertEqual(0, len(package.DeclaredItems))
205202

206203
def test_PackageBody(self):
207-
packageSymbol = PackageSymbol("pack_1")
204+
packageSymbol = PackageSymbol(SimpleName("pack_1"))
208205
packageBody = PackageBody(packageSymbol)
209206

210207
self.assertIsNotNone(packageBody)
@@ -275,8 +272,8 @@ def test_Architecture(self):
275272
path = Path("tests.vhdl")
276273
document = Document(path)
277274

278-
entity = EntitySymbol("entity_1")
279-
architecture = Architecture("arch_1", entity)
275+
entitySymbol = EntitySymbol(SimpleName("entity_1"))
276+
architecture = Architecture("arch_1", entitySymbol)
280277
document._AddArchitecture(architecture)
281278

282279
self.assertEqual(1, len(document.Architectures))
@@ -296,7 +293,7 @@ def test_PackageBody(self):
296293
path = Path("tests.vhdl")
297294
document = Document(path)
298295

299-
packageSymbol = PackageSymbol("pack_1")
296+
packageSymbol = PackageSymbol(SimpleName("pack_1"))
300297
packageBody = PackageBody(packageSymbol)
301298
document._AddPackageBody(packageBody)
302299

@@ -327,17 +324,17 @@ def test_DesignUnits(self):
327324
path = Path("tests.vhdl")
328325
document = Document(path, documentation="Testing 'Document' class.")
329326

330-
entity = Entity("entity_1")
331-
document._AddDesignUnit(entity)
327+
entitySymbol = Entity("entity_1")
328+
document._AddDesignUnit(entitySymbol)
332329

333-
entity = EntitySymbol("entity_1")
334-
architecture = Architecture("arch_1", entity)
330+
entitySymbol = EntitySymbol(SimpleName("entity_1"))
331+
architecture = Architecture("arch_1", entitySymbol)
335332
document._AddDesignUnit(architecture)
336333

337334
package = Package("pack_1")
338335
document._AddDesignUnit(package)
339336

340-
packageSymbol = PackageSymbol("pack_1")
337+
packageSymbol = PackageSymbol(SimpleName("pack_1"))
341338
packageBody = PackageBody(packageSymbol)
342339
document._AddDesignUnit(packageBody)
343340

@@ -389,9 +386,9 @@ def test_AddDocument(self):
389386
document = Document(path, documentation="Testing 'Library' class.")
390387

391388
document._AddDesignUnit(Entity("entity_1"))
392-
document._AddDesignUnit(Architecture("arch_1", EntitySymbol("entity_1")))
389+
document._AddDesignUnit(Architecture("arch_1", EntitySymbol(SimpleName("entity_1"))))
393390
document._AddDesignUnit(Package("pack_1"))
394-
document._AddDesignUnit(PackageBody(PackageSymbol("pack_1")))
391+
document._AddDesignUnit(PackageBody(PackageSymbol(SimpleName("pack_1"))))
395392
document._AddDesignUnit(Context("ctx_1"))
396393
document._AddDesignUnit(Configuration("cfg_1"))
397394

0 commit comments

Comments
 (0)