@@ -17,6 +17,8 @@ const String _defaultFakeNamespace = 'dev.flutter.foo';
17
17
void main () {
18
18
late CommandRunner <void > runner;
19
19
late Directory packagesDir;
20
+ const String javaIncompatabilityIndicator =
21
+ 'build.gradle(.kts) must set an explicit Java compatibility version.' ;
20
22
21
23
setUp (() {
22
24
final GitDir gitDir;
@@ -46,6 +48,9 @@ void main() {
46
48
bool useDeprecatedCompileSdkVersion = false ,
47
49
bool usePropertyAssignment = true ,
48
50
String compileSdk = '36' ,
51
+ bool includeKotlinOptions = true ,
52
+ bool commentKotlinOptions = false ,
53
+ bool useDeprecatedJvmTarget = false ,
49
54
}) {
50
55
final File buildGradle = package
51
56
.platformDirectory (FlutterPlatform .android)
@@ -69,11 +74,17 @@ java {
69
74
70
75
''' ;
71
76
final String sourceCompat =
72
- '${commentSourceLanguage ? '// ' : '' }sourceCompatibility = JavaVersion.VERSION_11 ' ;
77
+ '${commentSourceLanguage ? '// ' : '' }sourceCompatibility = JavaVersion.VERSION_17 ' ;
73
78
final String targetCompat =
74
- '${commentSourceLanguage ? '// ' : '' }targetCompatibility = JavaVersion.VERSION_11 ' ;
79
+ '${commentSourceLanguage ? '// ' : '' }targetCompatibility = JavaVersion.VERSION_17 ' ;
75
80
final String namespace =
76
81
" ${commentNamespace ? '// ' : '' }namespace = '$_defaultFakeNamespace '" ;
82
+ final String jvmTarget =
83
+ useDeprecatedJvmTarget ? '17' : 'JavaVersion.VERSION_17.toString()' ;
84
+ final String kotlinConfig = '''
85
+ ${commentKotlinOptions ? '//' : '' }kotlinOptions {
86
+ ${commentKotlinOptions ? '//' : '' }jvmTarget = $jvmTarget
87
+ ${commentKotlinOptions ? '//' : '' }}''' ;
77
88
78
89
buildGradle.writeAsStringSync ('''
79
90
group 'dev.flutter.plugins.fake'
@@ -101,6 +112,7 @@ ${warningsConfigured ? warningConfig : ''}
101
112
${includeSourceCompat ? sourceCompat : '' }
102
113
${includeTargetCompat ? targetCompat : '' }
103
114
}
115
+ ${includeKotlinOptions ? kotlinConfig : '' }
104
116
testOptions {
105
117
unitTests.includeAndroidResources = true
106
118
}
@@ -351,8 +363,7 @@ dependencies {
351
363
expect (
352
364
output,
353
365
containsAllInOrder (< Matcher > [
354
- contains (
355
- 'build.gradle must set an explicit Java compatibility version.' ),
366
+ contains (javaIncompatabilityIndicator),
356
367
]),
357
368
);
358
369
});
@@ -375,8 +386,7 @@ dependencies {
375
386
expect (
376
387
output,
377
388
containsAllInOrder (< Matcher > [
378
- contains (
379
- 'build.gradle must set an explicit Java compatibility version.' ),
389
+ contains (javaIncompatabilityIndicator),
380
390
]),
381
391
);
382
392
});
@@ -457,8 +467,7 @@ dependencies {
457
467
expect (
458
468
output,
459
469
containsAllInOrder (< Matcher > [
460
- contains (
461
- 'build.gradle must set an explicit Java compatibility version.' ),
470
+ contains (javaIncompatabilityIndicator),
462
471
]),
463
472
);
464
473
});
@@ -480,8 +489,7 @@ dependencies {
480
489
expect (
481
490
output,
482
491
containsAllInOrder (< Matcher > [
483
- contains (
484
- 'build.gradle must set an explicit Java compatibility version.' ),
492
+ contains (javaIncompatabilityIndicator),
485
493
]),
486
494
);
487
495
});
@@ -1162,4 +1170,95 @@ dependencies {
1162
1170
);
1163
1171
});
1164
1172
});
1173
+
1174
+ group ('kotlinOptions check' , () {
1175
+ test ('passes when kotlin options are specified' , () async {
1176
+ final RepositoryPackage package =
1177
+ createFakePlugin ('a_plugin' , packagesDir, examples: < String > []);
1178
+ writeFakePluginBuildGradle (
1179
+ package,
1180
+ includeLanguageVersion: true ,
1181
+ // ignore: avoid_redundant_argument_values ensure codepath is tested if defaults change.
1182
+ includeKotlinOptions: true ,
1183
+ );
1184
+ writeFakeManifest (package);
1185
+
1186
+ final List <String > output =
1187
+ await runCapturingPrint (runner, < String > ['gradle-check' ]);
1188
+
1189
+ expect (
1190
+ output,
1191
+ containsAllInOrder (< Matcher > [
1192
+ contains ('Validating android/build.gradle' ),
1193
+ ]),
1194
+ );
1195
+ });
1196
+
1197
+ test ('passes when kotlin options are not specified' , () async {
1198
+ final RepositoryPackage package =
1199
+ createFakePlugin ('a_plugin' , packagesDir, examples: < String > []);
1200
+ writeFakePluginBuildGradle (
1201
+ package,
1202
+ includeLanguageVersion: true ,
1203
+ includeKotlinOptions: false ,
1204
+ );
1205
+ writeFakeManifest (package);
1206
+
1207
+ final List <String > output =
1208
+ await runCapturingPrint (runner, < String > ['gradle-check' ]);
1209
+
1210
+ expect (
1211
+ output,
1212
+ containsAllInOrder (< Matcher > [
1213
+ contains ('Validating android/build.gradle' ),
1214
+ ]),
1215
+ );
1216
+ });
1217
+
1218
+ test ('passes when kotlin options commented out' , () async {
1219
+ final RepositoryPackage package =
1220
+ createFakePlugin ('a_plugin' , packagesDir, examples: < String > []);
1221
+ writeFakePluginBuildGradle (
1222
+ package,
1223
+ includeLanguageVersion: true ,
1224
+ commentKotlinOptions: true ,
1225
+ );
1226
+ writeFakeManifest (package);
1227
+
1228
+ final List <String > output =
1229
+ await runCapturingPrint (runner, < String > ['gradle-check' ]);
1230
+
1231
+ expect (
1232
+ output,
1233
+ containsAllInOrder (< Matcher > [
1234
+ contains ('Validating android/build.gradle' ),
1235
+ ]),
1236
+ );
1237
+ });
1238
+
1239
+ test ('fails when kotlin options uses string jvm version' , () async {
1240
+ final RepositoryPackage package =
1241
+ createFakePlugin ('a_plugin' , packagesDir, examples: < String > []);
1242
+ writeFakePluginBuildGradle (
1243
+ package,
1244
+ includeLanguageVersion: true ,
1245
+ useDeprecatedJvmTarget: true ,
1246
+ );
1247
+ writeFakeManifest (package);
1248
+
1249
+ Error ? commandError;
1250
+ final List <String > output = await runCapturingPrint (
1251
+ runner, < String > ['gradle-check' ], errorHandler: (Error e) {
1252
+ commandError = e;
1253
+ });
1254
+
1255
+ expect (commandError, isA <ToolExit >());
1256
+ expect (
1257
+ output,
1258
+ containsAllInOrder (< Matcher > [
1259
+ contains ('build.gradle(.kts) sets jvmTarget then it must use JavaVersion syntax' ),
1260
+ ]),
1261
+ );
1262
+ });
1263
+ });
1165
1264
}
0 commit comments