anchor.diff:        throw FormatException('${errorPrefix}Second "fetch" directive does not match expected pattern (expected "git -C tests checkout HASH").');
       if (update.isEmpty)
         throw FormatException('${errorPrefix}No "update" directives specified. At least one directory must be specified. (It can be "." to just upgrade the root of the repository.)');
  -    if (test.isEmpty)
  -      throw FormatException('${errorPrefix}No "test" directives specified for this platform. At least one command must be specified to run tests on each of Windows, MacOS, and Linux.');
  +    if (!hasTests)
  +      throw FormatException('${errorPrefix}No "test" directives specified. At least one command must be specified to run tests.');
       return TestFile._(
         List<String>.unmodifiable(contacts),
         List<String>.unmodifiable(fetch),
  
positive.code:       } else if (line.startsWith('update=')) {
          update.add(Directory(line.substring(7)));
        } else if (line.startsWith('test=')) {
          test.add(line.substring(5));
        } else if (line.startsWith('test.windows=')) {
          if (Platform.isWindows)
            test.add(line.substring(13));
        } else if (line.startsWith('test.macos=')) {
          if (Platform.isMacOS)
            test.add(line.substring(11));
        } else if (line.startsWith('test.linux=')) {
          if (Platform.isLinux)
            test.add(line.substring(11));
        } else if (line.startsWith('test.posix=')) {
          if (Platform.isLinux || Platform.isMacOS)
            test.add(line.substring(11));
        } else {
  
negative.code:     final List<String> fetch = <String>[];
      final List<Directory> update = <Directory>[];
      final List<String> test = <String>[];
      bool hasTests = false;
      for (final String line in file.readAsLinesSync().map((String line) => line.trim())) {
        if (line.isEmpty) {
          // blank line
  