blob: 228d0bbfc8168aaa92ec3b6412afba506b6edf7d [file] [log] [blame]
// Copyright 2014 The Flutter Authors. 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:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/flutter_manifest.dart';
import '../src/common.dart';
void main() {
group('parsing of assets section in flutter manifests with asset transformers', () {
testWithoutContext('parses an asset with a simple transformation', () async {
final BufferLogger logger = BufferLogger.test();
const String manifest = '''
name: test
dependencies:
flutter:
sdk: flutter
flutter:
uses-material-design: true
assets:
- path: asset/hello.txt
transformers:
- package: my_package
''';
final FlutterManifest? parsedManifest = FlutterManifest.createFromString(manifest, logger: logger);
expect(parsedManifest!.assets, <AssetsEntry>[
AssetsEntry(
uri: Uri.parse('asset/hello.txt'),
transformers: const <AssetTransformerEntry>[
AssetTransformerEntry(package: 'my_package', args: <String>[])
],
),
]);
expect(logger.errorText, isEmpty);
});
testWithoutContext('parses an asset with a transformation that has args', () async {
final BufferLogger logger = BufferLogger.test();
const String manifest = '''
name: test
dependencies:
flutter:
sdk: flutter
flutter:
uses-material-design: true
assets:
- path: asset/hello.txt
transformers:
- package: my_package
args: ["-e", "--color", "purple"]
''';
final FlutterManifest? parsedManifest = FlutterManifest.createFromString(manifest, logger: logger);
expect(parsedManifest!.assets, <AssetsEntry>[
AssetsEntry(
uri: Uri.parse('asset/hello.txt'),
transformers: const <AssetTransformerEntry>[
AssetTransformerEntry(
package: 'my_package',
args: <String>['-e', '--color', 'purple'],
)
],
),
]);
expect(logger.errorText, isEmpty);
});
testWithoutContext('fails when a transformers section is not a list', () async {
final BufferLogger logger = BufferLogger.test();
const String manifest = '''
name: test
dependencies:
flutter:
sdk: flutter
flutter:
uses-material-design: true
assets:
- path: asset/hello.txt
transformers:
- my_transformer
''';
FlutterManifest.createFromString(manifest, logger: logger);
expect(
logger.errorText,
'Unable to parse assets section.\n'
'In transformers section of asset "asset/hello.txt": Expected '
'transformers list to be a list of Map, but element at index 0 was a String.\n',
);
});
testWithoutContext('fails when a transformers section package is not a string', () async {
final BufferLogger logger = BufferLogger.test();
const String manifest = '''
name: test
dependencies:
flutter:
sdk: flutter
flutter:
uses-material-design: true
assets:
- path: asset/hello.txt
transformers:
- package:
i am a key: i am a value
''';
FlutterManifest.createFromString(manifest, logger: logger);
expect(
logger.errorText,
'Unable to parse assets section.\n'
'In transformers section of asset "asset/hello.txt": '
'Expected "package" to be a String. Found YamlMap instead.\n',
);
});
testWithoutContext('fails when a transformer is missing the package field', () async {
final BufferLogger logger = BufferLogger.test();
const String manifest = '''
name: test
dependencies:
flutter:
sdk: flutter
flutter:
uses-material-design: true
assets:
- path: asset/hello.txt
transformers:
- args: ["-e"]
''';
FlutterManifest.createFromString(manifest, logger: logger);
expect(
logger.errorText,
'Unable to parse assets section.\n'
'In transformers section of asset "asset/hello.txt": Expected "package" to be a '
'String. Found Null instead.\n',
);
});
testWithoutContext('fails when a transformer has args field that is not a list of strings', () async {
final BufferLogger logger = BufferLogger.test();
const String manifest = '''
name: test
dependencies:
flutter:
sdk: flutter
flutter:
uses-material-design: true
assets:
- path: asset/hello.txt
transformers:
- package: my_transformer
args: hello
''';
FlutterManifest.createFromString(manifest, logger: logger);
expect(
logger.errorText,
'Unable to parse assets section.\n'
'In transformers section of asset "asset/hello.txt": In args section '
'of transformer using package "my_transformer": Expected args to be a '
'list of String, but got hello (String).\n',
);
});
});
}