Add testing for the set literals experiment (#1928)
* Beginning of set literals tests
* Verify set literals with test and clean up a lint
diff --git a/test/model_test.dart b/test/model_test.dart
index ff7ea0f..8982039 100644
--- a/test/model_test.dart
+++ b/test/model_test.dart
@@ -53,6 +53,7 @@
PackageGraph packageGraph;
PackageGraph packageGraphSmall;
PackageGraph packageGraphErrors;
+ PackageGraph packageGraphExperiments;
PackageGraph ginormousPackageGraph;
Library exLibrary;
Library fakeLibrary;
@@ -67,6 +68,7 @@
packageGraph = utils.testPackageGraph;
packageGraphSmall = utils.testPackageGraphSmall;
packageGraphErrors = utils.testPackageGraphErrors;
+ packageGraphExperiments = utils.testPackageGraphExperiments;
ginormousPackageGraph = utils.testPackageGraphGinormous;
exLibrary = packageGraph.libraries.firstWhere((lib) => lib.name == 'ex');
errorLibrary = packageGraphErrors.libraries
@@ -82,6 +84,40 @@
sdkAsPackageGraph = utils.testPackageGraphSdk;
});
+ // Experimental features not yet enabled by default. Move tests out of this block
+ // when the feature is enabled by default.
+ group('Experiments', () {
+ Library main;
+ TopLevelVariable aComplexSet, inferredTypeSet, specifiedSet, untypedMap, typedSet;
+
+ setUpAll(() {
+ main = packageGraphExperiments.libraries.firstWhere((lib) => lib.name == 'main');
+ aComplexSet = main.constants.firstWhere((v) => v.name == 'aComplexSet');
+ inferredTypeSet = main.constants.firstWhere((v) => v.name == 'inferredTypeSet');
+ specifiedSet = main.constants.firstWhere((v) => v.name == 'specifiedSet');
+ untypedMap = main.constants.firstWhere((v) => v.name == 'untypedMap');
+ typedSet = main.constants.firstWhere((v) => v.name == 'typedSet');
+ });
+
+ test('Set literals test', () {
+ expect(aComplexSet.modelType.name, equals('Set'));
+ expect(aComplexSet.modelType.typeArguments.map((a) => a.name).toList(), equals(['AClassContainingLiterals']));
+ expect(aComplexSet.constantValue, equals('const {const AClassContainingLiterals(3, 5)}'));
+ expect(inferredTypeSet.modelType.name, equals('Set'));
+ expect(inferredTypeSet.modelType.typeArguments.map((a) => a.name).toList(), equals(['num']));
+ expect(inferredTypeSet.constantValue, equals('const {1, 2.5, 3}'));
+ expect(specifiedSet.modelType.name, equals('Set'));
+ expect(specifiedSet.modelType.typeArguments.map((a) => a.name).toList(), equals(['int']));
+ expect(specifiedSet.constantValue, equals('const {}'));
+ expect(untypedMap.modelType.name, equals('Map'));
+ expect(untypedMap.modelType.typeArguments.map((a) => a.name).toList(), equals(['dynamic', 'dynamic']));
+ expect(untypedMap.constantValue, equals('const {}'));
+ expect(typedSet.modelType.name, equals('Set'));
+ expect(typedSet.modelType.typeArguments.map((a) => a.name).toList(), equals(['String']));
+ expect(typedSet.constantValue, equals('const <String> {}'));
+ });
+ });
+
group('Tools', () {
Class toolUser;
Class _NonCanonicalToolUser, CanonicalToolUser, PrivateLibraryToolUser;
diff --git a/test/src/utils.dart b/test/src/utils.dart
index acfcad0..ff6f728 100644
--- a/test/src/utils.dart
+++ b/test/src/utils.dart
@@ -21,6 +21,7 @@
Directory sdkDir;
PackageMeta sdkPackageMeta;
PackageGraph testPackageGraph;
+PackageGraph testPackageGraphExperiments;
PackageGraph testPackageGraphGinormous;
PackageGraph testPackageGraphSmall;
PackageGraph testPackageGraphErrors;
@@ -28,6 +29,7 @@
final Directory testPackageBadDir = new Directory('testing/test_package_bad');
final Directory testPackageDir = new Directory('testing/test_package');
+final Directory testPackageExperimentsDir = new Directory('testing/test_package_experiments');
final Directory testPackageMinimumDir =
new Directory('testing/test_package_minimum');
final Directory testPackageWithEmbedderYaml =
@@ -78,6 +80,11 @@
additionalArguments:
additionalArguments + ['--auto-include-dependencies']);
+ testPackageGraphExperiments = await bootBasicPackage(
+ 'testing/test_package_experiments', [],
+ additionalArguments: additionalArguments + ['--enable-experiment', 'set-literals']
+ );
+
testPackageGraphSmall = await bootBasicPackage(
'testing/test_package_small', [],
additionalArguments: additionalArguments);
diff --git a/testing/test_package_experiments/lib/main.dart b/testing/test_package_experiments/lib/main.dart
new file mode 100644
index 0000000..23c65c0
--- /dev/null
+++ b/testing/test_package_experiments/lib/main.dart
@@ -0,0 +1,16 @@
+const inferredTypeSet = {1, 2.5, 3};
+const Set<int> specifiedSet = const {};
+const untypedMap = {};
+const typedSet = <String>{};
+
+class AClassContainingLiterals {
+ final int value1;
+ final int value2;
+
+ const AClassContainingLiterals(this.value1, this.value2);
+
+ @override
+ bool operator==(Object other) => other is AClassContainingLiterals && value1 == other.value1;
+}
+
+const aComplexSet = {AClassContainingLiterals(3, 5)};
\ No newline at end of file
diff --git a/testing/test_package_experiments/pubspec.yaml b/testing/test_package_experiments/pubspec.yaml
new file mode 100644
index 0000000..35afe7f
--- /dev/null
+++ b/testing/test_package_experiments/pubspec.yaml
@@ -0,0 +1,3 @@
+name: test_package_experiments
+version: 0.0.1
+description: Experimental flags are tested here.
diff --git a/tool/grind.dart b/tool/grind.dart
index a5cfdd4..64ef21b 100644
--- a/tool/grind.dart
+++ b/tool/grind.dart
@@ -801,7 +801,6 @@
Future<void> checkBuild() async {
var originalFileContents = new Map<String, String>();
var differentFiles = <String>[];
- var launcher = new SubprocessLauncher('check-build');
// Load original file contents into memory before running the builder;
// it modifies them in place.