| // Copyright (c) 2025, 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. | |
| @TestOn('vm') | |
| library; | |
| import 'dart:convert'; | |
| import 'dart:io'; | |
| import 'package:pub/src/path.dart'; | |
| import 'package:test/test.dart'; | |
| import 'descriptor.dart' as d; | |
| import 'test_pub.dart'; | |
| void main() { | |
| test('package_config.json file is created', () async { | |
| await servePackages() | |
| ..serve( | |
| 'foo', | |
| '1.2.3', | |
| deps: {'baz': '2.2.2'}, | |
| sdk: '^3.5.0', | |
| pubspec: { | |
| // dev_dependencies of non-workspace packages should not be listed | |
| // in the package_graph. | |
| 'dev_dependencies': {'test': '^1.0.0'}, | |
| }, | |
| ) | |
| ..serve('bar', '3.2.1', sdk: '^3.5.0') | |
| ..serve( | |
| 'baz', | |
| '2.2.2', | |
| sdk: '^3.5.0', | |
| deps: {'bar': '3.2.1'}, | |
| contents: [d.dir('lib', [])], | |
| ) | |
| ..serve('test', '1.0.0', sdk: '^3.5.0') | |
| ..serve('test', '2.0.0', sdk: '^3.5.0'); | |
| await d.dir('boo', [ | |
| d.libPubspec( | |
| 'boo', | |
| '2.0.0', | |
| sdk: '^3.5.0', | |
| deps: {'bar': 'any'}, | |
| devDeps: {'test': '^1.0.0'}, | |
| ), | |
| ]).create(); | |
| await d.dir(appPath, [ | |
| d.appPubspec( | |
| dependencies: { | |
| 'foo': '1.2.3', | |
| 'boo': {'path': '../boo'}, | |
| }, | |
| extras: { | |
| 'environment': {'sdk': '^3.5.0'}, | |
| 'dev_dependencies': {'test': '^2.0.0'}, | |
| 'workspace': ['helper/'], | |
| }, | |
| ), | |
| d.dir('helper', [ | |
| d.libPubspec('helper', '2.0.0', resolutionWorkspace: true), | |
| ]), | |
| ]).create(); | |
| await pubGet(environment: {'_PUB_TEST_SDK_VERSION': '3.5.0'}); | |
| final packageGraph = jsonDecode( | |
| File(p.join(d.sandbox, packageGraphFilePath)).readAsStringSync(), | |
| ); | |
| expect(packageGraph, { | |
| 'roots': ['helper', 'myapp'], | |
| 'packages': [ | |
| { | |
| 'name': 'myapp', | |
| 'version': '0.0.0', | |
| 'dependencies': ['boo', 'foo'], | |
| 'devDependencies': ['test'], | |
| }, | |
| { | |
| 'name': 'helper', | |
| 'version': '2.0.0', | |
| 'dependencies': <Object?>[], | |
| 'devDependencies': <Object?>[], | |
| }, | |
| {'name': 'test', 'version': '2.0.0', 'dependencies': <Object?>[]}, | |
| { | |
| 'name': 'boo', | |
| 'version': '2.0.0', | |
| 'dependencies': ['bar'], | |
| }, | |
| { | |
| 'name': 'foo', | |
| 'version': '1.2.3', | |
| 'dependencies': ['baz'], | |
| }, | |
| {'name': 'bar', 'version': '3.2.1', 'dependencies': <Object?>[]}, | |
| { | |
| 'name': 'baz', | |
| 'version': '2.2.2', | |
| 'dependencies': ['bar'], | |
| }, | |
| ], | |
| 'configVersion': 1, | |
| }); | |
| }); | |
| } |