Created
November 15, 2024 19:59
-
-
Save bishabosha/1baf30b4b38cf9e9795e8664c64bc7c5 to your computer and use it in GitHub Desktop.
Copy sbt test to Vulpix
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//> 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