Files
pad_scanner/test/services/code_parser_test.dart
2026-05-09 14:20:35 +08:00

59 lines
2.2 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:pad_scanner/services/code_parser.dart';
void main() {
group('CodeParser.parse', () {
test('identifies zongpaiNo type B', () {
final result = CodeParser.parse('26B1');
expect(result.type, CodeType.zongpaiNo);
expect(result.value, '26B1');
});
test('identifies zongpaiNo type C', () {
final result = CodeParser.parse('26C12');
expect(result.type, CodeType.zongpaiNo);
});
test('identifies zongpaiNo type T', () {
final result = CodeParser.parse('26T3');
expect(result.type, CodeType.zongpaiNo);
});
test('identifies zongpaiNo type BW (4 digits)', () {
final result = CodeParser.parse('26BW0001');
expect(result.type, CodeType.zongpaiNo);
});
test('identifies zongpaiNo type CW (4 digits)', () {
final result = CodeParser.parse('26CW0015');
expect(result.type, CodeType.zongpaiNo);
});
test('rejects BW with non-4-digit serial', () {
expect(CodeParser.parse('26BW01').type, CodeType.invalid);
});
test('rejects CW with non-4-digit serial', () {
expect(CodeParser.parse('26CW15').type, CodeType.invalid);
});
test('identifies normal location code', () {
final result = CodeParser.parse('A01-02-03');
expect(result.type, CodeType.locationNormal);
expect(result.value, 'A01-02-03');
});
test('identifies transit location code', () {
final result = CodeParser.parse('TRANS-01');
expect(result.type, CodeType.locationTransit);
});
test('rejects lowercase location code', () {
expect(CodeParser.parse('a01-02-03').type, CodeType.invalid);
});
test('rejects invalid code', () {
expect(CodeParser.parse('HELLO123').type, CodeType.invalid);
});
test('rejects empty string', () {
expect(CodeParser.parse('').type, CodeType.invalid);
});
test('isLocation helper', () {
expect(CodeParser.isLocation(CodeType.locationNormal), true);
expect(CodeParser.isLocation(CodeType.locationTransit), true);
expect(CodeParser.isLocation(CodeType.zongpaiNo), false);
expect(CodeParser.isLocation(CodeType.invalid), false);
});
});
}