aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/firrtlTests/AnnotationTests.scala
diff options
context:
space:
mode:
authorChick Markley2021-11-12 12:29:48 -0800
committerGitHub2021-11-12 20:29:48 +0000
commitc6093cbcd4f2eb8acd44f3b9d4e7146448de172f (patch)
tree2a4fbac4a669f901dc4bb26e7f1c8acf0741e557 /src/test/scala/firrtlTests/AnnotationTests.scala
parent03af969ad33631f53b69370705328bf4ada3ed64 (diff)
Let firrtl based applications run despite loading unknown annotations (#2387)
An application like barstools may contain a main that loads an annotations file containing annotation classes that are not on it's classpath. This change allows unknown annotations to be preserved by wrapping them in a UnrecognizedAnnotation. If annotations are then output to a file, they will be unwrapped during serialization This feature can be enabled via an AllowUnrecognizedAnnotations annotation Co-authored-by: chick <chick.markley@sifive.com> Co-authored-by: Jack Koenig <koenig@sifive.com>
Diffstat (limited to 'src/test/scala/firrtlTests/AnnotationTests.scala')
-rw-r--r--src/test/scala/firrtlTests/AnnotationTests.scala35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/test/scala/firrtlTests/AnnotationTests.scala b/src/test/scala/firrtlTests/AnnotationTests.scala
index 6ee63856..a8ff0aa0 100644
--- a/src/test/scala/firrtlTests/AnnotationTests.scala
+++ b/src/test/scala/firrtlTests/AnnotationTests.scala
@@ -564,7 +564,7 @@ class JsonAnnotationTests extends AnnotationTests {
val manager = setupManager(Some(anno))
the[Exception] thrownBy Driver.execute(manager) should matchPattern {
- case InvalidAnnotationFileException(_, _: AnnotationClassNotFoundException) =>
+ case InvalidAnnotationFileException(_, _: UnrecogizedAnnotationsException) =>
}
}
@@ -614,4 +614,37 @@ class JsonAnnotationTests extends AnnotationTests {
val cr = DoNothingTransform.runTransform(CircuitState(parse(input), ChirrtlForm, annos))
cr.annotations.toSeq shouldEqual annos
}
+
+ "fully qualified class name that is undeserializable" should "give an invalid json exception" in {
+ val anno = """
+ |[
+ | {
+ | "class":"firrtlTests.MyUnserAnno",
+ | "box":"7"
+ | }
+ |] """.stripMargin
+
+ val manager = setupManager(Some(anno))
+ the[Exception] thrownBy Driver.execute(manager) should matchPattern {
+ case InvalidAnnotationFileException(_, _: InvalidAnnotationJSONException) =>
+ }
+ }
+
+ "unqualified class name" should "give an unrecognized annotation exception" in {
+ val anno = """
+ |[
+ | {
+ | "class":"MyUnserAnno"
+ | "box":"7"
+ | }
+ |] """.stripMargin
+ val manager = setupManager(Some(anno))
+ the[Exception] thrownBy Driver.execute(manager) should matchPattern {
+ case InvalidAnnotationFileException(_, _: UnrecogizedAnnotationsException) =>
+ }
+ }
}
+
+/* These are used by the last two tests. It is outside the main test to keep the qualified name simpler*/
+class UnserBox(val x: Int)
+case class MyUnserAnno(box: UnserBox) extends NoTargetAnnotation