| Index: utils/tests/pub/oauth2/with_server_rejected_credentials_authenticates_again_test.dart
 | 
| diff --git a/utils/tests/pub/lish/archives_and_uploads_a_package_test.dart b/utils/tests/pub/oauth2/with_server_rejected_credentials_authenticates_again_test.dart
 | 
| similarity index 50%
 | 
| copy from utils/tests/pub/lish/archives_and_uploads_a_package_test.dart
 | 
| copy to utils/tests/pub/oauth2/with_server_rejected_credentials_authenticates_again_test.dart
 | 
| index b699d2f433ad132f2bf2c069f480f40617100732..c607424b8092b7cb74b128ada50a8a877c30d58d 100644
 | 
| --- a/utils/tests/pub/lish/archives_and_uploads_a_package_test.dart
 | 
| +++ b/utils/tests/pub/oauth2/with_server_rejected_credentials_authenticates_again_test.dart
 | 
| @@ -1,45 +1,48 @@
 | 
| -// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 | 
| +// 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 'dart:io';
 | 
|  import 'dart:json' as json;
 | 
|  
 | 
|  import 'package:scheduled_test/scheduled_test.dart';
 | 
|  import 'package:scheduled_test/scheduled_server.dart';
 | 
|  
 | 
| +import '../../../pub/io.dart';
 | 
| +import '../../../pub/utils.dart';
 | 
|  import '../descriptor.dart' as d;
 | 
|  import '../test_pub.dart';
 | 
|  import 'utils.dart';
 | 
|  
 | 
|  main() {
 | 
| -  initConfig();
 | 
| -  setUp(d.validPackage.create);
 | 
| -
 | 
| -  integration('archives and uploads a package', () {
 | 
| +  integration('with server-rejected credentials, authenticates again and saves '
 | 
| +      'credentials.json', () {
 | 
| +    d.validPackage.create();
 | 
|      var server = new ScheduledServer();
 | 
|      d.credentialsFile(server, 'access token').create();
 | 
|      var pub = startPublish(server);
 | 
|  
 | 
|      confirmPublish(pub);
 | 
| -    handleUploadForm(server);
 | 
| -    handleUpload(server);
 | 
|  
 | 
| -    server.handle('GET', '/create', (request) {
 | 
| -      request.response.write(json.stringify({
 | 
| -        'success': {'message': 'Package test_pkg 1.0.0 uploaded!'}
 | 
| +    server.handle('GET', '/packages/versions/new.json', (request) {
 | 
| +      var response = request.response;
 | 
| +      response.statusCode = 401;
 | 
| +      response.headers.set('www-authenticate', 'Bearer error="invalid_token",'
 | 
| +          ' error_description="your token sucks"');
 | 
| +      response.write(json.stringify({
 | 
| +        'error': {'message': 'your token sucks'}
 | 
|        }));
 | 
| -      request.response.close();
 | 
| +      response.close();
 | 
|      });
 | 
|  
 | 
| +    expect(pub.nextErrLine(), completion(equals('OAuth2 authorization failed '
 | 
| +        '(your token sucks).')));
 | 
|      // TODO(rnystrom): The confirm line is run together with this one because
 | 
|      // in normal usage, the user will have entered a newline on stdin which
 | 
|      // gets echoed to the terminal. Do something better here?
 | 
|      expect(pub.nextLine(), completion(equals(
 | 
| -        'Looks great! Are you ready to upload your package (y/n)?'
 | 
| -        ' Package test_pkg 1.0.0 uploaded!')));
 | 
| -    pub.shouldExit(0);
 | 
| +        'Looks great! Are you ready to upload your package (y/n)? '
 | 
| +        'Pub needs your authorization to upload packages on your behalf.')));
 | 
| +    pub.kill();
 | 
|    });
 | 
| -
 | 
| -  // TODO(nweiz): Once a multipart/form-data parser in Dart exists, we should
 | 
| -  // test that "pub lish" chooses the correct files to publish.
 | 
|  }
 | 
| 
 |