fix(plex): repair alpha jump bar
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:plezy/media/library_first_character.dart';
|
||||
import 'package:plezy/screens/libraries/alpha_jump_bar.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets('Enter jumps to the highlighted letter', (tester) async {
|
||||
final focusNode = FocusNode(debugLabel: 'test_alpha_jump_bar');
|
||||
addTearDown(focusNode.dispose);
|
||||
|
||||
int? jumpedTo;
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: Scaffold(
|
||||
body: SizedBox(
|
||||
height: 300,
|
||||
child: AlphaJumpBar(
|
||||
firstCharacters: const [
|
||||
LibraryFirstCharacter(key: 'A', title: 'A', size: 3),
|
||||
LibraryFirstCharacter(key: 'B', title: 'B', size: 4),
|
||||
LibraryFirstCharacter(key: 'C', title: 'C', size: 2),
|
||||
],
|
||||
currentLetter: 'B',
|
||||
focusNode: focusNode,
|
||||
onJump: (index) => jumpedTo = index,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
focusNode.requestFocus();
|
||||
await tester.pump();
|
||||
await tester.sendKeyEvent(LogicalKeyboardKey.enter);
|
||||
|
||||
expect(jumpedTo, 3);
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:plezy/screens/libraries/library_alpha_scroll_metrics.dart';
|
||||
|
||||
void main() {
|
||||
test('maps scroll offsets to item indices by row and column count', () {
|
||||
const metrics = LibraryAlphaScrollMetrics(columnCount: 4, rowHeight: 100, itemWidth: 150, itemHeight: 90);
|
||||
|
||||
expect(metrics.itemIndexFromScrollOffset(0, contentStartOffset: 50, totalSize: 40), 0);
|
||||
expect(metrics.itemIndexFromScrollOffset(149, contentStartOffset: 50, totalSize: 40), 0);
|
||||
expect(metrics.itemIndexFromScrollOffset(150, contentStartOffset: 50, totalSize: 40), 4);
|
||||
expect(metrics.itemIndexFromScrollOffset(1050, contentStartOffset: 50, totalSize: 40), 39);
|
||||
});
|
||||
|
||||
test('maps item indices back to scroll offsets', () {
|
||||
const metrics = LibraryAlphaScrollMetrics(columnCount: 4, rowHeight: 100, itemWidth: 150, itemHeight: 90);
|
||||
|
||||
expect(metrics.scrollOffsetForItemIndex(0, contentStartOffset: 50), 50);
|
||||
expect(metrics.scrollOffsetForItemIndex(3, contentStartOffset: 50), 50);
|
||||
expect(metrics.scrollOffsetForItemIndex(4, contentStartOffset: 50), 150);
|
||||
expect(metrics.scrollOffsetForItemIndex(9, contentStartOffset: 50), 250);
|
||||
});
|
||||
|
||||
test('counts visible items using one extra trailing row', () {
|
||||
const metrics = LibraryAlphaScrollMetrics(columnCount: 3, rowHeight: 100, itemWidth: 150, itemHeight: 90);
|
||||
|
||||
expect(metrics.visibleItemCount(250), 12);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user