// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:io' as io;

import 'package:flutter_tools/src/dart/dependencies.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:test/test.dart';
import 'src/context.dart';

void main()  {
  group('DartDependencySetBuilder', () {
    final String basePath = fs.path.dirname(platform.script.path);
    final String dataPath = fs.path.join(basePath, 'data', 'dart_dependencies_test');
    testUsingContext('good', () {
      final String testPath = fs.path.join(dataPath, 'good');
      final String mainPath = fs.path.join(testPath, 'main.dart');
      final String packagesPath = fs.path.join(testPath, '.packages');
      DartDependencySetBuilder builder =
          new DartDependencySetBuilder(mainPath, testPath, packagesPath);
      Set<String> dependencies = builder.build();
      expect(dependencies.contains('main.dart'), isTrue);
      expect(dependencies.contains('foo.dart'), isTrue);
    });
    testUsingContext('syntax_error', () {
      final String testPath = fs.path.join(dataPath, 'syntax_error');
      final String mainPath = fs.path.join(testPath, 'main.dart');
      final String packagesPath = fs.path.join(testPath, '.packages');
      DartDependencySetBuilder builder =
          new DartDependencySetBuilder(mainPath, testPath, packagesPath);
      try {
        builder.build();
        fail('expect an assertion to be thrown.');
      } catch (e) {
        expect(e, const isInstanceOf<String>());
        expect(e.contains('unexpected token \'bad\''), isTrue);
      }
    });
  }, skip: io.Platform.isWindows); // TODO(goderbauer): enable when sky_snapshot is available
}