2019-11-27 23:04:02 +00:00
|
|
|
// Copyright 2014 The Flutter Authors. All rights reserved.
|
2017-09-26 12:48:52 +00:00
|
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
|
|
// found in the LICENSE file.
|
|
|
|
|
2018-05-21 00:52:33 +00:00
|
|
|
import 'package:file/file.dart';
|
|
|
|
import 'package:file/memory.dart';
|
|
|
|
import 'package:flutter_tools/src/base/file_system.dart';
|
2020-04-14 01:55:01 +00:00
|
|
|
import 'package:flutter_tools/src/base/logger.dart';
|
2017-09-26 12:48:52 +00:00
|
|
|
import 'package:flutter_tools/src/cache.dart';
|
|
|
|
import 'package:flutter_tools/src/flutter_manifest.dart';
|
|
|
|
|
2019-07-13 18:51:44 +00:00
|
|
|
import '../src/common.dart';
|
|
|
|
import '../src/context.dart';
|
2017-09-26 12:48:52 +00:00
|
|
|
|
|
|
|
void main() {
|
|
|
|
setUpAll(() {
|
|
|
|
Cache.flutterRoot = getFlutterRoot();
|
|
|
|
});
|
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
testWithoutContext('FlutterManifest is empty when the pubspec.yaml file is empty', () async {
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
'',
|
|
|
|
logger: logger,
|
|
|
|
);
|
2017-09-26 21:14:20 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest.isEmpty, true);
|
|
|
|
expect(flutterManifest.appName, '');
|
|
|
|
expect(flutterManifest.usesMaterialDesign, false);
|
|
|
|
expect(flutterManifest.fontsDescriptor, isEmpty);
|
|
|
|
expect(flutterManifest.fonts, isEmpty);
|
|
|
|
expect(flutterManifest.assets, isEmpty);
|
|
|
|
});
|
|
|
|
|
2020-06-17 17:33:02 +00:00
|
|
|
testWithoutContext('FlutterManifest is null when the pubspec.yaml file is not a map', () async {
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
expect(FlutterManifest.createFromString(
|
|
|
|
'Not a map',
|
|
|
|
logger: logger,
|
|
|
|
), isNull);
|
|
|
|
|
|
|
|
expect(logger.errorText, contains('Expected YAML map'));
|
|
|
|
});
|
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
testWithoutContext('FlutterManifest has no fonts or assets when the "flutter" section is empty', () async {
|
|
|
|
const String manifest = '''
|
2017-09-26 12:48:52 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest, isNotNull);
|
|
|
|
expect(flutterManifest.isEmpty, false);
|
|
|
|
expect(flutterManifest.appName, 'test');
|
|
|
|
expect(flutterManifest.usesMaterialDesign, false);
|
|
|
|
expect(flutterManifest.fontsDescriptor, isEmpty);
|
|
|
|
expect(flutterManifest.fonts, isEmpty);
|
|
|
|
expect(flutterManifest.assets, isEmpty);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest knows if material design is used', () async {
|
|
|
|
const String manifest = '''
|
2017-09-26 12:48:52 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2017-09-26 12:48:52 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest.usesMaterialDesign, true);
|
|
|
|
});
|
|
|
|
|
2020-07-15 17:12:52 +00:00
|
|
|
testWithoutContext('FlutterManifest knows if generate is provided', () async {
|
|
|
|
const String manifest = '''
|
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
generate: true
|
|
|
|
''';
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.generateSyntheticPackage, true);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest can parse invalid generate key', () async {
|
|
|
|
const String manifest = '''
|
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
generate: "invalid"
|
|
|
|
''';
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.generateSyntheticPackage, false);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest knows if generate is disabled', () async {
|
|
|
|
const String manifest = '''
|
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
generate: false
|
|
|
|
''';
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.generateSyntheticPackage, false);
|
|
|
|
});
|
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
testWithoutContext('FlutterManifest has two assets', () async {
|
|
|
|
const String manifest = '''
|
2017-09-26 12:48:52 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
assets:
|
|
|
|
- a/foo
|
|
|
|
- a/bar
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2017-09-26 12:48:52 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest.assets, <Uri>[
|
|
|
|
Uri.parse('a/foo'),
|
|
|
|
Uri.parse('a/bar'),
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest has one font family with one asset', () async {
|
|
|
|
const String manifest = '''
|
2017-09-26 12:48:52 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
fonts:
|
|
|
|
- family: foo
|
|
|
|
fonts:
|
|
|
|
- asset: a/bar
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.fonts, hasLength(1));
|
|
|
|
expect(flutterManifest.fonts.single, matchesFont(
|
|
|
|
familyName: 'foo',
|
|
|
|
descriptor: <String, Object>{
|
|
|
|
'family': 'foo',
|
|
|
|
'fonts': <Object>[
|
|
|
|
<String, Object>{'asset': 'a/bar'},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
fontAssets: <Matcher>[
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/bar')),
|
|
|
|
],
|
|
|
|
));
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest has one font family with a simple asset '
|
|
|
|
'and one with weight', () async {
|
2018-02-01 06:51:26 +00:00
|
|
|
const String manifest = '''
|
2017-09-26 12:48:52 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
fonts:
|
|
|
|
- family: foo
|
|
|
|
fonts:
|
|
|
|
- asset: a/bar
|
|
|
|
- asset: a/bar
|
|
|
|
weight: 400
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.fonts, hasLength(1));
|
|
|
|
expect(flutterManifest.fonts.single, matchesFont(
|
|
|
|
familyName: 'foo',
|
|
|
|
descriptor: <String, Object>{
|
|
|
|
'family': 'foo',
|
|
|
|
'fonts': <Object>[
|
|
|
|
<String, Object>{'asset': 'a/bar'},
|
|
|
|
<String, Object>{'weight': 400, 'asset': 'a/bar'},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
fontAssets: <Matcher>[
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/bar')),
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/bar'), weight: 400),
|
|
|
|
])
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest has one font family with a simple asset '
|
|
|
|
'and one with weight and style', () {
|
|
|
|
const String manifest = '''
|
2017-09-26 12:48:52 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
fonts:
|
|
|
|
- family: foo
|
|
|
|
fonts:
|
|
|
|
- asset: a/bar
|
|
|
|
- asset: a/bar
|
|
|
|
weight: 400
|
|
|
|
style: italic
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.fonts, hasLength(1));
|
|
|
|
expect(flutterManifest.fonts.single, matchesFont(
|
|
|
|
familyName: 'foo',
|
|
|
|
descriptor: <String, Object>{
|
|
|
|
'family': 'foo',
|
|
|
|
'fonts': <Object>[
|
|
|
|
<String, Object>{'asset': 'a/bar'},
|
|
|
|
<String, Object>{'weight': 400, 'style': 'italic', 'asset': 'a/bar'},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
fontAssets: <Matcher>[
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/bar')),
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/bar'), weight: 400, style: 'italic'),
|
|
|
|
],
|
|
|
|
));
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest has two font families, each with one '
|
|
|
|
'simple asset and one with weight and style', () {
|
|
|
|
const String manifest = '''
|
2017-09-26 12:48:52 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
fonts:
|
|
|
|
- family: foo
|
|
|
|
fonts:
|
|
|
|
- asset: a/bar
|
|
|
|
- asset: a/bar
|
|
|
|
weight: 400
|
|
|
|
style: italic
|
|
|
|
- family: bar
|
|
|
|
fonts:
|
|
|
|
- asset: a/baz
|
|
|
|
- weight: 400
|
|
|
|
asset: a/baz
|
|
|
|
style: italic
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.fonts, hasLength(2));
|
|
|
|
expect(flutterManifest.fonts, containsAll(<Matcher>[
|
|
|
|
matchesFont(
|
|
|
|
familyName: 'foo',
|
|
|
|
descriptor: <String, Object>{
|
|
|
|
'family': 'foo',
|
|
|
|
'fonts': <Object>[
|
|
|
|
<String, Object>{'asset': 'a/bar'},
|
|
|
|
<String, Object>{'weight': 400, 'style': 'italic', 'asset': 'a/bar'},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
fontAssets: <Matcher>[
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/bar')),
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/bar'), weight: 400, style: 'italic'),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
matchesFont(
|
|
|
|
familyName: 'bar',
|
|
|
|
descriptor: <String, Object>{
|
|
|
|
'family': 'bar',
|
|
|
|
'fonts': <Object>[
|
|
|
|
<String, Object>{'asset': 'a/baz'},
|
|
|
|
<String, Object>{'weight': 400, 'style': 'italic', 'asset': 'a/baz'},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
fontAssets: <Matcher>[
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/baz')),
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/baz'), weight: 400, style: 'italic'),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
]));
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest.fontsDescriptor combines descriptors from '
|
|
|
|
'individual fonts', () {
|
|
|
|
const String manifest = '''
|
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
fonts:
|
|
|
|
- family: foo
|
|
|
|
fonts:
|
|
|
|
- asset: a/bar
|
|
|
|
- asset: a/bar
|
|
|
|
weight: 400
|
|
|
|
style: italic
|
|
|
|
- family: bar
|
|
|
|
fonts:
|
|
|
|
- asset: a/baz
|
|
|
|
- weight: 400
|
|
|
|
asset: a/baz
|
|
|
|
style: italic
|
|
|
|
''';
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.fontsDescriptor, <Object>[
|
|
|
|
<String, Object>{
|
|
|
|
'family': 'foo',
|
|
|
|
'fonts': <Object>[
|
|
|
|
<String, Object>{'asset': 'a/bar'},
|
|
|
|
<String, Object>{'weight': 400, 'style': 'italic', 'asset': 'a/bar'},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
<String, Object>{
|
|
|
|
'family': 'bar',
|
|
|
|
'fonts': <Object>[
|
|
|
|
<String, Object>{'asset': 'a/baz'},
|
|
|
|
<String, Object>{'weight': 400, 'style': 'italic', 'asset': 'a/baz'},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest has only one of two font families when '
|
|
|
|
'one declaration is missing the "family" option', () async {
|
|
|
|
const String manifest = '''
|
2017-09-26 12:48:52 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
fonts:
|
|
|
|
- family: foo
|
|
|
|
fonts:
|
|
|
|
- asset: a/bar
|
|
|
|
- asset: a/bar
|
|
|
|
weight: 400
|
|
|
|
style: italic
|
|
|
|
- fonts:
|
|
|
|
- asset: a/baz
|
|
|
|
- asset: a/baz
|
|
|
|
weight: 400
|
|
|
|
style: italic
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.fonts, hasLength(1));
|
|
|
|
expect(flutterManifest.fonts, containsAll(<Matcher>[
|
|
|
|
matchesFont(
|
|
|
|
familyName: 'foo',
|
|
|
|
descriptor: <String, Object>{
|
|
|
|
'family': 'foo',
|
|
|
|
'fonts': <Object>[
|
|
|
|
<String, Object>{'asset': 'a/bar'},
|
|
|
|
<String, Object>{'weight': 400, 'style': 'italic', 'asset': 'a/bar'},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
fontAssets: <Matcher>[
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/bar')),
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/bar'), weight: 400, style: 'italic'),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
]));
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest has only one of two font families when '
|
|
|
|
'one declaration is missing the "fonts" option', () async {
|
|
|
|
const String manifest = '''
|
2017-09-26 12:48:52 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
fonts:
|
|
|
|
- family: foo
|
|
|
|
fonts:
|
|
|
|
- asset: a/bar
|
|
|
|
- asset: a/bar
|
|
|
|
weight: 400
|
|
|
|
style: italic
|
|
|
|
- family: bar
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.fonts, hasLength(1));
|
|
|
|
expect(flutterManifest.fonts, containsAll(<Matcher>[
|
|
|
|
matchesFont(
|
|
|
|
familyName: 'foo',
|
|
|
|
descriptor: <String, Object>{
|
|
|
|
'family': 'foo',
|
|
|
|
'fonts': <Object>[
|
|
|
|
<String, Object>{'asset': 'a/bar'},
|
|
|
|
<String, Object>{'weight': 400, 'style': 'italic', 'asset': 'a/bar'},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
fontAssets: <Matcher>[
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/bar')),
|
|
|
|
matchesFontAsset(assetUri: Uri.parse('a/bar'), weight: 400, style: 'italic'),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
]));
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest has no font family when declaration is '
|
|
|
|
'missing the "asset" option', () async {
|
|
|
|
const String manifest = '''
|
2017-09-26 12:48:52 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
fonts:
|
|
|
|
- family: foo
|
|
|
|
fonts:
|
|
|
|
- weight: 400
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2017-09-26 12:48:52 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest.fontsDescriptor, isEmpty);
|
|
|
|
expect(flutterManifest.fonts, isEmpty);
|
|
|
|
});
|
2018-03-19 21:55:54 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
testWithoutContext('FlutterManifest allows a blank flutter section', () {
|
|
|
|
const String manifest = '''
|
2018-03-19 21:55:54 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2018-08-02 17:16:32 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest.isEmpty, false);
|
|
|
|
expect(flutterManifest.isModule, false);
|
|
|
|
expect(flutterManifest.isPlugin, false);
|
|
|
|
expect(flutterManifest.androidPackage, null);
|
|
|
|
expect(flutterManifest.usesAndroidX, false);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest allows a module declaration', () {
|
|
|
|
const String manifest = '''
|
2018-08-02 17:16:32 +00:00
|
|
|
name: test
|
|
|
|
flutter:
|
2018-10-10 18:01:40 +00:00
|
|
|
module:
|
2018-08-02 17:16:32 +00:00
|
|
|
androidPackage: com.example
|
2019-11-26 22:06:31 +00:00
|
|
|
androidX: true
|
2018-08-02 17:16:32 +00:00
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2018-08-02 17:16:32 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest.isModule, true);
|
|
|
|
expect(flutterManifest.androidPackage, 'com.example');
|
|
|
|
expect(flutterManifest.usesAndroidX, true);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest allows a legacy plugin declaration', () {
|
|
|
|
const String manifest = '''
|
2018-08-02 17:16:32 +00:00
|
|
|
name: test
|
|
|
|
flutter:
|
|
|
|
plugin:
|
|
|
|
androidPackage: com.example
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2020-02-06 23:50:04 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest.isPlugin, true);
|
|
|
|
expect(flutterManifest.androidPackage, 'com.example');
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest allows a multi-plat plugin declaration '
|
|
|
|
'with android only', () {
|
|
|
|
const String manifest = '''
|
2019-08-30 04:51:31 +00:00
|
|
|
name: test
|
|
|
|
flutter:
|
|
|
|
plugin:
|
|
|
|
platforms:
|
|
|
|
android:
|
|
|
|
package: com.example
|
|
|
|
pluginClass: TestPlugin
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2019-08-30 04:51:31 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest.isPlugin, true);
|
|
|
|
expect(flutterManifest.androidPackage, 'com.example');
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest allows a multi-plat plugin declaration '
|
|
|
|
'with ios only', () {
|
|
|
|
const String manifest = '''
|
2020-02-06 23:50:04 +00:00
|
|
|
name: test
|
|
|
|
flutter:
|
|
|
|
plugin:
|
|
|
|
platforms:
|
|
|
|
ios:
|
|
|
|
pluginClass: HelloPlugin
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2020-02-06 23:50:04 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest.isPlugin, true);
|
|
|
|
expect(flutterManifest.androidPackage, isNull);
|
|
|
|
});
|
|
|
|
|
|
|
|
testUsingContext('FlutterManifest handles an invalid plugin declaration', () {
|
|
|
|
const String manifest = '''
|
2019-10-21 23:46:07 +00:00
|
|
|
name: test
|
|
|
|
flutter:
|
|
|
|
plugin:
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest, null);
|
|
|
|
expect(logger.errorText,
|
|
|
|
contains('Expected "plugin" to be an object, but got null'));
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest parses major.minor.patch+build version clause 1', () {
|
|
|
|
const String manifest = '''
|
2018-05-30 14:51:25 +00:00
|
|
|
name: test
|
|
|
|
version: 1.0.0+2
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2018-05-30 14:51:25 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest, matchesManifest(
|
|
|
|
appVersion: '1.0.0+2',
|
|
|
|
buildName: '1.0.0',
|
|
|
|
buildNumber: '2'),
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest parses major.minor.patch with no build version', () {
|
|
|
|
const String manifest = '''
|
2019-07-31 23:18:09 +00:00
|
|
|
name: test
|
|
|
|
version: 0.0.1
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2019-07-31 23:18:09 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest, matchesManifest(
|
|
|
|
appVersion: '0.0.1',
|
|
|
|
buildName: '0.0.1',
|
|
|
|
buildNumber: null),
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest parses major.minor.patch+build version clause 2', () {
|
|
|
|
const String manifest = '''
|
2018-05-30 14:51:25 +00:00
|
|
|
name: test
|
2019-02-13 15:48:03 +00:00
|
|
|
version: 1.0.0-beta+exp.sha.5114f85
|
2018-05-30 14:51:25 +00:00
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2018-05-30 14:51:25 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest, matchesManifest(
|
|
|
|
appVersion: '1.0.0-beta+exp.sha.5114f85',
|
|
|
|
buildName: '1.0.0-beta',
|
|
|
|
buildNumber: 'exp.sha.5114f85'),
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest parses major.minor+build version clause', () {
|
|
|
|
const String manifest = '''
|
2018-05-30 14:51:25 +00:00
|
|
|
name: test
|
2019-02-13 15:48:03 +00:00
|
|
|
version: 1.0+2
|
2018-05-30 14:51:25 +00:00
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2018-05-30 14:51:25 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest, matchesManifest(
|
|
|
|
appVersion: '1.0+2',
|
|
|
|
buildName: '1.0',
|
|
|
|
buildNumber: '2'),
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest parses empty version clause', () {
|
|
|
|
const String manifest = '''
|
2018-05-30 14:51:25 +00:00
|
|
|
name: test
|
|
|
|
version:
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2019-05-01 16:49:39 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest, matchesManifest(
|
|
|
|
appVersion: null,
|
|
|
|
buildName: null,
|
|
|
|
buildNumber: null),
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest parses no version clause', () {
|
|
|
|
const String manifest = '''
|
2018-05-30 14:51:25 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest, matchesManifest(
|
|
|
|
appVersion: null,
|
|
|
|
buildName: null,
|
|
|
|
buildNumber: null),
|
|
|
|
);
|
|
|
|
});
|
2019-05-01 16:49:39 +00:00
|
|
|
|
|
|
|
// Regression test for https://github.com/flutter/flutter/issues/31764
|
2020-04-14 01:55:01 +00:00
|
|
|
testWithoutContext('FlutterManifest returns proper error when font detail is malformed', () {
|
|
|
|
const String manifest = '''
|
2019-05-01 16:49:39 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
fonts:
|
|
|
|
- family: foo
|
|
|
|
fonts:
|
|
|
|
-asset: a/bar
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2019-05-01 16:49:39 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest, null);
|
|
|
|
expect(logger.errorText,
|
|
|
|
contains('Expected "fonts" to either be null or a list.'));
|
|
|
|
});
|
2019-08-05 20:14:57 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
testWithoutContext('FlutterManifest returns proper error when font detail is '
|
|
|
|
'not a list of maps', () {
|
|
|
|
const String manifest = '''
|
2019-10-11 19:17:37 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
fonts:
|
|
|
|
- family: foo
|
|
|
|
fonts:
|
|
|
|
- asset
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2019-10-11 19:17:37 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest, null);
|
|
|
|
expect(logger.errorText,
|
|
|
|
contains('Expected "fonts" to be a list of maps.'));
|
|
|
|
});
|
2019-10-11 19:17:37 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
testWithoutContext('FlutterManifest returns proper error when font is a map '
|
|
|
|
'instead of a list', () {
|
|
|
|
const String manifest = '''
|
2019-08-14 14:57:30 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
fonts:
|
|
|
|
family: foo
|
|
|
|
fonts:
|
|
|
|
-asset: a/bar
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2019-08-14 14:57:30 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest, null);
|
|
|
|
expect(logger.errorText, contains('Expected "fonts" to be a list'));
|
|
|
|
});
|
2019-08-14 14:57:30 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
testWithoutContext('FlutterManifest returns proper error when second font '
|
|
|
|
'family is invalid', () {
|
|
|
|
const String manifest = '''
|
2019-08-05 20:14:57 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
fonts:
|
|
|
|
- family: foo
|
|
|
|
fonts:
|
|
|
|
- asset: a/bar
|
|
|
|
- string
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2019-10-02 19:45:51 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest, null);
|
|
|
|
expect(logger.errorText, contains('Expected a map.'));
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest does not crash on empty entry', () {
|
|
|
|
const String manifest = '''
|
2019-10-02 19:45:51 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
assets:
|
|
|
|
- lib/gallery/example_code.dart
|
|
|
|
-
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
final List<Uri> assets = flutterManifest.assets;
|
2019-10-02 19:45:51 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(logger.errorText, contains('Asset manifest contains a null or empty uri.'));
|
|
|
|
expect(assets, hasLength(1));
|
|
|
|
});
|
2020-01-16 00:43:02 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
testWithoutContext('FlutterManifest handles special characters in asset URIs', () {
|
|
|
|
const String manifest = '''
|
2020-01-16 00:43:02 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
uses-material-design: true
|
|
|
|
assets:
|
|
|
|
- lib/gallery/abc#xyz
|
|
|
|
- lib/gallery/abc?xyz
|
|
|
|
- lib/gallery/aaa bbb
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
final List<Uri> assets = flutterManifest.assets;
|
|
|
|
|
|
|
|
expect(assets, hasLength(3));
|
|
|
|
expect(assets, <Uri>[
|
|
|
|
Uri.parse('lib/gallery/abc%23xyz'),
|
|
|
|
Uri.parse('lib/gallery/abc%3Fxyz'),
|
|
|
|
Uri.parse('lib/gallery/aaa%20bbb'),
|
|
|
|
]);
|
|
|
|
});
|
2020-01-22 00:43:16 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
testWithoutContext('FlutterManifest returns proper error when flutter is a '
|
|
|
|
'list instead of a map', () {
|
|
|
|
const String manifest = '''
|
2020-01-22 00:43:16 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
- uses-material-design: true
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
2020-01-22 00:43:16 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest, null);
|
|
|
|
expect(logger.errorText,
|
|
|
|
contains(
|
|
|
|
'Expected "flutter" section to be an object or null, but got '
|
|
|
|
'[{uses-material-design: true}].',
|
|
|
|
),
|
|
|
|
);
|
2017-09-26 12:48:52 +00:00
|
|
|
});
|
2018-05-21 00:52:33 +00:00
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
testWithoutContext('FlutterManifest can parse manifest on posix filesystem', () {
|
|
|
|
const String manifest = '''
|
2018-05-21 00:52:33 +00:00
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
''';
|
2020-04-14 01:55:01 +00:00
|
|
|
final FileSystem fileSystem = MemoryFileSystem.test();
|
|
|
|
fileSystem.file('pubspec.yaml').writeAsStringSync(manifest);
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromPath(
|
|
|
|
'pubspec.yaml',
|
|
|
|
fileSystem: fileSystem,
|
|
|
|
logger: logger,
|
2018-05-21 00:52:33 +00:00
|
|
|
);
|
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest.isEmpty, false);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest can parse manifest on windows filesystem', () {
|
|
|
|
const String manifest = '''
|
|
|
|
name: test
|
|
|
|
dependencies:
|
|
|
|
flutter:
|
|
|
|
sdk: flutter
|
|
|
|
flutter:
|
|
|
|
''';
|
|
|
|
|
|
|
|
final FileSystem fileSystem = MemoryFileSystem.test(style: FileSystemStyle.windows);
|
|
|
|
fileSystem.file('pubspec.yaml').writeAsStringSync(manifest);
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromPath(
|
|
|
|
'pubspec.yaml',
|
|
|
|
fileSystem: fileSystem,
|
|
|
|
logger: logger,
|
2018-05-21 00:52:33 +00:00
|
|
|
);
|
|
|
|
|
2020-04-14 01:55:01 +00:00
|
|
|
expect(flutterManifest.isEmpty, false);
|
2018-05-21 00:52:33 +00:00
|
|
|
});
|
2020-06-24 00:38:03 +00:00
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest getSupportedPlatforms return null if runs on legacy format', () {
|
|
|
|
const String manifest = '''
|
|
|
|
name: test
|
|
|
|
flutter:
|
|
|
|
plugin:
|
|
|
|
androidPackage: com.example
|
|
|
|
''';
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.isPlugin, true);
|
|
|
|
expect(flutterManifest.supportedPlatforms, null);
|
|
|
|
});
|
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest getSupportedPlatforms returns valid platforms.', () {
|
|
|
|
const String manifest = '''
|
|
|
|
name: test
|
|
|
|
flutter:
|
|
|
|
plugin:
|
|
|
|
platforms:
|
|
|
|
android:
|
|
|
|
package: com.example
|
|
|
|
pluginClass: SomeClass
|
|
|
|
ios:
|
|
|
|
pluginClass: SomeClass
|
|
|
|
''';
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest.isPlugin, true);
|
|
|
|
expect(flutterManifest.supportedPlatforms['ios'],
|
|
|
|
<String, dynamic>{'pluginClass': 'SomeClass'});
|
|
|
|
expect(flutterManifest.supportedPlatforms['android'],
|
|
|
|
<String, dynamic>{'pluginClass': 'SomeClass',
|
|
|
|
'package': 'com.example'});
|
|
|
|
});
|
2020-07-07 17:24:42 +00:00
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest validates a platform section that is a list '
|
|
|
|
'instead of a map', () {
|
|
|
|
const String manifest = '''
|
|
|
|
name: test
|
|
|
|
flutter:
|
|
|
|
plugin:
|
|
|
|
platforms:
|
|
|
|
- android
|
|
|
|
''';
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest, null);
|
|
|
|
expect(logger.errorText,
|
|
|
|
contains('flutter.plugin.platforms should be a map with the platform name as the key'));
|
|
|
|
});
|
2020-07-23 01:24:03 +00:00
|
|
|
|
|
|
|
testWithoutContext('FlutterManifest validates plugin format not support.', () {
|
|
|
|
const String manifest = '''
|
|
|
|
name: test
|
|
|
|
flutter:
|
|
|
|
plugin:
|
|
|
|
android:
|
|
|
|
package: com.example
|
|
|
|
pluginClass: SomeClass
|
|
|
|
ios:
|
|
|
|
pluginClass: SomeClass
|
|
|
|
''';
|
|
|
|
final BufferLogger logger = BufferLogger.test();
|
|
|
|
final FlutterManifest flutterManifest = FlutterManifest.createFromString(
|
|
|
|
manifest,
|
|
|
|
logger: logger,
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(flutterManifest, null);
|
|
|
|
expect(logger.errorText,
|
|
|
|
contains('Cannot find the `flutter.plugin.platforms` key in the `pubspec.yaml` file. '));
|
|
|
|
});
|
2017-09-26 12:48:52 +00:00
|
|
|
}
|
2020-04-14 01:55:01 +00:00
|
|
|
|
|
|
|
Matcher matchesManifest({
|
|
|
|
String appVersion,
|
|
|
|
String buildName,
|
|
|
|
String buildNumber,
|
|
|
|
}) {
|
|
|
|
return isA<FlutterManifest>()
|
|
|
|
.having((FlutterManifest manifest) => manifest.appVersion, 'appVersion', appVersion)
|
|
|
|
.having((FlutterManifest manifest) => manifest.buildName, 'buildName', buildName)
|
|
|
|
.having((FlutterManifest manifest) => manifest.buildNumber, 'buildNumber', buildNumber);
|
|
|
|
}
|
|
|
|
|
|
|
|
Matcher matchesFontAsset({
|
|
|
|
Uri assetUri,
|
|
|
|
int weight,
|
|
|
|
String style,
|
|
|
|
}) {
|
|
|
|
return isA<FontAsset>()
|
|
|
|
.having((FontAsset fontAsset) => fontAsset.assetUri, 'assetUri', assetUri)
|
|
|
|
.having((FontAsset fontAsset) => fontAsset.weight, 'weight', weight)
|
|
|
|
.having((FontAsset fontAsset) => fontAsset.style, 'style', style);
|
|
|
|
}
|
|
|
|
|
|
|
|
Matcher matchesFont({
|
|
|
|
Map<String, Object> descriptor,
|
|
|
|
String familyName,
|
|
|
|
List<Matcher> fontAssets,
|
|
|
|
}) {
|
|
|
|
return isA<Font>()
|
|
|
|
.having((Font font) => font.descriptor, 'descriptor', descriptor)
|
|
|
|
.having((Font font) => font.familyName, 'familyName', familyName)
|
|
|
|
.having((Font font) => font.fontAssets, 'fontAssets', containsAll(fontAssets));
|
|
|
|
}
|