Skip to content

Commit 81e6bfd

Browse files
committed
add test; fix division by zero
1 parent e562903 commit 81e6bfd

File tree

2 files changed

+74
-2
lines changed

2 files changed

+74
-2
lines changed

lib/src/objects/barcode.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,9 @@ class Barcode {
225225
List<Offset> scaleCorners(Size targetSize) {
226226
// The size and corners are in the same coordinate space,
227227
// which is the camera input.
228-
final double scaleX = targetSize.width / size.width;
229-
final double scaleY = targetSize.height / size.height;
228+
// If the barcode size is unknown, scale to 0,0.
229+
final double scaleX = size.width > 0 ? targetSize.width / size.width : 0;
230+
final double scaleY = size.height > 0 ? targetSize.height / size.height : 0;
230231

231232
return [
232233
for (final Offset offset in corners)

test/barcode_test.dart

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import 'dart:ui';
2+
3+
import 'package:flutter_test/flutter_test.dart';
4+
import 'package:mobile_scanner/src/objects/barcode.dart';
5+
6+
void main() {
7+
group('scaleCorners', () {
8+
test('returns empty list if barcode has no size or corners', () {
9+
const Barcode barcode = Barcode();
10+
11+
expect(barcode.scaleCorners(const Size(100, 100)), isEmpty);
12+
});
13+
14+
test('returns empty list if barcode has no corners', () {
15+
const Barcode barcode = Barcode(size: Size(200, 200));
16+
17+
expect(barcode.scaleCorners(const Size(100, 100)), isEmpty);
18+
});
19+
20+
test('returns zeroed corners if barcode has corners but no size', () {
21+
const Barcode barcode = Barcode(
22+
corners: [Offset.zero, Offset.zero, Offset.zero, Offset.zero],
23+
);
24+
25+
expect(barcode.scaleCorners(const Size(100, 100)), [
26+
Offset.zero,
27+
Offset.zero,
28+
Offset.zero,
29+
Offset.zero,
30+
]);
31+
});
32+
33+
test('returns zeroed corners if target size is empty', () {
34+
const Barcode barcode = Barcode(
35+
size: Size(200, 200),
36+
corners: [
37+
Offset(50, 50),
38+
Offset(150, 50),
39+
Offset(150, 150),
40+
Offset(50, 150),
41+
],
42+
);
43+
44+
expect(barcode.scaleCorners(Size.zero), [
45+
Offset.zero,
46+
Offset.zero,
47+
Offset.zero,
48+
Offset.zero,
49+
]);
50+
});
51+
52+
test('returns scaled corners', () {
53+
const Barcode barcode = Barcode(
54+
size: Size(100, 100),
55+
corners: [
56+
Offset(25, 25),
57+
Offset(75, 25),
58+
Offset(75, 75),
59+
Offset(25, 75),
60+
],
61+
);
62+
63+
expect(barcode.scaleCorners(const Size(200, 200)), const [
64+
Offset(50, 50),
65+
Offset(150, 50),
66+
Offset(150, 150),
67+
Offset(50, 150),
68+
]);
69+
});
70+
});
71+
}

0 commit comments

Comments
 (0)