v5 (#463)
* migrate to dio
* ignore folders
* simplify twitch api headers handling
* clean up main
* simplify logs
* optimize profile picture fetching
fixes refetches on tab switch
* update claude md
* refactor irc.dart
* update copilot instructions with essential commands and project structure details
* implement message sending state management and UI updates
* refactor notification handling and add copy-paste functionality in chat
* refactor AlertMessage to support vertical layout and optional padding
* refactor error messages for consistency and clarity across various components
* refactor chat layout to use draggable divider and improve chat width settings
* refactor Uptime widget to use SharedTimerService for synchronized updates
* refactor search results components to handle null future states gracefully
* refactor loading indicators to use skeleton loaders for improved user experience
* refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments
* refactor: replace manual blur effects with BlurredContainer for consistency and reusability
* refactor: enhance JavaScript execution and error handling in WebView components
* refactor: replace app bar with blurred container for improved UI consistency across screens
* refactor: streamline video chat layout and enhance PiP drag gesture functionality
* revert some app bar changes
* refactor: implement Picture-in-Picture drag functionality in VideoChat
* refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context
* fix large thubmnail width
* chore: update Gradle and Kotlin plugin versions for improved compatibility
* changes from v4.10.0 branch
* feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens
* refactor: update SectionHeader styling and improve theme management
* feat: add pinned section to StreamsList and enhance skeleton loader padding
* feat: add repository guidelines for project structure, coding style, testing, and security
* feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme
* feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior
* feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations
* refactor: improve code formatting and readability across multiple files
* feat: implement picture-in-picture mode toggle and state management for video playback
* feat: reset PiP mode state when pausing video playback
* feat: add custom app bar with profile picture and stream info for video chat
* feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders
* feat: update blur configuration for adaptive alpha based on theme
* fix: adjust default font size in SectionHeader widget
* feat: enhance PiP mode with drag overlay instruction and UI improvements
* fix: improve badge rendering with consistent margin and border for current channel
* refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability
* fix: reduce background transparency in Uptime widget for better visibility
* feat: enhance photo view dialog with full resolution toggle and blurred background
* fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity
* fix: adjust border width in theme to improve consistency
* feat: add forceDarkMode option to BlurredContainer for improved theme adaptability
* feat: implement offline followed channels feature with UI integration and settings option
* fix: increase font size and weight for offline status text for better readability
* feat: remove offline pinned channels feature and update related UI components
* feat: optimize offline channels loading behavior based on expansion state
* fix: improve clarity and consistency in repository guidelines formatting
* feat: update full resolution URL handling and button visibility logic
* feat: replace app bar with blurred version in chat-only mode and add animated scroll border
* feat: refactor video chat layout for improved chat and video display in landscape mode
* feat: remove bottom bar visibility setting and adjust chat layout accordingly
* fix: simplify condition for displaying offline channels section in following tab
* feat: enhance reply thread display with indentation and reply icon
* feat: implement showModalBottomSheetWithProperFocus for improved focus handling
* feat: add gradient direction support to BlurredContainer for enhanced visual effects
* feat: enhance NavigationBar and Theme settings for improved visual consistency
* feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects
* chore: update .gitignore to include .cursor file for better environment management
* fix: update PiP drag gesture conditions to include video paused state for better user experience
* refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management
* refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability
* refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies
* refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience
* refactor: adjust titleSpacing in theme and navigation components for improved layout consistency
* refactor: update stream info timer handling and overlay management for improved UI responsiveness
* refactor: enhance stream info timer logic and overlay visibility management for chat-only mode
* refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness
* refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency
* refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency
* refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency
* refactor: adjust chat padding to account for device bottom insets for improved layout consistency
* refactor: update text styles in FrostyThemes for improved visual consistency across UI components
* refactor: update iOS minimum deployment target to 13.0 for improved compatibility
* refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency
* refactor: adjust padding values in StreamsList for improved layout consistency
* refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions
refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations
* refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code
* refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience
* refactor: update hint text and tooltips in chat bottom bar and search for improved clarity
* refactor: simplify notification display logic and enhance chat input behavior for improved user experience
* refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens
* refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency
* refactor: remove monospace font family from chat bottom bar for improved text rendering
* refactor: reduce notification animation duration and change dismiss direction for improved user experience
* refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency
* refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency
* refactor: standardize font sizes and update gradient stops in video components for improved visual consistency
* refactor: update tooltip padding and background color in theme for improved visual consistency
* refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency
* refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility
* refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components
* refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth
* refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior
* fix: correct stream info text color on overlay
* refactor: implement a new color picker dialog with random color generation for enhanced user experience
* refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency
* refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity
* refactor: add isCompact parameter to StreamInfoBar for responsive text sizing
* fix: update tooltip background color to use surface color for better contrast
* feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication
* refactor: disable debug print for IRC messages to reduce log clutter
* feat: implement chat color selection feature with user color management in chat settings
* refactor: replace color adjustment logic with new contrast-aware utility for chat names
* refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog
* refactor: enhance chat details UI by improving time formatting and adding label styling to action cards
* refactor: update chat color terminology to 'Username color' for clarity in UI
* refactor: enhance chat details UI by introducing active chat modes display and improving layout structure
* refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation
* refactor: remove chat notifications positioning setting and adjust notification alignment in video chat
* refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability
* refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling
* refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration
* refactor: adjust margin and padding in StreamCard for improved layout consistency
* chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages
* template
* chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0
* refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling
* format
* feat: enhance Channel model and StreamInfoBar to support offline channel details
* feat: add offline indicator and improve StreamInfoBar layout for better offline channel display
* fix: adjust icon color opacity in StreamInfoBar for improved visibility
* feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction
* docs: update copilot instructions for clarity and additional error handling details
* refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay
* feat: implement shared chat asset fetching and participant management in ChatAssetsStore
* refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay
* refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency
* feat: add showTextShadows property to StreamInfoBar for customizable text shadow display
* refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency
* refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience
* refactor: reduce vertical padding in VideoOverlay for improved layout consistency
* refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification
* refactor: improve text overlay transition in VideoChat for better user experience
* Revert "refactor: improve text overlay transition in VideoChat for better user experience"
This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6.
* refactor: wrap videoOverlay in ColoredBox for improved layout handling
* refactor: optimize animation duration and transition curves in VideoChat for smoother interactions
* refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks
* refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability
* refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI
* refactor: add refresh functionality for assets in ChatDetails with loading indicators
* refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar
* refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application
* refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions
* refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience
* refactor: replace theme and accent color settings with dedicated components for improved modularity and readability
* refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs
* refactor: integrate MobX Observer for reactive state management in settings widgets
* refactor: update theme and dialog components for improved styling and consistency
* refactor: enhance dialog styling with rounded corners and border in theme configuration
* refactor: improve dialog messages for unauthorized access handling
* refactor: update bodyLarge text style in theme configuration to include font weight
* refactor: standardize Divider usage and adjust theme styles for improved consistency
* refactor: adjust Divider properties and theme styles for enhanced visual consistency
* chore: remove GEMINI.md file as it is no longer needed for project documentation
* refactor: enhance token validation and reconnect logic in AuthBase for improved error handling
* format
* refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness
* refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore
* refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness
* update AGENTS.md
* add scrollbar to search
* fix scrolling exception
* update CLAUDE.md
* 5 auth reconnect attemps then log out
* increase reply max lines to 2
* simplify and improve reply formatting
* add prime icon
* better draggable divider
* support draggable divider in fullscreen overlay chat
* add text shadow in fullscreen chat overlay mode
* format
* add landscape checks
* video store optimization attempts
* Dispose WebViewController and remove JavaScript channels properly
* Track and cleanup all MutationObservers to prevent accumulation
* Throttle latency updates to once per 5 seconds (reduces CPU load)
* Add timeout protection and null checks for robustness
* Prevent duplicate event listeners on page reloads
* double tap divider to reset
* Revert "video store optimization attempts"
This reverts commit b1df7b0de473543283211a489dca698d9d241857.
* optimize video store attempt 2
* Revert "double tap divider to reset"
This reverts commit aeb26a433500ec71f822794835e927018ee59e1e.
* optimize latency listener to open the menu and check every 20 secconds
* more optimizations
* hard refresh
* abbreviate latency
* fix lint
* improve hide default overlay
* fix chat no longer reconnecting with chat delay
* refine chat alerts
* fix historical message missing badges and emotes on initial connection
* parallelize
* revert
* add reconnect button inline action
* refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling
* tweak chat details menu
* add scrollbar to release notes, renames for consistency
* fix duplicate message case
* fix chat delay alerts in auto sync mode
* add regex for numeric strings and enhance display name formatting logic
* exterminate borders
* refactor: simplify active chat modes display in chat details screen
* feat: enhance chat input button with delay notification and disable state
* fix: wrap chat in SafeArea to prevent UI overflow issues
* refactor: remove divider line from video chat and update draggable divider visibility logic
* persist overlay in pip mode
* fix: update chat delay handling and notifications in chat bottom bar
* fix: update chat overlay visibility logic to respect fullscreen settings
* tap to show deleted message
* fix: prevent accidental chat scrolling when accessing system UI in landscape mode
* show latency in portrait
* fix: enhance chat delay notifications with dynamic delay time
* docs: update CLAUDE.md for improved environment variable instructions and architecture overview
* fix: improve chat delay countdown management and message handling
* add preliminary release notes
* remove agents.md
* update lockfile
* add initial multi chat feature
* add option to persist multi chat tabs
* add remove confirmation dialog
* improve add chat design
* lazy-load tabs
* create global assets store to dedupe global asset fetching
* improve tab design/styles
* update notes
* use frosty dialog
* update claude md
* tweak
* add ability to reorder tabs
* resolve conflict
* merge cleanup
* format
* update release notes
* add chat delay sync completion tracking to prevent countdown re-appearance
* add tests
* fix
* update release notes
* bump
2026-01-01 22:28:17 -05:00
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
|
import 'package:frosty/models/emotes.dart';
|
|
|
|
|
|
|
|
|
|
void main() {
|
|
|
|
|
group('Emote.fromTwitch', () {
|
|
|
|
|
test('creates emote with correct URL', () {
|
|
|
|
|
final twitchEmote = EmoteTwitch(
|
|
|
|
|
'25',
|
|
|
|
|
'Kappa',
|
|
|
|
|
'bitstier',
|
|
|
|
|
null,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.fromTwitch(twitchEmote, EmoteType.twitchGlobal);
|
|
|
|
|
|
|
|
|
|
expect(
|
|
|
|
|
emote.url,
|
|
|
|
|
'https://static-cdn.jtvnw.net/emoticons/v2/25/default/dark/3.0',
|
|
|
|
|
);
|
|
|
|
|
expect(emote.name, 'Kappa');
|
|
|
|
|
expect(emote.type, EmoteType.twitchGlobal);
|
|
|
|
|
expect(emote.zeroWidth, isFalse);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('preserves owner ID when provided', () {
|
|
|
|
|
final twitchEmote = EmoteTwitch(
|
|
|
|
|
'12345',
|
|
|
|
|
'SubEmote',
|
|
|
|
|
'subscriptions',
|
|
|
|
|
'67890',
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.fromTwitch(twitchEmote, EmoteType.twitchSub);
|
|
|
|
|
|
|
|
|
|
expect(emote.ownerId, '67890');
|
|
|
|
|
});
|
2026-02-07 00:51:22 -08:00
|
|
|
|
|
|
|
|
test('handles null owner ID', () {
|
|
|
|
|
final twitchEmote = EmoteTwitch(
|
|
|
|
|
'25',
|
|
|
|
|
'Kappa',
|
|
|
|
|
'bitstier',
|
|
|
|
|
null,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.fromTwitch(twitchEmote, EmoteType.twitchGlobal);
|
|
|
|
|
|
|
|
|
|
expect(emote.ownerId, isNull);
|
|
|
|
|
});
|
v5 (#463)
* migrate to dio
* ignore folders
* simplify twitch api headers handling
* clean up main
* simplify logs
* optimize profile picture fetching
fixes refetches on tab switch
* update claude md
* refactor irc.dart
* update copilot instructions with essential commands and project structure details
* implement message sending state management and UI updates
* refactor notification handling and add copy-paste functionality in chat
* refactor AlertMessage to support vertical layout and optional padding
* refactor error messages for consistency and clarity across various components
* refactor chat layout to use draggable divider and improve chat width settings
* refactor Uptime widget to use SharedTimerService for synchronized updates
* refactor search results components to handle null future states gracefully
* refactor loading indicators to use skeleton loaders for improved user experience
* refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments
* refactor: replace manual blur effects with BlurredContainer for consistency and reusability
* refactor: enhance JavaScript execution and error handling in WebView components
* refactor: replace app bar with blurred container for improved UI consistency across screens
* refactor: streamline video chat layout and enhance PiP drag gesture functionality
* revert some app bar changes
* refactor: implement Picture-in-Picture drag functionality in VideoChat
* refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context
* fix large thubmnail width
* chore: update Gradle and Kotlin plugin versions for improved compatibility
* changes from v4.10.0 branch
* feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens
* refactor: update SectionHeader styling and improve theme management
* feat: add pinned section to StreamsList and enhance skeleton loader padding
* feat: add repository guidelines for project structure, coding style, testing, and security
* feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme
* feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior
* feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations
* refactor: improve code formatting and readability across multiple files
* feat: implement picture-in-picture mode toggle and state management for video playback
* feat: reset PiP mode state when pausing video playback
* feat: add custom app bar with profile picture and stream info for video chat
* feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders
* feat: update blur configuration for adaptive alpha based on theme
* fix: adjust default font size in SectionHeader widget
* feat: enhance PiP mode with drag overlay instruction and UI improvements
* fix: improve badge rendering with consistent margin and border for current channel
* refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability
* fix: reduce background transparency in Uptime widget for better visibility
* feat: enhance photo view dialog with full resolution toggle and blurred background
* fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity
* fix: adjust border width in theme to improve consistency
* feat: add forceDarkMode option to BlurredContainer for improved theme adaptability
* feat: implement offline followed channels feature with UI integration and settings option
* fix: increase font size and weight for offline status text for better readability
* feat: remove offline pinned channels feature and update related UI components
* feat: optimize offline channels loading behavior based on expansion state
* fix: improve clarity and consistency in repository guidelines formatting
* feat: update full resolution URL handling and button visibility logic
* feat: replace app bar with blurred version in chat-only mode and add animated scroll border
* feat: refactor video chat layout for improved chat and video display in landscape mode
* feat: remove bottom bar visibility setting and adjust chat layout accordingly
* fix: simplify condition for displaying offline channels section in following tab
* feat: enhance reply thread display with indentation and reply icon
* feat: implement showModalBottomSheetWithProperFocus for improved focus handling
* feat: add gradient direction support to BlurredContainer for enhanced visual effects
* feat: enhance NavigationBar and Theme settings for improved visual consistency
* feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects
* chore: update .gitignore to include .cursor file for better environment management
* fix: update PiP drag gesture conditions to include video paused state for better user experience
* refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management
* refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability
* refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies
* refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience
* refactor: adjust titleSpacing in theme and navigation components for improved layout consistency
* refactor: update stream info timer handling and overlay management for improved UI responsiveness
* refactor: enhance stream info timer logic and overlay visibility management for chat-only mode
* refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness
* refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency
* refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency
* refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency
* refactor: adjust chat padding to account for device bottom insets for improved layout consistency
* refactor: update text styles in FrostyThemes for improved visual consistency across UI components
* refactor: update iOS minimum deployment target to 13.0 for improved compatibility
* refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency
* refactor: adjust padding values in StreamsList for improved layout consistency
* refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions
refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations
* refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code
* refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience
* refactor: update hint text and tooltips in chat bottom bar and search for improved clarity
* refactor: simplify notification display logic and enhance chat input behavior for improved user experience
* refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens
* refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency
* refactor: remove monospace font family from chat bottom bar for improved text rendering
* refactor: reduce notification animation duration and change dismiss direction for improved user experience
* refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency
* refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency
* refactor: standardize font sizes and update gradient stops in video components for improved visual consistency
* refactor: update tooltip padding and background color in theme for improved visual consistency
* refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency
* refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility
* refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components
* refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth
* refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior
* fix: correct stream info text color on overlay
* refactor: implement a new color picker dialog with random color generation for enhanced user experience
* refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency
* refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity
* refactor: add isCompact parameter to StreamInfoBar for responsive text sizing
* fix: update tooltip background color to use surface color for better contrast
* feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication
* refactor: disable debug print for IRC messages to reduce log clutter
* feat: implement chat color selection feature with user color management in chat settings
* refactor: replace color adjustment logic with new contrast-aware utility for chat names
* refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog
* refactor: enhance chat details UI by improving time formatting and adding label styling to action cards
* refactor: update chat color terminology to 'Username color' for clarity in UI
* refactor: enhance chat details UI by introducing active chat modes display and improving layout structure
* refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation
* refactor: remove chat notifications positioning setting and adjust notification alignment in video chat
* refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability
* refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling
* refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration
* refactor: adjust margin and padding in StreamCard for improved layout consistency
* chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages
* template
* chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0
* refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling
* format
* feat: enhance Channel model and StreamInfoBar to support offline channel details
* feat: add offline indicator and improve StreamInfoBar layout for better offline channel display
* fix: adjust icon color opacity in StreamInfoBar for improved visibility
* feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction
* docs: update copilot instructions for clarity and additional error handling details
* refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay
* feat: implement shared chat asset fetching and participant management in ChatAssetsStore
* refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay
* refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency
* feat: add showTextShadows property to StreamInfoBar for customizable text shadow display
* refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency
* refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience
* refactor: reduce vertical padding in VideoOverlay for improved layout consistency
* refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification
* refactor: improve text overlay transition in VideoChat for better user experience
* Revert "refactor: improve text overlay transition in VideoChat for better user experience"
This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6.
* refactor: wrap videoOverlay in ColoredBox for improved layout handling
* refactor: optimize animation duration and transition curves in VideoChat for smoother interactions
* refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks
* refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability
* refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI
* refactor: add refresh functionality for assets in ChatDetails with loading indicators
* refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar
* refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application
* refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions
* refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience
* refactor: replace theme and accent color settings with dedicated components for improved modularity and readability
* refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs
* refactor: integrate MobX Observer for reactive state management in settings widgets
* refactor: update theme and dialog components for improved styling and consistency
* refactor: enhance dialog styling with rounded corners and border in theme configuration
* refactor: improve dialog messages for unauthorized access handling
* refactor: update bodyLarge text style in theme configuration to include font weight
* refactor: standardize Divider usage and adjust theme styles for improved consistency
* refactor: adjust Divider properties and theme styles for enhanced visual consistency
* chore: remove GEMINI.md file as it is no longer needed for project documentation
* refactor: enhance token validation and reconnect logic in AuthBase for improved error handling
* format
* refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness
* refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore
* refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness
* update AGENTS.md
* add scrollbar to search
* fix scrolling exception
* update CLAUDE.md
* 5 auth reconnect attemps then log out
* increase reply max lines to 2
* simplify and improve reply formatting
* add prime icon
* better draggable divider
* support draggable divider in fullscreen overlay chat
* add text shadow in fullscreen chat overlay mode
* format
* add landscape checks
* video store optimization attempts
* Dispose WebViewController and remove JavaScript channels properly
* Track and cleanup all MutationObservers to prevent accumulation
* Throttle latency updates to once per 5 seconds (reduces CPU load)
* Add timeout protection and null checks for robustness
* Prevent duplicate event listeners on page reloads
* double tap divider to reset
* Revert "video store optimization attempts"
This reverts commit b1df7b0de473543283211a489dca698d9d241857.
* optimize video store attempt 2
* Revert "double tap divider to reset"
This reverts commit aeb26a433500ec71f822794835e927018ee59e1e.
* optimize latency listener to open the menu and check every 20 secconds
* more optimizations
* hard refresh
* abbreviate latency
* fix lint
* improve hide default overlay
* fix chat no longer reconnecting with chat delay
* refine chat alerts
* fix historical message missing badges and emotes on initial connection
* parallelize
* revert
* add reconnect button inline action
* refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling
* tweak chat details menu
* add scrollbar to release notes, renames for consistency
* fix duplicate message case
* fix chat delay alerts in auto sync mode
* add regex for numeric strings and enhance display name formatting logic
* exterminate borders
* refactor: simplify active chat modes display in chat details screen
* feat: enhance chat input button with delay notification and disable state
* fix: wrap chat in SafeArea to prevent UI overflow issues
* refactor: remove divider line from video chat and update draggable divider visibility logic
* persist overlay in pip mode
* fix: update chat delay handling and notifications in chat bottom bar
* fix: update chat overlay visibility logic to respect fullscreen settings
* tap to show deleted message
* fix: prevent accidental chat scrolling when accessing system UI in landscape mode
* show latency in portrait
* fix: enhance chat delay notifications with dynamic delay time
* docs: update CLAUDE.md for improved environment variable instructions and architecture overview
* fix: improve chat delay countdown management and message handling
* add preliminary release notes
* remove agents.md
* update lockfile
* add initial multi chat feature
* add option to persist multi chat tabs
* add remove confirmation dialog
* improve add chat design
* lazy-load tabs
* create global assets store to dedupe global asset fetching
* improve tab design/styles
* update notes
* use frosty dialog
* update claude md
* tweak
* add ability to reorder tabs
* resolve conflict
* merge cleanup
* format
* update release notes
* add chat delay sync completion tracking to prevent countdown re-appearance
* add tests
* fix
* update release notes
* bump
2026-01-01 22:28:17 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
group('Emote.fromBTTV', () {
|
|
|
|
|
test('creates emote with correct URL', () {
|
|
|
|
|
final bttvEmote = EmoteBTTV('abc123', 'PogChamp');
|
|
|
|
|
|
|
|
|
|
final emote = Emote.fromBTTV(bttvEmote, EmoteType.bttvGlobal);
|
|
|
|
|
|
|
|
|
|
expect(emote.url, 'https://cdn.betterttv.net/emote/abc123/3x');
|
|
|
|
|
expect(emote.name, 'PogChamp');
|
|
|
|
|
expect(emote.type, EmoteType.bttvGlobal);
|
|
|
|
|
});
|
|
|
|
|
|
2026-02-07 00:51:22 -08:00
|
|
|
for (final name in [
|
|
|
|
|
'SoSnowy',
|
|
|
|
|
'IceCold',
|
|
|
|
|
'SantaHat',
|
|
|
|
|
'TopHat',
|
|
|
|
|
'ReinDeer',
|
|
|
|
|
'CandyCane',
|
|
|
|
|
'cvMask',
|
|
|
|
|
'cvHazmat',
|
|
|
|
|
]) {
|
|
|
|
|
test('marks $name as zero-width', () {
|
|
|
|
|
final emote = Emote.fromBTTV(EmoteBTTV('id', name), EmoteType.bttvGlobal);
|
|
|
|
|
expect(emote.zeroWidth, isTrue);
|
|
|
|
|
});
|
|
|
|
|
}
|
v5 (#463)
* migrate to dio
* ignore folders
* simplify twitch api headers handling
* clean up main
* simplify logs
* optimize profile picture fetching
fixes refetches on tab switch
* update claude md
* refactor irc.dart
* update copilot instructions with essential commands and project structure details
* implement message sending state management and UI updates
* refactor notification handling and add copy-paste functionality in chat
* refactor AlertMessage to support vertical layout and optional padding
* refactor error messages for consistency and clarity across various components
* refactor chat layout to use draggable divider and improve chat width settings
* refactor Uptime widget to use SharedTimerService for synchronized updates
* refactor search results components to handle null future states gracefully
* refactor loading indicators to use skeleton loaders for improved user experience
* refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments
* refactor: replace manual blur effects with BlurredContainer for consistency and reusability
* refactor: enhance JavaScript execution and error handling in WebView components
* refactor: replace app bar with blurred container for improved UI consistency across screens
* refactor: streamline video chat layout and enhance PiP drag gesture functionality
* revert some app bar changes
* refactor: implement Picture-in-Picture drag functionality in VideoChat
* refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context
* fix large thubmnail width
* chore: update Gradle and Kotlin plugin versions for improved compatibility
* changes from v4.10.0 branch
* feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens
* refactor: update SectionHeader styling and improve theme management
* feat: add pinned section to StreamsList and enhance skeleton loader padding
* feat: add repository guidelines for project structure, coding style, testing, and security
* feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme
* feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior
* feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations
* refactor: improve code formatting and readability across multiple files
* feat: implement picture-in-picture mode toggle and state management for video playback
* feat: reset PiP mode state when pausing video playback
* feat: add custom app bar with profile picture and stream info for video chat
* feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders
* feat: update blur configuration for adaptive alpha based on theme
* fix: adjust default font size in SectionHeader widget
* feat: enhance PiP mode with drag overlay instruction and UI improvements
* fix: improve badge rendering with consistent margin and border for current channel
* refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability
* fix: reduce background transparency in Uptime widget for better visibility
* feat: enhance photo view dialog with full resolution toggle and blurred background
* fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity
* fix: adjust border width in theme to improve consistency
* feat: add forceDarkMode option to BlurredContainer for improved theme adaptability
* feat: implement offline followed channels feature with UI integration and settings option
* fix: increase font size and weight for offline status text for better readability
* feat: remove offline pinned channels feature and update related UI components
* feat: optimize offline channels loading behavior based on expansion state
* fix: improve clarity and consistency in repository guidelines formatting
* feat: update full resolution URL handling and button visibility logic
* feat: replace app bar with blurred version in chat-only mode and add animated scroll border
* feat: refactor video chat layout for improved chat and video display in landscape mode
* feat: remove bottom bar visibility setting and adjust chat layout accordingly
* fix: simplify condition for displaying offline channels section in following tab
* feat: enhance reply thread display with indentation and reply icon
* feat: implement showModalBottomSheetWithProperFocus for improved focus handling
* feat: add gradient direction support to BlurredContainer for enhanced visual effects
* feat: enhance NavigationBar and Theme settings for improved visual consistency
* feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects
* chore: update .gitignore to include .cursor file for better environment management
* fix: update PiP drag gesture conditions to include video paused state for better user experience
* refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management
* refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability
* refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies
* refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience
* refactor: adjust titleSpacing in theme and navigation components for improved layout consistency
* refactor: update stream info timer handling and overlay management for improved UI responsiveness
* refactor: enhance stream info timer logic and overlay visibility management for chat-only mode
* refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness
* refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency
* refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency
* refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency
* refactor: adjust chat padding to account for device bottom insets for improved layout consistency
* refactor: update text styles in FrostyThemes for improved visual consistency across UI components
* refactor: update iOS minimum deployment target to 13.0 for improved compatibility
* refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency
* refactor: adjust padding values in StreamsList for improved layout consistency
* refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions
refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations
* refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code
* refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience
* refactor: update hint text and tooltips in chat bottom bar and search for improved clarity
* refactor: simplify notification display logic and enhance chat input behavior for improved user experience
* refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens
* refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency
* refactor: remove monospace font family from chat bottom bar for improved text rendering
* refactor: reduce notification animation duration and change dismiss direction for improved user experience
* refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency
* refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency
* refactor: standardize font sizes and update gradient stops in video components for improved visual consistency
* refactor: update tooltip padding and background color in theme for improved visual consistency
* refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency
* refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility
* refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components
* refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth
* refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior
* fix: correct stream info text color on overlay
* refactor: implement a new color picker dialog with random color generation for enhanced user experience
* refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency
* refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity
* refactor: add isCompact parameter to StreamInfoBar for responsive text sizing
* fix: update tooltip background color to use surface color for better contrast
* feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication
* refactor: disable debug print for IRC messages to reduce log clutter
* feat: implement chat color selection feature with user color management in chat settings
* refactor: replace color adjustment logic with new contrast-aware utility for chat names
* refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog
* refactor: enhance chat details UI by improving time formatting and adding label styling to action cards
* refactor: update chat color terminology to 'Username color' for clarity in UI
* refactor: enhance chat details UI by introducing active chat modes display and improving layout structure
* refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation
* refactor: remove chat notifications positioning setting and adjust notification alignment in video chat
* refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability
* refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling
* refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration
* refactor: adjust margin and padding in StreamCard for improved layout consistency
* chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages
* template
* chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0
* refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling
* format
* feat: enhance Channel model and StreamInfoBar to support offline channel details
* feat: add offline indicator and improve StreamInfoBar layout for better offline channel display
* fix: adjust icon color opacity in StreamInfoBar for improved visibility
* feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction
* docs: update copilot instructions for clarity and additional error handling details
* refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay
* feat: implement shared chat asset fetching and participant management in ChatAssetsStore
* refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay
* refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency
* feat: add showTextShadows property to StreamInfoBar for customizable text shadow display
* refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency
* refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience
* refactor: reduce vertical padding in VideoOverlay for improved layout consistency
* refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification
* refactor: improve text overlay transition in VideoChat for better user experience
* Revert "refactor: improve text overlay transition in VideoChat for better user experience"
This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6.
* refactor: wrap videoOverlay in ColoredBox for improved layout handling
* refactor: optimize animation duration and transition curves in VideoChat for smoother interactions
* refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks
* refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability
* refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI
* refactor: add refresh functionality for assets in ChatDetails with loading indicators
* refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar
* refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application
* refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions
* refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience
* refactor: replace theme and accent color settings with dedicated components for improved modularity and readability
* refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs
* refactor: integrate MobX Observer for reactive state management in settings widgets
* refactor: update theme and dialog components for improved styling and consistency
* refactor: enhance dialog styling with rounded corners and border in theme configuration
* refactor: improve dialog messages for unauthorized access handling
* refactor: update bodyLarge text style in theme configuration to include font weight
* refactor: standardize Divider usage and adjust theme styles for improved consistency
* refactor: adjust Divider properties and theme styles for enhanced visual consistency
* chore: remove GEMINI.md file as it is no longer needed for project documentation
* refactor: enhance token validation and reconnect logic in AuthBase for improved error handling
* format
* refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness
* refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore
* refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness
* update AGENTS.md
* add scrollbar to search
* fix scrolling exception
* update CLAUDE.md
* 5 auth reconnect attemps then log out
* increase reply max lines to 2
* simplify and improve reply formatting
* add prime icon
* better draggable divider
* support draggable divider in fullscreen overlay chat
* add text shadow in fullscreen chat overlay mode
* format
* add landscape checks
* video store optimization attempts
* Dispose WebViewController and remove JavaScript channels properly
* Track and cleanup all MutationObservers to prevent accumulation
* Throttle latency updates to once per 5 seconds (reduces CPU load)
* Add timeout protection and null checks for robustness
* Prevent duplicate event listeners on page reloads
* double tap divider to reset
* Revert "video store optimization attempts"
This reverts commit b1df7b0de473543283211a489dca698d9d241857.
* optimize video store attempt 2
* Revert "double tap divider to reset"
This reverts commit aeb26a433500ec71f822794835e927018ee59e1e.
* optimize latency listener to open the menu and check every 20 secconds
* more optimizations
* hard refresh
* abbreviate latency
* fix lint
* improve hide default overlay
* fix chat no longer reconnecting with chat delay
* refine chat alerts
* fix historical message missing badges and emotes on initial connection
* parallelize
* revert
* add reconnect button inline action
* refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling
* tweak chat details menu
* add scrollbar to release notes, renames for consistency
* fix duplicate message case
* fix chat delay alerts in auto sync mode
* add regex for numeric strings and enhance display name formatting logic
* exterminate borders
* refactor: simplify active chat modes display in chat details screen
* feat: enhance chat input button with delay notification and disable state
* fix: wrap chat in SafeArea to prevent UI overflow issues
* refactor: remove divider line from video chat and update draggable divider visibility logic
* persist overlay in pip mode
* fix: update chat delay handling and notifications in chat bottom bar
* fix: update chat overlay visibility logic to respect fullscreen settings
* tap to show deleted message
* fix: prevent accidental chat scrolling when accessing system UI in landscape mode
* show latency in portrait
* fix: enhance chat delay notifications with dynamic delay time
* docs: update CLAUDE.md for improved environment variable instructions and architecture overview
* fix: improve chat delay countdown management and message handling
* add preliminary release notes
* remove agents.md
* update lockfile
* add initial multi chat feature
* add option to persist multi chat tabs
* add remove confirmation dialog
* improve add chat design
* lazy-load tabs
* create global assets store to dedupe global asset fetching
* improve tab design/styles
* update notes
* use frosty dialog
* update claude md
* tweak
* add ability to reorder tabs
* resolve conflict
* merge cleanup
* format
* update release notes
* add chat delay sync completion tracking to prevent countdown re-appearance
* add tests
* fix
* update release notes
* bump
2026-01-01 22:28:17 -05:00
|
|
|
|
|
|
|
|
test('regular emotes are not zero-width', () {
|
|
|
|
|
final bttvEmote = EmoteBTTV('regularid', 'RegularEmote');
|
|
|
|
|
|
|
|
|
|
final emote = Emote.fromBTTV(bttvEmote, EmoteType.bttvGlobal);
|
|
|
|
|
|
|
|
|
|
expect(emote.zeroWidth, isFalse);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
group('Emote.fromFFZ', () {
|
|
|
|
|
test('creates emote with static URL when no animation', () {
|
|
|
|
|
final ffzEmote = EmoteFFZ(
|
|
|
|
|
'TestFFZ',
|
|
|
|
|
28,
|
|
|
|
|
28,
|
|
|
|
|
const OwnerFFZ(displayName: 'Owner', name: 'owner'),
|
|
|
|
|
const ImagesFFZ(
|
|
|
|
|
'https://cdn.ffz.net/1x.png',
|
|
|
|
|
'https://cdn.ffz.net/2x.png',
|
|
|
|
|
'https://cdn.ffz.net/4x.png',
|
|
|
|
|
),
|
|
|
|
|
null, // No animation
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.fromFFZ(ffzEmote, EmoteType.ffzChannel);
|
|
|
|
|
|
|
|
|
|
expect(emote.url, 'https://cdn.ffz.net/4x.png');
|
|
|
|
|
expect(emote.name, 'TestFFZ');
|
|
|
|
|
expect(emote.type, EmoteType.ffzChannel);
|
|
|
|
|
expect(emote.width, 28);
|
|
|
|
|
expect(emote.height, 28);
|
|
|
|
|
expect(emote.ownerDisplayName, 'Owner');
|
|
|
|
|
expect(emote.ownerUsername, 'owner');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('prefers animated URL when available', () {
|
|
|
|
|
final ffzEmote = EmoteFFZ(
|
|
|
|
|
'AnimatedFFZ',
|
|
|
|
|
32,
|
|
|
|
|
32,
|
|
|
|
|
const OwnerFFZ(displayName: 'AnimOwner', name: 'animowner'),
|
|
|
|
|
const ImagesFFZ(
|
|
|
|
|
'https://cdn.ffz.net/static/1x.png',
|
|
|
|
|
'https://cdn.ffz.net/static/2x.png',
|
|
|
|
|
'https://cdn.ffz.net/static/4x.png',
|
|
|
|
|
),
|
|
|
|
|
const ImagesFFZ(
|
|
|
|
|
'https://cdn.ffz.net/anim/1x.gif',
|
|
|
|
|
'https://cdn.ffz.net/anim/2x.gif',
|
|
|
|
|
'https://cdn.ffz.net/anim/4x.gif',
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.fromFFZ(ffzEmote, EmoteType.ffzGlobal);
|
|
|
|
|
|
|
|
|
|
expect(emote.url, 'https://cdn.ffz.net/anim/4x.gif');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('falls back to 2x then 1x when 4x not available', () {
|
|
|
|
|
final ffzEmote = EmoteFFZ(
|
|
|
|
|
'NoFourX',
|
|
|
|
|
20,
|
|
|
|
|
20,
|
|
|
|
|
const OwnerFFZ(displayName: 'Owner', name: 'owner'),
|
|
|
|
|
const ImagesFFZ(
|
|
|
|
|
'https://cdn.ffz.net/1x.png',
|
|
|
|
|
'https://cdn.ffz.net/2x.png',
|
|
|
|
|
null, // No 4x
|
|
|
|
|
),
|
|
|
|
|
null,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.fromFFZ(ffzEmote, EmoteType.ffzChannel);
|
|
|
|
|
|
|
|
|
|
expect(emote.url, 'https://cdn.ffz.net/2x.png');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('falls back to 1x when only 1x available', () {
|
|
|
|
|
final ffzEmote = EmoteFFZ(
|
|
|
|
|
'OnlyOneX',
|
|
|
|
|
18,
|
|
|
|
|
18,
|
|
|
|
|
const OwnerFFZ(displayName: 'Owner', name: 'owner'),
|
|
|
|
|
const ImagesFFZ(
|
|
|
|
|
'https://cdn.ffz.net/1x.png',
|
|
|
|
|
null, // No 2x
|
|
|
|
|
null, // No 4x
|
|
|
|
|
),
|
|
|
|
|
null,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.fromFFZ(ffzEmote, EmoteType.ffzChannel);
|
|
|
|
|
|
|
|
|
|
expect(emote.url, 'https://cdn.ffz.net/1x.png');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('prefers animated fallback chain over static', () {
|
|
|
|
|
final ffzEmote = EmoteFFZ(
|
|
|
|
|
'AnimFallback',
|
|
|
|
|
24,
|
|
|
|
|
24,
|
|
|
|
|
const OwnerFFZ(displayName: 'Owner', name: 'owner'),
|
|
|
|
|
const ImagesFFZ(
|
|
|
|
|
'https://cdn.ffz.net/static/1x.png',
|
|
|
|
|
'https://cdn.ffz.net/static/2x.png',
|
|
|
|
|
'https://cdn.ffz.net/static/4x.png',
|
|
|
|
|
),
|
|
|
|
|
const ImagesFFZ(
|
|
|
|
|
'https://cdn.ffz.net/anim/1x.gif',
|
|
|
|
|
'https://cdn.ffz.net/anim/2x.gif',
|
|
|
|
|
null, // No animated 4x
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.fromFFZ(ffzEmote, EmoteType.ffzGlobal);
|
|
|
|
|
|
|
|
|
|
// Should use animated 2x since animated 4x is not available
|
|
|
|
|
expect(emote.url, 'https://cdn.ffz.net/anim/2x.gif');
|
|
|
|
|
});
|
2026-02-07 00:51:22 -08:00
|
|
|
|
|
|
|
|
test('animated with only 1x falls back to animated 1x', () {
|
|
|
|
|
final ffzEmote = EmoteFFZ(
|
|
|
|
|
'AnimOnly1x',
|
|
|
|
|
24,
|
|
|
|
|
24,
|
|
|
|
|
const OwnerFFZ(displayName: 'Owner', name: 'owner'),
|
|
|
|
|
const ImagesFFZ(
|
|
|
|
|
'https://cdn.ffz.net/static/1x.png',
|
|
|
|
|
'https://cdn.ffz.net/static/2x.png',
|
|
|
|
|
'https://cdn.ffz.net/static/4x.png',
|
|
|
|
|
),
|
|
|
|
|
const ImagesFFZ(
|
|
|
|
|
'https://cdn.ffz.net/anim/1x.gif',
|
|
|
|
|
null, // No animated 2x
|
|
|
|
|
null, // No animated 4x
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.fromFFZ(ffzEmote, EmoteType.ffzGlobal);
|
|
|
|
|
|
|
|
|
|
expect(emote.url, 'https://cdn.ffz.net/anim/1x.gif');
|
|
|
|
|
});
|
v5 (#463)
* migrate to dio
* ignore folders
* simplify twitch api headers handling
* clean up main
* simplify logs
* optimize profile picture fetching
fixes refetches on tab switch
* update claude md
* refactor irc.dart
* update copilot instructions with essential commands and project structure details
* implement message sending state management and UI updates
* refactor notification handling and add copy-paste functionality in chat
* refactor AlertMessage to support vertical layout and optional padding
* refactor error messages for consistency and clarity across various components
* refactor chat layout to use draggable divider and improve chat width settings
* refactor Uptime widget to use SharedTimerService for synchronized updates
* refactor search results components to handle null future states gracefully
* refactor loading indicators to use skeleton loaders for improved user experience
* refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments
* refactor: replace manual blur effects with BlurredContainer for consistency and reusability
* refactor: enhance JavaScript execution and error handling in WebView components
* refactor: replace app bar with blurred container for improved UI consistency across screens
* refactor: streamline video chat layout and enhance PiP drag gesture functionality
* revert some app bar changes
* refactor: implement Picture-in-Picture drag functionality in VideoChat
* refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context
* fix large thubmnail width
* chore: update Gradle and Kotlin plugin versions for improved compatibility
* changes from v4.10.0 branch
* feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens
* refactor: update SectionHeader styling and improve theme management
* feat: add pinned section to StreamsList and enhance skeleton loader padding
* feat: add repository guidelines for project structure, coding style, testing, and security
* feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme
* feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior
* feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations
* refactor: improve code formatting and readability across multiple files
* feat: implement picture-in-picture mode toggle and state management for video playback
* feat: reset PiP mode state when pausing video playback
* feat: add custom app bar with profile picture and stream info for video chat
* feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders
* feat: update blur configuration for adaptive alpha based on theme
* fix: adjust default font size in SectionHeader widget
* feat: enhance PiP mode with drag overlay instruction and UI improvements
* fix: improve badge rendering with consistent margin and border for current channel
* refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability
* fix: reduce background transparency in Uptime widget for better visibility
* feat: enhance photo view dialog with full resolution toggle and blurred background
* fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity
* fix: adjust border width in theme to improve consistency
* feat: add forceDarkMode option to BlurredContainer for improved theme adaptability
* feat: implement offline followed channels feature with UI integration and settings option
* fix: increase font size and weight for offline status text for better readability
* feat: remove offline pinned channels feature and update related UI components
* feat: optimize offline channels loading behavior based on expansion state
* fix: improve clarity and consistency in repository guidelines formatting
* feat: update full resolution URL handling and button visibility logic
* feat: replace app bar with blurred version in chat-only mode and add animated scroll border
* feat: refactor video chat layout for improved chat and video display in landscape mode
* feat: remove bottom bar visibility setting and adjust chat layout accordingly
* fix: simplify condition for displaying offline channels section in following tab
* feat: enhance reply thread display with indentation and reply icon
* feat: implement showModalBottomSheetWithProperFocus for improved focus handling
* feat: add gradient direction support to BlurredContainer for enhanced visual effects
* feat: enhance NavigationBar and Theme settings for improved visual consistency
* feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects
* chore: update .gitignore to include .cursor file for better environment management
* fix: update PiP drag gesture conditions to include video paused state for better user experience
* refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management
* refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability
* refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies
* refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience
* refactor: adjust titleSpacing in theme and navigation components for improved layout consistency
* refactor: update stream info timer handling and overlay management for improved UI responsiveness
* refactor: enhance stream info timer logic and overlay visibility management for chat-only mode
* refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness
* refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency
* refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency
* refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency
* refactor: adjust chat padding to account for device bottom insets for improved layout consistency
* refactor: update text styles in FrostyThemes for improved visual consistency across UI components
* refactor: update iOS minimum deployment target to 13.0 for improved compatibility
* refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency
* refactor: adjust padding values in StreamsList for improved layout consistency
* refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions
refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations
* refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code
* refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience
* refactor: update hint text and tooltips in chat bottom bar and search for improved clarity
* refactor: simplify notification display logic and enhance chat input behavior for improved user experience
* refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens
* refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency
* refactor: remove monospace font family from chat bottom bar for improved text rendering
* refactor: reduce notification animation duration and change dismiss direction for improved user experience
* refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency
* refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency
* refactor: standardize font sizes and update gradient stops in video components for improved visual consistency
* refactor: update tooltip padding and background color in theme for improved visual consistency
* refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency
* refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility
* refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components
* refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth
* refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior
* fix: correct stream info text color on overlay
* refactor: implement a new color picker dialog with random color generation for enhanced user experience
* refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency
* refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity
* refactor: add isCompact parameter to StreamInfoBar for responsive text sizing
* fix: update tooltip background color to use surface color for better contrast
* feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication
* refactor: disable debug print for IRC messages to reduce log clutter
* feat: implement chat color selection feature with user color management in chat settings
* refactor: replace color adjustment logic with new contrast-aware utility for chat names
* refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog
* refactor: enhance chat details UI by improving time formatting and adding label styling to action cards
* refactor: update chat color terminology to 'Username color' for clarity in UI
* refactor: enhance chat details UI by introducing active chat modes display and improving layout structure
* refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation
* refactor: remove chat notifications positioning setting and adjust notification alignment in video chat
* refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability
* refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling
* refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration
* refactor: adjust margin and padding in StreamCard for improved layout consistency
* chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages
* template
* chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0
* refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling
* format
* feat: enhance Channel model and StreamInfoBar to support offline channel details
* feat: add offline indicator and improve StreamInfoBar layout for better offline channel display
* fix: adjust icon color opacity in StreamInfoBar for improved visibility
* feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction
* docs: update copilot instructions for clarity and additional error handling details
* refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay
* feat: implement shared chat asset fetching and participant management in ChatAssetsStore
* refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay
* refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency
* feat: add showTextShadows property to StreamInfoBar for customizable text shadow display
* refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency
* refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience
* refactor: reduce vertical padding in VideoOverlay for improved layout consistency
* refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification
* refactor: improve text overlay transition in VideoChat for better user experience
* Revert "refactor: improve text overlay transition in VideoChat for better user experience"
This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6.
* refactor: wrap videoOverlay in ColoredBox for improved layout handling
* refactor: optimize animation duration and transition curves in VideoChat for smoother interactions
* refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks
* refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability
* refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI
* refactor: add refresh functionality for assets in ChatDetails with loading indicators
* refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar
* refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application
* refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions
* refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience
* refactor: replace theme and accent color settings with dedicated components for improved modularity and readability
* refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs
* refactor: integrate MobX Observer for reactive state management in settings widgets
* refactor: update theme and dialog components for improved styling and consistency
* refactor: enhance dialog styling with rounded corners and border in theme configuration
* refactor: improve dialog messages for unauthorized access handling
* refactor: update bodyLarge text style in theme configuration to include font weight
* refactor: standardize Divider usage and adjust theme styles for improved consistency
* refactor: adjust Divider properties and theme styles for enhanced visual consistency
* chore: remove GEMINI.md file as it is no longer needed for project documentation
* refactor: enhance token validation and reconnect logic in AuthBase for improved error handling
* format
* refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness
* refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore
* refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness
* update AGENTS.md
* add scrollbar to search
* fix scrolling exception
* update CLAUDE.md
* 5 auth reconnect attemps then log out
* increase reply max lines to 2
* simplify and improve reply formatting
* add prime icon
* better draggable divider
* support draggable divider in fullscreen overlay chat
* add text shadow in fullscreen chat overlay mode
* format
* add landscape checks
* video store optimization attempts
* Dispose WebViewController and remove JavaScript channels properly
* Track and cleanup all MutationObservers to prevent accumulation
* Throttle latency updates to once per 5 seconds (reduces CPU load)
* Add timeout protection and null checks for robustness
* Prevent duplicate event listeners on page reloads
* double tap divider to reset
* Revert "video store optimization attempts"
This reverts commit b1df7b0de473543283211a489dca698d9d241857.
* optimize video store attempt 2
* Revert "double tap divider to reset"
This reverts commit aeb26a433500ec71f822794835e927018ee59e1e.
* optimize latency listener to open the menu and check every 20 secconds
* more optimizations
* hard refresh
* abbreviate latency
* fix lint
* improve hide default overlay
* fix chat no longer reconnecting with chat delay
* refine chat alerts
* fix historical message missing badges and emotes on initial connection
* parallelize
* revert
* add reconnect button inline action
* refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling
* tweak chat details menu
* add scrollbar to release notes, renames for consistency
* fix duplicate message case
* fix chat delay alerts in auto sync mode
* add regex for numeric strings and enhance display name formatting logic
* exterminate borders
* refactor: simplify active chat modes display in chat details screen
* feat: enhance chat input button with delay notification and disable state
* fix: wrap chat in SafeArea to prevent UI overflow issues
* refactor: remove divider line from video chat and update draggable divider visibility logic
* persist overlay in pip mode
* fix: update chat delay handling and notifications in chat bottom bar
* fix: update chat overlay visibility logic to respect fullscreen settings
* tap to show deleted message
* fix: prevent accidental chat scrolling when accessing system UI in landscape mode
* show latency in portrait
* fix: enhance chat delay notifications with dynamic delay time
* docs: update CLAUDE.md for improved environment variable instructions and architecture overview
* fix: improve chat delay countdown management and message handling
* add preliminary release notes
* remove agents.md
* update lockfile
* add initial multi chat feature
* add option to persist multi chat tabs
* add remove confirmation dialog
* improve add chat design
* lazy-load tabs
* create global assets store to dedupe global asset fetching
* improve tab design/styles
* update notes
* use frosty dialog
* update claude md
* tweak
* add ability to reorder tabs
* resolve conflict
* merge cleanup
* format
* update release notes
* add chat delay sync completion tracking to prevent countdown re-appearance
* add tests
* fix
* update release notes
* bump
2026-01-01 22:28:17 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
group('Emote.from7TV', () {
|
|
|
|
|
test('creates emote with WEBP URL (filters AVIF)', () {
|
|
|
|
|
final emote7TV = Emote7TV(
|
|
|
|
|
'7tvid123',
|
|
|
|
|
'TestEmote',
|
|
|
|
|
Emote7TVData(
|
|
|
|
|
'7tvid123',
|
|
|
|
|
'TestEmote',
|
|
|
|
|
0, // No flags
|
|
|
|
|
const Owner7TV(username: 'owner', displayName: 'Owner'),
|
|
|
|
|
Emote7TVHost(
|
|
|
|
|
'//cdn.7tv.app/emote/7tvid123',
|
|
|
|
|
[
|
|
|
|
|
Emote7TVFile('1x.webp', 32, 32, 'WEBP'),
|
|
|
|
|
Emote7TVFile('2x.webp', 64, 64, 'WEBP'),
|
|
|
|
|
Emote7TVFile('3x.webp', 96, 96, 'WEBP'),
|
|
|
|
|
Emote7TVFile('4x.webp', 128, 128, 'WEBP'),
|
|
|
|
|
Emote7TVFile('1x.avif', 32, 32, 'AVIF'),
|
|
|
|
|
Emote7TVFile('2x.avif', 64, 64, 'AVIF'),
|
|
|
|
|
Emote7TVFile('3x.avif', 96, 96, 'AVIF'),
|
|
|
|
|
Emote7TVFile('4x.avif', 128, 128, 'AVIF'),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.from7TV(emote7TV, EmoteType.sevenTVChannel);
|
|
|
|
|
|
|
|
|
|
// Should use WEBP, not AVIF
|
|
|
|
|
expect(emote.url, contains('webp'));
|
|
|
|
|
expect(emote.url, isNot(contains('avif')));
|
|
|
|
|
expect(emote.url, 'https://cdn.7tv.app/emote/7tvid123/4x.webp');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('detects zero-width from flag bit 8 (256)', () {
|
|
|
|
|
final emote7TV = Emote7TV(
|
|
|
|
|
'zw123',
|
|
|
|
|
'ZeroWidth',
|
|
|
|
|
Emote7TVData(
|
|
|
|
|
'zw123',
|
|
|
|
|
'ZeroWidth',
|
|
|
|
|
256, // Bit 8 set = zero-width
|
|
|
|
|
null,
|
|
|
|
|
Emote7TVHost(
|
|
|
|
|
'//cdn.7tv.app/emote/zw123',
|
|
|
|
|
[Emote7TVFile('1x.webp', 32, 32, 'WEBP')],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.from7TV(emote7TV, EmoteType.sevenTVGlobal);
|
|
|
|
|
|
|
|
|
|
expect(emote.zeroWidth, isTrue);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('non-zero-width when flag bit 8 not set', () {
|
|
|
|
|
final emote7TV = Emote7TV(
|
|
|
|
|
'regular123',
|
|
|
|
|
'RegularEmote',
|
|
|
|
|
Emote7TVData(
|
|
|
|
|
'regular123',
|
|
|
|
|
'RegularEmote',
|
|
|
|
|
128, // Different flag, not 256
|
|
|
|
|
null,
|
|
|
|
|
Emote7TVHost(
|
|
|
|
|
'//cdn.7tv.app/emote/regular123',
|
|
|
|
|
[Emote7TVFile('1x.webp', 32, 32, 'WEBP')],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.from7TV(emote7TV, EmoteType.sevenTVChannel);
|
|
|
|
|
|
|
|
|
|
expect(emote.zeroWidth, isFalse);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('sets realName when different from emote name', () {
|
|
|
|
|
final emote7TV = Emote7TV(
|
|
|
|
|
'alias123',
|
|
|
|
|
'AliasName', // The alias used in channel
|
|
|
|
|
Emote7TVData(
|
|
|
|
|
'alias123',
|
|
|
|
|
'OriginalName', // The original name
|
|
|
|
|
0,
|
|
|
|
|
null,
|
|
|
|
|
Emote7TVHost(
|
|
|
|
|
'//cdn.7tv.app/emote/alias123',
|
|
|
|
|
[Emote7TVFile('1x.webp', 32, 32, 'WEBP')],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.from7TV(emote7TV, EmoteType.sevenTVChannel);
|
|
|
|
|
|
|
|
|
|
expect(emote.name, 'AliasName');
|
|
|
|
|
expect(emote.realName, 'OriginalName');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('realName is null when name matches', () {
|
|
|
|
|
final emote7TV = Emote7TV(
|
|
|
|
|
'same123',
|
|
|
|
|
'SameName',
|
|
|
|
|
Emote7TVData(
|
|
|
|
|
'same123',
|
|
|
|
|
'SameName', // Same as emote.name
|
|
|
|
|
0,
|
|
|
|
|
null,
|
|
|
|
|
Emote7TVHost(
|
|
|
|
|
'//cdn.7tv.app/emote/same123',
|
|
|
|
|
[Emote7TVFile('1x.webp', 32, 32, 'WEBP')],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.from7TV(emote7TV, EmoteType.sevenTVGlobal);
|
|
|
|
|
|
|
|
|
|
expect(emote.name, 'SameName');
|
|
|
|
|
expect(emote.realName, isNull);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('extracts owner info when available', () {
|
|
|
|
|
final emote7TV = Emote7TV(
|
|
|
|
|
'owned123',
|
|
|
|
|
'OwnedEmote',
|
|
|
|
|
Emote7TVData(
|
|
|
|
|
'owned123',
|
|
|
|
|
'OwnedEmote',
|
|
|
|
|
0,
|
|
|
|
|
const Owner7TV(username: 'creator', displayName: 'EmoteCreator'),
|
|
|
|
|
Emote7TVHost(
|
|
|
|
|
'//cdn.7tv.app/emote/owned123',
|
|
|
|
|
[Emote7TVFile('1x.webp', 32, 32, 'WEBP')],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.from7TV(emote7TV, EmoteType.sevenTVChannel);
|
|
|
|
|
|
|
|
|
|
expect(emote.ownerUsername, 'creator');
|
|
|
|
|
expect(emote.ownerDisplayName, 'EmoteCreator');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('handles null owner', () {
|
|
|
|
|
final emote7TV = Emote7TV(
|
|
|
|
|
'noowner123',
|
|
|
|
|
'NoOwner',
|
|
|
|
|
Emote7TVData(
|
|
|
|
|
'noowner123',
|
|
|
|
|
'NoOwner',
|
|
|
|
|
0,
|
|
|
|
|
null, // No owner
|
|
|
|
|
Emote7TVHost(
|
|
|
|
|
'//cdn.7tv.app/emote/noowner123',
|
|
|
|
|
[Emote7TVFile('1x.webp', 32, 32, 'WEBP')],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.from7TV(emote7TV, EmoteType.sevenTVGlobal);
|
|
|
|
|
|
|
|
|
|
expect(emote.ownerUsername, isNull);
|
|
|
|
|
expect(emote.ownerDisplayName, isNull);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('uses first file dimensions', () {
|
|
|
|
|
final emote7TV = Emote7TV(
|
|
|
|
|
'dim123',
|
|
|
|
|
'Dimensions',
|
|
|
|
|
Emote7TVData(
|
|
|
|
|
'dim123',
|
|
|
|
|
'Dimensions',
|
|
|
|
|
0,
|
|
|
|
|
null,
|
|
|
|
|
Emote7TVHost(
|
|
|
|
|
'//cdn.7tv.app/emote/dim123',
|
|
|
|
|
[
|
|
|
|
|
Emote7TVFile('1x.webp', 28, 32, 'WEBP'),
|
|
|
|
|
Emote7TVFile('2x.webp', 56, 64, 'WEBP'),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.from7TV(emote7TV, EmoteType.sevenTVChannel);
|
|
|
|
|
|
|
|
|
|
expect(emote.width, 28);
|
|
|
|
|
expect(emote.height, 32);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('handles empty file list', () {
|
|
|
|
|
final emote7TV = Emote7TV(
|
|
|
|
|
'empty123',
|
|
|
|
|
'EmptyFiles',
|
|
|
|
|
Emote7TVData(
|
|
|
|
|
'empty123',
|
|
|
|
|
'EmptyFiles',
|
|
|
|
|
0,
|
|
|
|
|
null,
|
|
|
|
|
Emote7TVHost(
|
|
|
|
|
'//cdn.7tv.app/emote/empty123',
|
|
|
|
|
[], // No files
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.from7TV(emote7TV, EmoteType.sevenTVGlobal);
|
|
|
|
|
|
|
|
|
|
// Should return empty URL when no files
|
|
|
|
|
expect(emote.url, '');
|
|
|
|
|
expect(emote.width, isNull);
|
|
|
|
|
expect(emote.height, isNull);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('filters AVIF-only files and returns empty URL', () {
|
|
|
|
|
final emote7TV = Emote7TV(
|
|
|
|
|
'avifonly123',
|
|
|
|
|
'AvifOnly',
|
|
|
|
|
Emote7TVData(
|
|
|
|
|
'avifonly123',
|
|
|
|
|
'AvifOnly',
|
|
|
|
|
0,
|
|
|
|
|
null,
|
|
|
|
|
Emote7TVHost(
|
|
|
|
|
'//cdn.7tv.app/emote/avifonly123',
|
|
|
|
|
[
|
|
|
|
|
Emote7TVFile('1x.avif', 32, 32, 'AVIF'),
|
|
|
|
|
Emote7TVFile('2x.avif', 64, 64, 'AVIF'),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final emote = Emote.from7TV(emote7TV, EmoteType.sevenTVChannel);
|
|
|
|
|
|
|
|
|
|
// All files are AVIF, so should return empty URL
|
|
|
|
|
expect(emote.url, '');
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
group('EmoteType', () {
|
|
|
|
|
test('toString returns human-readable string', () {
|
|
|
|
|
expect(EmoteType.twitchBits.toString(), 'Twitch bits emote');
|
|
|
|
|
expect(EmoteType.twitchFollower.toString(), 'Twitch follower emote');
|
|
|
|
|
expect(EmoteType.twitchSub.toString(), 'Twitch sub emote');
|
|
|
|
|
expect(EmoteType.twitchGlobal.toString(), 'Twitch global emote');
|
|
|
|
|
expect(EmoteType.twitchUnlocked.toString(), 'Twitch unlocked emote');
|
|
|
|
|
expect(EmoteType.twitchChannel.toString(), 'Twitch channel emote');
|
|
|
|
|
expect(EmoteType.ffzGlobal.toString(), 'FrankerFaceZ global emote');
|
|
|
|
|
expect(EmoteType.ffzChannel.toString(), 'FrankerFaceZ channel emote');
|
|
|
|
|
expect(EmoteType.bttvGlobal.toString(), 'BetterTTV global emote');
|
|
|
|
|
expect(EmoteType.bttvChannel.toString(), 'BetterTTV channel emote');
|
|
|
|
|
expect(EmoteType.bttvShared.toString(), 'BetterTTV shared emote');
|
|
|
|
|
expect(EmoteType.sevenTVGlobal.toString(), '7TV global emote');
|
|
|
|
|
expect(EmoteType.sevenTVChannel.toString(), '7TV channel emote');
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2026-02-07 00:51:22 -08:00
|
|
|
group('EmoteBTTVChannel', () {
|
|
|
|
|
test('combines channel and shared emotes', () {
|
|
|
|
|
final json = {
|
|
|
|
|
'channelEmotes': [
|
|
|
|
|
{'id': 'ch1', 'code': 'ChannelEmote'},
|
|
|
|
|
],
|
|
|
|
|
'sharedEmotes': [
|
|
|
|
|
{'id': 'sh1', 'code': 'SharedEmote1'},
|
|
|
|
|
{'id': 'sh2', 'code': 'SharedEmote2'},
|
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
final result = EmoteBTTVChannel.fromJson(json);
|
|
|
|
|
|
|
|
|
|
expect(result.channelEmotes.length, 1);
|
|
|
|
|
expect(result.channelEmotes.first.code, 'ChannelEmote');
|
|
|
|
|
expect(result.sharedEmotes.length, 2);
|
|
|
|
|
expect(result.sharedEmotes.first.code, 'SharedEmote1');
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
v5 (#463)
* migrate to dio
* ignore folders
* simplify twitch api headers handling
* clean up main
* simplify logs
* optimize profile picture fetching
fixes refetches on tab switch
* update claude md
* refactor irc.dart
* update copilot instructions with essential commands and project structure details
* implement message sending state management and UI updates
* refactor notification handling and add copy-paste functionality in chat
* refactor AlertMessage to support vertical layout and optional padding
* refactor error messages for consistency and clarity across various components
* refactor chat layout to use draggable divider and improve chat width settings
* refactor Uptime widget to use SharedTimerService for synchronized updates
* refactor search results components to handle null future states gracefully
* refactor loading indicators to use skeleton loaders for improved user experience
* refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments
* refactor: replace manual blur effects with BlurredContainer for consistency and reusability
* refactor: enhance JavaScript execution and error handling in WebView components
* refactor: replace app bar with blurred container for improved UI consistency across screens
* refactor: streamline video chat layout and enhance PiP drag gesture functionality
* revert some app bar changes
* refactor: implement Picture-in-Picture drag functionality in VideoChat
* refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context
* fix large thubmnail width
* chore: update Gradle and Kotlin plugin versions for improved compatibility
* changes from v4.10.0 branch
* feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens
* refactor: update SectionHeader styling and improve theme management
* feat: add pinned section to StreamsList and enhance skeleton loader padding
* feat: add repository guidelines for project structure, coding style, testing, and security
* feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme
* feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior
* feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations
* refactor: improve code formatting and readability across multiple files
* feat: implement picture-in-picture mode toggle and state management for video playback
* feat: reset PiP mode state when pausing video playback
* feat: add custom app bar with profile picture and stream info for video chat
* feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders
* feat: update blur configuration for adaptive alpha based on theme
* fix: adjust default font size in SectionHeader widget
* feat: enhance PiP mode with drag overlay instruction and UI improvements
* fix: improve badge rendering with consistent margin and border for current channel
* refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability
* fix: reduce background transparency in Uptime widget for better visibility
* feat: enhance photo view dialog with full resolution toggle and blurred background
* fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity
* fix: adjust border width in theme to improve consistency
* feat: add forceDarkMode option to BlurredContainer for improved theme adaptability
* feat: implement offline followed channels feature with UI integration and settings option
* fix: increase font size and weight for offline status text for better readability
* feat: remove offline pinned channels feature and update related UI components
* feat: optimize offline channels loading behavior based on expansion state
* fix: improve clarity and consistency in repository guidelines formatting
* feat: update full resolution URL handling and button visibility logic
* feat: replace app bar with blurred version in chat-only mode and add animated scroll border
* feat: refactor video chat layout for improved chat and video display in landscape mode
* feat: remove bottom bar visibility setting and adjust chat layout accordingly
* fix: simplify condition for displaying offline channels section in following tab
* feat: enhance reply thread display with indentation and reply icon
* feat: implement showModalBottomSheetWithProperFocus for improved focus handling
* feat: add gradient direction support to BlurredContainer for enhanced visual effects
* feat: enhance NavigationBar and Theme settings for improved visual consistency
* feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects
* chore: update .gitignore to include .cursor file for better environment management
* fix: update PiP drag gesture conditions to include video paused state for better user experience
* refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management
* refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability
* refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies
* refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience
* refactor: adjust titleSpacing in theme and navigation components for improved layout consistency
* refactor: update stream info timer handling and overlay management for improved UI responsiveness
* refactor: enhance stream info timer logic and overlay visibility management for chat-only mode
* refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness
* refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency
* refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency
* refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency
* refactor: adjust chat padding to account for device bottom insets for improved layout consistency
* refactor: update text styles in FrostyThemes for improved visual consistency across UI components
* refactor: update iOS minimum deployment target to 13.0 for improved compatibility
* refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency
* refactor: adjust padding values in StreamsList for improved layout consistency
* refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions
refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations
* refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code
* refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience
* refactor: update hint text and tooltips in chat bottom bar and search for improved clarity
* refactor: simplify notification display logic and enhance chat input behavior for improved user experience
* refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens
* refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency
* refactor: remove monospace font family from chat bottom bar for improved text rendering
* refactor: reduce notification animation duration and change dismiss direction for improved user experience
* refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency
* refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency
* refactor: standardize font sizes and update gradient stops in video components for improved visual consistency
* refactor: update tooltip padding and background color in theme for improved visual consistency
* refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency
* refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility
* refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components
* refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth
* refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior
* fix: correct stream info text color on overlay
* refactor: implement a new color picker dialog with random color generation for enhanced user experience
* refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency
* refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity
* refactor: add isCompact parameter to StreamInfoBar for responsive text sizing
* fix: update tooltip background color to use surface color for better contrast
* feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication
* refactor: disable debug print for IRC messages to reduce log clutter
* feat: implement chat color selection feature with user color management in chat settings
* refactor: replace color adjustment logic with new contrast-aware utility for chat names
* refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog
* refactor: enhance chat details UI by improving time formatting and adding label styling to action cards
* refactor: update chat color terminology to 'Username color' for clarity in UI
* refactor: enhance chat details UI by introducing active chat modes display and improving layout structure
* refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation
* refactor: remove chat notifications positioning setting and adjust notification alignment in video chat
* refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability
* refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling
* refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration
* refactor: adjust margin and padding in StreamCard for improved layout consistency
* chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages
* template
* chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0
* refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling
* format
* feat: enhance Channel model and StreamInfoBar to support offline channel details
* feat: add offline indicator and improve StreamInfoBar layout for better offline channel display
* fix: adjust icon color opacity in StreamInfoBar for improved visibility
* feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction
* docs: update copilot instructions for clarity and additional error handling details
* refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay
* feat: implement shared chat asset fetching and participant management in ChatAssetsStore
* refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay
* refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency
* feat: add showTextShadows property to StreamInfoBar for customizable text shadow display
* refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency
* refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience
* refactor: reduce vertical padding in VideoOverlay for improved layout consistency
* refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification
* refactor: improve text overlay transition in VideoChat for better user experience
* Revert "refactor: improve text overlay transition in VideoChat for better user experience"
This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6.
* refactor: wrap videoOverlay in ColoredBox for improved layout handling
* refactor: optimize animation duration and transition curves in VideoChat for smoother interactions
* refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks
* refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability
* refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI
* refactor: add refresh functionality for assets in ChatDetails with loading indicators
* refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar
* refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application
* refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions
* refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience
* refactor: replace theme and accent color settings with dedicated components for improved modularity and readability
* refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs
* refactor: integrate MobX Observer for reactive state management in settings widgets
* refactor: update theme and dialog components for improved styling and consistency
* refactor: enhance dialog styling with rounded corners and border in theme configuration
* refactor: improve dialog messages for unauthorized access handling
* refactor: update bodyLarge text style in theme configuration to include font weight
* refactor: standardize Divider usage and adjust theme styles for improved consistency
* refactor: adjust Divider properties and theme styles for enhanced visual consistency
* chore: remove GEMINI.md file as it is no longer needed for project documentation
* refactor: enhance token validation and reconnect logic in AuthBase for improved error handling
* format
* refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness
* refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore
* refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness
* update AGENTS.md
* add scrollbar to search
* fix scrolling exception
* update CLAUDE.md
* 5 auth reconnect attemps then log out
* increase reply max lines to 2
* simplify and improve reply formatting
* add prime icon
* better draggable divider
* support draggable divider in fullscreen overlay chat
* add text shadow in fullscreen chat overlay mode
* format
* add landscape checks
* video store optimization attempts
* Dispose WebViewController and remove JavaScript channels properly
* Track and cleanup all MutationObservers to prevent accumulation
* Throttle latency updates to once per 5 seconds (reduces CPU load)
* Add timeout protection and null checks for robustness
* Prevent duplicate event listeners on page reloads
* double tap divider to reset
* Revert "video store optimization attempts"
This reverts commit b1df7b0de473543283211a489dca698d9d241857.
* optimize video store attempt 2
* Revert "double tap divider to reset"
This reverts commit aeb26a433500ec71f822794835e927018ee59e1e.
* optimize latency listener to open the menu and check every 20 secconds
* more optimizations
* hard refresh
* abbreviate latency
* fix lint
* improve hide default overlay
* fix chat no longer reconnecting with chat delay
* refine chat alerts
* fix historical message missing badges and emotes on initial connection
* parallelize
* revert
* add reconnect button inline action
* refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling
* tweak chat details menu
* add scrollbar to release notes, renames for consistency
* fix duplicate message case
* fix chat delay alerts in auto sync mode
* add regex for numeric strings and enhance display name formatting logic
* exterminate borders
* refactor: simplify active chat modes display in chat details screen
* feat: enhance chat input button with delay notification and disable state
* fix: wrap chat in SafeArea to prevent UI overflow issues
* refactor: remove divider line from video chat and update draggable divider visibility logic
* persist overlay in pip mode
* fix: update chat delay handling and notifications in chat bottom bar
* fix: update chat overlay visibility logic to respect fullscreen settings
* tap to show deleted message
* fix: prevent accidental chat scrolling when accessing system UI in landscape mode
* show latency in portrait
* fix: enhance chat delay notifications with dynamic delay time
* docs: update CLAUDE.md for improved environment variable instructions and architecture overview
* fix: improve chat delay countdown management and message handling
* add preliminary release notes
* remove agents.md
* update lockfile
* add initial multi chat feature
* add option to persist multi chat tabs
* add remove confirmation dialog
* improve add chat design
* lazy-load tabs
* create global assets store to dedupe global asset fetching
* improve tab design/styles
* update notes
* use frosty dialog
* update claude md
* tweak
* add ability to reorder tabs
* resolve conflict
* merge cleanup
* format
* update release notes
* add chat delay sync completion tracking to prevent countdown re-appearance
* add tests
* fix
* update release notes
* bump
2026-01-01 22:28:17 -05:00
|
|
|
group('Emote JSON serialization', () {
|
|
|
|
|
test('roundtrip serialization works', () {
|
|
|
|
|
const original = Emote(
|
|
|
|
|
name: 'TestEmote',
|
|
|
|
|
realName: 'RealName',
|
|
|
|
|
width: 32,
|
|
|
|
|
height: 32,
|
|
|
|
|
zeroWidth: true,
|
|
|
|
|
url: 'https://example.com/emote.png',
|
|
|
|
|
type: EmoteType.sevenTVChannel,
|
|
|
|
|
ownerDisplayName: 'Owner',
|
|
|
|
|
ownerUsername: 'owner',
|
|
|
|
|
ownerId: '12345',
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final json = original.toJson();
|
|
|
|
|
final restored = Emote.fromJson(json);
|
|
|
|
|
|
|
|
|
|
expect(restored.name, original.name);
|
|
|
|
|
expect(restored.realName, original.realName);
|
|
|
|
|
expect(restored.width, original.width);
|
|
|
|
|
expect(restored.height, original.height);
|
|
|
|
|
expect(restored.zeroWidth, original.zeroWidth);
|
|
|
|
|
expect(restored.url, original.url);
|
|
|
|
|
expect(restored.type, original.type);
|
|
|
|
|
expect(restored.ownerDisplayName, original.ownerDisplayName);
|
|
|
|
|
expect(restored.ownerUsername, original.ownerUsername);
|
|
|
|
|
expect(restored.ownerId, original.ownerId);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|