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.