// Copyright (c) 2012, 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.

/// A utility function for test and tools that compensates (at least for very
/// simple cases) for file-dependent programs being run from different
/// directories. The important cases are
///   - running in the directory that contains the test itself, i.e.
///    test/ or a sub-directory.
///   - running in root of this package, which is where the editor and bots will
///   run things by default
library data_directory;

import "dart:io";
import "package:path/path.dart" as path;

String get dataDirectory {
  return path.join(intlDirectory, datesRelativeToIntl);
}

/// Returns whether [dir] is the root of the `intl` package. We validate that it
/// is by looking for a pubspec file with the entry `name: intl`.
bool _isIntlRoot(String dir) {
  var file = new File(path.join(dir, 'pubspec.yaml'));
  if (!file.existsSync()) return false;
  return file.readAsStringSync().contains('name: intl\n');
}

String get intlDirectory {
  var dir = path.fromUri(Platform.script);
  var root = path.rootPrefix(dir);

  while (dir != root) {
    if (_isIntlRoot(dir)) return dir;
    dir = path.dirname(dir);
  }
  throw new UnsupportedError(
      'Cannot find the root directory of the `intl` package.');
}

String get datesRelativeToIntl => path.join('lib', 'src', 'data', 'dates');
