Skip to content

Instantly share code, notes, and snippets.

@bishabosha
Created November 15, 2024 19:59
Show Gist options
  • Save bishabosha/1baf30b4b38cf9e9795e8664c64bc7c5 to your computer and use it in GitHub Desktop.
Save bishabosha/1baf30b4b38cf9e9795e8664c64bc7c5 to your computer and use it in GitHub Desktop.
Copy sbt test to Vulpix
//> using toolkit default
//> using options -experimental
//> using scala 3.6.1
// This script copies from scala3/sbt-test/unroll-annot to dotty/tests/run
// current directory is repo for github.com/scala/scala3
val srcDir = os.pwd / "sbt-test" / "unroll-annot"
val destDir = os.pwd / "tests" / "run"
val relPathsMain = Seq(
(os.rel / "src" / "main" / "scala" / "Unrolled.scala", (num: String) => os.rel / s"Unrolled_$num.scala"),
)
val utilsPaths = Seq(
(os.rel / "utils" / "src" / "main" / "scala" / "TestUtils.scala", os.rel / "TestUtils_1.scala"),
)
val testRenames = Seq("UnrollTestMain", "UnrollTestScalaSpecific", "UnrollTestPlatformSpecific")
val relPathsTest = Seq(
(os.rel / "src" / "main" / "scala" / "UnrollTestMain.scala", (num: String) => os.rel / s"UnrollTestMain_$num.scala"),
(os.rel / "src" / "main" / "scala" / "UnrollTestScalaSpecific.scala", (num: String) => os.rel / s"UnrollTestScalaSpecific_$num.scala"),
(os.rel / "src" / "main" / "scala" / "UnrollTestPlatformSpecific.scala", (num: String) => os.rel / s"UnrollTestPlatformSpecific_$num.scala"),
)
val toCopy = os.list(src = srcDir)//.filterNot(p => os.exists(destDir / s"unroll-${p.last}-integration"))
toCopy.foreach(println)
def cleanFile(file: os.Path, dest: os.Path): Unit =
val content = os.read(file)
val content0 = (
"//> using options -experimental\n" +:
content.linesWithSeparators.toVector.reverse
.dropWhile(_.trim.isEmpty)
.map(_.replaceAllLiterally("Unrolled.fromProduct", "summon[scala.deriving.Mirror.Of[Unrolled]].fromProduct"))
.reverse
).mkString
println(s"Writing to $dest cleaned content")
os.write.over(dest, content0, createFolders = true)
toCopy.foreach(path =>
val asRel = os.rel / path.last
val srcTestDir = srcDir / path.last
val destTestDir = destDir / s"unroll-${path.last}-integration"
val testFile = destTestDir / "Test_4.scala"
os.makeDir.all(destTestDir)
val mainMethodLines = List.newBuilder[String]
Seq("v1", "v2", "v3").foreach(name =>
val s"v$i" = name.runtimeChecked
val projectDir = os.rel / name
val projectAppDir = os.rel / s"${name}_app"
for (src, cpyFn) <- relPathsMain do
val src0 = srcTestDir / projectDir / src
if os.exists(src0) then
cleanFile(src0, destTestDir / cpyFn(i))
for (src, cpy) <- utilsPaths do
val src0 = srcTestDir / src
if os.exists(src0) then
cleanFile(src0, destTestDir / cpy)
for (src, cpyFn) <- relPathsTest do
val src0 = srcTestDir / projectAppDir / src
if os.exists(src0) then
val s"$test.scala" = src0.last.runtimeChecked
if test == "UnrollTestMain" then
val objName = test + name.toUpperCase()
mainMethodLines += s"$objName.main(Array.empty[String])"
end if
cleanFile(src0, destTestDir / cpyFn(i))
else
println(s"File $src0 does not exist")
)
val calls = mainMethodLines.result()
val template = s"""//> using options -experimental
|import unroll.*
|
|@main def Test: Unit = """.stripMargin
val file = template + "\n " + calls.mkString("\n ")
// println(s"dry run: Writing to $testFile cleaned content:\n$file")
os.write.over(testFile, file, createFolders = true)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment