import 'package:flutter_test/flutter_test.dart'; import 'package:printer/printer.dart'; import 'package:printer/printer_platform_interface.dart'; import 'package:printer/printer_method_channel.dart'; import 'package:printer/enums/multi_byte_encoding.dart'; import 'package:printer/enums/printer_alignment.dart'; import 'package:printer/enums/serial_flow_control.dart'; import 'package:printer/enums/serial_parity.dart'; import 'package:printer/enums/serial_stop_bits.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; class MockPrinterPlatform with MockPlatformInterfaceMixin implements PrinterPlatform { @override Future getPlatformVersion() => Future.value('42'); @override Future openComPort({ required String portName, required int baudRate, int dataBits = 8, SerialParity parity = SerialParity.none, SerialStopBits stopBits = SerialStopBits.one, SerialFlowControl flowControl = SerialFlowControl.none, bool autoReplyMode = true, }) => Future.value(1); @override Future openUsbPort({ required String portName, bool autoReplyMode = true, }) => Future.value(2); @override Future closePort(int handle) => Future.value(true); @override Future isPortOpened(int handle) => Future.value(true); @override Future> enumComPorts() => Future.value(['/dev/ttyS0']); @override Future> enumUsbPorts() => Future.value(['USB_Printer_0']); @override Future setMultiByteMode(int handle) => Future.value(true); @override Future setMultiByteEncoding(int handle, MultiByteEncoding encoding) => Future.value(true); @override Future printText(int handle, String text) => Future.value(true); @override Future setAlignment(int handle, PrinterAlignment alignment) => Future.value(true); @override Future setTextScale(int handle, {required int widthScale, required int heightScale}) => Future.value(true); @override Future setTextBold(int handle, bool bold) => Future.value(true); @override Future setTextUnderline(int handle, int underline) => Future.value(true); @override Future feedLine(int handle, int numLines) => Future.value(true); @override Future feedDot(int handle, int numDots) => Future.value(true); @override Future halfCutPaper(int handle) => Future.value(true); @override Future fullCutPaper(int handle) => Future.value(true); } void main() { final PrinterPlatform initialPlatform = PrinterPlatform.instance; test('$MethodChannelPrinter is the default instance', () { expect(initialPlatform, isInstanceOf()); }); test('getPlatformVersion', () async { Printer printerPlugin = Printer(); MockPrinterPlatform fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printerPlugin.getPlatformVersion(), '42'); }); test('openComPort delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; final handle = await printer.openComPort( portName: '/dev/ttyS0', baudRate: 115200, ); expect(handle, 1); }); test('openUsbPort delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; final handle = await printer.openUsbPort(portName: 'USB_Printer_0'); expect(handle, 2); }); test('closePort delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; final result = await printer.closePort(1); expect(result, true); }); test('isPortOpened delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; final result = await printer.isPortOpened(1); expect(result, true); }); test('enumComPorts delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; final ports = await printer.enumComPorts(); expect(ports, ['/dev/ttyS0']); }); test('enumUsbPorts delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; final ports = await printer.enumUsbPorts(); expect(ports, ['USB_Printer_0']); }); test('openComPortWithHandle returns valid PrinterPortHandle', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; final portHandle = await printer.openComPortWithHandle( portName: '/dev/ttyS0', baudRate: 115200, ); expect(portHandle.handle, 1); expect(portHandle.isValid, true); await portHandle.close(); expect(portHandle.isValid, false); }); test('openUsbPortWithHandle returns valid PrinterPortHandle', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; final portHandle = await printer.openUsbPortWithHandle( portName: 'USB_Printer_0', ); expect(portHandle.handle, 2); expect(portHandle.isValid, true); }); test('setMultiByteMode delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printer.setMultiByteMode(1), true); }); test('setMultiByteEncoding delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printer.setMultiByteEncoding(1, MultiByteEncoding.utf8), true); }); test('printText delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printer.printText(1, 'Hello 中文'), true); }); test('setAlignment delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printer.setAlignment(1, PrinterAlignment.center), true); }); test('setTextScale delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printer.setTextScale(1, widthScale: 2, heightScale: 2), true); }); test('setTextBold delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printer.setTextBold(1, true), true); }); test('setTextUnderline delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printer.setTextUnderline(1, 1), true); }); test('feedLine delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printer.feedLine(1, 5), true); }); test('feedDot delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printer.feedDot(1, 100), true); }); test('halfCutPaper delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printer.halfCutPaper(1), true); }); test('fullCutPaper delegates to platform interface', () async { final printer = Printer(); final fakePlatform = MockPrinterPlatform(); PrinterPlatform.instance = fakePlatform; expect(await printer.fullCutPaper(1), true); }); }