Skip to content

Commit

Permalink
test: add listeners tests
Browse files Browse the repository at this point in the history
  • Loading branch information
juliansteenbakker committed Feb 5, 2025
1 parent 093cbb4 commit 7e1af45
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
7 changes: 7 additions & 0 deletions flutter_secure_storage/lib/flutter_secure_storage.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
library;

import 'dart:collection';

import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:flutter_secure_storage/test/test_flutter_secure_storage_platform.dart';
Expand Down Expand Up @@ -74,6 +76,11 @@ class FlutterSecureStorage {
FlutterSecureStoragePlatform get _platform =>
FlutterSecureStoragePlatform.instance;

/// Returns all listeners for testing purposes
@visibleForTesting
Map<String, List<ValueChanged<String?>>> get getListeners =>
UnmodifiableMapView(_listeners);

/// Register [listener] for [key] with the value injected for the listener.
/// The [listener] will still be called when you delete the [key] with the
/// injected value as null. This listener will be added to the list of
Expand Down
50 changes: 50 additions & 0 deletions flutter_secure_storage/test/flutter_secure_storage_test.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:flutter_secure_storage/test/test_flutter_secure_storage_platform.dart';
Expand Down Expand Up @@ -560,4 +561,53 @@ void main() {
expect(defaultOptions.toMap(), constructorOptions.toMap());
});
});

group('Listener Management Tests', () {
late ValueChanged<String?> listener1;
late ValueChanged<String?> listener2;

setUp(() {
storage.unregisterAllListeners();
listener1 = (value) => debugPrint('Listener 1: $value');
listener2 = (value) => debugPrint('Listener 2: $value');
});

test('Register listener adds correctly', () {
storage.registerListener(key: 'key1', listener: listener1);
expect(storage.getListeners['key1']?.contains(listener1), isTrue);
});

test('Register multiple listeners on same key', () {
storage
..registerListener(key: 'key1', listener: listener1)
..registerListener(key: 'key1', listener: listener2);
expect(storage.getListeners['key1']?.length, 2);
expect(storage.getListeners['key1'], containsAll([listener1, listener2]));
});

test('Unregister listener removes specific listener', () {
storage
..registerListener(key: 'key1', listener: listener1)
..registerListener(key: 'key1', listener: listener2)
..unregisterListener(key: 'key1', listener: listener1);
expect(storage.getListeners['key1']?.contains(listener1), isFalse);
expect(storage.getListeners['key1']?.contains(listener2), isTrue);
});

test('Unregister all listeners for a key', () {
storage
..registerListener(key: 'key1', listener: listener1)
..registerListener(key: 'key1', listener: listener2)
..unregisterAllListenersForKey(key: 'key1');
expect(storage.getListeners.containsKey('key1'), isFalse);
});

test('Unregister all listeners for all keys', () {
storage
..registerListener(key: 'key1', listener: listener1)
..registerListener(key: 'key2', listener: listener2)
..unregisterAllListeners();
expect(storage.getListeners.isEmpty, isTrue);
});
});
}

0 comments on commit 7e1af45

Please sign in to comment.