Patch tests for unified_analytics 5.8.8+2 fixes (#281)
diff --git a/.github/workflows/unified_analytics.yml b/.github/workflows/unified_analytics.yml
index cc45d5e..9f4f160 100644
--- a/.github/workflows/unified_analytics.yml
+++ b/.github/workflows/unified_analytics.yml
@@ -3,7 +3,6 @@
on:
pull_request:
- branches: [ main ]
paths:
- '.github/workflows/unified_analytics.yml'
- 'pkgs/unified_analytics/**'
diff --git a/pkgs/unified_analytics/lib/src/log_handler.dart b/pkgs/unified_analytics/lib/src/log_handler.dart
index 286f4a6..57eecfc 100644
--- a/pkgs/unified_analytics/lib/src/log_handler.dart
+++ b/pkgs/unified_analytics/lib/src/log_handler.dart
@@ -6,6 +6,7 @@
import 'package:clock/clock.dart';
import 'package:file/file.dart';
+import 'package:meta/meta.dart';
import 'package:path/path.dart' as p;
import 'constants.dart';
@@ -161,16 +162,21 @@
class LogHandler {
final FileSystem fs;
final Directory homeDirectory;
- final File logFile;
+ File _logFile;
final ErrorHandler _errorHandler;
+ File get logFile => _logFile;
+
+ @visibleForTesting
+ set logFile(File value) => _logFile = value;
+
/// A log handler constructor that will delegate saving
/// logs and retrieving stats from the persisted log.
LogHandler({
required this.fs,
required this.homeDirectory,
required ErrorHandler errorHandler,
- }) : logFile = fs.file(p.join(
+ }) : _logFile = fs.file(p.join(
homeDirectory.path,
kDartToolDirectoryName,
kLogFileName,
@@ -186,7 +192,7 @@
// Parse each line of the log file through [LogItem],
// some returned records may be null if malformed, they will be
// removed later through `whereType<LogItem>`
- final records = logFile
+ final records = _logFile
.readAsLinesSync()
.map((String e) {
try {
@@ -283,26 +289,26 @@
/// or less than [kLogFileLength] records.
void save({required Map<String, Object?> data}) {
try {
- final stat = logFile.statSync();
+ final stat = _logFile.statSync();
List<String> records;
if (stat.size > kMaxLogFileSize) {
- logFile.deleteSync();
- logFile.createSync();
+ _logFile.deleteSync();
+ _logFile.createSync();
records = [];
} else {
- records = logFile.readAsLinesSync();
+ records = _logFile.readAsLinesSync();
}
final content = '${jsonEncode(data)}\n';
// When the record count is less than the max, add as normal;
// else drop the oldest records until equal to max
if (records.length < kLogFileLength) {
- logFile.writeAsStringSync(content, mode: FileMode.writeOnlyAppend);
+ _logFile.writeAsStringSync(content, mode: FileMode.writeOnlyAppend);
} else {
records.add(content);
records = records.skip(records.length - kLogFileLength).toList();
- logFile.writeAsStringSync(records.join('\n'));
+ _logFile.writeAsStringSync(records.join('\n'));
}
} on FileSystemException {
// Logging isn't important enough to warrant raising a
diff --git a/pkgs/unified_analytics/test/log_handler_test.dart b/pkgs/unified_analytics/test/log_handler_test.dart
index 1842cee..50f7f3f 100644
--- a/pkgs/unified_analytics/test/log_handler_test.dart
+++ b/pkgs/unified_analytics/test/log_handler_test.dart
@@ -12,6 +12,7 @@
import 'package:unified_analytics/src/constants.dart';
import 'package:unified_analytics/src/enums.dart';
+import 'package:unified_analytics/src/error_handler.dart';
import 'package:unified_analytics/src/log_handler.dart';
import 'package:unified_analytics/src/utils.dart';
import 'package:unified_analytics/unified_analytics.dart';
@@ -207,19 +208,20 @@
test(
'Catches and discards any FileSystemException raised from attempting '
'to write to the log file', () async {
- final logFilePath = 'log.txt';
final fs = MemoryFileSystem.test(opHandle: (context, operation) {
- if (context == logFilePath && operation == FileSystemOp.write) {
+ if (context.endsWith(kLogFileName) && operation == FileSystemOp.write) {
throw FileSystemException(
'writeFrom failed',
- logFilePath,
+ context,
const OSError('No space left on device', 28),
);
}
});
- final logFile = fs.file(logFilePath);
- logFile.createSync();
- final logHandler = LogHandler(logFile: logFile);
+ final logHandler = LogHandler(
+ fs: fs,
+ homeDirectory: fs.currentDirectory,
+ errorHandler: ErrorHandler(sendFunction: (_) {}),
+ );
logHandler.save(data: {});
});
@@ -228,7 +230,13 @@
var deletedLargeLogFile = false;
var wroteDataToLogFile = false;
const data = <String, Object?>{};
- final logFile = _FakeFile('log.txt')
+
+ final logHandler = LogHandler(
+ fs: fs,
+ homeDirectory: fs.currentDirectory,
+ errorHandler: ErrorHandler(sendFunction: (_) {}),
+ );
+ logHandler.logFile = _FakeFile('log.txt')
.._deleteSyncImpl = (() => deletedLargeLogFile = true)
.._createSyncImpl = () {}
.._statSyncImpl = (() => _FakeFileStat(kMaxLogFileSize + 1))
@@ -237,7 +245,6 @@
expect(mode, FileMode.writeOnlyAppend);
wroteDataToLogFile = true;
};
- final logHandler = LogHandler(logFile: logFile);
logHandler.save(data: data);
expect(deletedLargeLogFile, isTrue);
@@ -247,7 +254,7 @@
test('does not delete log file if smaller than kMaxLogFileSize', () async {
var wroteDataToLogFile = false;
const data = <String, Object?>{};
- final logFile = _FakeFile('log.txt')
+ final fakeLogFile = _FakeFile('log.txt')
.._deleteSyncImpl =
(() => fail('called logFile.deleteSync() when file was less than '
'kMaxLogFileSize'))
@@ -259,7 +266,12 @@
expect(mode, FileMode.writeOnlyAppend);
wroteDataToLogFile = true;
};
- final logHandler = LogHandler(logFile: logFile);
+ final logHandler = LogHandler(
+ fs: fs,
+ homeDirectory: fs.currentDirectory,
+ errorHandler: ErrorHandler(sendFunction: (_) {}),
+ );
+ logHandler.logFile = fakeLogFile;
logHandler.save(data: data);
expect(wroteDataToLogFile, isTrue);