Files
sdk/pkg/code_transformers/test/assets_test.dart
T
sigmund@google.com 088dfc5fbc Use warning instead of error in a couple places. In polymer we are hitting
scenarios where the resolution was incorrect, but we were still able to generate
valid code. We should not stop the whole build process on these cases.
(see for example https://code.google.com/p/dart/issues/detail?id=17914).

R=blois@google.com

Review URL: https://codereview.chromium.org//221673005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@34656 260f80e4-7a28-3924-810f-c04153c831b5
2014-04-02 17:57:37 +00:00

109 lines
3.7 KiB
Dart

// Copyright (c) 2014, 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.
library code_transformers.test.assets_test;
import 'dart:async';
import 'package:barback/barback.dart';
import 'package:code_transformers/assets.dart';
import 'package:code_transformers/tests.dart';
import 'package:unittest/compact_vm_config.dart';
import 'package:unittest/unittest.dart';
main() {
useCompactVMConfiguration();
void testAssetUri(String name,
{AssetId source, String uri, AssetId result, String message,
bool errorOnAbsolute: true}) {
test(name, () {
var transformer = new Validator((transform) {
var assetId = uriToAssetId(source, uri, transform.logger, null,
errorOnAbsolute: errorOnAbsolute);
expect(assetId, result);
});
var messages = [];
if (message != null) messages.add(message);
return applyTransformers(
[[transformer]],
inputs: {
source.toString(): ''
},
messages: messages);
});
}
group('uriToAssetId', () {
testAssetUri('resolves relative URIs',
source: new AssetId('a', 'web/main.dart'),
uri: 'foo.dart',
result: new AssetId('a', 'web/foo.dart'));
testAssetUri('resolves package: URIs',
source: new AssetId('a', 'web/main.dart'),
uri: 'package:foo/foo.dart',
result: new AssetId('foo', 'lib/foo.dart'));
testAssetUri('resolves package: URIs from libs',
source: new AssetId('a', 'lib/main.dart'),
uri: 'package:foo/foo.dart',
result: new AssetId('foo', 'lib/foo.dart'));
testAssetUri('resolves packages paths',
source: new AssetId('a', 'web/main.dart'),
uri: 'packages/foo/foo.dart',
result: new AssetId('foo', 'lib/foo.dart'));
testAssetUri('resolves relative packages paths',
source: new AssetId('a', 'web/main.dart'),
uri: 'packages/foo/foo.dart',
result: new AssetId('foo', 'lib/foo.dart'));
testAssetUri('does not allow packages from non-dart lib files',
source: new AssetId('a', 'lib/index.html'),
uri: 'packages/foo/bar',
message: 'warning: Invalid url to reach to another package: '
'packages/foo/bar. Path reaching to other packages must first '
'reach up all the way to the packages folder. For example, try '
'changing the url above to: ../../packages/foo/bar');
testAssetUri('allows relative packages from non-dart lib files',
source: new AssetId('a', 'lib/index.html'),
uri: '../../packages/foo/bar',
result: new AssetId('foo', 'lib/bar'));
testAssetUri('does not allow package: imports from non-dart files',
source: new AssetId('a', 'lib/index.html'),
uri: 'package:foo/bar.dart',
message: 'warning: absolute paths not allowed: "package:foo/bar.dart"');
testAssetUri('does not allow absolute /packages by default',
source: new AssetId('a', 'lib/index.html'),
uri: '/packages/foo/bar.dart',
message:
'warning: absolute paths not allowed: "/packages/foo/bar.dart"');
testAssetUri('can suppress error on absolute /packages ',
source: new AssetId('a', 'lib/index.html'),
uri: '/packages/foo/bar.dart',
errorOnAbsolute: false,
result: null);
});
}
class Validator extends Transformer {
final Function validation;
Validator(this.validation);
Future<bool> isPrimary(Asset input) => new Future.value(true);
Future apply(Transform transform) {
return new Future.value(validation(transform));
}
}