Files
flutterApp/test/ble_protocol_decoder_test.dart

58 lines
2.1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter_test/flutter_test.dart';
import 'package:maibu_satabot_v2/core/bluetooth/ble_protocol_decoder.dart';
import 'package:maibu_satabot_v2/core/protocol/machine_protocol_constants.dart';
void main() {
// 协议表示例:24 个逗号字段,控制模式=2(蓝牙),障碍物=1(有障碍)
const sheet =
'52.2,2000,2000,190,190,45.2,46.6,40.5,40.5,40,50,5,5,32,5,1,'
'120.772,32.078,2026-09-10 12:34:56,2000,2,98,12.65,1';
Uint8List payloadWith(String body, List<int> tail) =>
Uint8List.fromList([...utf8.encode(body), ...tail]);
String valueOf(BleDecodedResult r, String label) =>
r.fields.firstWhere((f) => f.label == label).value;
test('0x02 带2字节CRC:控制模式/障碍物解析正确', () {
final r = BleProtocolDecoder.decode(
MachineProtocolConstants.cmdStatusInfo,
payloadWith(sheet, [0x12, 0x34]), // 尾部 CRC16 小端
);
expect(valueOf(r, '控制模式'), '蓝牙');
expect(valueOf(r, '障碍物'), '有障碍');
expect(valueOf(r, '电压'), '52.20 V'); // _tryParseDouble 保留两位小数
expect(valueOf(r, '电量'), '98%');
});
test('0x02 串尾带\\0再加CRC:仍解析正确(不乱码)', () {
final r = BleProtocolDecoder.decode(
MachineProtocolConstants.cmdStatusInfo,
payloadWith('$sheet\x00', [0x12, 0x34]),
);
expect(valueOf(r, '控制模式'), '蓝牙');
expect(valueOf(r, '障碍物'), '有障碍');
});
test('0x02 控制模式带空格(如" 3"):仍映射为文字 TCP', () {
final spaced = sheet.replaceFirst(',2000,2,98', ',2000, 3,98');
final r = BleProtocolDecoder.decode(
MachineProtocolConstants.cmdStatusInfo,
payloadWith(spaced, [0x12, 0x34]),
);
expect(valueOf(r, '控制模式'), 'TCP');
});
test('0x02 控制模式为协议外码6:显示 未知(6) 而非裸6', () {
final bad = sheet.replaceFirst(',2000,2,98', ',2000,6,98');
final r = BleProtocolDecoder.decode(
MachineProtocolConstants.cmdStatusInfo,
payloadWith(bad, [0x12, 0x34]),
);
expect(valueOf(r, '控制模式'), '未知(6)');
});
}