From bf8d4247c867b8762430912c8e46c00d86f44ffa Mon Sep 17 00:00:00 2001 From: Jethro Date: Sun, 4 May 2025 12:11:10 +0000 Subject: [PATCH 1/4] test: add test for empty file --- .../json_file_repository_test.dart | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 test/repositories/json_file_repository_test.dart diff --git a/test/repositories/json_file_repository_test.dart b/test/repositories/json_file_repository_test.dart new file mode 100644 index 00000000..d434bd4b --- /dev/null +++ b/test/repositories/json_file_repository_test.dart @@ -0,0 +1,28 @@ +import 'dart:io'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:flutter_cache_manager/src/storage/cache_info_repositories/json_cache_info_repository.dart'; + +void main() { + group('JsonCacheInfoRepository', () { + test('handles empty file gracefully', () async { + // Create a temporary file + final tempFile = File('${Directory.systemTemp.path}/test_empty.json'); + await tempFile.create(); + + // Ensure the file is empty + expect(await tempFile.length(), 0); + + // Initialize the repository + final repository = JsonCacheInfoRepository.withFile(tempFile); + + // Call the method to test + await repository.open(); + + // Verify no exceptions are thrown and repository is empty + expect(await repository.getAllObjects(), isEmpty); + + // Clean up + await tempFile.delete(); + }); + }); +} \ No newline at end of file From ae0fc03c3bbca5b905629c7d370cd7e84d92bb52 Mon Sep 17 00:00:00 2001 From: Jethro Date: Sun, 4 May 2025 12:23:57 +0000 Subject: [PATCH 2/4] fix: check file is not empty --- .../cache_info_repositories/json_cache_info_repository.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter_cache_manager/lib/src/storage/cache_info_repositories/json_cache_info_repository.dart b/flutter_cache_manager/lib/src/storage/cache_info_repositories/json_cache_info_repository.dart index 800f4ba1..e7b0e1d1 100644 --- a/flutter_cache_manager/lib/src/storage/cache_info_repositories/json_cache_info_repository.dart +++ b/flutter_cache_manager/lib/src/storage/cache_info_repositories/json_cache_info_repository.dart @@ -137,7 +137,7 @@ class JsonCacheInfoRepository extends CacheInfoRepository Future _readFile(File file) async { _cacheObjects.clear(); _jsonCache.clear(); - if (await file.exists()) { + if (await file.exists() && await file.length() > 0) { // Check if file is not empty try { final jsonString = await file.readAsString(); final json = jsonDecode(jsonString) as List; From 563801d4dc89ab86ce375e632501f99357463cdd Mon Sep 17 00:00:00 2001 From: Jethro C Date: Sun, 4 May 2025 13:35:11 +0100 Subject: [PATCH 3/4] test: move test --- .../json_file_repository_test.dart | 12 ++++++++ .../json_file_repository_test.dart | 28 ------------------- 2 files changed, 12 insertions(+), 28 deletions(-) delete mode 100644 test/repositories/json_file_repository_test.dart diff --git a/flutter_cache_manager/test/repositories/json_file_repository_test.dart b/flutter_cache_manager/test/repositories/json_file_repository_test.dart index 0e6e1dba..33e3f329 100644 --- a/flutter_cache_manager/test/repositories/json_file_repository_test.dart +++ b/flutter_cache_manager/test/repositories/json_file_repository_test.dart @@ -41,6 +41,18 @@ void main() { await repository.open(); }); + test('Open repository should not throw when file is empty', () async { + final tempFile = File('${Directory.systemTemp.path}/test_empty.json'); + await tempFile.create(); + expect(await tempFile.length(), 0); + + final repository = JsonCacheInfoRepository.withFile(tempFile); + await repository.open(); + + expect(await repository.getAllObjects(), isEmpty); + await tempFile.delete(); + }); + test('An open repository can be closed', () async { var repository = await JsonRepoHelpers.createRepository(); var isClosed = await repository.close(); diff --git a/test/repositories/json_file_repository_test.dart b/test/repositories/json_file_repository_test.dart deleted file mode 100644 index d434bd4b..00000000 --- a/test/repositories/json_file_repository_test.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_cache_manager/src/storage/cache_info_repositories/json_cache_info_repository.dart'; - -void main() { - group('JsonCacheInfoRepository', () { - test('handles empty file gracefully', () async { - // Create a temporary file - final tempFile = File('${Directory.systemTemp.path}/test_empty.json'); - await tempFile.create(); - - // Ensure the file is empty - expect(await tempFile.length(), 0); - - // Initialize the repository - final repository = JsonCacheInfoRepository.withFile(tempFile); - - // Call the method to test - await repository.open(); - - // Verify no exceptions are thrown and repository is empty - expect(await repository.getAllObjects(), isEmpty); - - // Clean up - await tempFile.delete(); - }); - }); -} \ No newline at end of file From 9a99decf10cff98d8ea1d13dc4bc556dcd4eb258 Mon Sep 17 00:00:00 2001 From: Jethro C Date: Sun, 4 May 2025 14:52:43 +0100 Subject: [PATCH 4/4] test: check whether onError is called --- .../json_cache_info_repository.dart | 2 +- .../test/repositories/json_file_repository_test.dart | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/flutter_cache_manager/lib/src/storage/cache_info_repositories/json_cache_info_repository.dart b/flutter_cache_manager/lib/src/storage/cache_info_repositories/json_cache_info_repository.dart index e7b0e1d1..ff84df53 100644 --- a/flutter_cache_manager/lib/src/storage/cache_info_repositories/json_cache_info_repository.dart +++ b/flutter_cache_manager/lib/src/storage/cache_info_repositories/json_cache_info_repository.dart @@ -137,7 +137,7 @@ class JsonCacheInfoRepository extends CacheInfoRepository Future _readFile(File file) async { _cacheObjects.clear(); _jsonCache.clear(); - if (await file.exists() && await file.length() > 0) { // Check if file is not empty + if (await file.exists() && await file.length() > 0) { try { final jsonString = await file.readAsString(); final json = jsonDecode(jsonString) as List; diff --git a/flutter_cache_manager/test/repositories/json_file_repository_test.dart b/flutter_cache_manager/test/repositories/json_file_repository_test.dart index 33e3f329..8c9f0197 100644 --- a/flutter_cache_manager/test/repositories/json_file_repository_test.dart +++ b/flutter_cache_manager/test/repositories/json_file_repository_test.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:collection/collection.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_cache_manager/src/storage/cache_info_repositories/json_cache_info_repository.dart'; import 'package:flutter_cache_manager/src/storage/cache_object.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -41,7 +42,13 @@ void main() { await repository.open(); }); - test('Open repository should not throw when file is empty', () async { + test('Open repository should not report error when file is empty', + () async { + var originalOnError = FlutterError.onError; + FlutterError.onError = (FlutterErrorDetails details) { + throw details.exception; + }; + final tempFile = File('${Directory.systemTemp.path}/test_empty.json'); await tempFile.create(); expect(await tempFile.length(), 0); @@ -51,6 +58,7 @@ void main() { expect(await repository.getAllObjects(), isEmpty); await tempFile.delete(); + FlutterError.onError = originalOnError; }); test('An open repository can be closed', () async {