forked from BasedHardware/omi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbatch_frame_count_test.dart
More file actions
65 lines (57 loc) · 1.87 KB
/
Copy pathbatch_frame_count_test.dart
File metadata and controls
65 lines (57 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter_test/flutter_test.dart';
import 'package:omi/providers/local_recordings_provider.dart';
/// A length-prefixed frame: `[4-byte LE length][payload]`.
Uint8List _frame(int len) {
final b = BytesBuilder();
b.add([len & 0xFF, (len >> 8) & 0xFF, (len >> 16) & 0xFF, (len >> 24) & 0xFF]);
b.add(List<int>.filled(len, 0x41));
return b.toBytes();
}
Future<int> _count(List<int> bytes) async {
final dir = await Directory.systemTemp.createTemp('batchframes');
try {
final f = File('${dir.path}/audio.bin');
await f.writeAsBytes(bytes);
return await countBatchRecordingFrames(f.path);
} finally {
await dir.delete(recursive: true);
}
}
void main() {
group('countBatchRecordingFrames', () {
test('counts complete frames', () async {
final b = BytesBuilder();
for (var i = 0; i < 3; i++) {
b.add(_frame(5));
}
expect(await _count(b.toBytes()), 3);
});
test('ignores a truncated tail frame', () async {
final b = BytesBuilder();
b.add(_frame(5));
b.add(_frame(5));
// Header claims 10 payload bytes but only 3 are present (crash-recovered tail).
b.add([10, 0, 0, 0, 0x41, 0x41, 0x41]);
expect(await _count(b.toBytes()), 2);
});
test('stops at a zero-length frame', () async {
final b = BytesBuilder();
b.add(_frame(5));
b.add([0, 0, 0, 0]); // len 0 -> stop
b.add(_frame(5));
expect(await _count(b.toBytes()), 1);
});
test('empty file is zero', () async {
expect(await _count(<int>[]), 0);
});
test('handles frames spanning the 64KB chunk boundary', () async {
final b = BytesBuilder();
for (var i = 0; i < 2000; i++) {
b.add(_frame(40)); // ~88 KB total, crosses the 64 KB read window
}
expect(await _count(b.toBytes()), 2000);
});
});
}