Skip to content

Commit 03b9f01

Browse files
committed
add test function
1 parent 9aca01e commit 03b9f01

File tree

2 files changed

+187
-7
lines changed

2 files changed

+187
-7
lines changed

example/lib/barcode_scanner_window.dart

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:mobile_scanner/mobile_scanner.dart';
33
import 'package:mobile_scanner_example/scanned_barcode_label.dart';
4-
54
import 'package:mobile_scanner_example/scanner_error_widget.dart';
65

76
class BarcodeScannerWithScanWindow extends StatefulWidget {
@@ -18,7 +17,6 @@ class _BarcodeScannerWithScanWindowState
1817
detectionSpeed: DetectionSpeed.unrestricted,
1918
);
2019

21-
// TODO: Fix BoxFit.fill & BoxFit.fitHeight
2220
BoxFit boxFit = BoxFit.contain;
2321
final double containerWidth = 300;
2422
final double containerHeight = 600;
@@ -85,8 +83,9 @@ class _BarcodeScannerWithScanWindowState
8583
),
8684
height: 100,
8785
color: const Color.fromRGBO(0, 0, 0, 0.4),
88-
child:
89-
ScannedBarcodeLabel(barcodes: controller.barcodes),
86+
child: ScannedBarcodeLabel(
87+
barcodes: controller.barcodes,
88+
),
9089
),
9190
),
9291
Text(
@@ -104,9 +103,8 @@ class _BarcodeScannerWithScanWindowState
104103
spacing: 0.5,
105104
runSpacing: 3.0,
106105
alignment: WrapAlignment.center,
107-
children: BoxFit.values.map((fit) {
108-
return _buildBoxFitButton(fit);
109-
}).toList(),
106+
children:
107+
BoxFit.values.map(_buildBoxFitButton).toList(),
110108
),
111109
),
112110
],

test/scan_window_test.dart

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import 'dart:math' as math;
12
import 'package:flutter/painting.dart';
23
import 'package:flutter_test/flutter_test.dart';
4+
import 'package:mobile_scanner/mobile_scanner.dart';
35
import 'package:mobile_scanner/src/scan_window_calculation.dart';
46

57
void main() {
@@ -152,6 +154,186 @@ void main() {
152154
});
153155
},
154156
);
157+
158+
group(
159+
'Calculate Box Fit Ratio',
160+
() {
161+
group('Smaller camera preview size in portrait', () {
162+
const cameraPreviewSize = Size(480.0, 640.0);
163+
const size = Size(432.0, 256.0);
164+
165+
test('scp p: BoxFit.fill', () {
166+
final ratio = calculateBoxFitRatio(
167+
BoxFit.fill,
168+
cameraPreviewSize,
169+
size,
170+
);
171+
expect(ratio.widthRatio, size.width / cameraPreviewSize.width);
172+
expect(ratio.heightRatio, size.height / cameraPreviewSize.height);
173+
});
174+
175+
test('scp p: BoxFit.contain', () {
176+
final ratio = calculateBoxFitRatio(
177+
BoxFit.contain,
178+
cameraPreviewSize,
179+
size,
180+
);
181+
final expectedRatio = math.min(
182+
size.width / cameraPreviewSize.width,
183+
size.height / cameraPreviewSize.height,
184+
);
185+
expect(ratio.widthRatio, expectedRatio);
186+
expect(ratio.heightRatio, expectedRatio);
187+
});
188+
189+
test('scp p: BoxFit.cover', () {
190+
final ratio = calculateBoxFitRatio(
191+
BoxFit.cover,
192+
cameraPreviewSize,
193+
size,
194+
);
195+
final expectedRatio = math.max(
196+
size.width / cameraPreviewSize.width,
197+
size.height / cameraPreviewSize.height,
198+
);
199+
expect(ratio.widthRatio, expectedRatio);
200+
expect(ratio.heightRatio, expectedRatio);
201+
});
202+
203+
test('scp p: BoxFit.fitWidth', () {
204+
final ratio = calculateBoxFitRatio(
205+
BoxFit.fitWidth,
206+
cameraPreviewSize,
207+
size,
208+
);
209+
expect(ratio.widthRatio, size.width / cameraPreviewSize.width);
210+
expect(ratio.heightRatio, size.width / cameraPreviewSize.width);
211+
});
212+
213+
test('scp p: BoxFit.fitHeight', () {
214+
final ratio = calculateBoxFitRatio(
215+
BoxFit.fitHeight,
216+
cameraPreviewSize,
217+
size,
218+
);
219+
expect(ratio.widthRatio, size.height / cameraPreviewSize.height);
220+
expect(ratio.heightRatio, size.height / cameraPreviewSize.height);
221+
});
222+
223+
test('scp p: BoxFit.none', () {
224+
final ratio = calculateBoxFitRatio(
225+
BoxFit.none,
226+
cameraPreviewSize,
227+
size,
228+
);
229+
expect(ratio.widthRatio, 1.0);
230+
expect(ratio.heightRatio, 1.0);
231+
});
232+
233+
test('scp p: BoxFit.scaleDown', () {
234+
final ratio = calculateBoxFitRatio(
235+
BoxFit.scaleDown,
236+
cameraPreviewSize,
237+
size,
238+
);
239+
final expectedRatio = math.min(
240+
1.0,
241+
math.min(
242+
size.width / cameraPreviewSize.width,
243+
size.height / cameraPreviewSize.height,
244+
),
245+
);
246+
expect(ratio.widthRatio, expectedRatio);
247+
expect(ratio.heightRatio, expectedRatio);
248+
});
249+
});
250+
251+
group('Smaller camera preview size in landscape', () {
252+
const cameraPreviewSize = Size(640.0, 480.0);
253+
const size = Size(320.0, 120.0);
254+
255+
test('scp l: BoxFit.fill', () {
256+
final ratio = calculateBoxFitRatio(
257+
BoxFit.fill,
258+
cameraPreviewSize,
259+
size,
260+
);
261+
expect(ratio.widthRatio, size.width / cameraPreviewSize.width);
262+
expect(ratio.heightRatio, size.height / cameraPreviewSize.height);
263+
});
264+
265+
test('scp l: BoxFit.contain', () {
266+
final ratio = calculateBoxFitRatio(
267+
BoxFit.contain,
268+
cameraPreviewSize,
269+
size,
270+
);
271+
final expectedRatio = math.min(size.width / cameraPreviewSize.width,
272+
size.height / cameraPreviewSize.height);
273+
expect(ratio.widthRatio, expectedRatio);
274+
expect(ratio.heightRatio, expectedRatio);
275+
});
276+
277+
test('scp l: BoxFit.cover', () {
278+
final ratio = calculateBoxFitRatio(
279+
BoxFit.cover,
280+
cameraPreviewSize,
281+
size,
282+
);
283+
final expectedRatio = math.max(
284+
size.width / cameraPreviewSize.width,
285+
size.height / cameraPreviewSize.height,
286+
);
287+
expect(ratio.widthRatio, expectedRatio);
288+
expect(ratio.heightRatio, expectedRatio);
289+
});
290+
291+
test('scp l: BoxFit.fitWidth', () {
292+
final ratio = calculateBoxFitRatio(
293+
BoxFit.fitWidth,
294+
cameraPreviewSize,
295+
size,
296+
);
297+
expect(ratio.widthRatio, size.width / cameraPreviewSize.width);
298+
expect(ratio.heightRatio, size.width / cameraPreviewSize.width);
299+
});
300+
301+
test('scp l: BoxFit.fitHeight', () {
302+
final ratio = calculateBoxFitRatio(
303+
BoxFit.fitHeight,
304+
cameraPreviewSize,
305+
size,
306+
);
307+
expect(ratio.widthRatio, size.height / cameraPreviewSize.height);
308+
expect(ratio.heightRatio, size.height / cameraPreviewSize.height);
309+
});
310+
311+
test('scp l: BoxFit.none', () {
312+
final ratio = calculateBoxFitRatio(
313+
BoxFit.none,
314+
cameraPreviewSize,
315+
size,
316+
);
317+
expect(ratio.widthRatio, 1.0);
318+
expect(ratio.heightRatio, 1.0);
319+
});
320+
321+
test('scp l: BoxFit.scaleDown', () {
322+
final ratio = calculateBoxFitRatio(
323+
BoxFit.scaleDown,
324+
cameraPreviewSize,
325+
size,
326+
);
327+
final expectedRatio = math.min(
328+
1.0,
329+
math.min(size.width / cameraPreviewSize.width,
330+
size.height / cameraPreviewSize.height));
331+
expect(ratio.widthRatio, expectedRatio);
332+
expect(ratio.heightRatio, expectedRatio);
333+
});
334+
});
335+
},
336+
);
155337
}
156338

157339
class ScanWindowTestContext {

0 commit comments

Comments
 (0)