Phase 1: pick a device folder via SAF (persisted grant, no new permission), browse its nested subfolders/tracks as a 5th Android Auto root folder (hidden until configured), and play tracks through the existing pipeline (EQ, art rotation, cold-start-safe source). No metadata/sort/filter/shuffle yet -- filename is the title, generic rotating art is the placeholder; deferred to a follow-up phase. Adds a new pluriwave/file_actions native method (listAudioChildren) and an onActivityResult override in MainActivity for the SAF folder picker -- both static-review-only, no Android build available here.
42 lines
1.4 KiB
Dart
42 lines
1.4 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:pluriwave/servicios/musica_local_auto.dart';
|
|
|
|
void main() {
|
|
group('esArchivoAudio', () {
|
|
test('acepta cualquier MIME audio/*, en cualquier capitalización', () {
|
|
expect(esArchivoAudio('audio/mpeg', 'cancion.mp3'), isTrue);
|
|
expect(esArchivoAudio('audio/flac', 'cancion.flac'), isTrue);
|
|
expect(esArchivoAudio('AUDIO/OGG', 'cancion.ogg'), isTrue);
|
|
});
|
|
|
|
test(
|
|
'rechaza MIME no-audio aunque el nombre tenga una extensión de '
|
|
'audio (defensa contra un MIME nativo incorrecto)',
|
|
() {
|
|
expect(esArchivoAudio('video/mp4', 'cancion.mp3'), isFalse);
|
|
expect(
|
|
esArchivoAudio('application/octet-stream', 'cancion.mp3'),
|
|
isFalse,
|
|
);
|
|
expect(esArchivoAudio('text/plain', 'notas.mp3'), isFalse);
|
|
},
|
|
);
|
|
|
|
test('rechaza MIME null, vacío o en blanco', () {
|
|
expect(esArchivoAudio(null, 'cancion.mp3'), isFalse);
|
|
expect(esArchivoAudio('', 'cancion.mp3'), isFalse);
|
|
expect(esArchivoAudio(' ', 'cancion.mp3'), isFalse);
|
|
});
|
|
|
|
test(
|
|
'rechaza nombre null, vacío o en blanco aunque el MIME sea audio '
|
|
'válido',
|
|
() {
|
|
expect(esArchivoAudio('audio/mpeg', null), isFalse);
|
|
expect(esArchivoAudio('audio/mpeg', ''), isFalse);
|
|
expect(esArchivoAudio('audio/mpeg', ' '), isFalse);
|
|
},
|
|
);
|
|
});
|
|
}
|