@@ -120,10 +120,20 @@ def test_wrong_signature(self):
120120
121121
122122class FieldTestCase (unittest .TestCase ):
123+ def test_wrong_class (self ):
124+ class Foo :
125+ pass
126+ with self .assertRaisesRegex (TypeError ,
127+ r"Foo must be a subclass of wiring.Component" ):
128+ Field (Foo )
129+
123130 def test_create (self ):
124131 class MockField (wiring .Component ):
125132 def __init__ (self , shape , * , reset ):
126- super ().__init__ ({"port" : Out (FieldPort .Signature (shape , "rw" ))})
133+ super ().__init__ ({
134+ "port" : In (FieldPort .Signature (shape , "rw" )),
135+ "data" : Out (shape )
136+ })
127137 self .reset = reset
128138
129139 def elaborate (self , platform ):
@@ -135,7 +145,7 @@ def elaborate(self, platform):
135145
136146 def test_create_multiple (self ):
137147 class MockField (wiring .Component ):
138- port : Out (FieldPort .Signature (unsigned (8 ), "rw" ))
148+ port : In (FieldPort .Signature (unsigned (8 ), "rw" ))
139149
140150 def elaborate (self , platform ):
141151 return Module ()
@@ -144,6 +154,58 @@ def elaborate(self, platform):
144154 field_2 = Field (MockField ).create ()
145155 self .assertIsNot (field_1 , field_2 )
146156
157+ def test_wrong_port_name (self ):
158+ class MockField (wiring .Component ):
159+ foo : In (FieldPort .Signature (unsigned (1 ), access = "rw" ))
160+
161+ def elaborate (self , platform ):
162+ return Module ()
163+
164+ field = Field (MockField )
165+ with self .assertRaisesRegex (TypeError ,
166+ r"MockField instance signature must have a csr\.FieldPort\.Signature member named "
167+ r"'port' and oriented as In" ):
168+ field .create ()
169+
170+ def test_wrong_port_direction (self ):
171+ class MockField (wiring .Component ):
172+ port : Out (FieldPort .Signature (unsigned (1 ), access = "rw" ))
173+
174+ def elaborate (self , platform ):
175+ return Module ()
176+
177+ field = Field (MockField )
178+ with self .assertRaisesRegex (TypeError ,
179+ r"MockField instance signature must have a csr\.FieldPort\.Signature member named "
180+ r"'port' and oriented as In" ):
181+ field .create ()
182+
183+ def test_wrong_port_type_port (self ):
184+ class MockField (wiring .Component ):
185+ port : In (unsigned (1 ))
186+
187+ def elaborate (self , platform ):
188+ return Module ()
189+
190+ field = Field (MockField )
191+ with self .assertRaisesRegex (TypeError ,
192+ r"MockField instance signature must have a csr\.FieldPort\.Signature member named "
193+ r"'port' and oriented as In" ):
194+ field .create ()
195+
196+ def test_wrong_port_type_signature (self ):
197+ class MockField (wiring .Component ):
198+ port : In (wiring .Signature ({"foo" : Out (unsigned (1 ))}))
199+
200+ def elaborate (self , platform ):
201+ return Module ()
202+
203+ field = Field (MockField )
204+ with self .assertRaisesRegex (TypeError ,
205+ r"MockField instance signature must have a csr\.FieldPort\.Signature member named "
206+ r"'port' and oriented as In" ):
207+ field .create ()
208+
147209
148210class FieldMapTestCase (unittest .TestCase ):
149211 def test_simple (self ):
0 commit comments