From db4f7a643b81ba3f4623a6625e9dc23e1ca395f7 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Thu, 6 Aug 2026 05:06:48 +0200 Subject: [PATCH] test: prune low-value coverage --- scripts/test_maestro_flow_contracts.py | 8 +-- test/data/hid_key_labels_test.dart | 21 ------ test/data/iso_639_data_test.dart | 44 +----------- test/i18n/app_locale_utils_test.dart | 14 ---- test/media/media_browser_dialect_test.dart | 42 ------------ test/media/media_playlist_test.dart | 7 -- test/mixins/context_menu_tap_mixin_test.dart | 9 --- ...disposable_change_notifier_mixin_test.dart | 8 --- .../mixins/server_bound_media_mixin_test.dart | 18 ----- test/models/shader_preset_test.dart | 68 ------------------- test/mpv/player_error_http_status_test.dart | 3 - test/profiles/profile_test.dart | 27 -------- .../companion_remote_provider_test.dart | 31 --------- test/providers/shader_provider_test.dart | 18 ----- .../providers/user_profile_provider_test.dart | 5 -- .../video_player/completion_latch_test.dart | 8 --- .../player_startup_chrome_test.dart | 4 -- test/scripts/generate_ducet_ranks_test.dart | 14 ---- .../external_player_service_test.dart | 10 --- test/services/image_cache_service_test.dart | 4 -- .../jellyfin_lan_discovery_service_test.dart | 5 -- test/services/play_queue_launcher_test.dart | 6 -- test/services/settings_service_test.dart | 17 ----- test/utils/layout_constants_test.dart | 8 --- test/utils/track_label_builder_test.dart | 6 -- test/watch_together/primitives_test.dart | 8 --- .../video_controls_quiescence_test.dart | 10 --- 27 files changed, 5 insertions(+), 418 deletions(-) diff --git a/scripts/test_maestro_flow_contracts.py b/scripts/test_maestro_flow_contracts.py index c591ed0f..20ccfa6c 100755 --- a/scripts/test_maestro_flow_contracts.py +++ b/scripts/test_maestro_flow_contracts.py @@ -163,14 +163,14 @@ class MaestroFlowContractTests(unittest.TestCase): self.assertLess(observation_index, offline_index) self.assertEqual(steps[observation_index]["extendedWaitUntil"]["timeout"], 60000) - def test_tv_next_episode_dismissal_has_platform_specific_controls(self) -> None: + def test_tv_prompt_dismissal_has_platform_specific_controls(self) -> None: steps = load_flow(".maestro/regression_flows/05_tv_next_episode_back.yaml") - next_episode_index = next( + cancel_index = next( index for index, step in enumerate(steps) - if step.get("extendedWaitUntil", {}).get("visible") == "Next Episode" + if step.get("extendedWaitUntil", {}).get("visible") == "(?s)^Cancel$" ) - branches = platform_pair(steps, next_episode_index + 1) + branches = platform_pair(steps, cancel_index + 1) self.assertEqual(branches["iOS"], [{"tapOn": "Cancel"}]) self.assertEqual(branches["Android"], [{"pressKey": "back"}]) diff --git a/test/data/hid_key_labels_test.dart b/test/data/hid_key_labels_test.dart index a08e32fa..1ed5e0b0 100644 --- a/test/data/hid_key_labels_test.dart +++ b/test/data/hid_key_labels_test.dart @@ -1,29 +1,8 @@ import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:plezy/data/hid_key_labels.dart'; import 'package:plezy/models/hotkey_model.dart'; void main() { - test('catalog preserves all 325 unique keys in canonical numeric order', () { - final ids = hidKeyLabels.keys.toList(); - final sortedIds = [...ids]..sort(); - - expect(hidKeyLabels, hasLength(325)); - expect(ids.toSet(), hasLength(ids.length)); - expect(ids, sortedIds); - expect(ids.every((id) => id >= 0 && id <= 0xffffffff), isTrue); - expect(hidKeyLabels.values.every((label) => label.trim().isNotEmpty), isTrue); - }); - - test('catalog preserves representative labels across usage groups', () { - expect(hidKeyLabels[0x00000012], 'Fn'); - expect(hidKeyLabels[0x000100b5], 'Display Toggle'); - expect(hidKeyLabels[0x0005ff1f], 'Game Button Z'); - expect(hidKeyLabels[0x00070031], r'\'); - expect(hidKeyLabels[0x000c00cd], 'Play/Pause'); - expect(hidKeyLabels[0x000c029f], 'Show All Windows'); - }); - test('physicalKeyLabel uses the catalog and formats an unknown HID fallback', () { expect(physicalKeyLabel(PhysicalKeyboardKey.keyA), 'A'); expect(physicalKeyLabel(const PhysicalKeyboardKey(0xffffffff)), 'Key 0xffffffff'); diff --git a/test/data/iso_639_data_test.dart b/test/data/iso_639_data_test.dart index 4e7273bc..1589f7de 100644 --- a/test/data/iso_639_data_test.dart +++ b/test/data/iso_639_data_test.dart @@ -1,50 +1,8 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:plezy/data/iso_639_data.dart'; import 'package:plezy/utils/language_codes.dart'; void main() { - test('catalog preserves 184 canonical entries and globally unique codes', () { - final primaryCodes = languageEntries.keys.toList(); - final sortedPrimaryCodes = [...primaryCodes]..sort(); - final allCodes = {}; - - expect(languageEntries, hasLength(184)); - expect(primaryCodes, sortedPrimaryCodes); - for (final mapEntry in languageEntries.entries) { - final entry = mapEntry.value; - expect(entry.code1, mapEntry.key); - expect(entry.code1, matches(RegExp(r'^[a-z]{2}$'))); - expect(entry.code2, matches(RegExp(r'^[a-z]{3}$'))); - expect(entry.name.trim(), isNotEmpty); - expect(allCodes.add(entry.code1), isTrue); - expect(allCodes.add(entry.code2), isTrue); - if (entry.code2B case final bibliographic?) { - expect(bibliographic, matches(RegExp(r'^[a-z]{3}$'))); - expect(allCodes.add(bibliographic), isTrue); - } - } - }); - - test('reverse maps are derived completely from terminology and bibliographic aliases', () { - expect(code2ToCode1, hasLength(184)); - expect(code2BToCode1, hasLength(20)); - - for (final entry in languageEntries.values) { - expect(code2ToCode1[entry.code2], entry.code1); - if (entry.code2B case final bibliographic?) { - expect(code2BToCode1[bibliographic], entry.code1); - } - } - }); - - test('representative terminology and bibliographic aliases preserve behavior', () { - final german = languageEntries['de']!; - expect(german.code2, 'deu'); - expect(german.code2B, 'ger'); - expect(german.name, 'German'); - expect(languageEntries['bn']!.name, 'Bengali, Bangla'); - expect(languageEntries['mi']!.name, 'Māori'); - + test('bibliographic aliases resolve via trim, case, and variation expansion', () { expect(LanguageCodes.getIso6391Code(' DEU '), 'de'); expect(LanguageCodes.getIso6391Code('ger'), 'de'); expect(LanguageCodes.getLanguageName('GER'), 'German'); diff --git a/test/i18n/app_locale_utils_test.dart b/test/i18n/app_locale_utils_test.dart index a4104e67..0fc7f6db 100644 --- a/test/i18n/app_locale_utils_test.dart +++ b/test/i18n/app_locale_utils_test.dart @@ -48,18 +48,4 @@ void main() { }); }); - group('AppLocaleExternalFormats', () { - test('preserves Traditional Chinese for downstream formatters and Plex', () { - expect(AppLocale.zhHant.intlLocaleName, 'zh_TW'); - expect(AppLocale.zhHant.durationLocaleName, 'zh_Hant'); - expect(AppLocale.zhHant.plexLanguageCode, 'zh-TW'); - }); - - test('keeps existing locales on their language code', () { - expect(AppLocale.hu.intlLocaleName, 'hu'); - expect(AppLocale.hu.durationLocaleName, 'hu'); - expect(AppLocale.hu.plexLanguageCode, 'hu'); - expect(AppLocale.zh.plexLanguageCode, 'zh'); - }); - }); } diff --git a/test/media/media_browser_dialect_test.dart b/test/media/media_browser_dialect_test.dart index 8b293945..36285b15 100644 --- a/test/media/media_browser_dialect_test.dart +++ b/test/media/media_browser_dialect_test.dart @@ -34,48 +34,6 @@ void main() { }); }); - group('MediaBrowserDialect capabilities', () { - test('Jellyfin-only features are off for Emby', () { - expect(MediaBrowserDialect.jellyfin.supportsQuickConnect, isTrue); - expect(MediaBrowserDialect.emby.supportsQuickConnect, isFalse); - - expect(MediaBrowserDialect.jellyfin.supportsTrickplay, isTrue); - expect(MediaBrowserDialect.emby.supportsTrickplay, isFalse); - - expect(MediaBrowserDialect.jellyfin.supportsMediaSegments, isTrue); - expect(MediaBrowserDialect.emby.supportsMediaSegments, isFalse); - - // Emby resolves /Audio/{id}/Lyrics to audio streaming with `Lyrics` as - // the container and starts a failing ffmpeg process, so this gate is - // load-bearing rather than cosmetic. - expect(MediaBrowserDialect.jellyfin.supportsLyrics, isTrue); - expect(MediaBrowserDialect.emby.supportsLyrics, isFalse); - - expect(MediaBrowserDialect.jellyfin.supportsAggregateItemFilters, isTrue); - expect(MediaBrowserDialect.emby.supportsAggregateItemFilters, isFalse); - }); - - test('only Emby needs the pre-10.9 user-scoped item routes', () { - expect(MediaBrowserDialect.emby.requiresUserScopedItemRoutes, isTrue); - expect(MediaBrowserDialect.jellyfin.requiresUserScopedItemRoutes, isFalse); - }); - - test('LAN discovery payloads are distinct so the datagram identifies the dialect', () { - expect(MediaBrowserDialect.jellyfin.lanDiscoveryMessage, 'who is JellyfinServer?'); - expect(MediaBrowserDialect.emby.lanDiscoveryMessage, 'who is EmbyServer?'); - }); - - test('Emby adds its 8920 HTTPS default to the port guesses', () { - expect(MediaBrowserDialect.jellyfin.httpsPortGuesses, [8096]); - expect(MediaBrowserDialect.emby.httpsPortGuesses, contains(8920)); - expect(MediaBrowserDialect.emby.httpsPortGuesses, contains(8096)); - }); - - test('product names are the untranslated brand names', () { - expect(MediaBrowserDialect.jellyfin.productName, 'Jellyfin'); - expect(MediaBrowserDialect.emby.productName, 'Emby'); - }); - }); group('MediaBrowserDialect.detectFromPublicSystemInfo', () { test('identifies a real Jellyfin 10.10.7 body by ProductName', () { diff --git a/test/media/media_playlist_test.dart b/test/media/media_playlist_test.dart index 441b48ce..950e2d87 100644 --- a/test/media/media_playlist_test.dart +++ b/test/media/media_playlist_test.dart @@ -118,13 +118,6 @@ void main() { }); }); - group('MediaPlaylist.displayTitle', () { - test('is an alias of title', () { - final pl = _playlist(title: 'Anything'); - expect(pl.displayTitle, 'Anything'); - expect(pl.displayTitle, pl.title); - }); - }); group('MediaPlaylist.globalKey', () { test('uses ":" when serverId is set', () { diff --git a/test/mixins/context_menu_tap_mixin_test.dart b/test/mixins/context_menu_tap_mixin_test.dart index 38a118f2..39dc4602 100644 --- a/test/mixins/context_menu_tap_mixin_test.dart +++ b/test/mixins/context_menu_tap_mixin_test.dart @@ -44,15 +44,6 @@ void main() { expect(state.isContextMenuOpen, isFalse); }); - testWidgets('storeTapPosition records the global tap offset', (tester) async { - late _ProbeState state; - await tester.pumpWidget(_Probe(onState: (s) => state = s)); - - const offset = Offset(123.0, 456.0); - state.storeTapPosition(TapDownDetails(globalPosition: offset)); - - expect(state.lastTapPosition, offset); - }); testWidgets('showContextMenuFromTap and showContextMenu are no-ops without a mounted menu', (tester) async { late _ProbeState state; diff --git a/test/mixins/disposable_change_notifier_mixin_test.dart b/test/mixins/disposable_change_notifier_mixin_test.dart index a5a6a4e9..17c763a8 100644 --- a/test/mixins/disposable_change_notifier_mixin_test.dart +++ b/test/mixins/disposable_change_notifier_mixin_test.dart @@ -30,14 +30,6 @@ void main() { expect(fired, 0); }); - test('isDisposed flips to true after dispose()', () { - final n = _Probe(); - expect(n.isDisposed, isFalse); - - n.dispose(); - - expect(n.isDisposed, isTrue); - }); test('multiple safeNotifyListeners calls succeed before dispose', () { final n = _Probe(); diff --git a/test/mixins/server_bound_media_mixin_test.dart b/test/mixins/server_bound_media_mixin_test.dart index 6e565dad..e42ca967 100644 --- a/test/mixins/server_bound_media_mixin_test.dart +++ b/test/mixins/server_bound_media_mixin_test.dart @@ -45,25 +45,7 @@ void main() { TestWidgetsFlutterBinding.ensureInitialized(); group('ServerBoundMediaMixin', () { - testWidgets('serverBoundServerId mirrors metadata.serverId', (tester) async { - late _ProbeState state; - await tester.pumpWidget( - _Probe( - metadata: _meta(serverId: ServerId('srv-A')), - offline: false, - onState: (s, _) => state = s, - ), - ); - await tester.pump(); - expect(state.serverBoundServerId, 'srv-A'); - }); - testWidgets('serverBoundServerId is null when metadata has no server', (tester) async { - late _ProbeState state; - await tester.pumpWidget(_Probe(metadata: _meta(), offline: false, onState: (s, _) => state = s)); - await tester.pump(); - expect(state.serverBoundServerId, isNull); - }); testWidgets('toServerBoundGlobalKey uses the metadata serverId by default', (tester) async { late _ProbeState state; diff --git a/test/models/shader_preset_test.dart b/test/models/shader_preset_test.dart index 4ad7ea28..e6f1e72e 100644 --- a/test/models/shader_preset_test.dart +++ b/test/models/shader_preset_test.dart @@ -3,74 +3,6 @@ import 'package:plezy/models/shader_preset.dart'; void main() { group('ShaderPreset ArtCNN presets', () { - test('exposes the complete built-in catalog in stable order', () { - expect(ShaderPreset.allPresets.map((preset) => preset.toJson()).toList(), [ - {'id': 'none', 'name': 'Off', 'type': 'none'}, - { - 'id': 'nvscaler', - 'name': 'NVScaler', - 'type': 'nvscaler', - 'nvscalerConfig': {'autoHdrSkip': true}, - }, - { - 'id': 'artcnn_c4f16_neutral', - 'name': 'ArtCNN C4F16', - 'type': 'artcnn', - 'artcnnConfig': {'model': 'c4f16', 'variant': 'neutral'}, - }, - { - 'id': 'artcnn_c4f16_dn', - 'name': 'ArtCNN C4F16 Denoise', - 'type': 'artcnn', - 'artcnnConfig': {'model': 'c4f16', 'variant': 'denoise'}, - }, - { - 'id': 'artcnn_c4f16_ds', - 'name': 'ArtCNN C4F16 Denoise + Sharpen', - 'type': 'artcnn', - 'artcnnConfig': {'model': 'c4f16', 'variant': 'denoiseSharpen'}, - }, - { - 'id': 'artcnn_c4f32_neutral', - 'name': 'ArtCNN C4F32', - 'type': 'artcnn', - 'artcnnConfig': {'model': 'c4f32', 'variant': 'neutral'}, - }, - { - 'id': 'artcnn_c4f32_dn', - 'name': 'ArtCNN C4F32 Denoise', - 'type': 'artcnn', - 'artcnnConfig': {'model': 'c4f32', 'variant': 'denoise'}, - }, - { - 'id': 'artcnn_c4f32_ds', - 'name': 'ArtCNN C4F32 Denoise + Sharpen', - 'type': 'artcnn', - 'artcnnConfig': {'model': 'c4f32', 'variant': 'denoiseSharpen'}, - }, - for (final entry in const [ - ('fast', 'modeA', 'Anime4K Fast A'), - ('fast', 'modeB', 'Anime4K Fast B'), - ('fast', 'modeC', 'Anime4K Fast C'), - ('fast', 'modeAA', 'Anime4K Fast A+A'), - ('fast', 'modeBB', 'Anime4K Fast B+B'), - ('fast', 'modeCA', 'Anime4K Fast C+A'), - ('hq', 'modeA', 'Anime4K HQ A'), - ('hq', 'modeB', 'Anime4K HQ B'), - ('hq', 'modeC', 'Anime4K HQ C'), - ('hq', 'modeAA', 'Anime4K HQ A+A'), - ('hq', 'modeBB', 'Anime4K HQ B+B'), - ('hq', 'modeCA', 'Anime4K HQ C+A'), - ]) - { - 'id': 'anime4k_${entry.$1}_${entry.$2}', - 'name': entry.$3, - 'type': 'anime4k', - 'anime4kConfig': {'quality': entry.$1, 'mode': entry.$2}, - }, - ]); - }); - test('shares an unmodifiable catalog and canonical id lookup', () { final first = ShaderPreset.allPresets; final second = ShaderPreset.allPresets; diff --git a/test/mpv/player_error_http_status_test.dart b/test/mpv/player_error_http_status_test.dart index 7dd09a38..d4c398a0 100644 --- a/test/mpv/player_error_http_status_test.dart +++ b/test/mpv/player_error_http_status_test.dart @@ -42,9 +42,6 @@ void main() { }); group('fatalPlaybackHttpStatuses', () { - test('covers exactly the statuses no client-side retry can recover', () { - expect(fatalPlaybackHttpStatuses, {404, 500}); - }); test('excludes the 503 the reconnect path deliberately retries', () { // stream-lavf-o sets reconnect_on_http_error=503, so a 503 is expected diff --git a/test/profiles/profile_test.dart b/test/profiles/profile_test.dart index fe79871a..77b97a22 100644 --- a/test/profiles/profile_test.dart +++ b/test/profiles/profile_test.dart @@ -3,35 +3,8 @@ import 'package:plezy/profiles/profile.dart'; void main() { group('Profile', () { - test('local profile defaults', () { - final p = Profile.local(id: 'local-1', displayName: 'Owner', createdAt: DateTime(2026, 1, 1)); - expect(p.isLocal, isTrue); - expect(p.isPlexHome, isFalse); - expect(p.isPinProtected, isFalse); - expect(p.parentConnectionId, isNull); - }); - test('local profile with PIN is pin-protected', () { - final p = Profile.local( - id: 'local-1', - displayName: 'Kids', - pinHash: computePinHash('1234'), - createdAt: DateTime(2026, 1, 1), - ); - expect(p.isPinProtected, isTrue); - }); - test('plex_home profile pin protection follows the protected flag', () { - final p = Profile.plexHome( - id: 'plex-home-acct1-uuid1', - displayName: 'Sarah', - parentConnectionId: 'acct1', - plexProtected: true, - createdAt: DateTime(2026, 1, 1), - ); - expect(p.isLocal, isFalse); - expect(p.isPinProtected, isTrue); - }); test('local PIN hash is round-tripped via configJson', () { final p = Profile.local( diff --git a/test/providers/companion_remote_provider_test.dart b/test/providers/companion_remote_provider_test.dart index 72b63cf8..66404361 100644 --- a/test/providers/companion_remote_provider_test.dart +++ b/test/providers/companion_remote_provider_test.dart @@ -24,41 +24,10 @@ void main() { setUp(resetSharedPreferencesForTest); group('CompanionRemoteProvider — initial state', () { - test('starts with no session and no connected device', () { - final p = CompanionRemoteProvider(); - expect(p.session, isNull); - expect(p.isInSession, isFalse); - expect(p.isHost, isFalse); - expect(p.isRemote, isFalse); - expect(p.isConnected, isFalse); - expect(p.connectedDevice, isNull); - expect(p.status, RemoteSessionStatus.disconnected); - p.dispose(); - }); - test('isPlayerActive starts false', () { - final p = CompanionRemoteProvider(); - expect(p.isPlayerActive, isFalse); - p.dispose(); - }); - test('isHostServerRunning starts false (no peer service yet)', () { - final p = CompanionRemoteProvider(); - expect(p.isHostServerRunning, isFalse); - p.dispose(); - }); - test('reconnectAttempts starts at 0', () { - final p = CompanionRemoteProvider(); - expect(p.reconnectAttempts, 0); - p.dispose(); - }); - test('isCryptoReady is false until ensureCryptoReady succeeds', () { - final p = CompanionRemoteProvider(); - expect(p.isCryptoReady, isFalse); - p.dispose(); - }); test('discoverHosts returns null when crypto is not ready', () { final p = CompanionRemoteProvider(); diff --git a/test/providers/shader_provider_test.dart b/test/providers/shader_provider_test.dart index 9cf7ee72..3b03fb98 100644 --- a/test/providers/shader_provider_test.dart +++ b/test/providers/shader_provider_test.dart @@ -33,24 +33,6 @@ void main() { p.dispose(); }); - test('allPresets exposes built-in presets and includes none + nvscaler', () async { - final p = ShaderProvider(); - await Future.delayed(Duration.zero); - - // Built-ins should always be present even with no custom presets stored. - final ids = p.allPresets.map((preset) => preset.id).toList(); - expect(ids, contains(ShaderPreset.none.id)); - expect(ids, contains(ShaderPreset.nvscalerDefault.id)); - expect(ids, contains('artcnn_c4f16_neutral')); - expect(ids, contains('artcnn_c4f16_dn')); - expect(ids, contains('artcnn_c4f16_ds')); - expect(ids, contains('artcnn_c4f32_neutral')); - expect(ids, contains('artcnn_c4f32_dn')); - expect(ids, contains('artcnn_c4f32_ds')); - expect(p.allPresets.length, ShaderPreset.allPresets.length); - - p.dispose(); - }); test('setPreset persists, updates current/saved, and notifies', () async { final p = ShaderProvider(); diff --git a/test/providers/user_profile_provider_test.dart b/test/providers/user_profile_provider_test.dart index 6bea338a..43d27013 100644 --- a/test/providers/user_profile_provider_test.dart +++ b/test/providers/user_profile_provider_test.dart @@ -19,11 +19,6 @@ void main() { setUp(resetSharedPreferencesForTest); group('UserProfileProvider (settings-only)', () { - test('starts with null settings', () { - final p = UserProfileProvider(); - expect(p.profileSettings, isNull); - p.dispose(); - }); test('refreshProfileSettings without a stored token is a no-op', () async { final p = UserProfileProvider(); diff --git a/test/screens/video_player/completion_latch_test.dart b/test/screens/video_player/completion_latch_test.dart index c5a22226..0c922957 100644 --- a/test/screens/video_player/completion_latch_test.dart +++ b/test/screens/video_player/completion_latch_test.dart @@ -93,14 +93,6 @@ void main() { ); }); - test('does not exit while the initial adjacency load is unresolved', () { - // VideoPlayerScreen initializes adjacency status to failed until its - // fire-and-forget first load commits a resolved status. - expect( - completionNavigationAction(hasNext: false, adjacentStatus: QueueNavigationStatus.failed), - CompletionNavigationAction.retryAdjacent, - ); - }); test('exits a standalone movie after adjacency resolves unavailable', () { expect( diff --git a/test/screens/video_player/player_startup_chrome_test.dart b/test/screens/video_player/player_startup_chrome_test.dart index 7351564f..2fa5a857 100644 --- a/test/screens/video_player/player_startup_chrome_test.dart +++ b/test/screens/video_player/player_startup_chrome_test.dart @@ -27,10 +27,6 @@ void main() { TvDetectionService.debugSetAppleTVOverride(null); }); - test('a television opens the player with its chrome down', () { - expect(playerChromeStartsVisible(isTv: true), isFalse); - expect(playerChromeStartsVisible(isTv: false), isTrue); - }); testWidgets('the TV player route opens with the chrome down and unpresented', (tester) async { TvDetectionService.debugSetAppleTVOverride(true); diff --git a/test/scripts/generate_ducet_ranks_test.dart b/test/scripts/generate_ducet_ranks_test.dart index 776927d8..f9af1789 100644 --- a/test/scripts/generate_ducet_ranks_test.dart +++ b/test/scripts/generate_ducet_ranks_test.dart @@ -20,20 +20,6 @@ void main() { } }); - test('pins immutable Unicode and CLDR source descriptors', () { - expect(allKeysSource.url, 'https://www.unicode.org/Public/UCA/13.0.0/allkeys.txt'); - expect(allKeysSource.sha256Digest, 'a3255d45b7af97f4dc14fb8364d7573b434425e5c58cacf00d16901ce081c78d'); - expect(allKeysSource.bundledFileName, 'allkeys-13.0.0.txt.gz'); - expect(allKeysSource.licenseUrl, 'https://www.unicode.org/license.txt'); - expect( - fractionalUcaSource.url, - 'https://raw.githubusercontent.com/unicode-org/cldr/' - '651afecf9ccf1541a49306993e8210fa2209aa0b/common/uca/FractionalUCA.txt', - ); - expect(fractionalUcaSource.sha256Digest, 'a6144d0c8c19cc899a5d2f48fbc14e3e31e819049a73aa86b67111f1f3f81637'); - expect(fractionalUcaSource.bundledFileName, 'FractionalUCA-651afecf9ccf1541a49306993e8210fa2209aa0b.txt.gz'); - expect(fractionalUcaSource.licenseUrl, contains('/651afecf9ccf1541a49306993e8210fa2209aa0b/LICENSE')); - }); test('bundled gzip inputs have deterministic normalized headers and bytes', () { final allKeys = File('scripts/data/${allKeysSource.bundledFileName}').readAsBytesSync(); diff --git a/test/services/external_player_service_test.dart b/test/services/external_player_service_test.dart index 8d479b83..12c11d5c 100644 --- a/test/services/external_player_service_test.dart +++ b/test/services/external_player_service_test.dart @@ -6,7 +6,6 @@ import 'package:plezy/media/media_backend.dart'; import 'package:plezy/media/media_item.dart'; import 'package:plezy/media/media_kind.dart'; import 'package:plezy/media/media_server_client.dart'; -import 'package:plezy/models/external_player_models.dart'; import 'package:plezy/services/external_player_service.dart'; import 'package:plezy/services/jellyfin_api_cache.dart'; import 'package:plezy/services/multi_server_manager.dart'; @@ -82,15 +81,6 @@ MediaItem _item({int? durationMs}) { } void main() { - test('MX Player Android package candidates include free and Pro variants', () { - final mxPlayer = KnownPlayers.findById('mx_player'); - - expect(mxPlayer, isNotNull); - expect(KnownPlayers.androidPackageCandidates(mxPlayer!), [ - 'com.mxtech.videoplayer.ad', - 'com.mxtech.videoplayer.pro', - ]); - }); test('Android external progress preserves null duration and still stops after start failure', () async { final client = _RecordingClient()..failStart = true; diff --git a/test/services/image_cache_service_test.dart b/test/services/image_cache_service_test.dart index ed10170d..dedaba6e 100644 --- a/test/services/image_cache_service_test.dart +++ b/test/services/image_cache_service_test.dart @@ -12,10 +12,6 @@ import 'package:plezy/services/image_cache_service.dart'; void main() { const timeout = Duration(seconds: 5); - test('reduced-tier devices cap artwork fan-out', () { - expect(artworkRequestConcurrencyForTier(reduced: true), 3); - expect(artworkRequestConcurrencyForTier(reduced: false), 6); - }); http.Request get(String path) => http.Request('GET', Uri.parse('https://example.invalid$path')); diff --git a/test/services/jellyfin_lan_discovery_service_test.dart b/test/services/jellyfin_lan_discovery_service_test.dart index 9ca0d6fe..13c6f02e 100644 --- a/test/services/jellyfin_lan_discovery_service_test.dart +++ b/test/services/jellyfin_lan_discovery_service_test.dart @@ -85,11 +85,6 @@ void main() { expect(sorted.map((server) => server.id), ['srv-1', 'srv-2', 'srv-3']); }); - test('discovery messages are the two distinct measured payloads', () { - expect(MediaBrowserDialect.jellyfin.lanDiscoveryMessage, 'who is JellyfinServer?'); - expect(MediaBrowserDialect.emby.lanDiscoveryMessage, 'who is EmbyServer?'); - expect(JellyfinLanDiscoveryService.discoveryPort, 7359); - }); test('listenDatagrams receives queued loopback datagrams', () async { final receiver = await RawDatagramSocket.bind(InternetAddress.loopbackIPv4, 0); diff --git a/test/services/play_queue_launcher_test.dart b/test/services/play_queue_launcher_test.dart index 7833e35e..f2eedad9 100644 --- a/test/services/play_queue_launcher_test.dart +++ b/test/services/play_queue_launcher_test.dart @@ -78,12 +78,6 @@ void main() { // ============================================================ group('PlayQueueResult', () { - test('PlayQueueError carries the wrapped error', () { - final error = StateError('boom'); - final result = PlayQueueError(error); - expect(result.error, same(error)); - expect(result, isA()); - }); test('PlayQueueCancelled is a distinct re-exported result', () { const PlayQueueResult result = PlayQueueCancelled(); diff --git a/test/services/settings_service_test.dart b/test/services/settings_service_test.dart index 940f0d2d..5e50ed84 100644 --- a/test/services/settings_service_test.dart +++ b/test/services/settings_service_test.dart @@ -1,10 +1,8 @@ import 'dart:async'; -import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:plezy/i18n/strings.g.dart'; import 'package:plezy/models/audio_quality_preset.dart'; -import 'package:plezy/models/hotkey_model.dart'; import 'package:plezy/services/base_shared_preferences_service.dart'; import 'package:plezy/services/settings_service.dart'; import 'package:plezy/services/trackers/tracker_constants.dart'; @@ -74,14 +72,6 @@ void main() { }); }); - group('SettingsService keyboard hotkey defaults', () { - test('includes Ctrl+S screenshot shortcut', () { - final hotkey = SettingsService.defaultKeyboardHotkeys()['screenshot']; - expect(hotkey, isNotNull); - expect(hotkey!.key, PhysicalKeyboardKey.keyS); - expect(hotkey.modifiers, [HotKeyModifier.control]); - }); - }); group('SettingsService mute volume restoration', () { test('keeps 37 persisted across mute and restores it on unmute', () async { @@ -127,13 +117,6 @@ void main() { }); }); - group('SettingsService TV card defaults', () { - test('full card layout starts disabled', () async { - final settings = await SettingsService.getInstance(); - - expect(settings.read(SettingsService.tvFullCardLayout), isFalse); - }); - }); group('SettingsService episode action', () { test('defaults to play and resets to play', () async { diff --git a/test/utils/layout_constants_test.dart b/test/utils/layout_constants_test.dart index 4d4822ac..e80c39fa 100644 --- a/test/utils/layout_constants_test.dart +++ b/test/utils/layout_constants_test.dart @@ -36,13 +36,5 @@ void main() { expect(ScreenBreakpoints.isWideTabletOrLarger(900), isTrue); expect(ScreenBreakpoints.isWideTabletOrLarger(5000), isTrue); }); - - test('constant values match expected thresholds', () { - expect(ScreenBreakpoints.mobile, 600); - expect(ScreenBreakpoints.tablet, 600); - expect(ScreenBreakpoints.wideTablet, 900); - expect(ScreenBreakpoints.desktop, 1200); - expect(ScreenBreakpoints.largeDesktop, 1600); - }); }); } diff --git a/test/utils/track_label_builder_test.dart b/test/utils/track_label_builder_test.dart index 01361e34..f2474a9e 100644 --- a/test/utils/track_label_builder_test.dart +++ b/test/utils/track_label_builder_test.dart @@ -3,13 +3,7 @@ import 'package:plezy/utils/track_label_builder.dart'; void main() { group('TrackLabel', () { - test('joined concatenates primary and secondary with " · "', () { - expect(const TrackLabel('Tamil', 'E-AC3 · 5.1').joined, 'Tamil · E-AC3 · 5.1'); - }); - test('joined is just primary when secondary is null', () { - expect(const TrackLabel('Tamil').joined, 'Tamil'); - }); test('equality compares both parts', () { expect(const TrackLabel('A', 'B'), const TrackLabel('A', 'B')); diff --git a/test/watch_together/primitives_test.dart b/test/watch_together/primitives_test.dart index d86c2d3f..86b06f34 100644 --- a/test/watch_together/primitives_test.dart +++ b/test/watch_together/primitives_test.dart @@ -8,12 +8,4 @@ void main() { expect(orderedStringListsEqual(const ['a', 'b'], const ['b', 'a']), isFalse); expect(orderedStringListsEqual(const ['a', 'a'], const ['a', 'b']), isFalse); }); - - test('watchTogetherSystemNowMs returns wall-clock milliseconds', () { - final before = DateTime.now().millisecondsSinceEpoch; - final value = watchTogetherSystemNowMs(); - final after = DateTime.now().millisecondsSinceEpoch; - - expect(value, inInclusiveRange(before, after)); - }); } diff --git a/test/widgets/video_controls_quiescence_test.dart b/test/widgets/video_controls_quiescence_test.dart index c841f729..7ee652a9 100644 --- a/test/widgets/video_controls_quiescence_test.dart +++ b/test/widgets/video_controls_quiescence_test.dart @@ -1,5 +1,3 @@ -import 'dart:io' show Platform; - import 'package:drift/native.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -31,14 +29,6 @@ import '../test_helpers/theme.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - test('the keep-alive ticks on Linux and nowhere else', () { - LinuxKeepAlive.debugIsLinuxOverride = null; - expect( - LinuxKeepAlive.ticksOnThisPlatform, - Platform.isLinux, - reason: 'forced repaints on any other platform reintroduce the #1707 VRR micro-stutter', - ); - }); group('hidden-chrome frame quiescence', () { late _IdlePlayer player;