@@ -5,8 +5,14 @@ import CommandLineParser.tokenize
5
5
import Settings ._
6
6
7
7
import org .junit .Test
8
+ import org .junit .Ignore
8
9
import org .junit .Assert ._
9
10
import core .Decorators .toMessage
11
+ import dotty .tools .io .{Path , PlainFile }
12
+
13
+ import java .net .URI
14
+ import java .nio .file .Files
15
+ import scala .util .Using
10
16
11
17
class ScalaSettingsTests :
12
18
@@ -83,4 +89,115 @@ class ScalaSettingsTests:
83
89
val nowr = new Diagnostic .Warning (" This is a problem." .toMessage, util.NoSourcePosition )
84
90
assertEquals(Action .Silent , sut.action(nowr))
85
91
92
+ @ Ignore (" LTS backport rejected: https://github.com/scala/scala3/pull/18503" )
93
+ @ Test def `i18367 rightmost WConf flags take precedence over flags to the left` : Unit =
94
+ import reporting .{Action , Diagnostic }
95
+ val sets = new ScalaSettings
96
+ val args = List (" -Wconf:cat=deprecation:e" , " -Wconf:cat=deprecation:s" )
97
+ val sumy = ArgsSummary (sets.defaultState, args, errors = Nil , warnings = Nil )
98
+ val proc = sets.processArguments(sumy, processAll = true , skipped = Nil )
99
+ val conf = sets.Wconf .valueIn(proc.sstate)
100
+ val msg = " Don't use that!" .toMessage
101
+ val depr = new Diagnostic .DeprecationWarning (msg, util.NoSourcePosition )
102
+ val sut = reporting.WConf .fromSettings(conf).getOrElse(??? )
103
+ assertEquals(Action .Silent , sut.action(depr))
104
+
105
+
106
+ private def wconfSrcFilterTest (argsStr : String ,
107
+ warning : reporting.Diagnostic .Warning ): Either [List [String ], reporting.Action ] =
108
+ import reporting .Diagnostic
109
+ val settings = new ScalaSettings
110
+ val args = ArgsSummary (settings.defaultState, List (argsStr), errors = Nil , warnings = Nil )
111
+ val proc = settings.processArguments(args, processAll = true , skipped = Nil )
112
+ val wconfStr = settings.Wconf .valueIn(proc.sstate)
113
+ val wconf = reporting.WConf .fromSettings(wconfStr)
114
+ wconf.map(_.action(warning))
115
+
116
+ @ Test def `WConf src filter silences warnings from a matching path for virtual file` : Unit =
117
+ val result = wconfSrcFilterTest(
118
+ argsStr = " -Wconf:src=path/.*:s" ,
119
+ warning = reporting.Diagnostic .Warning (
120
+ " A warning" .toMessage,
121
+ util.SourcePosition (
122
+ source = util.SourceFile .virtual(new URI (" file:///some/path/file.scala" ), " " ),
123
+ span = util.Spans .Span (1L )
124
+ )
125
+ )
126
+ )
127
+ assertEquals(result, Right (reporting.Action .Silent ))
128
+
129
+ @ Test def `WConf src filter doesn't silence warnings from a non-matching path` : Unit =
130
+ val result = wconfSrcFilterTest(
131
+ argsStr = " -Wconf:src=another/.*:s" ,
132
+ warning = reporting.Diagnostic .Warning (
133
+ " A warning" .toMessage,
134
+ util.SourcePosition (
135
+ source = util.SourceFile .virtual(new URI (" file:///some/path/file.scala" ), " " ),
136
+ span = util.Spans .Span (1L )
137
+ )
138
+ )
139
+ )
140
+ assertEquals(result, Right (reporting.Action .Warning ))
141
+
142
+ @ Test def `WConf src filter silences warnings from a matching path for real file` : Unit =
143
+ val result = Using .resource(Files .createTempFile(" myfile" , " .scala" ).nn) { file =>
144
+ wconfSrcFilterTest(
145
+ argsStr = " -Wconf:src=myfile.*?\\ .scala:s" ,
146
+ warning = reporting.Diagnostic .Warning (
147
+ " A warning" .toMessage,
148
+ util.SourcePosition (
149
+ source = util.SourceFile (new PlainFile (Path (file)), " UTF-8" ),
150
+ span = util.Spans .Span (1L )
151
+ )
152
+ )
153
+ )
154
+ }(Files .deleteIfExists(_))
155
+ assertEquals(result, Right (reporting.Action .Silent ))
156
+
157
+ @ Test def `WConf src filter doesn't silence warnings from a non-matching path for real file` : Unit =
158
+ val result = Using .resource(Files .createTempFile(" myfile" , " .scala" ).nn) { file =>
159
+ wconfSrcFilterTest(
160
+ argsStr = " -Wconf:src=another.*?\\ .scala:s" ,
161
+ warning = reporting.Diagnostic .Warning (
162
+ " A warning" .toMessage,
163
+ util.SourcePosition (
164
+ source = util.SourceFile (new PlainFile (Path (file)), " UTF-8" ),
165
+ span = util.Spans .Span (1L )
166
+ )
167
+ )
168
+ )
169
+ }(Files .deleteIfExists(_))
170
+ assertEquals(result, Right (reporting.Action .Warning ))
171
+
172
+ @ Test def `WConf src filter reports an error on an invalid regex` : Unit =
173
+ val result = wconfSrcFilterTest(
174
+ argsStr = """ -Wconf:src=\:s""" ,
175
+ warning = reporting.Diagnostic .Warning (
176
+ " A warning" .toMessage,
177
+ util.SourcePosition (
178
+ source = util.SourceFile .virtual(new URI (" file:///some/path/file.scala" ), " " ),
179
+ span = util.Spans .Span (1L )
180
+ )
181
+ ),
182
+ )
183
+ assertTrue(
184
+ result.left.exists(errors =>
185
+ errors.sizeIs == 1 && errors.headOption.exists(_.startsWith(" invalid pattern" ))
186
+ )
187
+ )
188
+
189
+ @ Ignore (" LTS backport rejected: https://github.com/scala/scala3/pull/18503" )
190
+ @ Test def `WConf src filter can be mixed with other filters with rightmost taking precedence` : Unit =
191
+ val result = wconfSrcFilterTest(
192
+ argsStr = " -Wconf:src=.*:s,cat=deprecation:e" ,
193
+ warning = reporting.Diagnostic .DeprecationWarning (
194
+ " A warning" .toMessage,
195
+ util.SourcePosition (
196
+ source = util.SourceFile .virtual(new URI (" file:///some/path/file.scala" ), " " ),
197
+ span = util.Spans .Span (1L )
198
+ )
199
+ )
200
+ )
201
+ assertEquals(result, Right (reporting.Action .Error ))
202
+
86
203
end ScalaSettingsTests
0 commit comments