Skip to content

Commit 25f7dc3

Browse files
committed
Merge branch 'feature-native-modules' of https://github.com/cheeseng/scalatest into cheeseng-feature-native-modules
2 parents 2dfa44f + a2dc07b commit 25f7dc3

File tree

6 files changed

+639
-87
lines changed

6 files changed

+639
-87
lines changed

build.sbt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ lazy val scalatestDiagrams = ScalatestBuild.scalatestDiagrams
6060
lazy val scalatestMatchersCore = ScalatestBuild.scalatestMatchersCore
6161
lazy val scalatestShouldMatchers = ScalatestBuild.scalatestShouldMatchers
6262
lazy val scalatestMustMatchers = ScalatestBuild.scalatestMustMatchers
63+
lazy val scalatestModules = ScalatestBuild.scalatestModules
6364
lazy val scalatestCoreJS = ScalatestBuild.scalatestCoreJS
6465
lazy val scalatestFeatureSpecJS = ScalatestBuild.scalatestFeatureSpecJS
6566
lazy val scalatestFlatSpecJS = ScalatestBuild.scalatestFlatSpecJS
@@ -71,4 +72,16 @@ lazy val scalatestDiagramsJS = ScalatestBuild.scalatestDiagramsJS
7172
lazy val scalatestMatchersCoreJS = ScalatestBuild.scalatestMatchersCoreJS
7273
lazy val scalatestShouldMatchersJS = ScalatestBuild.scalatestShouldMatchersJS
7374
lazy val scalatestMustMatchersJS = ScalatestBuild.scalatestMustMatchersJS
74-
lazy val scalatestModulesJS = ScalatestBuild.scalatestModulesJS
75+
lazy val scalatestModulesJS = ScalatestBuild.scalatestModulesJS
76+
lazy val scalatestCoreNative = ScalatestBuild.scalatestCoreNative
77+
lazy val scalatestFeatureSpecNative = ScalatestBuild.scalatestFeatureSpecNative
78+
lazy val scalatestFlatSpecNative = ScalatestBuild.scalatestFlatSpecNative
79+
lazy val scalatestFreeSpecNative = ScalatestBuild.scalatestFreeSpecNative
80+
lazy val scalatestFunSuiteNative = ScalatestBuild.scalatestFunSuiteNative
81+
lazy val scalatestPropSpecNative = ScalatestBuild.scalatestPropSpecNative
82+
lazy val scalatestWordSpecNative = ScalatestBuild.scalatestWordSpecNative
83+
lazy val scalatestDiagramsNative = ScalatestBuild.scalatestDiagramsNative
84+
lazy val scalatestMatchersCoreNative = ScalatestBuild.scalatestMatchersCoreNative
85+
lazy val scalatestShouldMatchersNative = ScalatestBuild.scalatestShouldMatchersNative
86+
lazy val scalatestMustMatchersNative = ScalatestBuild.scalatestMustMatchersNative
87+
lazy val scalatestModulesNative = ScalatestBuild.scalatestModulesNative

project/GenModulesNative.scala

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
import java.io.{File, BufferedWriter, FileWriter}
2+
import scala.io.Source
3+
4+
object GenModulesNative {
5+
6+
private def uncommentJsExport(line: String): String =
7+
if (line.trim.startsWith("//SCALATESTJS,NATIVE-ONLY "))
8+
line.substring(line.indexOf("//SCALATESTJS,NATIVE-ONLY ") + 26)
9+
else if (line.trim.startsWith("//SCALATESTNATIVE-ONLY "))
10+
line.substring(line.indexOf("//SCALATESTNATIVE-ONLY ") + 23)
11+
else
12+
line
13+
14+
private def transformLine(line: String): String =
15+
uncommentJsExport(line)
16+
17+
private def copyFile(sourceFile: File, destFile: File): File = {
18+
val destWriter = new BufferedWriter(new FileWriter(destFile))
19+
try {
20+
val lines = Source.fromFile(sourceFile).getLines.toList
21+
var skipMode = false
22+
for (line <- lines) {
23+
if (line.trim == "// SKIP-SCALATESTJS,NATIVE-START" || line.trim == "// SKIP-SCALATESTNATIVE-START")
24+
skipMode = true
25+
else if (line.trim == "// SKIP-SCALATESTJS,NATIVE-END" || line.trim == "// SKIP-SCALATESTNATIVE-END")
26+
skipMode = false
27+
else if (!skipMode) {
28+
destWriter.write(transformLine(line))
29+
destWriter.newLine()
30+
}
31+
}
32+
destFile
33+
}
34+
finally {
35+
destWriter.flush()
36+
destWriter.close()
37+
println("Copied " + destFile.getAbsolutePath)
38+
}
39+
}
40+
41+
def copyDir(sourceDirName: String, packageDirName: String, targetDir: File, skipList: List[String]): Seq[File] = {
42+
val packageDir = new File(targetDir, packageDirName)
43+
packageDir.mkdirs()
44+
val sourceDir = new File(sourceDirName)
45+
sourceDir.listFiles.toList.filter(f => f.isFile && !skipList.contains(f.getName) && f.getName.endsWith(".scala")).map { sourceFile =>
46+
val destFile = new File(packageDir, sourceFile.getName)
47+
copyFile(sourceFile, destFile)
48+
}
49+
}
50+
51+
def genScalaTestCore(targetDir: File, version: String, scalaVersion: String): Seq[File] = {
52+
GenScalaTestNative.genScalaPackages.filter { case (packagePath, skipList) =>
53+
List(
54+
"org/scalatest",
55+
"org/scalatest/concurrent",
56+
"org/scalatest/enablers",
57+
"org/scalatest/exceptions",
58+
"org/scalatest/events",
59+
"org/scalatest/fixture",
60+
"org/scalatest/prop",
61+
"org/scalatest/tagobjects",
62+
"org/scalatest/time",
63+
"org/scalatest/tools",
64+
"org/scalatest/verbs",
65+
).contains(packagePath)
66+
}.flatMap { case (packagePath, skipList) =>
67+
copyDir("scalatest/src/main/scala/" + packagePath, packagePath, targetDir,
68+
if (packagePath == "org/scalatest" || packagePath == "org/scalatest/fixture") skipList ++ List("package.scala") else skipList)
69+
}.toList ++
70+
copyDir("scalatest.native/src/main/scala/org/scalatest", "org/scalatest", targetDir, List.empty) ++
71+
copyDir("scalatest.native/src/main/scala/org/scalatest/compatible", "org/scalatest/compatible", targetDir, List.empty) ++
72+
copyDir("scalatest.native/src/main/scala/org/scalatest/concurrent", "org/scalatest/concurrent", targetDir, List.empty) ++
73+
copyDir("scalatest.native/src/main/scala/org/scalatest/exceptions", "org/scalatest/exceptions", targetDir, List.empty) ++
74+
copyDir("scalatest.native/src/main/scala/org/scalatest/tools", "org/scalatest/tools", targetDir, List.empty) ++
75+
copyDir("modules/jvm/scalatest-core/src/main/scala/org/scalatest", "org/scalatest", targetDir, List.empty) ++
76+
copyDir("modules/jvm/scalatest-core/src/main/scala/org/scalatest/fixture", "org/scalatest/fixture", targetDir, List.empty)
77+
}
78+
79+
def genScalaTestFeatureSpec(targetDir: File, version: String, scalaVersion: String): Seq[File] =
80+
GenScalaTestNative.genScalaPackages.filter { case (packagePath, skipList) =>
81+
List(
82+
"org/scalatest/featurespec"
83+
).contains(packagePath)
84+
}.flatMap { case (packagePath, skipList) =>
85+
copyDir("scalatest/src/main/scala/" + packagePath, packagePath, targetDir, skipList)
86+
}.toList
87+
88+
def genScalaTestFlatSpec(targetDir: File, version: String, scalaVersion: String): Seq[File] =
89+
GenScalaTestNative.genScalaPackages.filter { case (packagePath, skipList) =>
90+
List(
91+
"org/scalatest/flatspec"
92+
).contains(packagePath)
93+
}.flatMap { case (packagePath, skipList) =>
94+
copyDir("scalatest/src/main/scala/" + packagePath, packagePath, targetDir, skipList)
95+
}.toList
96+
97+
def genScalaTestFreeSpec(targetDir: File, version: String, scalaVersion: String): Seq[File] =
98+
GenScalaTestNative.genScalaPackages.filter { case (packagePath, skipList) =>
99+
List(
100+
"org/scalatest/freespec"
101+
).contains(packagePath)
102+
}.flatMap { case (packagePath, skipList) =>
103+
copyDir("scalatest/src/main/scala/" + packagePath, packagePath, targetDir, skipList)
104+
}.toList
105+
106+
def genScalaTestFunSuite(targetDir: File, version: String, scalaVersion: String): Seq[File] =
107+
GenScalaTestNative.genScalaPackages.filter { case (packagePath, skipList) =>
108+
List(
109+
"org/scalatest/funsuite"
110+
).contains(packagePath)
111+
}.flatMap { case (packagePath, skipList) =>
112+
copyDir("scalatest/src/main/scala/" + packagePath, packagePath, targetDir, skipList)
113+
}.toList
114+
115+
def genScalaTestPropSpec(targetDir: File, version: String, scalaVersion: String): Seq[File] =
116+
GenScalaTestNative.genScalaPackages.filter { case (packagePath, skipList) =>
117+
List(
118+
"org/scalatest/propspec"
119+
).contains(packagePath)
120+
}.flatMap { case (packagePath, skipList) =>
121+
copyDir("scalatest/src/main/scala/" + packagePath, packagePath, targetDir, skipList)
122+
}.toList
123+
124+
def genScalaTestWordSpec(targetDir: File, version: String, scalaVersion: String): Seq[File] =
125+
GenScalaTestNative.genScalaPackages.filter { case (packagePath, skipList) =>
126+
List(
127+
"org/scalatest/wordspec"
128+
).contains(packagePath)
129+
}.flatMap { case (packagePath, skipList) =>
130+
copyDir("scalatest/src/main/scala/" + packagePath, packagePath, targetDir, skipList)
131+
}.toList
132+
133+
def genScalaTestDiagrams(targetDir: File, version: String, scalaVersion: String): Seq[File] =
134+
GenScalaTestNative.genScalaPackages.filter { case (packagePath, skipList) =>
135+
List(
136+
"org/scalatest/diagrams"
137+
).contains(packagePath)
138+
}.flatMap { case (packagePath, skipList) =>
139+
copyDir("scalatest/src/main/scala/" + packagePath, packagePath, targetDir, skipList)
140+
}.toList
141+
142+
def genScalaTestMatchersCore(targetDir: File, version: String, scalaVersion: String): Seq[File] =
143+
GenScalaTestNative.genScalaPackages.filter { case (packagePath, skipList) =>
144+
List(
145+
"org/scalatest/matchers",
146+
"org/scalatest/matchers/dsl"
147+
).contains(packagePath)
148+
}.flatMap { case (packagePath, skipList) =>
149+
copyDir("scalatest/src/main/scala/" + packagePath, packagePath, targetDir, skipList)
150+
}.toList
151+
152+
def genScalaTestShouldMatchers(targetDir: File, version: String, scalaVersion: String): Seq[File] =
153+
GenScalaTestNative.genScalaPackages.filter { case (packagePath, skipList) =>
154+
List(
155+
"org/scalatest/matchers/should"
156+
).contains(packagePath)
157+
}.flatMap { case (packagePath, skipList) =>
158+
copyDir("scalatest/src/main/scala/" + packagePath, packagePath, targetDir, skipList)
159+
}.toList
160+
161+
}

project/GenScalaTestNative.scala

Lines changed: 41 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -117,37 +117,31 @@ object GenScalaTestNative {
117117
new File(sourceDirName).listFiles.toList.map(_.getName).filter(_.toLowerCase.contains("async"))
118118
}
119119

120-
def genScala(targetDir: File, version: String, scalaVersion: String): Seq[File] = {
121-
copyDir("scalatest/src/main/scala/org/scalatest", "org/scalatest", targetDir,
122-
List(
120+
val genScalaPackages: Map[String, List[String]] =
121+
Map(
122+
"org/scalatest" -> (List(
123123
"DispatchReporter.scala",
124124
"ConfigMapWrapperSuite.scala", // skipped because depends on java reflection.
125125
"JavaClassesWrappers.scala",
126126
"Shell.scala",
127127
"SuiteRerunner.scala",
128128
"SuiteRerunner.scala",
129129
"run.scala"
130-
) ++ asyncs("scalatest/src/main/scala/org/scalatest")
131-
) ++
132-
copyDir("scalatest/src/main/scala/org/scalatest/diagrams", "org/scalatest/diagrams", targetDir, List.empty) ++
133-
copyDir("scalatest/src/main/scala/org/scalatest/fixture", "org/scalatest/fixture", targetDir,
134-
List(
130+
) ++ asyncs("scalatest/src/main/scala/org/scalatest")),
131+
"org/scalatest/diagrams" -> List.empty,
132+
"org/scalatest/fixture" -> (List(
135133
"Spec.scala",
136134
"SpecLike.scala"
137-
) ++ asyncs("scalatest/src/main/scala/org/scalatest/fixture")
138-
) ++
139-
copyDir("scalatest/src/main/scala/org/scalatest/events", "org/scalatest/events", targetDir, List.empty) ++
140-
copyDir("scalatest/src/main/scala/org/scalatest/expectations", "org/scalatest/expectations", targetDir, List.empty) ++
141-
copyDir("scalatest/src/main/scala/org/scalatest/matchers", "org/scalatest/matchers", targetDir, List.empty) ++
142-
copyDir("scalatest/src/main/scala/org/scalatest/matchers/should", "org/scalatest/matchers/should", targetDir, List.empty) ++
143-
copyDir("scalatest/src/main/scala/org/scalatest/matchers/dsl", "org/scalatest/matchers/dsl", targetDir,
144-
List(
135+
) ++ asyncs("scalatest/src/main/scala/org/scalatest/fixture")),
136+
"org/scalatest/events" -> List.empty,
137+
"org/scalatest/expectations" -> List.empty,
138+
"org/scalatest/matchers" -> List.empty,
139+
"org/scalatest/matchers/should" -> List.empty,
140+
"org/scalatest/matchers/dsl" -> List(
145141
"JavaCollectionWrapper.scala",
146142
"JavaMapWrapper.scala"
147-
)
148-
) ++
149-
copyDir("scalatest/src/main/scala/org/scalatest/tools", "org/scalatest/tools", targetDir,
150-
List(
143+
),
144+
"org/scalatest/tools" -> List(
151145
"AboutJDialog.scala",
152146
//"AnsiColor.scala",
153147
"AnsiReset.scala",
@@ -196,40 +190,22 @@ object GenScalaTestNative {
196190
"TestSpec.scala",
197191
"XmlReporter.scala",
198192
"XmlSocketReporter.scala"
199-
)
200-
) ++
201-
copyDir("scalatest/src/main/scala/org/scalatest/exceptions", "org/scalatest/exceptions", targetDir,
202-
List(
193+
),
194+
"org/scalatest/exceptions" -> List(
203195
"StackDepthExceptionHelper.scala"
204-
)
205-
) ++
206-
copyDir("scalatest/src/main/scala/org/scalatest/time", "org/scalatest/time", targetDir, List.empty) ++
207-
copyDir("scalatest/src/main/scala/org/scalatest/words", "org/scalatest/words", targetDir, List.empty) ++
208-
copyDir("scalatest/src/main/scala/org/scalatest/enablers", "org/scalatest/enablers", targetDir, List.empty) ++
209-
copyDir("scalatest/src/main/scala/org/scalatest/funsuite", "org/scalatest/funsuite", targetDir,
210-
asyncs("scalatest/src/main/scala/org/scalatest/funsuite")
211-
) ++
212-
copyDir("scalatest/src/main/scala/org/scalatest/featurespec", "org/scalatest/featurespec", targetDir,
213-
asyncs("scalatest/src/main/scala/org/scalatest/featurespec")
214-
) ++
215-
copyDir("scalatest/src/main/scala/org/scalatest/funspec", "org/scalatest/funspec", targetDir,
216-
asyncs("scalatest/src/main/scala/org/scalatest/funspec")
217-
) ++
218-
copyDir("scalatest/src/main/scala/org/scalatest/freespec", "org/scalatest/freespec", targetDir,
219-
asyncs("scalatest/src/main/scala/org/scalatest/freespec")
220-
) ++
221-
copyDir("scalatest/src/main/scala/org/scalatest/flatspec", "org/scalatest/flatspec", targetDir,
222-
asyncs("scalatest/src/main/scala/org/scalatest/flatspec")
223-
) ++
224-
copyDir("scalatest/src/main/scala/org/scalatest/prop", "org/scalatest/prop", targetDir, List.empty) ++
225-
copyDir("scalatest/src/main/scala/org/scalatest/propspec", "org/scalatest/propspec", targetDir,
226-
asyncs("scalatest/src/main/scala/org/scalatest/propspec")
227-
) ++
228-
copyDir("scalatest/src/main/scala/org/scalatest/wordspec", "org/scalatest/wordspec", targetDir,
229-
asyncs("scalatest/src/main/scala/org/scalatest/wordspec")
230-
) ++
231-
copyDir("scalatest/src/main/scala/org/scalatest/concurrent", "org/scalatest/concurrent", targetDir,
232-
List(
196+
),
197+
"org/scalatest/time" -> List.empty,
198+
"org/scalatest/words" -> List.empty,
199+
"org/scalatest/enablers" -> List.empty,
200+
"org/scalatest/funsuite" -> asyncs("scalatest/src/main/scala/org/scalatest/funsuite"),
201+
"org/scalatest/featurespec" -> asyncs("scalatest/src/main/scala/org/scalatest/featurespec"),
202+
"org/scalatest/funspec" -> asyncs("scalatest/src/main/scala/org/scalatest/funspec"),
203+
"org/scalatest/freespec" -> asyncs("scalatest/src/main/scala/org/scalatest/freespec"),
204+
"org/scalatest/flatspec" -> asyncs("scalatest/src/main/scala/org/scalatest/flatspec"),
205+
"org/scalatest/prop" -> List.empty,
206+
"org/scalatest/propspec" -> asyncs("scalatest/src/main/scala/org/scalatest/propspec"),
207+
"org/scalatest/wordspec" -> asyncs("scalatest/src/main/scala/org/scalatest/wordspec"),
208+
"org/scalatest/concurrent" -> (List(
233209
"Waiters.scala", // skipeed because doesn't really make sense on js's single-thread environment.
234210
"Conductors.scala", // skipped because depends on PimpedReadWriteLock
235211
"ConductorFixture.scala", // skipped because depends on Conductors
@@ -248,20 +224,23 @@ object GenScalaTestNative {
248224
"DeprecatedTimeLimitedTests.scala", // skipped because js is single-threaded and does not share memory, there's no practical way to interrupt in js.
249225
"Timeouts.scala", // skipped because js is single-threaded and does not share memory, there's no practical way to interrupt in js.
250226
"TimeoutTask.scala" // skipped because timeout is not supported.,
251-
) ++ asyncs("scalatest/src/main/scala/org/scalatest/concurrent")
252-
) ++
253-
copyDir("scalatest/src/main/scala/org/scalatest/path", "org/scalatest/path", targetDir, List.empty) ++
254-
copyDir("scalatest/src/main/scala/org/scalatest/tagobjects", "org/scalatest/tagobjects", targetDir,
255-
List(
227+
) ++ asyncs("scalatest/src/main/scala/org/scalatest/concurrent")),
228+
"org/scalatest/path" -> List.empty,
229+
"org/scalatest/tagobjects" -> List(
256230
"ChromeBrowser.scala", // skipped because selenium not supported.
257231
"FirefoxBrowser.scala", // skipped because selenium not supported.
258232
"HtmlUnitBrowser.scala", // skipped because selenium not supported.
259233
"InternetExplorerBrowser.scala", // skipped because selenium not supported.
260234
"SafariBrowser.scala" // skipped because selenium not supported.
261-
)
262-
) ++
263-
copyDir("scalatest/src/main/scala/org/scalatest/verbs", "org/scalatest/verbs", targetDir, List.empty)
264-
}
235+
),
236+
"org/scalatest/verbs" -> List.empty,
237+
238+
)
239+
240+
def genScala(targetDir: File, version: String, scalaVersion: String): Seq[File] =
241+
genScalaPackages.flatMap { case (packagePath, skipList) =>
242+
copyDir("scalatest/src/main/scala/" + packagePath, packagePath, targetDir, skipList)
243+
}.toList
265244

266245
def genTest(targetDir: File, version: String, scalaVersion: String): Seq[File] = {
267246
//copyStartsWithFiles("scalatest-test/src/test/scala/org/scalatest", "org/scalatest", "Async", targetDir) ++

0 commit comments

Comments
 (0)