| // 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. | 
 |  | 
 | import 'package:pub/src/exit_codes.dart' as exit_codes; | 
 |  | 
 | import 'package:test/test.dart'; | 
 |  | 
 | import 'descriptor.dart' as d; | 
 | import 'test_pub.dart'; | 
 |  | 
 | void main() { | 
 |   forBothPubGetAndUpgrade((command) { | 
 |     group('requires', () { | 
 |       test('a pubspec', () async { | 
 |         await d.dir(appPath, []).create(); | 
 |  | 
 |         await pubCommand( | 
 |           command, | 
 |           error: contains( | 
 |             'Found no `pubspec.yaml` file in `${d.path(appPath)}` or parent directories', | 
 |           ), | 
 |           exitCode: exit_codes.NO_INPUT, | 
 |         ); | 
 |       }); | 
 |  | 
 |       test('a pubspec with a "name" key', () async { | 
 |         await d.dir(appPath, [ | 
 |           d.pubspec({ | 
 |             'dependencies': {'foo': null}, | 
 |           }), | 
 |         ]).create(); | 
 |  | 
 |         await pubCommand( | 
 |           command, | 
 |           error: contains('Missing the required "name" field.'), | 
 |           exitCode: exit_codes.DATA, | 
 |         ); | 
 |       }); | 
 |     }); | 
 |  | 
 |     test('adds itself to the .dart_tool/package_config.json file', () async { | 
 |       // The package should use the name in the pubspec, not the name of the | 
 |       // directory. | 
 |       await d.dir(appPath, [ | 
 |         d.pubspec({'name': 'myapp_name'}), | 
 |         d.libDir('myapp_name'), | 
 |       ]).create(); | 
 |  | 
 |       await pubCommand(command); | 
 |  | 
 |       await d.dir('myapp', [ | 
 |         d.packageConfigFile( | 
 |           [d.packageConfigEntry(name: 'myapp_name', path: '.')], | 
 |         ), | 
 |       ]).validate(); | 
 |     }); | 
 |  | 
 |     test('reports a solver failure', () async { | 
 |       // myapp depends on foo and bar which both depend on baz with mismatched | 
 |       // descriptions. | 
 |       await d.dir('deps', [ | 
 |         d.dir('foo', [ | 
 |           d.pubspec({ | 
 |             'name': 'foo', | 
 |             'dependencies': { | 
 |               'baz': {'path': '../baz1'}, | 
 |             }, | 
 |           }), | 
 |         ]), | 
 |         d.dir('bar', [ | 
 |           d.pubspec({ | 
 |             'name': 'bar', | 
 |             'dependencies': { | 
 |               'baz': {'path': '../baz2'}, | 
 |             }, | 
 |           }), | 
 |         ]), | 
 |         d.dir('baz1', [d.libPubspec('baz', '0.0.0')]), | 
 |         d.dir('baz2', [d.libPubspec('baz', '0.0.0')]), | 
 |       ]).create(); | 
 |  | 
 |       await d.dir(appPath, [ | 
 |         d.appPubspec( | 
 |           dependencies: { | 
 |             'foo': {'path': '../deps/foo'}, | 
 |             'bar': {'path': '../deps/bar'}, | 
 |           }, | 
 |         ), | 
 |       ]).create(); | 
 |  | 
 |       await pubCommand( | 
 |         command, | 
 |         error: RegExp(r'bar from path is incompatible with foo from path'), | 
 |       ); | 
 |     }); | 
 |  | 
 |     test('does not allow a dependency on itself', () async { | 
 |       await d.dir(appPath, [ | 
 |         d.appPubspec( | 
 |           dependencies: { | 
 |             'myapp': {'path': '.'}, | 
 |           }, | 
 |         ), | 
 |       ]).create(); | 
 |  | 
 |       await pubCommand( | 
 |         command, | 
 |         error: contains('A package may not list itself as a dependency.'), | 
 |         exitCode: exit_codes.DATA, | 
 |       ); | 
 |     }); | 
 |  | 
 |     test('does not allow a dev dependency on itself', () async { | 
 |       await d.dir(appPath, [ | 
 |         d.pubspec({ | 
 |           'name': 'myapp', | 
 |           'dev_dependencies': { | 
 |             'myapp': {'path': '.'}, | 
 |           }, | 
 |         }), | 
 |       ]).create(); | 
 |  | 
 |       await pubCommand( | 
 |         command, | 
 |         error: contains('A package may not list itself as a dependency.'), | 
 |         exitCode: exit_codes.DATA, | 
 |       ); | 
 |     }); | 
 |   }); | 
 | } |