Compare commits

..

No commits in common. "master" and "1.0.0" have entirely different histories.

8 changed files with 38 additions and 107 deletions

View file

@ -1,14 +0,0 @@
name: Iconica Standard Component Documentation Workflow
# Workflow Caller version: 1.0.0
on:
release:
types: [published]
workflow_dispatch:
jobs:
call-iconica-component-documentation-workflow:
uses: Iconica-Development/.github/.github/workflows/component-documentation.yml@master
secrets: inherit
permissions: write-all

View file

@ -1,14 +0,0 @@
name: Iconica Standard Component CI Workflow
# Workflow Caller version: 2.0.0
on:
pull_request:
workflow_dispatch:
jobs:
call-global-iconica-workflow:
uses: Iconica-Development/.github/.github/workflows/component-ci.yml@master
secrets: inherit
permissions: write-all
with:
subfolder: "." # add optional subfolder to run workflow in

4
.gitignore vendored
View file

@ -28,7 +28,3 @@ migrate_working_dir/
.dart_tool/
.packages
build/
# FVM Version Cache
.fvm/
.fvmrc

View file

@ -1,7 +1,3 @@
## 1.0.1
- Added CI and linter
## 1.0.0
- Initial release

View file

@ -1,9 +1,4 @@
include: package:flutter_iconica_analysis/analysis_options.yaml
include: package:flutter_lints/flutter.yaml
# Possible to overwrite the rules from the package
analyzer:
exclude:
linter:
rules:
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options

View file

@ -1,10 +1,9 @@
// SPDX-FileCopyrightText: 2022 Iconica
//
// SPDX-License-Identifier: BSD-3-Clause
///
library plugin_platform_interface;
// ignore: depend_on_referenced_packages
import 'package:meta/meta.dart';
/// Base class for data interfaces.
@ -12,25 +11,20 @@ import 'package:meta/meta.dart';
/// Provides a static helper method for ensuring that data interfaces are
/// implemented using `extends` instead of `implements`.
///
/// Data interface classes are expected to have a private static token object
/// which will be
/// Data interface classes are expected to have a private static token object which will be
/// be passed to [verify] along with a data interface object for verification.
///
/// Sample usage:
///
///
/// Mockito mocks of data interfaces will fail the verification, in test code
/// only it is possible
/// to include the [MockDataInterfaceMixin] for the verification to be
/// temporarily disabled. See
/// [MockDataInterfaceMixin] for a sample of using Mockito to mock a data
/// interface.
/// Mockito mocks of data interfaces will fail the verification, in test code only it is possible
/// to include the [MockDataInterfaceMixin] for the verification to be temporarily disabled. See
/// [MockDataInterfaceMixin] for a sample of using Mockito to mock a data interface.
abstract class DataInterface {
/// Constructs a DataInterface, for use only in constructors of abstract
/// derived classes.
///
/// @param token The same, non-`const` `Object` that will be passed
/// to `verify`.
/// @param token The same, non-`const` `Object` that will be passed to `verify`.
DataInterface({required Object token}) {
_instanceTokens[this] = token;
}
@ -75,18 +69,14 @@ abstract class DataInterface {
required bool preventConstObject,
}) {
if (instance is MockDataInterfaceMixin) {
var assertionsEnabled = false;
assert(
() {
assertionsEnabled = true;
return true;
}(),
'',
);
bool assertionsEnabled = false;
assert(() {
assertionsEnabled = true;
return true;
}());
if (!assertionsEnabled) {
throw AssertionError(
'`MockDataInterfaceMixin` is not intended for use in release builds.',
);
'`MockDataInterfaceMixin` is not intended for use in release builds.');
}
return;
}
@ -96,8 +86,7 @@ abstract class DataInterface {
}
if (!identical(token, _instanceTokens[instance])) {
throw AssertionError(
'Data interfaces must not be implemented with `implements`',
);
'Data interfaces must not be implemented with `implements`');
}
}
}

View file

@ -1,26 +1,21 @@
name: flutter_data_interface
description: Generic data interface package
version: 1.0.1
description: Generic data interface package
version: 1.0.0
repository: https://github.com/Iconica-Development/flutter_data_interface
publish_to: https://forgejo.internal.iconica.nl/api/packages/internal/pub
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: '>=2.18.0 <3.0.0'
flutter: ">=1.17.0"
dependencies:
flutter:
sdk: flutter
meta: ">=1.10.0 <2.0.0"
mockito: any
dev_dependencies:
flutter_test:
sdk: flutter
mockito: ">=5.4.4 <6.0.0"
flutter_iconica_analysis:
git:
url: https://github.com/Iconica-Development/flutter_iconica_analysis
ref: 6.0.0
flutter_lints: ^2.0.0
flutter:

View file

@ -99,32 +99,26 @@ class StaticMethodsOnlyMockPlatformInterfaceMixinTest
void main() {
group('`verify`', () {
test('prevents implementation with `implements`', () {
expect(
() {
SamplePluginPlatform.instance = ImplementsSamplePluginPlatform();
},
throwsA(isA<AssertionError>()),
);
expect(() {
SamplePluginPlatform.instance = ImplementsSamplePluginPlatform();
}, throwsA(isA<AssertionError>()));
});
test('prevents implmentation with `implements` and `noSuchMethod`', () {
expect(
() {
SamplePluginPlatform.instance =
ImplementsSamplePluginPlatformUsingNoSuchMethod();
},
throwsA(isA<AssertionError>()),
);
expect(() {
SamplePluginPlatform.instance =
ImplementsSamplePluginPlatformUsingNoSuchMethod();
}, throwsA(isA<AssertionError>()));
});
test('allows mocking with `implements`', () {
SamplePluginPlatform mock =
final SamplePluginPlatform mock =
ImplementsSamplePluginPlatformUsingMockPlatformInterfaceMixin();
SamplePluginPlatform.instance = mock;
});
test('allows faking with `implements`', () {
SamplePluginPlatform fake =
final SamplePluginPlatform fake =
ImplementsSamplePluginPlatformUsingFakePlatformInterfaceMixin();
SamplePluginPlatform.instance = fake;
});
@ -134,29 +128,23 @@ void main() {
});
test('prevents `const Object()` token', () {
expect(
() {
ConstTokenPluginPlatform.instance = ExtendsConstTokenPluginPlatform();
},
throwsA(isA<AssertionError>()),
);
expect(() {
ConstTokenPluginPlatform.instance = ExtendsConstTokenPluginPlatform();
}, throwsA(isA<AssertionError>()));
});
});
// Tests of the earlier, to-be-deprecated `verifyToken` method
group('`verifyToken`', () {
test('prevents implementation with `implements`', () {
expect(
() {
VerifyTokenPluginPlatform.instance =
ImplementsVerifyTokenPluginPlatform();
},
throwsA(isA<AssertionError>()),
);
expect(() {
VerifyTokenPluginPlatform.instance =
ImplementsVerifyTokenPluginPlatform();
}, throwsA(isA<AssertionError>()));
});
test('allows mocking with `implements`', () {
VerifyTokenPluginPlatform mock =
final VerifyTokenPluginPlatform mock =
ImplementsVerifyTokenPluginPlatformUsingMockPlatformInterfaceMixin();
VerifyTokenPluginPlatform.instance = mock;
});