init
This commit is contained in:
297
test/printer_method_channel_test.dart
Normal file
297
test/printer_method_channel_test.dart
Normal file
@@ -0,0 +1,297 @@
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.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:printer/models/printer_exception.dart';
|
||||
|
||||
void main() {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
MethodChannelPrinter platform = MethodChannelPrinter();
|
||||
const MethodChannel channel = MethodChannel('printer');
|
||||
|
||||
setUp(() {
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
|
||||
if (methodCall.method == 'getPlatformVersion') {
|
||||
return '42';
|
||||
}
|
||||
if (methodCall.method == 'openComPort') {
|
||||
return 1;
|
||||
}
|
||||
if (methodCall.method == 'openUsbPort') {
|
||||
return 2;
|
||||
}
|
||||
if (methodCall.method == 'closePort') {
|
||||
return true;
|
||||
}
|
||||
if (methodCall.method == 'isPortOpened') {
|
||||
return true;
|
||||
}
|
||||
if (methodCall.method == 'enumComPorts') {
|
||||
return ['/dev/ttyS0', '/dev/ttyS1'];
|
||||
}
|
||||
if (methodCall.method == 'enumUsbPorts') {
|
||||
return ['USB_Printer_0'];
|
||||
}
|
||||
if (methodCall.method == 'setMultiByteMode') return true;
|
||||
if (methodCall.method == 'setMultiByteEncoding') return true;
|
||||
if (methodCall.method == 'printText') return true;
|
||||
if (methodCall.method == 'setAlignment') return true;
|
||||
if (methodCall.method == 'setTextScale') return true;
|
||||
if (methodCall.method == 'setTextBold') return true;
|
||||
if (methodCall.method == 'setTextUnderline') return true;
|
||||
if (methodCall.method == 'feedLine') return true;
|
||||
if (methodCall.method == 'feedDot') return true;
|
||||
if (methodCall.method == 'halfCutPaper') return true;
|
||||
if (methodCall.method == 'fullCutPaper') return true;
|
||||
return null;
|
||||
});
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, null);
|
||||
});
|
||||
|
||||
test('getPlatformVersion', () async {
|
||||
expect(await platform.getPlatformVersion(), '42');
|
||||
});
|
||||
|
||||
test('openComPort returns handle', () async {
|
||||
final handle = await platform.openComPort(
|
||||
portName: '/dev/ttyS0',
|
||||
baudRate: 115200,
|
||||
parity: SerialParity.none,
|
||||
stopBits: SerialStopBits.one,
|
||||
flowControl: SerialFlowControl.none,
|
||||
);
|
||||
|
||||
expect(handle, 1);
|
||||
});
|
||||
|
||||
test('openComPort passes correct parameters', () async {
|
||||
late Map<dynamic, dynamic> capturedArgs;
|
||||
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
|
||||
if (methodCall.method == 'openComPort') {
|
||||
capturedArgs = methodCall.arguments as Map<dynamic, dynamic>;
|
||||
return 42;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
await platform.openComPort(
|
||||
portName: '/dev/ttyS0',
|
||||
baudRate: 9600,
|
||||
dataBits: 7,
|
||||
parity: SerialParity.even,
|
||||
stopBits: SerialStopBits.two,
|
||||
flowControl: SerialFlowControl.rtsCts,
|
||||
autoReplyMode: false,
|
||||
);
|
||||
|
||||
expect(capturedArgs['portName'], '/dev/ttyS0');
|
||||
expect(capturedArgs['baudRate'], 9600);
|
||||
expect(capturedArgs['dataBits'], 7);
|
||||
expect(capturedArgs['parity'], 2); // SerialParity.even
|
||||
expect(capturedArgs['stopBits'], 2); // SerialStopBits.two
|
||||
expect(capturedArgs['flowControl'], 2); // SerialFlowControl.rtsCts
|
||||
expect(capturedArgs['autoReplyMode'], 0); // false
|
||||
});
|
||||
|
||||
test('openUsbPort returns handle', () async {
|
||||
final handle = await platform.openUsbPort(portName: 'USB_Printer_0');
|
||||
|
||||
expect(handle, 2);
|
||||
});
|
||||
|
||||
test('closePort returns true', () async {
|
||||
final result = await platform.closePort(1);
|
||||
|
||||
expect(result, true);
|
||||
});
|
||||
|
||||
test('isPortOpened returns true', () async {
|
||||
final result = await platform.isPortOpened(1);
|
||||
|
||||
expect(result, true);
|
||||
});
|
||||
|
||||
test('enumComPorts returns list of strings', () async {
|
||||
final ports = await platform.enumComPorts();
|
||||
|
||||
expect(ports, isA<List<String>>());
|
||||
expect(ports, contains('/dev/ttyS0'));
|
||||
expect(ports, contains('/dev/ttyS1'));
|
||||
});
|
||||
|
||||
test('enumUsbPorts returns list of strings', () async {
|
||||
final ports = await platform.enumUsbPorts();
|
||||
|
||||
expect(ports, isA<List<String>>());
|
||||
expect(ports, contains('USB_Printer_0'));
|
||||
});
|
||||
|
||||
test('PlatformException converts to PrinterException on openComPort', () async {
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
|
||||
if (methodCall.method == 'openComPort') {
|
||||
throw PlatformException(
|
||||
code: 'PORT_OPEN_FAILED',
|
||||
message: 'Failed to open port',
|
||||
details: {'port': '/dev/ttyS0'},
|
||||
);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
expect(
|
||||
() async => platform.openComPort(
|
||||
portName: '/dev/ttyS0',
|
||||
baudRate: 115200,
|
||||
),
|
||||
throwsA(isA<PrinterException>()
|
||||
.having((e) => e.code, 'code', 'PORT_OPEN_FAILED')
|
||||
.having((e) => e.message, 'message', 'Failed to open port')),
|
||||
);
|
||||
});
|
||||
|
||||
test('PlatformException converts to PrinterException on closePort', () async {
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
|
||||
if (methodCall.method == 'closePort') {
|
||||
throw PlatformException(
|
||||
code: 'PORT_CLOSE_FAILED',
|
||||
message: 'Failed to close port',
|
||||
);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
expect(
|
||||
() async => platform.closePort(1),
|
||||
throwsA(isA<PrinterException>()
|
||||
.having((e) => e.code, 'code', 'PORT_CLOSE_FAILED')),
|
||||
);
|
||||
});
|
||||
|
||||
test('printText passes text parameter', () async {
|
||||
late Map<dynamic, dynamic> capturedArgs;
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
|
||||
if (methodCall.method == 'printText') {
|
||||
capturedArgs = methodCall.arguments as Map<dynamic, dynamic>;
|
||||
return true;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
await platform.printText(1, 'Hello 中文');
|
||||
expect(capturedArgs['handle'], 1);
|
||||
expect(capturedArgs['text'], 'Hello 中文');
|
||||
});
|
||||
|
||||
test('setAlignment passes alignment.value', () async {
|
||||
late Map<dynamic, dynamic> capturedArgs;
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
|
||||
if (methodCall.method == 'setAlignment') {
|
||||
capturedArgs = methodCall.arguments as Map<dynamic, dynamic>;
|
||||
return true;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
await platform.setAlignment(1, PrinterAlignment.center);
|
||||
expect(capturedArgs['alignment'], 1); // PrinterAlignment.center.value
|
||||
});
|
||||
|
||||
test('setMultiByteEncoding passes encoding.value', () async {
|
||||
late Map<dynamic, dynamic> capturedArgs;
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
|
||||
if (methodCall.method == 'setMultiByteEncoding') {
|
||||
capturedArgs = methodCall.arguments as Map<dynamic, dynamic>;
|
||||
return true;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
await platform.setMultiByteEncoding(1, MultiByteEncoding.utf8);
|
||||
expect(capturedArgs['encoding'], 1); // MultiByteEncoding.utf8.value
|
||||
});
|
||||
|
||||
test('setTextBold converts bool to int 0/1', () async {
|
||||
late Map<dynamic, dynamic> capturedArgs;
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
|
||||
if (methodCall.method == 'setTextBold') {
|
||||
capturedArgs = methodCall.arguments as Map<dynamic, dynamic>;
|
||||
return true;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
await platform.setTextBold(1, true);
|
||||
expect(capturedArgs['bold'], 1);
|
||||
|
||||
await platform.setTextBold(1, false);
|
||||
expect(capturedArgs['bold'], 0);
|
||||
});
|
||||
|
||||
test('feedDot passes numDots parameter', () async {
|
||||
late Map<dynamic, dynamic> capturedArgs;
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
|
||||
if (methodCall.method == 'feedDot') {
|
||||
capturedArgs = methodCall.arguments as Map<dynamic, dynamic>;
|
||||
return true;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
await platform.feedDot(1, 100);
|
||||
expect(capturedArgs['handle'], 1);
|
||||
expect(capturedArgs['numDots'], 100);
|
||||
});
|
||||
|
||||
test('fullCutPaper passes handle parameter', () async {
|
||||
late Map<dynamic, dynamic> capturedArgs;
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
|
||||
if (methodCall.method == 'fullCutPaper') {
|
||||
capturedArgs = methodCall.arguments as Map<dynamic, dynamic>;
|
||||
return true;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
await platform.fullCutPaper(1);
|
||||
expect(capturedArgs['handle'], 1);
|
||||
});
|
||||
|
||||
test('PlatformException converts to PrinterException on printText', () async {
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
|
||||
if (methodCall.method == 'printText') {
|
||||
throw PlatformException(
|
||||
code: 'PRINT_FAILED',
|
||||
message: 'Failed to print text',
|
||||
);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
expect(
|
||||
() async => platform.printText(1, 'test'),
|
||||
throwsA(isA<PrinterException>()
|
||||
.having((e) => e.code, 'code', 'PRINT_FAILED')),
|
||||
);
|
||||
});
|
||||
}
|
||||
264
test/printer_test.dart
Normal file
264
test/printer_test.dart
Normal file
@@ -0,0 +1,264 @@
|
||||
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<String?> getPlatformVersion() => Future.value('42');
|
||||
|
||||
@override
|
||||
Future<int> 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<int> openUsbPort({
|
||||
required String portName,
|
||||
bool autoReplyMode = true,
|
||||
}) => Future.value(2);
|
||||
|
||||
@override
|
||||
Future<bool> closePort(int handle) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<bool> isPortOpened(int handle) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<List<String>> enumComPorts() => Future.value(['/dev/ttyS0']);
|
||||
|
||||
@override
|
||||
Future<List<String>> enumUsbPorts() => Future.value(['USB_Printer_0']);
|
||||
|
||||
@override
|
||||
Future<bool> setMultiByteMode(int handle) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<bool> setMultiByteEncoding(int handle, MultiByteEncoding encoding) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<bool> printText(int handle, String text) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<bool> setAlignment(int handle, PrinterAlignment alignment) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<bool> setTextScale(int handle, {required int widthScale, required int heightScale}) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<bool> setTextBold(int handle, bool bold) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<bool> setTextUnderline(int handle, int underline) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<bool> feedLine(int handle, int numLines) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<bool> feedDot(int handle, int numDots) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<bool> halfCutPaper(int handle) => Future.value(true);
|
||||
|
||||
@override
|
||||
Future<bool> fullCutPaper(int handle) => Future.value(true);
|
||||
}
|
||||
|
||||
void main() {
|
||||
final PrinterPlatform initialPlatform = PrinterPlatform.instance;
|
||||
|
||||
test('$MethodChannelPrinter is the default instance', () {
|
||||
expect(initialPlatform, isInstanceOf<MethodChannelPrinter>());
|
||||
});
|
||||
|
||||
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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user