aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala
diff options
context:
space:
mode:
authorJack Koenig2021-08-20 17:08:40 -0700
committerGitHub2021-08-21 00:08:40 +0000
commitdc2fbad9d6431cb52a7ad26937a100b288b86206 (patch)
tree8ee1dd0e731629e42ce395a8484f3041d2178811 /src/test/scala
parent762f7747bd2082c27af9cb46f5e2333df0329a56 (diff)
Add BufferedCustomFileEmission (#2334)
Uses virtual method .getBytesBuffered: Iterable[Array[Byte]] to optimize file emission.
Diffstat (limited to 'src/test/scala')
-rw-r--r--src/test/scala/firrtlTests/options/phases/WriteOutputAnnotationsSpec.scala28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/test/scala/firrtlTests/options/phases/WriteOutputAnnotationsSpec.scala b/src/test/scala/firrtlTests/options/phases/WriteOutputAnnotationsSpec.scala
index e9b84540..edc56425 100644
--- a/src/test/scala/firrtlTests/options/phases/WriteOutputAnnotationsSpec.scala
+++ b/src/test/scala/firrtlTests/options/phases/WriteOutputAnnotationsSpec.scala
@@ -7,6 +7,7 @@ import java.io.File
import firrtl.AnnotationSeq
import firrtl.annotations.{DeletedAnnotation, NoTargetAnnotation}
import firrtl.options.{
+ BufferedCustomFileEmission,
CustomFileEmission,
InputAnnotationFileAnnotation,
OutputAnnotationFileAnnotation,
@@ -171,6 +172,25 @@ class WriteOutputAnnotationsSpec extends AnyFlatSpec with Matchers with firrtl.t
result should equal(data)
}
+ it should "write BufferedCustomFileEmission annotations" in new Fixture {
+ val file = new File("write-CustomFileEmission-annotations.anno.json")
+ val data = List("hi", "bye", "yo")
+ val annotations = Seq(
+ TargetDirAnnotation(dir),
+ OutputAnnotationFileAnnotation(file.toString),
+ WriteOutputAnnotationsSpec.Buffered(data)
+ )
+ val serializedFileName = view[StageOptions](annotations).getBuildFileName("Buffered", Some(".Emission"))
+ val out = phase.transform(annotations)
+
+ info(s"file '$serializedFileName' exists")
+ new File(serializedFileName) should (exist)
+
+ info(s"file '$serializedFileName' is correct")
+ val result = scala.io.Source.fromFile(serializedFileName).mkString
+ result should equal(data.mkString)
+ }
+
it should "error if multiple annotations try to write to the same file" in new Fixture {
val file = new File("write-CustomFileEmission-annotations-error.anno.json")
val annotations = Seq(
@@ -215,4 +235,12 @@ private object WriteOutputAnnotationsSpec {
case class Replacement(file: String) extends NoTargetAnnotation
+ case class Buffered(content: List[String]) extends NoTargetAnnotation with BufferedCustomFileEmission {
+
+ override protected def baseFileName(a: AnnotationSeq): String = "Buffered"
+
+ override protected def suffix: Option[String] = Some(".Emission")
+
+ override def getBytesBuffered: Iterable[Array[Byte]] = content.view.map(_.getBytes)
+ }
}