Files
SpotiFLAC-Mobile/test/metadata_editor_controller_test.dart
T

84 lines
3.0 KiB
Dart

import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:spotiflac_android/controllers/metadata_editor_controller.dart';
void main() {
test('save snapshots preserve empty tags and explicit track/disc totals', () {
final editor = MetadataEditorController({
'title': 'Song',
'artist': 'Artist One; Artist Two',
'total_tracks': '12',
'total_discs': '2',
'album_type': ' Compilation ',
'explicit': 'true',
});
final tags = editor.saveMetadata(artistTagMode: 'all');
editor['title']!.text = 'Changed';
editor.dispose();
expect(tags['title'], 'Song');
expect(tags['artist'], 'Artist One; Artist Two');
expect(tags['lyrics'], '');
expect(tags['track_total'], '12');
expect(tags['disc_total'], '2');
expect(tags['compilation'], '1');
expect(tags['explicit'], '1');
expect(tags['artist_tag_mode'], 'all');
expect(tags.containsKey('total_tracks'), isFalse);
expect(tags.containsKey('total_discs'), isFalse);
});
test('edits and disposal invalidate asynchronous lookup results', () {
final editor = MetadataEditorController({'title': 'Song'});
final first = editor.beginLookup();
expect(editor.isCurrent(first), isTrue);
editor['title']!.text = 'Other Song';
expect(editor.isCurrent(first), isFalse);
final second = editor.beginLookup();
editor.dispose();
expect(editor.isCurrent(second), isFalse);
});
test('caret and composition changes keep pending lookup results current', () {
final editor = MetadataEditorController({'title': 'Song'});
addTearDown(editor.dispose);
final generation = editor.beginLookup();
final title = editor['title']!;
title.selection = const TextSelection.collapsed(offset: 2);
expect(editor.isCurrent(generation), isTrue);
title.value = title.value.copyWith(
composing: const TextRange(start: 0, end: 4),
);
expect(editor.isCurrent(generation), isTrue);
title.clearComposing();
expect(editor.isCurrent(generation), isTrue);
title.text = 'Other Song';
expect(editor.isCurrent(generation), isFalse);
});
test(
'empty-field selection and apply respect manual tags and explicit false',
() {
final editor = MetadataEditorController({'title': 'Manual Title'});
addTearDown(editor.dispose);
editor.selectEmptyFields(hasCover: true);
expect(editor.autoFillFields, isNot(contains('title')));
expect(editor.autoFillFields, isNot(contains('cover')));
expect(editor.autoFillFields, isNot(contains('explicit')));
editor.autoFillFields.add('explicit');
editor.explicit = true;
final filled = editor.apply({
'title': 'Online Title',
'artist': 'Online Artist',
'explicit': '0',
});
expect(filled, 2);
expect(editor['title']!.text, 'Manual Title');
expect(editor['artist']!.text, 'Online Artist');
expect(editor.explicit, isFalse);
editor.selectEmptyFields(hasCover: false);
expect(editor.autoFillFields, contains('cover'));
},
);
}