Skip to content

Commit accba5e

Browse files
authored
Patch tests for unified_analytics 5.8.8+2 fixes (#281)
1 parent 6617807 commit accba5e

File tree

3 files changed

+37
-20
lines changed

3 files changed

+37
-20
lines changed

.github/workflows/unified_analytics.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ permissions: read-all
33

44
on:
55
pull_request:
6-
branches: [ main ]
76
paths:
87
- '.github/workflows/unified_analytics.yml'
98
- 'pkgs/unified_analytics/**'

pkgs/unified_analytics/lib/src/log_handler.dart

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'dart:convert';
66

77
import 'package:clock/clock.dart';
88
import 'package:file/file.dart';
9+
import 'package:meta/meta.dart';
910
import 'package:path/path.dart' as p;
1011

1112
import 'constants.dart';
@@ -161,16 +162,21 @@ class LogFileStats {
161162
class LogHandler {
162163
final FileSystem fs;
163164
final Directory homeDirectory;
164-
final File logFile;
165+
File _logFile;
165166
final ErrorHandler _errorHandler;
166167

168+
File get logFile => _logFile;
169+
170+
@visibleForTesting
171+
set logFile(File value) => _logFile = value;
172+
167173
/// A log handler constructor that will delegate saving
168174
/// logs and retrieving stats from the persisted log.
169175
LogHandler({
170176
required this.fs,
171177
required this.homeDirectory,
172178
required ErrorHandler errorHandler,
173-
}) : logFile = fs.file(p.join(
179+
}) : _logFile = fs.file(p.join(
174180
homeDirectory.path,
175181
kDartToolDirectoryName,
176182
kLogFileName,
@@ -186,7 +192,7 @@ class LogHandler {
186192
// Parse each line of the log file through [LogItem],
187193
// some returned records may be null if malformed, they will be
188194
// removed later through `whereType<LogItem>`
189-
final records = logFile
195+
final records = _logFile
190196
.readAsLinesSync()
191197
.map((String e) {
192198
try {
@@ -283,26 +289,26 @@ class LogHandler {
283289
/// or less than [kLogFileLength] records.
284290
void save({required Map<String, Object?> data}) {
285291
try {
286-
final stat = logFile.statSync();
292+
final stat = _logFile.statSync();
287293
List<String> records;
288294
if (stat.size > kMaxLogFileSize) {
289-
logFile.deleteSync();
290-
logFile.createSync();
295+
_logFile.deleteSync();
296+
_logFile.createSync();
291297
records = [];
292298
} else {
293-
records = logFile.readAsLinesSync();
299+
records = _logFile.readAsLinesSync();
294300
}
295301
final content = '${jsonEncode(data)}\n';
296302

297303
// When the record count is less than the max, add as normal;
298304
// else drop the oldest records until equal to max
299305
if (records.length < kLogFileLength) {
300-
logFile.writeAsStringSync(content, mode: FileMode.writeOnlyAppend);
306+
_logFile.writeAsStringSync(content, mode: FileMode.writeOnlyAppend);
301307
} else {
302308
records.add(content);
303309
records = records.skip(records.length - kLogFileLength).toList();
304310

305-
logFile.writeAsStringSync(records.join('\n'));
311+
_logFile.writeAsStringSync(records.join('\n'));
306312
}
307313
} on FileSystemException {
308314
// Logging isn't important enough to warrant raising a

pkgs/unified_analytics/test/log_handler_test.dart

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'package:test/test.dart';
1212

1313
import 'package:unified_analytics/src/constants.dart';
1414
import 'package:unified_analytics/src/enums.dart';
15+
import 'package:unified_analytics/src/error_handler.dart';
1516
import 'package:unified_analytics/src/log_handler.dart';
1617
import 'package:unified_analytics/src/utils.dart';
1718
import 'package:unified_analytics/unified_analytics.dart';
@@ -207,19 +208,20 @@ void main() {
207208
test(
208209
'Catches and discards any FileSystemException raised from attempting '
209210
'to write to the log file', () async {
210-
final logFilePath = 'log.txt';
211211
final fs = MemoryFileSystem.test(opHandle: (context, operation) {
212-
if (context == logFilePath && operation == FileSystemOp.write) {
212+
if (context.endsWith(kLogFileName) && operation == FileSystemOp.write) {
213213
throw FileSystemException(
214214
'writeFrom failed',
215-
logFilePath,
215+
context,
216216
const OSError('No space left on device', 28),
217217
);
218218
}
219219
});
220-
final logFile = fs.file(logFilePath);
221-
logFile.createSync();
222-
final logHandler = LogHandler(logFile: logFile);
220+
final logHandler = LogHandler(
221+
fs: fs,
222+
homeDirectory: fs.currentDirectory,
223+
errorHandler: ErrorHandler(sendFunction: (_) {}),
224+
);
223225

224226
logHandler.save(data: {});
225227
});
@@ -228,7 +230,13 @@ void main() {
228230
var deletedLargeLogFile = false;
229231
var wroteDataToLogFile = false;
230232
const data = <String, Object?>{};
231-
final logFile = _FakeFile('log.txt')
233+
234+
final logHandler = LogHandler(
235+
fs: fs,
236+
homeDirectory: fs.currentDirectory,
237+
errorHandler: ErrorHandler(sendFunction: (_) {}),
238+
);
239+
logHandler.logFile = _FakeFile('log.txt')
232240
.._deleteSyncImpl = (() => deletedLargeLogFile = true)
233241
.._createSyncImpl = () {}
234242
.._statSyncImpl = (() => _FakeFileStat(kMaxLogFileSize + 1))
@@ -237,7 +245,6 @@ void main() {
237245
expect(mode, FileMode.writeOnlyAppend);
238246
wroteDataToLogFile = true;
239247
};
240-
final logHandler = LogHandler(logFile: logFile);
241248

242249
logHandler.save(data: data);
243250
expect(deletedLargeLogFile, isTrue);
@@ -247,7 +254,7 @@ void main() {
247254
test('does not delete log file if smaller than kMaxLogFileSize', () async {
248255
var wroteDataToLogFile = false;
249256
const data = <String, Object?>{};
250-
final logFile = _FakeFile('log.txt')
257+
final fakeLogFile = _FakeFile('log.txt')
251258
.._deleteSyncImpl =
252259
(() => fail('called logFile.deleteSync() when file was less than '
253260
'kMaxLogFileSize'))
@@ -259,7 +266,12 @@ void main() {
259266
expect(mode, FileMode.writeOnlyAppend);
260267
wroteDataToLogFile = true;
261268
};
262-
final logHandler = LogHandler(logFile: logFile);
269+
final logHandler = LogHandler(
270+
fs: fs,
271+
homeDirectory: fs.currentDirectory,
272+
errorHandler: ErrorHandler(sendFunction: (_) {}),
273+
);
274+
logHandler.logFile = fakeLogFile;
263275

264276
logHandler.save(data: data);
265277
expect(wroteDataToLogFile, isTrue);

0 commit comments

Comments
 (0)