Starting to go places. More testing in place, need to solidify the dashboard api boundary next
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import 'dart:async';
|
||||
import 'package:xp_nix/src/interfaces/i_idle_monitor.dart';
|
||||
|
||||
/// Mock implementation of IIdleMonitor for testing
|
||||
class MockIdleMonitor implements IIdleMonitor {
|
||||
final StreamController<IdleStatus> _idleStateController = StreamController<IdleStatus>.broadcast();
|
||||
IdleStatus _status = IdleStatus.active;
|
||||
|
||||
@override
|
||||
Stream<IdleStatus> get idleStateStream => _idleStateController.stream;
|
||||
|
||||
@override
|
||||
Future<void> start() async {
|
||||
// No-op for mock
|
||||
}
|
||||
|
||||
@override
|
||||
void stop() {
|
||||
_idleStateController.close();
|
||||
}
|
||||
|
||||
@override
|
||||
IdleStatus get status => _status;
|
||||
|
||||
/// Simulate user going to deep idle
|
||||
void simulateDeepIdle() {
|
||||
_status = IdleStatus.deepIdle;
|
||||
_idleStateController.add(IdleStatus.deepIdle);
|
||||
}
|
||||
|
||||
/// Simulate user going to light idle
|
||||
void simulateLightIdle() {
|
||||
_status = IdleStatus.lightIdle;
|
||||
_idleStateController.add(IdleStatus.lightIdle);
|
||||
}
|
||||
|
||||
/// Simulate user becoming active
|
||||
void simulateActive() {
|
||||
_status = IdleStatus.active;
|
||||
_idleStateController.add(IdleStatus.active);
|
||||
}
|
||||
|
||||
/// Simulate user going idle (backwards compatibility - defaults to deep idle)
|
||||
void simulateIdle() {
|
||||
simulateDeepIdle();
|
||||
}
|
||||
|
||||
/// Simulate a sequence of idle/active events with delays
|
||||
Future<void> simulateIdleSequence(List<IdleEvent> events) async {
|
||||
for (final event in events) {
|
||||
await Future.delayed(event.delay);
|
||||
if (event.isIdle) {
|
||||
simulateIdle();
|
||||
} else {
|
||||
simulateActive();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Represents an idle state change event for simulation
|
||||
class IdleEvent {
|
||||
final bool isIdle;
|
||||
final Duration delay;
|
||||
|
||||
const IdleEvent({required this.isIdle, this.delay = Duration.zero});
|
||||
|
||||
/// Factory for idle event
|
||||
factory IdleEvent.idle({Duration delay = Duration.zero}) => IdleEvent(isIdle: true, delay: delay);
|
||||
|
||||
/// Factory for active event
|
||||
factory IdleEvent.active({Duration delay = Duration.zero}) => IdleEvent(isIdle: false, delay: delay);
|
||||
}
|
||||
Reference in New Issue
Block a user