62 lines
2.1 KiB
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');
|
|
});
|
|
}
|