blob: 14d35a4673483c5c4b9e8dda5af11fc3558ab106 [file] [log] [blame] [edit]
// Copyright (c) 2022, 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.
// Objective C support is only available on mac.
@TestOn('mac-os')
library;
import 'dart:io';
import 'package:ffigen/ffigen.dart';
import 'package:logging/logging.dart';
import 'package:path/path.dart' as path;
import 'package:pub_semver/pub_semver.dart';
import 'package:test/test.dart';
import '../test_utils.dart';
String bindingsForVersion({Versions? iosVers, Versions? macosVers}) {
FfiGenerator(
output: Output(
dartFile: Uri.file(
path.join(
packagePathForTests,
'test',
'native_objc_test',
'deprecated_bindings.dart',
),
),
format: false,
style: const DynamicLibraryBindings(
wrapperName: 'DeprecatedTestObjCLibrary',
wrapperDocComment: 'Tests API deprecation',
),
),
headers: Headers(
entryPoints: [
Uri.file(
path.join(
packagePathForTests,
'test',
'native_objc_test',
'deprecated_test.m',
),
),
],
),
objectiveC: ObjectiveC(
interfaces: Interfaces(
include: (decl) => {
'DeprecatedInterfaceMethods',
'DeprecatedInterface',
}.contains(decl.originalName),
),
protocols: Protocols(
include: (decl) => {
'DeprecatedProtocolMethods',
'DeprecatedProtocol',
}.contains(decl.originalName),
),
categories: Categories(
include: (decl) => {
'DeprecatedCategoryMethods',
'DeprecatedCategory',
}.contains(decl.originalName),
includeTransitive: false,
),
externalVersions: ExternalVersions(ios: iosVers, macos: macosVers),
),
functions: Functions.includeSet({'normalFunction', 'deprecatedFunction'}),
structs: Structs.includeSet({'NormalStruct', 'DeprecatedStruct'}),
unions: Unions.includeSet({'NormalUnion', 'DeprecatedUnion'}),
enums: Enums.includeSet({'NormalEnum', 'DeprecatedEnum'}),
unnamedEnums: UnnamedEnums.includeSet({
'normalUnnamedEnum',
'deprecatedUnnamedEnum',
}),
).generate(logger: Logger.root..level = Level.SEVERE);
return File(
path.join(
packagePathForTests,
'test',
'native_objc_test',
'deprecated_bindings.dart',
),
).readAsStringSync();
}
void main() {
group('deprecated', () {
group('no version info', () {
late final String bindings;
setUpAll(() {
bindings = bindingsForVersion();
});
test('interfaces', () {
expect(bindings, contains('DeprecatedInterface '));
expect(bindings, contains('DeprecatedInterfaceMethods '));
});
test('protocols', () {
expect(bindings, contains('DeprecatedProtocol '));
expect(bindings, contains('DeprecatedProtocolMethods '));
});
test('protocols', () {
expect(bindings, contains('DeprecatedCategory '));
expect(bindings, contains('DeprecatedCategoryMethods '));
});
test('interface methods', () {
expect(bindings, contains('normalMethod'));
expect(bindings, contains('unavailableMac'));
expect(bindings, contains('unavailableIos'));
expect(bindings, contains('unavailableBoth'));
expect(bindings, contains('depMac2'));
expect(bindings, contains('depMac3'));
expect(bindings, contains('depIos2'));
expect(bindings, contains('depIos2Mac2'));
expect(bindings, contains('depIos2Mac3'));
expect(bindings, contains('depIos3'));
expect(bindings, contains('depIos3Mac2'));
expect(bindings, contains('depIos3Mac3'));
expect(bindings, contains('alwaysDeprecated'));
expect(bindings, contains('alwaysUnavailable'));
});
test('interface properties', () {
expect(bindings, contains('get normalProperty'));
expect(bindings, contains('set normalProperty'));
expect(bindings, contains('get deprecatedProperty'));
expect(bindings, contains('set deprecatedProperty'));
});
test('protocol methods', () {
expect(bindings, contains('protNormalMethod'));
expect(bindings, contains('protUnavailableMac'));
expect(bindings, contains('protUnavailableIos'));
expect(bindings, contains('protUnavailableBoth'));
expect(bindings, contains('protDepMac2'));
expect(bindings, contains('protDepMac3'));
expect(bindings, contains('protDepIos2'));
expect(bindings, contains('protDepIos2Mac2'));
expect(bindings, contains('protDepIos2Mac3'));
expect(bindings, contains('protDepIos3'));
expect(bindings, contains('protDepIos3Mac2'));
expect(bindings, contains('protDepIos3Mac3'));
expect(bindings, contains('protAlwaysDeprecated'));
expect(bindings, contains('protAlwaysUnavailable'));
});
test('protocol properties', () {
expect(bindings, contains('protNormalProperty'));
expect(bindings, contains('setProtNormalProperty'));
expect(bindings, contains('protDeprecatedProperty'));
expect(bindings, contains('setProtDeprecatedProperty'));
});
test('category methods', () {
expect(bindings, contains('catNormalMethod'));
expect(bindings, contains('catUnavailableMac'));
expect(bindings, contains('catUnavailableIos'));
expect(bindings, contains('catUnavailableBoth'));
expect(bindings, contains('catDepMac2'));
expect(bindings, contains('catDepMac3'));
expect(bindings, contains('catDepIos2'));
expect(bindings, contains('catDepIos2Mac2'));
expect(bindings, contains('catDepIos2Mac3'));
expect(bindings, contains('catDepIos3'));
expect(bindings, contains('catDepIos3Mac2'));
expect(bindings, contains('catDepIos3Mac3'));
expect(bindings, contains('catAlwaysDeprecated'));
expect(bindings, contains('catAlwaysUnavailable'));
});
test('category properties', () {
expect(bindings, contains('get catNormalProperty'));
expect(bindings, contains('set catNormalProperty'));
expect(bindings, contains('get catDeprecatedProperty'));
expect(bindings, contains('set catDeprecatedProperty'));
});
test('functions', () {
expect(bindings, contains('normalFunction'));
expect(bindings, contains('deprecatedFunction'));
});
test('structs', () {
expect(bindings, contains('NormalStruct'));
expect(bindings, contains('DeprecatedStruct'));
});
test('unions', () {
expect(bindings, contains('NormalUnion'));
expect(bindings, contains('DeprecatedUnion'));
});
test('enums', () {
expect(bindings, contains('NormalEnum'));
expect(bindings, contains('DeprecatedEnum'));
});
test('unnamed enums', () {
expect(bindings, contains('normalUnnamedEnum'));
expect(bindings, contains('deprecatedUnnamedEnum'));
});
});
group('ios >=2.5, no macos version', () {
late final String bindings;
setUpAll(() {
bindings = bindingsForVersion(iosVers: Versions(min: Version(2, 5, 0)));
});
test('interfaces', () {
expect(bindings, isNot(contains('DeprecatedInterface ')));
expect(bindings, contains('DeprecatedInterfaceMethods '));
});
test('protocols', () {
expect(bindings, isNot(contains('DeprecatedProtocol ')));
expect(bindings, contains('DeprecatedProtocolMethods '));
});
test('categories', () {
expect(bindings, isNot(contains('DeprecatedCategory ')));
expect(bindings, contains('DeprecatedCategoryMethods '));
});
test('interface methods', () {
expect(bindings, contains('normalMethod'));
expect(bindings, contains('unavailableMac'));
expect(bindings, isNot(contains('unavailableIos')));
expect(bindings, isNot(contains('unavailableBoth')));
expect(bindings, contains('depMac2'));
expect(bindings, contains('depMac3'));
expect(bindings, isNot(contains('depIos2')));
expect(bindings, isNot(contains('depIos2Mac2')));
expect(bindings, isNot(contains('depIos2Mac3')));
expect(bindings, contains('depIos3'));
expect(bindings, contains('depIos3Mac2'));
expect(bindings, contains('depIos3Mac3'));
expect(bindings, isNot(contains('alwaysDeprecated')));
expect(bindings, isNot(contains('alwaysUnavailable')));
});
test('interface properties', () {
expect(bindings, contains('get normalProperty'));
expect(bindings, contains('set normalProperty'));
expect(bindings, isNot(contains('get deprecatedProperty')));
expect(bindings, isNot(contains('set deprecatedProperty')));
});
test('protocol methods', () {
expect(bindings, contains('protNormalMethod'));
expect(bindings, contains('protUnavailableMac'));
expect(bindings, isNot(contains('protUnavailableIos')));
expect(bindings, isNot(contains('protUnavailableBoth')));
expect(bindings, contains('protDepMac2'));
expect(bindings, contains('protDepMac3'));
expect(bindings, isNot(contains('protDepIos2')));
expect(bindings, isNot(contains('protDepIos2Mac2')));
expect(bindings, isNot(contains('protDepIos2Mac3')));
expect(bindings, contains('protDepIos3'));
expect(bindings, contains('protDepIos3Mac2'));
expect(bindings, contains('protDepIos3Mac3'));
expect(bindings, isNot(contains('protAlwaysDeprecated')));
expect(bindings, isNot(contains('protAlwaysUnavailable')));
});
test('protocol properties', () {
expect(bindings, contains('protNormalProperty'));
expect(bindings, contains('setProtNormalProperty'));
expect(bindings, isNot(contains('protDeprecatedProperty')));
expect(bindings, isNot(contains('setProtDeprecatedProperty')));
});
test('category methods', () {
expect(bindings, contains('catNormalMethod'));
expect(bindings, contains('catUnavailableMac'));
expect(bindings, isNot(contains('catUnavailableIos')));
expect(bindings, isNot(contains('catUnavailableBoth')));
expect(bindings, contains('catDepMac2'));
expect(bindings, contains('catDepMac3'));
expect(bindings, isNot(contains('catDepIos2')));
expect(bindings, isNot(contains('catDepIos2Mac2')));
expect(bindings, isNot(contains('catDepIos2Mac3')));
expect(bindings, contains('catDepIos3'));
expect(bindings, contains('catDepIos3Mac2'));
expect(bindings, contains('catDepIos3Mac3'));
expect(bindings, isNot(contains('catAlwaysDeprecated')));
expect(bindings, isNot(contains('catAlwaysUnavailable')));
});
test('category properties', () {
expect(bindings, contains('get catNormalProperty'));
expect(bindings, contains('set catNormalProperty'));
expect(bindings, isNot(contains('get catDeprecatedProperty')));
expect(bindings, isNot(contains('set catDeprecatedProperty')));
});
test('functions', () {
expect(bindings, contains('normalFunction'));
expect(bindings, isNot(contains('deprecatedFunction')));
});
test('structs', () {
expect(bindings, contains('NormalStruct'));
expect(bindings, isNot(contains('DeprecatedStruct')));
});
test('unions', () {
expect(bindings, contains('NormalUnion'));
expect(bindings, isNot(contains('DeprecatedUnion')));
});
test('enums', () {
expect(bindings, contains('NormalEnum'));
expect(bindings, isNot(contains('DeprecatedEnum')));
});
test('unnamed enums', () {
expect(bindings, contains('normalUnnamedEnum'));
expect(bindings, isNot(contains('deprecatedUnnamedEnum')));
});
});
group('ios >=2.5, macos >=2.5', () {
late final String bindings;
setUpAll(() {
bindings = bindingsForVersion(
iosVers: Versions(min: Version(2, 5, 0)),
macosVers: Versions(min: Version(2, 5, 0)),
);
});
test('interfaces', () {
expect(bindings, isNot(contains('DeprecatedInterface ')));
expect(bindings, contains('DeprecatedInterfaceMethods '));
});
test('protocols', () {
expect(bindings, isNot(contains('DeprecatedProtocol ')));
expect(bindings, contains('DeprecatedProtocolMethods '));
});
test('interface methods', () {
expect(bindings, contains('normalMethod'));
expect(bindings, contains('unavailableMac'));
expect(bindings, contains('unavailableIos'));
expect(bindings, isNot(contains('unavailableBoth')));
expect(bindings, contains('depMac2'));
expect(bindings, contains('depMac3'));
expect(bindings, contains('depIos2'));
expect(bindings, isNot(contains('depIos2Mac2')));
expect(bindings, contains('depIos2Mac3'));
expect(bindings, contains('depIos3'));
expect(bindings, contains('depIos3Mac2'));
expect(bindings, contains('depIos3Mac3'));
expect(bindings, isNot(contains('alwaysDeprecated')));
expect(bindings, isNot(contains('alwaysUnavailable')));
});
test('interface properties', () {
expect(bindings, contains('get normalProperty'));
expect(bindings, contains('set normalProperty'));
expect(bindings, isNot(contains('get deprecatedProperty')));
expect(bindings, isNot(contains('set deprecatedProperty')));
});
test('protocol methods', () {
expect(bindings, contains('protNormalMethod'));
expect(bindings, contains('protUnavailableMac'));
expect(bindings, contains('protUnavailableIos'));
expect(bindings, isNot(contains('protUnavailableBoth')));
expect(bindings, contains('protDepMac2'));
expect(bindings, contains('protDepMac3'));
expect(bindings, contains('protDepIos2'));
expect(bindings, isNot(contains('protDepIos2Mac2')));
expect(bindings, contains('protDepIos2Mac3'));
expect(bindings, contains('protDepIos3'));
expect(bindings, contains('protDepIos3Mac2'));
expect(bindings, contains('protDepIos3Mac3'));
expect(bindings, isNot(contains('protAlwaysDeprecated')));
expect(bindings, isNot(contains('protAlwaysUnavailable')));
});
test('protocol properties', () {
expect(bindings, contains('protNormalProperty'));
expect(bindings, contains('setProtNormalProperty'));
expect(bindings, isNot(contains('protDeprecatedProperty')));
expect(bindings, isNot(contains('setProtDeprecatedProperty')));
});
test('category methods', () {
expect(bindings, contains('catNormalMethod'));
expect(bindings, contains('catUnavailableMac'));
expect(bindings, contains('catUnavailableIos'));
expect(bindings, isNot(contains('catUnavailableBoth')));
expect(bindings, contains('catDepMac2'));
expect(bindings, contains('catDepMac3'));
expect(bindings, contains('catDepIos2'));
expect(bindings, isNot(contains('catDepIos2Mac2')));
expect(bindings, contains('catDepIos2Mac3'));
expect(bindings, contains('catDepIos3'));
expect(bindings, contains('catDepIos3Mac2'));
expect(bindings, contains('catDepIos3Mac3'));
expect(bindings, isNot(contains('catAlwaysDeprecated')));
expect(bindings, isNot(contains('catAlwaysUnavailable')));
});
test('category properties', () {
expect(bindings, contains('get catNormalProperty'));
expect(bindings, contains('set catNormalProperty'));
expect(bindings, isNot(contains('get catDeprecatedProperty')));
expect(bindings, isNot(contains('set catDeprecatedProperty')));
});
test('functions', () {
expect(bindings, contains('normalFunction'));
expect(bindings, isNot(contains('deprecatedFunction')));
});
test('structs', () {
expect(bindings, contains('NormalStruct'));
expect(bindings, isNot(contains('DeprecatedStruct')));
});
test('unions', () {
expect(bindings, contains('NormalUnion'));
expect(bindings, isNot(contains('DeprecatedUnion')));
});
test('enums', () {
expect(bindings, contains('NormalEnum'));
expect(bindings, isNot(contains('DeprecatedEnum')));
});
test('unnamed enums', () {
expect(bindings, contains('normalUnnamedEnum'));
expect(bindings, isNot(contains('deprecatedUnnamedEnum')));
});
});
group('ios >=3.5, macos >=3.5', () {
late final String bindings;
setUpAll(() {
bindings = bindingsForVersion(
iosVers: Versions(min: Version(3, 5, 0)),
macosVers: Versions(min: Version(3, 5, 0)),
);
});
test('interfaces', () {
expect(bindings, isNot(contains('DeprecatedInterface ')));
expect(bindings, contains('DeprecatedInterfaceMethods '));
});
test('protocols', () {
expect(bindings, isNot(contains('DeprecatedProtocol ')));
expect(bindings, contains('DeprecatedProtocolMethods '));
});
test('interface methods', () {
expect(bindings, contains('normalMethod'));
expect(bindings, contains('unavailableMac'));
expect(bindings, contains('unavailableIos'));
expect(bindings, isNot(contains('unavailableBoth')));
expect(bindings, contains('depMac2'));
expect(bindings, contains('depMac3'));
expect(bindings, contains('depIos2'));
expect(bindings, isNot(contains('depIos2Mac2')));
expect(bindings, isNot(contains('depIos2Mac3')));
expect(bindings, contains('depIos3'));
expect(bindings, isNot(contains('depIos3Mac2')));
expect(bindings, isNot(contains('depIos3Mac3')));
expect(bindings, isNot(contains('alwaysDeprecated')));
expect(bindings, isNot(contains('alwaysUnavailable')));
});
test('interface properties', () {
expect(bindings, contains('get normalProperty'));
expect(bindings, contains('set normalProperty'));
expect(bindings, isNot(contains('get deprecatedProperty')));
expect(bindings, isNot(contains('set deprecatedProperty')));
});
test('protocol methods', () {
expect(bindings, contains('protNormalMethod'));
expect(bindings, contains('protUnavailableMac'));
expect(bindings, contains('protUnavailableIos'));
expect(bindings, isNot(contains('protUnavailableBoth')));
expect(bindings, contains('protDepMac2'));
expect(bindings, contains('protDepMac3'));
expect(bindings, contains('protDepIos2'));
expect(bindings, isNot(contains('protDepIos2Mac2')));
expect(bindings, isNot(contains('protDepIos2Mac3')));
expect(bindings, contains('protDepIos3'));
expect(bindings, isNot(contains('protDepIos3Mac2')));
expect(bindings, isNot(contains('protDepIos3Mac3')));
expect(bindings, isNot(contains('protAlwaysDeprecated')));
expect(bindings, isNot(contains('protAlwaysUnavailable')));
});
test('protocol properties', () {
expect(bindings, contains('protNormalProperty'));
expect(bindings, contains('setProtNormalProperty'));
expect(bindings, isNot(contains('protDeprecatedProperty')));
expect(bindings, isNot(contains('setProtDeprecatedProperty')));
});
test('category methods', () {
expect(bindings, contains('catNormalMethod'));
expect(bindings, contains('catUnavailableMac'));
expect(bindings, contains('catUnavailableIos'));
expect(bindings, isNot(contains('catUnavailableBoth')));
expect(bindings, contains('catDepMac2'));
expect(bindings, contains('catDepMac3'));
expect(bindings, contains('catDepIos2'));
expect(bindings, isNot(contains('catDepIos2Mac2')));
expect(bindings, isNot(contains('catDepIos2Mac3')));
expect(bindings, contains('catDepIos3'));
expect(bindings, isNot(contains('catDepIos3Mac2')));
expect(bindings, isNot(contains('catDepIos3Mac3')));
expect(bindings, isNot(contains('catAlwaysDeprecated')));
expect(bindings, isNot(contains('catAlwaysUnavailable')));
});
test('category properties', () {
expect(bindings, contains('get catNormalProperty'));
expect(bindings, contains('set catNormalProperty'));
expect(bindings, isNot(contains('get catDeprecatedProperty')));
expect(bindings, isNot(contains('set catDeprecatedProperty')));
});
test('functions', () {
expect(bindings, contains('normalFunction'));
expect(bindings, isNot(contains('deprecatedFunction')));
});
test('structs', () {
expect(bindings, contains('NormalStruct'));
expect(bindings, isNot(contains('DeprecatedStruct')));
});
test('unions', () {
expect(bindings, contains('NormalUnion'));
expect(bindings, isNot(contains('DeprecatedUnion')));
});
test('enums', () {
expect(bindings, contains('NormalEnum'));
expect(bindings, isNot(contains('DeprecatedEnum')));
});
test('unnamed enums', () {
expect(bindings, contains('normalUnnamedEnum'));
expect(bindings, isNot(contains('deprecatedUnnamedEnum')));
});
});
group('ios >=2.5 <=3.5, macos >=2.5 <=3.5', () {
late final String bindings;
setUpAll(() {
bindings = bindingsForVersion(
iosVers: Versions(min: Version(2, 5, 0), max: Version(3, 5, 0)),
macosVers: Versions(min: Version(2, 5, 0), max: Version(3, 5, 0)),
);
});
test('interfaces', () {
expect(bindings, isNot(contains('DeprecatedInterface ')));
expect(bindings, contains('DeprecatedInterfaceMethods '));
});
test('protocols', () {
expect(bindings, isNot(contains('DeprecatedProtocol ')));
expect(bindings, contains('DeprecatedProtocolMethods '));
});
test('interface methods', () {
expect(bindings, contains('normalMethod'));
expect(bindings, contains('unavailableMac'));
expect(bindings, contains('unavailableIos'));
expect(bindings, isNot(contains('unavailableBoth')));
expect(bindings, contains('depMac2'));
expect(bindings, contains('depMac3'));
expect(bindings, contains('depIos2'));
expect(bindings, isNot(contains('depIos2Mac2')));
expect(bindings, contains('depIos2Mac3'));
expect(bindings, contains('depIos3'));
expect(bindings, contains('depIos3Mac2'));
expect(bindings, contains('depIos3Mac3'));
expect(bindings, isNot(contains('alwaysDeprecated')));
expect(bindings, isNot(contains('alwaysUnavailable')));
});
test('interface properties', () {
expect(bindings, contains('get normalProperty'));
expect(bindings, contains('set normalProperty'));
expect(bindings, isNot(contains('get deprecatedProperty')));
expect(bindings, isNot(contains('set deprecatedProperty')));
});
test('protocol methods', () {
expect(bindings, contains('protNormalMethod'));
expect(bindings, contains('protUnavailableMac'));
expect(bindings, contains('protUnavailableIos'));
expect(bindings, isNot(contains('protUnavailableBoth')));
expect(bindings, contains('protDepMac2'));
expect(bindings, contains('protDepMac3'));
expect(bindings, contains('protDepIos2'));
expect(bindings, isNot(contains('protDepIos2Mac2')));
expect(bindings, contains('protDepIos2Mac3'));
expect(bindings, contains('protDepIos3'));
expect(bindings, contains('protDepIos3Mac2'));
expect(bindings, contains('protDepIos3Mac3'));
expect(bindings, isNot(contains('protAlwaysDeprecated')));
expect(bindings, isNot(contains('protAlwaysUnavailable')));
});
test('protocol properties', () {
expect(bindings, contains('protNormalProperty'));
expect(bindings, contains('setProtNormalProperty'));
expect(bindings, isNot(contains('protDeprecatedProperty')));
expect(bindings, isNot(contains('setProtDeprecatedProperty')));
});
test('category methods', () {
expect(bindings, contains('catNormalMethod'));
expect(bindings, contains('catUnavailableMac'));
expect(bindings, contains('catUnavailableIos'));
expect(bindings, isNot(contains('catUnavailableBoth')));
expect(bindings, contains('catDepMac2'));
expect(bindings, contains('catDepMac3'));
expect(bindings, contains('catDepIos2'));
expect(bindings, isNot(contains('catDepIos2Mac2')));
expect(bindings, contains('catDepIos2Mac3'));
expect(bindings, contains('catDepIos3'));
expect(bindings, contains('catDepIos3Mac2'));
expect(bindings, contains('catDepIos3Mac3'));
expect(bindings, isNot(contains('catAlwaysDeprecated')));
expect(bindings, isNot(contains('catAlwaysUnavailable')));
});
test('category properties', () {
expect(bindings, contains('get catNormalProperty'));
expect(bindings, contains('set catNormalProperty'));
expect(bindings, isNot(contains('get catDeprecatedProperty')));
expect(bindings, isNot(contains('set catDeprecatedProperty')));
});
test('functions', () {
expect(bindings, contains('normalFunction'));
expect(bindings, isNot(contains('deprecatedFunction')));
});
test('structs', () {
expect(bindings, contains('NormalStruct'));
expect(bindings, isNot(contains('DeprecatedStruct')));
});
test('unions', () {
expect(bindings, contains('NormalUnion'));
expect(bindings, isNot(contains('DeprecatedUnion')));
});
test('enums', () {
expect(bindings, contains('NormalEnum'));
expect(bindings, isNot(contains('DeprecatedEnum')));
});
test('unnamed enums', () {
expect(bindings, contains('normalUnnamedEnum'));
expect(bindings, isNot(contains('deprecatedUnnamedEnum')));
});
});
group('ios <=1.5, macos >=1.5', () {
late final String bindings;
setUpAll(() {
bindings = bindingsForVersion(
iosVers: Versions(max: Version(1, 5, 0)),
macosVers: Versions(min: Version(1, 5, 0)),
);
});
test('interfaces', () {
expect(bindings, contains('DeprecatedInterface '));
expect(bindings, contains('DeprecatedInterfaceMethods '));
});
test('protocols', () {
expect(bindings, contains('DeprecatedProtocol '));
expect(bindings, contains('DeprecatedProtocolMethods '));
});
test('interface methods', () {
expect(bindings, contains('normalMethod'));
expect(bindings, contains('unavailableMac'));
expect(bindings, contains('unavailableIos'));
expect(bindings, isNot(contains('unavailableBoth')));
expect(bindings, contains('depMac2'));
expect(bindings, contains('depMac3'));
expect(bindings, contains('depIos2'));
expect(bindings, contains('depIos2Mac2'));
expect(bindings, contains('depIos2Mac3'));
expect(bindings, contains('depIos3'));
expect(bindings, contains('depIos3Mac2'));
expect(bindings, contains('depIos3Mac3'));
expect(bindings, isNot(contains('alwaysDeprecated')));
expect(bindings, isNot(contains('alwaysUnavailable')));
});
test('interface properties', () {
expect(bindings, contains('get normalProperty'));
expect(bindings, contains('set normalProperty'));
expect(bindings, contains('get deprecatedProperty'));
expect(bindings, contains('set deprecatedProperty'));
});
test('protocol methods', () {
expect(bindings, contains('protNormalMethod'));
expect(bindings, contains('protUnavailableMac'));
expect(bindings, contains('protUnavailableIos'));
expect(bindings, isNot(contains('protUnavailableBoth')));
expect(bindings, contains('protDepMac2'));
expect(bindings, contains('protDepMac3'));
expect(bindings, contains('protDepIos2'));
expect(bindings, contains('protDepIos2Mac2'));
expect(bindings, contains('protDepIos2Mac3'));
expect(bindings, contains('protDepIos3'));
expect(bindings, contains('protDepIos3Mac2'));
expect(bindings, contains('protDepIos3Mac3'));
expect(bindings, isNot(contains('protAlwaysDeprecated')));
expect(bindings, isNot(contains('protAlwaysUnavailable')));
});
test('protocol properties', () {
expect(bindings, contains('protNormalProperty'));
expect(bindings, contains('setProtNormalProperty'));
expect(bindings, contains('protDeprecatedProperty'));
expect(bindings, contains('setProtDeprecatedProperty'));
});
test('category methods', () {
expect(bindings, contains('catNormalMethod'));
expect(bindings, contains('catUnavailableMac'));
expect(bindings, contains('catUnavailableIos'));
expect(bindings, isNot(contains('catUnavailableBoth')));
expect(bindings, contains('catDepMac2'));
expect(bindings, contains('catDepMac3'));
expect(bindings, contains('catDepIos2'));
expect(bindings, contains('catDepIos2Mac2'));
expect(bindings, contains('catDepIos2Mac3'));
expect(bindings, contains('catDepIos3'));
expect(bindings, contains('catDepIos3Mac2'));
expect(bindings, contains('catDepIos3Mac3'));
expect(bindings, isNot(contains('catAlwaysDeprecated')));
expect(bindings, isNot(contains('catAlwaysUnavailable')));
});
test('category properties', () {
expect(bindings, contains('get catNormalProperty'));
expect(bindings, contains('set catNormalProperty'));
expect(bindings, contains('get catDeprecatedProperty'));
expect(bindings, contains('set catDeprecatedProperty'));
});
test('functions', () {
expect(bindings, contains('normalFunction'));
expect(bindings, contains('deprecatedFunction'));
});
test('structs', () {
expect(bindings, contains('NormalStruct'));
expect(bindings, contains('DeprecatedStruct'));
});
test('unions', () {
expect(bindings, contains('NormalUnion'));
expect(bindings, contains('DeprecatedUnion'));
});
test('enums', () {
expect(bindings, contains('NormalEnum'));
expect(bindings, contains('DeprecatedEnum'));
});
test('unnamed enums', () {
expect(bindings, contains('normalUnnamedEnum'));
expect(bindings, contains('deprecatedUnnamedEnum'));
});
test('dart doc', () {
final trimmed = bindings.split('\n').map((l) => l.trim()).join('\n');
expect(
trimmed,
contains('''
/// iOS: introduced 1.0.0, deprecated 2.0.0
/// macOS: introduced 1.0.0, deprecated 2.0.0
final class DeprecatedStruct extends ffi.Struct'''),
);
expect(
trimmed,
contains('''
/// iOS: introduced 1.0.0, deprecated 2.0.0
/// macOS: introduced 1.0.0, deprecated 2.0.0
final class DeprecatedUnion extends ffi.Union'''),
);
expect(
trimmed,
contains('''
/// iOS: introduced 1.0.0, deprecated 2.0.0
/// macOS: introduced 1.0.0, deprecated 2.0.0
enum DeprecatedEnum'''),
);
expect(
trimmed,
contains('''
/// iOS: introduced 1.0.0, deprecated 2.0.0
/// macOS: introduced 1.0.0, deprecated 2.0.0
const int deprecatedUnnamedEnum = 1;
'''),
);
expect(
trimmed,
contains('''
/// iOS: introduced 1.0.0, deprecated 2.0.0
/// macOS: introduced 1.0.0, deprecated 2.0.0
int deprecatedFunction()'''),
);
expect(
trimmed,
contains('''
/// DeprecatedInterface
///
/// iOS: introduced 1.0.0, deprecated 2.0.0
/// macOS: introduced 1.0.0, deprecated 2.0.0
'''),
);
expect(
trimmed,
contains('''
/// depIos2Mac2
///
/// iOS: introduced 1.0.0, deprecated 2.0.0
/// macOS: introduced 1.0.0, deprecated 2.0.0
'''),
);
expect(
trimmed,
contains('''
/// DeprecatedProtocol
///
/// iOS: introduced 1.0.0, deprecated 2.0.0
/// macOS: introduced 1.0.0, deprecated 2.0.0
'''),
);
expect(
trimmed,
contains('''
/// protDepIos3
///
/// iOS: introduced 1.0.0, deprecated 3.0.0
'''),
);
expect(
trimmed,
contains('''
/// DeprecatedCategory
///
/// iOS: introduced 1.0.0, deprecated 2.0.0
/// macOS: introduced 1.0.0, deprecated 2.0.0
'''),
);
expect(
trimmed,
contains('''
/// DeprecatedCategoryMethods
///
/// iOS: introduced 2.0.0
/// macOS: introduced 10.0.0
'''),
);
});
});
group('ios >=0.5 <=0.9, macos >=0.5 <=0.9', () {
late final String bindings;
setUpAll(() {
bindings = bindingsForVersion(
iosVers: Versions(min: Version(0, 5, 0), max: Version(0, 9, 0)),
macosVers: Versions(min: Version(0, 5, 0), max: Version(0, 9, 0)),
);
});
test('interfaces', () {
expect(bindings, isNot(contains('DeprecatedInterface ')));
expect(bindings, contains('DeprecatedInterfaceMethods '));
});
test('protocols', () {
expect(bindings, isNot(contains('DeprecatedProtocol ')));
expect(bindings, contains('DeprecatedProtocolMethods '));
});
test('interface methods', () {
expect(bindings, contains('normalMethod'));
expect(bindings, contains('unavailableMac'));
expect(bindings, contains('unavailableIos'));
expect(bindings, isNot(contains('unavailableBoth')));
expect(bindings, contains('depMac2'));
expect(bindings, contains('depMac3'));
expect(bindings, contains('depIos2'));
expect(bindings, isNot(contains('depIos2Mac2')));
expect(bindings, isNot(contains('depIos2Mac3')));
expect(bindings, contains('depIos3'));
expect(bindings, isNot(contains('depIos3Mac2')));
expect(bindings, isNot(contains('depIos3Mac3')));
expect(bindings, isNot(contains('alwaysDeprecated')));
expect(bindings, isNot(contains('alwaysUnavailable')));
});
test('interface properties', () {
expect(bindings, contains('get normalProperty'));
expect(bindings, contains('set normalProperty'));
expect(bindings, isNot(contains('get deprecatedProperty')));
expect(bindings, isNot(contains('set deprecatedProperty')));
});
test('protocol methods', () {
expect(bindings, contains('protNormalMethod'));
expect(bindings, contains('protUnavailableMac'));
expect(bindings, contains('protUnavailableIos'));
expect(bindings, isNot(contains('protUnavailableBoth')));
expect(bindings, contains('protDepMac2'));
expect(bindings, contains('protDepMac3'));
expect(bindings, contains('protDepIos2'));
expect(bindings, isNot(contains('protDepIos2Mac2')));
expect(bindings, isNot(contains('protDepIos2Mac3')));
expect(bindings, contains('protDepIos3'));
expect(bindings, isNot(contains('protDepIos3Mac2')));
expect(bindings, isNot(contains('protDepIos3Mac3')));
expect(bindings, isNot(contains('protAlwaysDeprecated')));
expect(bindings, isNot(contains('protAlwaysUnavailable')));
});
test('protocol properties', () {
expect(bindings, contains('protNormalProperty'));
expect(bindings, contains('setProtNormalProperty'));
expect(bindings, isNot(contains('protDeprecatedProperty')));
expect(bindings, isNot(contains('setProtDeprecatedProperty')));
});
test('category methods', () {
expect(bindings, isNot(contains('catNormalMethod')));
expect(bindings, isNot(contains('catUnavailableMac')));
expect(bindings, isNot(contains('catUnavailableIos')));
expect(bindings, isNot(contains('catUnavailableBoth')));
expect(bindings, isNot(contains('catDepMac2')));
expect(bindings, isNot(contains('catDepMac3')));
expect(bindings, isNot(contains('catDepIos2')));
expect(bindings, isNot(contains('catDepIos2Mac2')));
expect(bindings, isNot(contains('catDepIos2Mac3')));
expect(bindings, isNot(contains('catDepIos3')));
expect(bindings, isNot(contains('catDepIos3Mac2')));
expect(bindings, isNot(contains('catDepIos3Mac3')));
expect(bindings, isNot(contains('catAlwaysDeprecated')));
expect(bindings, isNot(contains('catAlwaysUnavailable')));
});
test('category properties', () {
expect(bindings, isNot(contains('get catNormalProperty')));
expect(bindings, isNot(contains('set catNormalProperty')));
expect(bindings, isNot(contains('get catDeprecatedProperty')));
expect(bindings, isNot(contains('set catDeprecatedProperty')));
});
test('functions', () {
expect(bindings, contains('normalFunction'));
expect(bindings, isNot(contains('deprecatedFunction')));
});
test('structs', () {
expect(bindings, contains('NormalStruct'));
expect(bindings, isNot(contains('DeprecatedStruct')));
});
test('unions', () {
expect(bindings, contains('NormalUnion'));
expect(bindings, isNot(contains('DeprecatedUnion')));
});
test('enums', () {
expect(bindings, contains('NormalEnum'));
expect(bindings, isNot(contains('DeprecatedEnum')));
});
test('unnamed enums', () {
expect(bindings, contains('normalUnnamedEnum'));
expect(bindings, isNot(contains('deprecatedUnnamedEnum')));
});
});
});
}