| // Copyright (c) 2024, 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 'package:ffigen/src/config_provider/config_types.dart'; |
| import 'package:ffigen/src/header_parser/sub_parsers/api_availability.dart'; |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test('PlatformAvailability.deprecatedOrObsoleted', () { |
| expect(PlatformAvailability().deprecatedOrObsoleted, null); |
| expect( |
| PlatformAvailability(deprecated: Version(1, 2, 3)).deprecatedOrObsoleted, |
| Version(1, 2, 3), |
| ); |
| expect( |
| PlatformAvailability(obsoleted: Version(1, 2, 3)).deprecatedOrObsoleted, |
| Version(1, 2, 3), |
| ); |
| expect( |
| PlatformAvailability( |
| deprecated: Version(1, 2, 3), |
| obsoleted: Version(4, 5, 6), |
| ).deprecatedOrObsoleted, |
| Version(1, 2, 3), |
| ); |
| expect( |
| PlatformAvailability( |
| deprecated: Version(4, 5, 6), |
| obsoleted: Version(1, 2, 3), |
| ).deprecatedOrObsoleted, |
| Version(1, 2, 3), |
| ); |
| }); |
| |
| test('PlatformAvailability.getAvailability', () { |
| expect( |
| PlatformAvailability(unavailable: true).getAvailability(const Versions()), |
| Availability.none, |
| ); |
| |
| Availability getAvailability( |
| Version? apiMin, |
| Version? apiMax, |
| Version? confMin, |
| Version? confMax, |
| ) => PlatformAvailability( |
| introduced: apiMin, |
| deprecated: apiMax, |
| ).getAvailability(Versions(min: confMin, max: confMax)); |
| |
| final v1 = Version(1, 0, 0); |
| final v2 = Version(2, 0, 0); |
| final v3 = Version(3, 0, 0); |
| final v4 = Version(4, 0, 0); |
| final v5 = Version(5, 0, 0); |
| final v6 = Version(6, 0, 0); |
| final v7 = Version(7, 0, 0); |
| final v8 = Version(8, 0, 0); |
| |
| expect(getAvailability(null, null, null, null), Availability.all); |
| expect(getAvailability(null, null, null, v2), Availability.all); |
| expect(getAvailability(null, null, v1, null), Availability.all); |
| expect(getAvailability(null, null, v1, v2), Availability.all); |
| |
| expect(getAvailability(v3, null, null, null), Availability.some); |
| expect(getAvailability(v3, null, null, v2), Availability.none); |
| expect(getAvailability(v3, null, null, v3), Availability.some); |
| expect(getAvailability(v3, null, null, v5), Availability.some); |
| expect(getAvailability(v3, null, v1, null), Availability.some); |
| expect(getAvailability(v3, null, v1, v2), Availability.none); |
| expect(getAvailability(v3, null, v1, v3), Availability.some); |
| expect(getAvailability(v3, null, v1, v5), Availability.some); |
| expect(getAvailability(v3, null, v3, null), Availability.all); |
| expect(getAvailability(v3, null, v3, v5), Availability.all); |
| expect(getAvailability(v3, null, v4, null), Availability.all); |
| expect(getAvailability(v3, null, v4, v5), Availability.all); |
| |
| expect(getAvailability(null, v3, null, null), Availability.some); |
| expect(getAvailability(null, v3, null, v2), Availability.all); |
| expect(getAvailability(null, v3, null, v3), Availability.some); |
| expect(getAvailability(null, v3, null, v5), Availability.some); |
| expect(getAvailability(null, v3, v1, null), Availability.some); |
| expect(getAvailability(null, v3, v1, v2), Availability.all); |
| expect(getAvailability(null, v3, v1, v3), Availability.some); |
| expect(getAvailability(null, v3, v1, v5), Availability.some); |
| expect(getAvailability(null, v3, v3, null), Availability.none); |
| expect(getAvailability(null, v3, v3, v5), Availability.none); |
| expect(getAvailability(null, v3, v4, null), Availability.none); |
| expect(getAvailability(null, v3, v4, v5), Availability.none); |
| |
| expect(getAvailability(v3, v6, null, null), Availability.some); |
| expect(getAvailability(v3, v6, null, v2), Availability.none); |
| expect(getAvailability(v3, v6, null, v3), Availability.some); |
| expect(getAvailability(v3, v6, null, v5), Availability.some); |
| expect(getAvailability(v3, v6, null, v6), Availability.some); |
| expect(getAvailability(v3, v6, null, v8), Availability.some); |
| expect(getAvailability(v3, v6, v1, null), Availability.some); |
| expect(getAvailability(v3, v6, v1, v2), Availability.none); |
| expect(getAvailability(v3, v6, v1, v3), Availability.some); |
| expect(getAvailability(v3, v6, v1, v5), Availability.some); |
| expect(getAvailability(v3, v6, v1, v6), Availability.some); |
| expect(getAvailability(v3, v6, v1, v8), Availability.some); |
| expect(getAvailability(v3, v6, v3, null), Availability.some); |
| expect(getAvailability(v3, v6, v3, v5), Availability.all); |
| expect(getAvailability(v3, v6, v3, v6), Availability.some); |
| expect(getAvailability(v3, v6, v3, v8), Availability.some); |
| expect(getAvailability(v3, v6, v5, null), Availability.some); |
| expect(getAvailability(v3, v6, v5, v6), Availability.some); |
| expect(getAvailability(v3, v6, v5, v8), Availability.some); |
| expect(getAvailability(v3, v6, v6, null), Availability.none); |
| expect(getAvailability(v3, v6, v6, v8), Availability.none); |
| expect(getAvailability(v3, v6, v7, null), Availability.none); |
| expect(getAvailability(v3, v6, v7, v8), Availability.none); |
| }); |
| |
| group('Availability.getAvailability', () { |
| test('empty', () { |
| expect( |
| ApiAvailability( |
| externalVersions: const ExternalVersions(), |
| ).availability, |
| Availability.all, |
| ); |
| expect( |
| ApiAvailability( |
| externalVersions: ExternalVersions( |
| ios: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| ), |
| ).availability, |
| Availability.all, |
| ); |
| expect( |
| ApiAvailability( |
| externalVersions: ExternalVersions( |
| macos: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| ), |
| ).availability, |
| Availability.all, |
| ); |
| expect( |
| ApiAvailability( |
| externalVersions: ExternalVersions( |
| ios: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| macos: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| ), |
| ).availability, |
| Availability.all, |
| ); |
| }); |
| |
| test('always deprecated', () { |
| expect( |
| ApiAvailability( |
| alwaysDeprecated: true, |
| externalVersions: const ExternalVersions(), |
| ).availability, |
| Availability.all, |
| ); |
| expect( |
| ApiAvailability( |
| alwaysDeprecated: true, |
| externalVersions: ExternalVersions( |
| ios: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| ), |
| ).availability, |
| Availability.none, |
| ); |
| expect( |
| ApiAvailability( |
| alwaysDeprecated: true, |
| externalVersions: ExternalVersions( |
| macos: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| ), |
| ).availability, |
| Availability.none, |
| ); |
| expect( |
| ApiAvailability( |
| alwaysDeprecated: true, |
| externalVersions: ExternalVersions( |
| ios: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| macos: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| ), |
| ).availability, |
| Availability.none, |
| ); |
| }); |
| |
| test('always unavailable', () { |
| expect( |
| ApiAvailability( |
| alwaysUnavailable: true, |
| externalVersions: const ExternalVersions(), |
| ).availability, |
| Availability.all, |
| ); |
| expect( |
| ApiAvailability( |
| alwaysUnavailable: true, |
| externalVersions: ExternalVersions( |
| ios: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| ), |
| ).availability, |
| Availability.none, |
| ); |
| expect( |
| ApiAvailability( |
| alwaysUnavailable: true, |
| externalVersions: ExternalVersions( |
| macos: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| ), |
| ).availability, |
| Availability.none, |
| ); |
| expect( |
| ApiAvailability( |
| alwaysUnavailable: true, |
| externalVersions: ExternalVersions( |
| ios: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| macos: Versions(min: Version(1, 2, 3), max: Version(4, 5, 6)), |
| ), |
| ).availability, |
| Availability.none, |
| ); |
| }); |
| |
| test('versions', () { |
| final v1 = Version(1, 0, 0); |
| final v2 = Version(2, 0, 0); |
| final v3 = Version(3, 0, 0); |
| final v4 = Version(4, 0, 0); |
| final v5 = Version(5, 0, 0); |
| final v6 = Version(6, 0, 0); |
| |
| final plat = PlatformAvailability(introduced: v1, deprecated: v4); |
| final verInside = Versions(min: v2, max: v3); |
| final verOverlap = Versions(min: v2, max: v6); |
| final verOutside = Versions(min: v5, max: v6); |
| final verEmpty = const Versions(); |
| |
| Availability getAvail( |
| PlatformAvailability? iosAvail, |
| PlatformAvailability? macosAvail, |
| Versions? iosVer, |
| Versions? macosVer, |
| ) => ApiAvailability( |
| ios: iosAvail, |
| macos: macosAvail, |
| externalVersions: ExternalVersions(ios: iosVer, macos: macosVer), |
| ).availability; |
| |
| expect(getAvail(null, null, null, null), Availability.all); |
| expect(getAvail(null, null, verEmpty, verEmpty), Availability.all); |
| expect(getAvail(plat, plat, null, null), Availability.all); |
| expect(getAvail(plat, plat, verEmpty, verEmpty), Availability.all); |
| |
| expect(getAvail(plat, plat, null, verInside), Availability.all); |
| expect(getAvail(plat, plat, null, verOverlap), Availability.some); |
| expect(getAvail(plat, plat, null, verOutside), Availability.none); |
| expect(getAvail(plat, plat, verInside, null), Availability.all); |
| expect(getAvail(plat, plat, verOverlap, null), Availability.some); |
| expect(getAvail(plat, plat, verOutside, null), Availability.none); |
| |
| expect(getAvail(plat, plat, verEmpty, verInside), Availability.all); |
| expect(getAvail(plat, plat, verEmpty, verOverlap), Availability.some); |
| expect(getAvail(plat, plat, verEmpty, verOutside), Availability.none); |
| expect(getAvail(plat, plat, verInside, verEmpty), Availability.all); |
| expect(getAvail(plat, plat, verOverlap, verEmpty), Availability.some); |
| expect(getAvail(plat, plat, verOutside, verEmpty), Availability.none); |
| |
| expect(getAvail(plat, plat, verInside, verInside), Availability.all); |
| expect(getAvail(plat, plat, verInside, verOverlap), Availability.some); |
| expect(getAvail(plat, plat, verInside, verOutside), Availability.some); |
| expect(getAvail(plat, plat, verOverlap, verInside), Availability.some); |
| expect(getAvail(plat, plat, verOverlap, verOverlap), Availability.some); |
| expect(getAvail(plat, plat, verOverlap, verOutside), Availability.some); |
| expect(getAvail(plat, plat, verOutside, verInside), Availability.some); |
| expect(getAvail(plat, plat, verOutside, verOverlap), Availability.some); |
| expect(getAvail(plat, plat, verOutside, verOutside), Availability.none); |
| |
| expect(getAvail(null, plat, verInside, verInside), Availability.all); |
| expect(getAvail(null, plat, verInside, verOverlap), Availability.some); |
| expect(getAvail(null, plat, verInside, verOutside), Availability.some); |
| expect(getAvail(null, plat, verOverlap, verInside), Availability.all); |
| expect(getAvail(null, plat, verOverlap, verOverlap), Availability.some); |
| expect(getAvail(null, plat, verOverlap, verOutside), Availability.some); |
| expect(getAvail(null, plat, verOutside, verInside), Availability.all); |
| expect(getAvail(null, plat, verOutside, verOverlap), Availability.some); |
| expect(getAvail(null, plat, verOutside, verOutside), Availability.some); |
| |
| expect(getAvail(plat, null, verInside, verInside), Availability.all); |
| expect(getAvail(plat, null, verInside, verOverlap), Availability.all); |
| expect(getAvail(plat, null, verInside, verOutside), Availability.all); |
| expect(getAvail(plat, null, verOverlap, verInside), Availability.some); |
| expect(getAvail(plat, null, verOverlap, verOverlap), Availability.some); |
| expect(getAvail(plat, null, verOverlap, verOutside), Availability.some); |
| expect(getAvail(plat, null, verOutside, verInside), Availability.some); |
| expect(getAvail(plat, null, verOutside, verOverlap), Availability.some); |
| expect(getAvail(plat, null, verOutside, verOutside), Availability.some); |
| }); |
| }); |
| |
| test('ApiAvailability.dartDoc', () { |
| expect( |
| ApiAvailability( |
| ios: PlatformAvailability( |
| name: 'iOS', |
| introduced: Version(1, 2, 3), |
| deprecated: Version(4, 5, 6), |
| obsoleted: Version(7, 8, 9), |
| ), |
| macos: PlatformAvailability( |
| name: 'macOS', |
| deprecated: Version(10, 11, 12), |
| ), |
| externalVersions: const ExternalVersions(), |
| ).dartDoc, |
| isNull, |
| ); |
| |
| expect( |
| ApiAvailability( |
| ios: PlatformAvailability( |
| name: 'iOS', |
| introduced: Version(1, 2, 3), |
| deprecated: Version(4, 5, 6), |
| obsoleted: Version(7, 8, 9), |
| ), |
| macos: PlatformAvailability( |
| name: 'macOS', |
| deprecated: Version(10, 11, 12), |
| ), |
| externalVersions: ExternalVersions( |
| ios: Versions(max: Version(1, 0, 0)), |
| ), |
| ).dartDoc, |
| isNull, |
| ); |
| |
| expect( |
| ApiAvailability( |
| ios: PlatformAvailability( |
| name: 'iOS', |
| introduced: Version(1, 2, 3), |
| deprecated: Version(4, 5, 6), |
| obsoleted: Version(7, 8, 9), |
| ), |
| macos: PlatformAvailability( |
| name: 'macOS', |
| deprecated: Version(10, 11, 12), |
| ), |
| externalVersions: ExternalVersions( |
| ios: Versions(min: Version(1, 2, 3), max: Version(1, 3, 5)), |
| macos: Versions(max: Version(4, 5, 6)), |
| ), |
| ).dartDoc, |
| isNull, |
| ); |
| |
| expect( |
| ApiAvailability( |
| ios: PlatformAvailability( |
| name: 'iOS', |
| introduced: Version(1, 2, 3), |
| deprecated: Version(4, 5, 6), |
| obsoleted: Version(7, 8, 9), |
| ), |
| macos: PlatformAvailability( |
| name: 'macOS', |
| deprecated: Version(10, 11, 12), |
| ), |
| externalVersions: ExternalVersions( |
| ios: Versions(min: Version(1, 2, 3), max: Version(1, 3, 5)), |
| macos: Versions(max: Version(11, 12, 13)), |
| ), |
| ).dartDoc, |
| ''' |
| iOS: introduced 1.2.3, deprecated 4.5.6, obsoleted 7.8.9 |
| macOS: deprecated 10.11.12''', |
| ); |
| |
| expect( |
| ApiAvailability( |
| ios: PlatformAvailability( |
| name: 'iOS', |
| introduced: Version(1, 2, 3), |
| obsoleted: Version(4, 5, 6), |
| ), |
| externalVersions: ExternalVersions( |
| ios: Versions(max: Version(2, 3, 4)), |
| ), |
| ).dartDoc, |
| 'iOS: introduced 1.2.3, obsoleted 4.5.6', |
| ); |
| |
| expect( |
| ApiAvailability( |
| ios: PlatformAvailability(name: 'macOS', unavailable: true), |
| externalVersions: ExternalVersions( |
| ios: Versions(max: Version(1, 2, 3)), |
| macos: Versions(max: Version(2, 3, 4)), |
| ), |
| ).dartDoc, |
| 'macOS: unavailable', |
| ); |
| |
| expect( |
| ApiAvailability( |
| externalVersions: const ExternalVersions(ios: Versions()), |
| ).dartDoc, |
| isNull, |
| ); |
| }); |
| } |