mirror of
https://github.com/hanskokx/arcane_framework.git
synced 2026-05-14 10:29:06 +02:00
[UNTESTED] Fixes notifiers and adds some additional methods. Adds tests.
Changes: // ArcaneEnvironment breaking: context.read<ArcaneEnvironment>() -> ArcaneEnvironment.of(context) breaking: context.read<ArcaneEnvironment>().state -> ArcaneEnvironment.of(context).environment; // Feature flag service added: reset() // Logging service added: registerInterface() added: unregisterInterfaces() added: unregisterAllInterfaces() // ArcaneReactiveTheme fixed: currentMode, dark, light now actually emit new values when changed added: getters for lightTheme, darkTheme, and systemTheme TODO: test systemTheme Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
import "package:arcane_framework/arcane_framework.dart";
|
||||
import "package:flutter/material.dart";
|
||||
import "package:flutter_test/flutter_test.dart";
|
||||
|
||||
void main() {
|
||||
group("ArcaneServiceProvider", () {
|
||||
late List<ArcaneService> testServices;
|
||||
|
||||
setUp(() {
|
||||
testServices = [
|
||||
MockArcaneService(),
|
||||
AnotherMockService(),
|
||||
];
|
||||
});
|
||||
|
||||
testWidgets("provides services to widget tree", (tester) async {
|
||||
await tester.pumpWidget(
|
||||
ArcaneApp(
|
||||
services: testServices,
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
final provider = ArcaneServiceProvider.of(context);
|
||||
expect(provider.serviceInstances, equals(testServices));
|
||||
return const SizedBox();
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets("serviceOfType extension returns correct service",
|
||||
(tester) async {
|
||||
await tester.pumpWidget(
|
||||
ArcaneApp(
|
||||
services: testServices,
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
final service = context.serviceOfType<MockArcaneService>();
|
||||
expect(service, isNotNull);
|
||||
expect(service, isA<MockArcaneService>());
|
||||
return const SizedBox();
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets("serviceOfType returns null for unregistered service",
|
||||
(tester) async {
|
||||
await tester.pumpWidget(
|
||||
ArcaneApp(
|
||||
services: testServices,
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
final service = context.serviceOfType<UnregisteredService>();
|
||||
expect(service, isNull);
|
||||
return const SizedBox();
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
test("of() throws when no provider is found", () {
|
||||
final context = MockBuildContext();
|
||||
expect(
|
||||
() => ArcaneServiceProvider.of(context),
|
||||
throwsException,
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets("updateShouldNotify always returns true", (tester) async {
|
||||
final provider = ArcaneServiceProvider(
|
||||
serviceInstances: testServices,
|
||||
child: const SizedBox(),
|
||||
);
|
||||
|
||||
expect(
|
||||
provider.updateShouldNotify(
|
||||
ArcaneServiceProvider(
|
||||
serviceInstances: testServices,
|
||||
child: const SizedBox(),
|
||||
),
|
||||
),
|
||||
true,
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
class MockArcaneService extends ArcaneService {}
|
||||
|
||||
class AnotherMockService extends ArcaneService {}
|
||||
|
||||
class UnregisteredService extends ArcaneService {}
|
||||
|
||||
class MockBuildContext extends Fake implements BuildContext {}
|
||||
Reference in New Issue
Block a user