// Copyright (c) 2013, 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:test/test.dart';

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

void main() {
  test(
      'Shows newer versions available for packages that are locked and not being upgraded',
      () async {
    await servePackages((builder) {
      builder.serve('not_upgraded', '1.0.0');
      builder.serve('not_upgraded', '2.0.0');
      builder.serve('not_upgraded', '3.0.0-dev');
      builder.serve('upgraded', '1.0.0');
      builder.serve('upgraded', '2.0.0');
      builder.serve('upgraded', '3.0.0-dev');
    });

    // Constraint everything to the first version.
    await d.appDir({'not_upgraded': '1.0.0', 'upgraded': '1.0.0'}).create();

    await pubGet();

    // Loosen the constraints.
    await d.appDir({'not_upgraded': 'any', 'upgraded': 'any'}).create();

    // Only upgrade "upgraded".
    await pubUpgrade(args: ['upgraded'], output: RegExp(r'''
Resolving dependencies\.\.\..*
  not_upgraded 1\.0\.0 \(2\.0\.0 available\)
. upgraded 2\.0\.0 \(was 1\.0\.0\)
''', multiLine: true), environment: {'PUB_ALLOW_PRERELEASE_SDK': 'false'});
  });
}
