Skip to content

Commit d2d8d57

Browse files
committed
Boost settings tests
1 parent 6f13d22 commit d2d8d57

File tree

2 files changed

+47
-11
lines changed

2 files changed

+47
-11
lines changed

compiler/test/dotty/tools/dotc/SettingsTests.scala

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ import dotty.tools.io.PlainDirectory
1313
import dotty.tools.io.Directory
1414
import dotty.tools.dotc.config.ScalaVersion
1515

16-
import java.nio.file._
16+
import java.nio.file.*
1717

1818
import org.junit.Test
19-
import org.junit.Assert._
19+
import org.junit.Assert.{assertEquals, assertFalse, assertNotEquals, assertTrue}
2020
import scala.util.Using
2121

22-
class SettingsTests {
22+
class SettingsTests:
23+
24+
private val TestCategory = new SettingCategory { def prefixLetter = "T" }
2325

2426
@Test def missingOutputDir: Unit =
2527
val options = Array("-d", "not_here")
@@ -110,7 +112,7 @@ class SettingsTests {
110112
false
111113

112114
val default = Settings.defaultState
113-
dotty.tools.assertThrows[IllegalArgumentException](checkMessage("found: not an option of type java.lang.String, required: Boolean")) {
115+
assertThrows[IllegalArgumentException](checkMessage("found: not an option of type java.lang.String, required: Boolean")) {
114116
Settings.option.updateIn(default, "not an option")
115117
}
116118

@@ -170,11 +172,12 @@ class SettingsTests {
170172
)
171173
assertEquals(expectedErrors, summary.errors)
172174
}
175+
end validateChoices
173176

174177
@Test def `Allow IntSetting's to be set with a colon`: Unit =
175178
object Settings extends SettingGroup:
176179
val foo = IntSetting(RootSetting, "foo", "foo", 80)
177-
import Settings._
180+
import Settings.*
178181

179182
val args = List("-foo:100")
180183
val summary = processArguments(args, processAll = true)
@@ -189,7 +192,7 @@ class SettingsTests {
189192
val bar = BooleanSetting(RootSetting, "bar", "bar", true)
190193
val baz = BooleanSetting(RootSetting, "baz", "baz", false)
191194
val qux = BooleanSetting(RootSetting, "qux", "qux", false)
192-
import Settings._
195+
import Settings.*
193196

194197
val args = List("-foo:true", "-bar:false", "-baz", "-qux:true", "-qux:false")
195198
val summary = processArguments(args, processAll = true)
@@ -208,7 +211,7 @@ class SettingsTests {
208211
val defaultDir = new PlainDirectory(Directory("."))
209212
val testOutput = OutputSetting(RootSetting, "testOutput", "testOutput", "", defaultDir)
210213

211-
import Settings._
214+
import Settings.*
212215

213216
Files.write(file, "test".getBytes())
214217
val fileStateBefore = String(Files.readAllBytes(file))
@@ -228,7 +231,7 @@ class SettingsTests {
228231
val defaultDir = new PlainDirectory(Directory("."))
229232
val testOutput = OutputSetting(RootSetting, "testOutput", "testOutput", "", defaultDir, preferPrevious = true)
230233

231-
import Settings._
234+
import Settings.*
232235

233236
Files.write(file1, "test1".getBytes())
234237
Files.write(file2, "test2".getBytes())
@@ -253,7 +256,7 @@ class SettingsTests {
253256
val defaultDir = new PlainDirectory(Directory("."))
254257
val testOutput = OutputSetting(RootSetting, "testOutput", "testOutput", "", defaultDir, preferPrevious = true, deprecation = Deprecation.renamed("XtestOutput"))
255258

256-
import Settings._
259+
import Settings.*
257260

258261
Files.write(file, "test".getBytes())
259262
val fileStateBefore = String(Files.readAllBytes(file))
@@ -280,7 +283,7 @@ class SettingsTests {
280283
val phasesSetting = PhasesSetting(RootSetting, "phasesSetting", "phasesSetting", "all")
281284
val versionSetting= VersionSetting(RootSetting, "versionSetting", "versionSetting")
282285

283-
import Settings._
286+
import Settings.*
284287
Using.resource(Files.createTempDirectory("testDir")) { dir =>
285288

286289
val args = List(
@@ -321,8 +324,17 @@ class SettingsTests {
321324

322325
}(Files.deleteIfExists(_))
323326

327+
@Test def `Multi setting with empty default errors if missing`: Unit =
328+
object Settings extends SettingGroup:
329+
val answers = MultiStringSetting(TestCategory, name="Tanswer", helpArg="your reply", descr="answer me this")
330+
import Settings.{answers, processArguments}
331+
val summary = processArguments("-Tanswer" :: Nil, processAll = true)
332+
assertTrue(summary.warnings.isEmpty)
333+
assertFalse(summary.errors.isEmpty)
334+
withProcessedArgs(summary):
335+
assertTrue(answers.value.isEmpty)
336+
324337
private def withProcessedArgs(summary: ArgsSummary)(f: SettingsState ?=> Unit) = f(using summary.sstate)
325338

326339
extension [T](setting: Setting[T])
327340
private def value(using ss: SettingsState): T = setting.valueIn(ss)
328-
}

compiler/test/dotty/tools/dotc/config/ScalaSettingsTests.scala

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,4 +306,28 @@ class ScalaSettingsTests:
306306
assertEquals(0, result.warnings.length)
307307
assertEquals(1, result.errors.length)
308308

309+
@Test def `Vphases takes optional phase names`: Unit =
310+
val settings = ScalaSettings
311+
def process(args: List[String]) =
312+
val summary = ArgsSummary(settings.defaultState, args, errors = Nil, warnings = Nil)
313+
settings.processArguments(summary, processAll = true, skipped = Nil)
314+
locally:
315+
val summary = process("-Vphases:foo,bar,baz" :: Nil)
316+
assertTrue(summary.errors.isEmpty && summary.warnings.isEmpty)
317+
assertEquals(List("foo","bar","baz"), settings.Vphases.valueIn(summary.sstate))
318+
locally:
319+
val summary = process(List("-Vphases","foo","-Vphases","bar","-Vphases","baz"))
320+
assertTrue(summary.errors.isEmpty && summary.warnings.isEmpty)
321+
assertEquals(List("foo","bar","baz"), settings.Vphases.valueIn(summary.sstate))
322+
locally:
323+
val summary = process(List("-Vphases","--","foo"))
324+
assertTrue(summary.errors.isEmpty && summary.warnings.isEmpty)
325+
assertEquals(List("none"), settings.Vphases.valueIn(summary.sstate)) // nonempty default required
326+
assertEquals(Some(List("none")), settings.Vphases.userValueIn(summary.sstate)) // nonempty default required
327+
locally:
328+
val summary = process(Nil)
329+
assertTrue(summary.errors.isEmpty && summary.warnings.isEmpty)
330+
assertEquals(List("none"), settings.Vphases.valueIn(summary.sstate)) // nonempty default required
331+
assertEquals(None, settings.Vphases.userValueIn(summary.sstate))
332+
309333
end ScalaSettingsTests

0 commit comments

Comments
 (0)