@@ -7,6 +7,11 @@ import Settings._
77import org .junit .Test
88import org .junit .Assert ._
99import core .Decorators .toMessage
10+ import dotty .tools .io .{Path , PlainFile }
11+
12+ import java .net .URI
13+ import java .nio .file .Files
14+ import scala .util .Using
1015
1116class ScalaSettingsTests :
1217
@@ -96,5 +101,61 @@ class ScalaSettingsTests:
96101 assertEquals(Action .Silent , sut.action(depr))
97102
98103
104+ private def wconfSrcFilterTest (argsStr : String , source : util.SourceFile , expectedAction : reporting.Action ): Unit =
105+ import reporting .Diagnostic
106+ val settings = new ScalaSettings
107+ val args = ArgsSummary (settings.defaultState, List (argsStr), errors = Nil , warnings = Nil )
108+ val proc = settings.processArguments(args, processAll = true , skipped = Nil )
109+ val wconfStr = settings.Wconf .valueIn(proc.sstate)
110+ val warning = new Diagnostic .Warning (
111+ " A warning" .toMessage,
112+ util.SourcePosition (
113+ source = source,
114+ span = util.Spans .Span (1L )
115+ )
116+ )
117+ val wconf = reporting.WConf .fromSettings(wconfStr)
118+ assertEquals(Right (expectedAction), wconf.map(_.action(warning)))
119+
120+ @ Test def `WConf src filter silences warnings from a matching path for virtual file` : Unit =
121+ wconfSrcFilterTest(
122+ argsStr = " -Wconf:src=path/.*:s" ,
123+ source = util.SourceFile .virtual(new URI (" file:///some/path/file.scala" ), " " ),
124+ expectedAction = reporting.Action .Silent
125+ )
126+
127+ @ Test def `WConf src filter doesn't silence warnings from a non-matching path` : Unit =
128+ wconfSrcFilterTest(
129+ argsStr = " -Wconf:src=another/.*:s" ,
130+ source = util.SourceFile .virtual(new URI (" file:///some/path/file.scala" ), " " ),
131+ expectedAction = reporting.Action .Warning
132+ )
133+
134+ @ Test def `WConf src filter silences warnings from a matching path for real file` : Unit =
135+ Using .resource(Files .createTempFile(" myfile" , " .scala" ).nn) { file =>
136+ wconfSrcFilterTest(
137+ argsStr = " -Wconf:src=myfile.*?\\ .scala:s" ,
138+ source = util.SourceFile (new PlainFile (Path (file)), " UTF-8" ),
139+ expectedAction = reporting.Action .Silent
140+ )
141+ }(Files .deleteIfExists(_))
142+
143+ @ Test def `WConf src filter doesn't silence warnings from a non-matching path for real file` : Unit =
144+ Using .resource(Files .createTempFile(" myfile" , " .scala" ).nn) { file =>
145+ wconfSrcFilterTest(
146+ argsStr = " -Wconf:src=another.*?\\ .scala:s" ,
147+ source = util.SourceFile (new PlainFile (Path (file)), " UTF-8" ),
148+ expectedAction = reporting.Action .Warning
149+ )
150+ }(Files .deleteIfExists(_))
151+
152+ @ Test def `WConf src filter works when cache is not empty` : Unit =
153+ (0 to 1 ).foreach { _ =>
154+ wconfSrcFilterTest(
155+ argsStr = " -Wconf:src=path/.*:s" ,
156+ source = util.SourceFile .virtual(new URI (" file:///some/path/file.scala" ), " " ),
157+ expectedAction = reporting.Action .Silent
158+ )
159+ }
99160
100161end ScalaSettingsTests
0 commit comments