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

import 'package:path/path.dart' as p;
import 'package:test/test.dart';

import '../../descriptor.dart' as d;
import '../../test_pub.dart';

void main() {
  test("errors if an executable's script can't be found", () async {
    await d.dir('foo', [
      d.pubspec({
        'name': 'foo',
        'executables': {'missing': 'not_here', 'nope': null},
      }),
    ]).create();

    var pub = await startPub(args: ['global', 'activate', '-spath', '../foo']);

    expect(
      pub.stderr,
      emits('Warning: Executable "missing" runs '
          '"${p.join('bin', 'not_here.dart')}", which was not found in foo.'),
    );
    expect(
      pub.stderr,
      emits('Warning: Executable "nope" runs '
          '"${p.join('bin', 'nope.dart')}", which was not found in foo.'),
    );
    await pub.shouldExit();
  });
}
