import 'dart:convert'; import 'package:fires_flutter/file_utils.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; /// Bundle de mentira: solo "existen" los assets que se le pasan. Evita depender /// del bundle real, que en un test unitario no responde. class _FakeBundle extends CachingAssetBundle { _FakeBundle(this.present); final Set present; @override Future load(String key) async { if (!present.contains(key)) { throw FlutterError('Unable to load asset: $key'); } return ByteData.sublistView(Uint8List.fromList(utf8.encode('x'))); } } void main() { test('test es-ES fallback', () { final String answer = getFallbackLang('es-ES'); expect(answer, 'es'); }); test('test en-GB fallback', () { final String answer = getFallbackLang('en-GB'); expect(answer, 'en'); }); test('test gl fallback', () { final String answer = getFallbackLang('gl'); expect(answer, 'es'); }); test('test fr fallback', () { final String answer = getFallbackLang('fr'); expect(answer, 'en'); }); test('test privacy English md page', () async { final String answer = await getFileNameOfLang( dir: 'assets/pages', fileName: 'privacy', ext: 'md', lang: 'en', bundle: _FakeBundle({'assets/pages/privacy-en.md'})); expect(answer, 'assets/pages/privacy-en.md'); }); test('idioma sin fichero propio cae al del idioma de respaldo', () async { final String answer = await getFileNameOfLang( dir: 'assets/pages', fileName: 'privacy', ext: 'md', lang: 'gl', bundle: _FakeBundle({'assets/pages/privacy-es.md'})); expect(answer, 'assets/pages/privacy-es.md'); }); test('sin traducciones cae al fichero base', () async { final String answer = await getFileNameOfLang( dir: 'assets/pages', fileName: 'privacy', ext: 'md', lang: 'fr', bundle: _FakeBundle({})); expect(answer, 'assets/pages/privacy.md'); }); }