| // 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 'dart:async'; |
| import 'dart:math' as math; |
| |
| import 'package:test/test.dart'; |
| |
| import 'package:pub/src/validator/size.dart'; |
| |
| import '../descriptor.dart' as d; |
| import '../test_pub.dart'; |
| import 'utils.dart'; |
| |
| ValidatorCreator size(int size) { |
| return (entrypoint) => new SizeValidator(entrypoint, new Future.value(size)); |
| } |
| |
| expectSizeValidationError(Matcher matcher) { |
| expect(validatePackage(size(100 * math.pow(2, 20) + 1)), |
| completion(pairOf(contains(matcher), anything))); |
| } |
| |
| main() { |
| test('considers a package valid if it is <= 100 MB', () async { |
| await d.validPackage.create(); |
| |
| expectNoValidationError(size(100)); |
| expectNoValidationError(size(100 * math.pow(2, 20))); |
| }); |
| |
| group('considers a package invalid if it is more than 100 MB', () { |
| test('package is not under source control and no .gitignore exists', |
| () async { |
| await d.validPackage.create(); |
| |
| expectSizeValidationError( |
| equals("Your package is 100.0 MB. Hosted packages must " |
| "be smaller than 100 MB.")); |
| }); |
| |
| test('package is not under source control and .gitignore exists', () async { |
| await d.validPackage.create(); |
| await d.dir(appPath, [d.file('.gitignore', 'ignored')]).create(); |
| |
| expectSizeValidationError(allOf( |
| contains("Hosted packages must be smaller than 100 MB."), |
| contains("Your .gitignore has no effect since your project " |
| "does not appear to be in version control."))); |
| }); |
| |
| test('package is under source control and no .gitignore exists', () async { |
| await d.validPackage.create(); |
| await d.git(appPath).create(); |
| |
| expectSizeValidationError(allOf( |
| contains("Hosted packages must be smaller than 100 MB."), |
| contains("Consider adding a .gitignore to avoid including " |
| "temporary files."))); |
| }); |
| |
| test('package is under source control and .gitignore exists', () async { |
| await d.validPackage.create(); |
| await d.git(appPath, [d.file('.gitignore', 'ignored')]).create(); |
| |
| expectSizeValidationError( |
| equals("Your package is 100.0 MB. Hosted packages must " |
| "be smaller than 100 MB.")); |
| }); |
| }); |
| } |