// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// Tests that every .status file in the Dart repository can be successfully
/// parsed.
import 'dart:io';
import 'package:status_file/canonical_status_file.dart';

final Uri repoRoot = Platform.script.resolve("../../../");

void main() {
  // Parse every status file in the repository.
  for (var directory in ["tests", "runtime/tests"]) {
    for (var entry in new Directory.fromUri(repoRoot.resolve(directory))
        .listSync(recursive: true)) {
      if (!entry.path.endsWith(".status")) continue;

      // Inside the co19 repository, there is a status file that doesn't appear
      // to be valid and looks more like some kind of template or help document.
      // Ignore it.
      var co19StatusFile = repoRoot.resolve('tests/co19/src/co19.status');
      var co19_2StatusFile = repoRoot.resolve('tests/co19_2/src/co19.status');
      if (FileSystemEntity.identicalSync(
              entry.path, new File.fromUri(co19StatusFile).path) ||
          FileSystemEntity.identicalSync(
              entry.path, new File.fromUri(co19_2StatusFile).path)) {
        continue;
      }

      try {
        var statusFile = new StatusFile.read(entry.path);
        statusFile.toString();
      } catch (err, st) {
        print(err);
        print(st);
        throw new Exception("Could not parse '${entry.path}'.\n$err");
      }
    }
  }
}
