Files
IKAR/test/mobile_clipboard_test.dart

62 lines
2.1 KiB
Dart

import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:ikar/core/media/clipboard/clipboard_channel.dart';
import 'package:ikar/core/media/clipboard/pasted_attachment.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
const channel = MethodChannel('ru.ikar.app/clipboard');
final messenger =
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger;
tearDown(() => messenger.setMockMethodCallHandler(channel, null));
test('native image preserves format and bytes', () async {
final bytes = Uint8List.fromList([71, 73, 70, 56, 57, 97]);
messenger.setMockMethodCallHandler(
channel,
(call) async => {'image': bytes, 'imageExtension': 'GIF'},
);
final result = await ClipboardChannel.read();
expect(result!.png, bytes);
expect(result.imageExtension, '.gif');
});
test('Android cached files are passed through', () async {
messenger.setMockMethodCallHandler(
channel,
(call) async => {
'files': ['/synthetic/cache/pasted.png'],
},
);
final result = await ClipboardChannel.read();
expect(result!.paths, ['/synthetic/cache/pasted.png']);
});
test('clipboard permission failure is handled as unavailable', () async {
messenger.setMockMethodCallHandler(channel, (call) async {
throw PlatformException(code: 'DENIED');
});
expect(await ClipboardChannel.hasMedia(), isFalse);
expect(await ClipboardChannel.read(), isNull);
});
test('untrusted extension cannot become a path', () async {
messenger.setMockMethodCallHandler(
channel,
(call) async => {
'image': Uint8List.fromList([1]),
'imageExtension': '../jpg',
},
);
expect((await ClipboardChannel.read())!.imageExtension, isNull);
});
test('keyboard mime types map to image extensions', () {
expect(pastedImageExtension('image/jpeg'), '.jpg');
expect(pastedImageExtension('image/gif'), '.gif');
expect(pastedImageExtension('image/webp'), '.webp');
expect(pastedImageExtension('image/png'), '.png');
});
}