*исправление ошибок: двой перезаписи, исправление записи с BOM, добавлена проверка в insert_tags_into_audio

This commit is contained in:
K1ndWha1e committed 2026-10-07 23:24:01 +03:00
1 parent ffa8d80875
commit 078e68efa8
5 files changed
+181 -55

No files matched your search

+67 -10
View File
@@ -10,8 +10,8 @@ fn test_idv3v23() {
mut wav := metadata.Audio{}
wav.detect_tags(mut audio)
assert wav.id3v1.embedded == false, 'Тег показан false, а должен быть true'
assert wav.id3v23.embedded == true, 'Тег показан true, а должен быть false'
assert wav.id3v1.embedded == false, 'Тег показан true, а должен быть false'
assert wav.id3v23.embedded == true, 'Тег показан false, а должен быть true'
assert wav.id3v24.embedded == false, 'Тег показан true, а должен быть false'
wav.id3v23.get_full_size(mut audio)
wav.id3v23.fill_tags(mut audio)
@@ -45,8 +45,8 @@ fn test_writeidv3v23() {
mut wav := metadata.Audio{}
wav.detect_tags(mut audio)
assert wav.id3v1.embedded == false, 'Тег показан false, а должен быть true'
assert wav.id3v23.embedded == true, 'Тег показан true, а должен быть false'
assert wav.id3v1.embedded == false, 'Тег показан true, а должен быть false'
assert wav.id3v23.embedded == true, 'Тег показан false, а должен быть true'
assert wav.id3v24.embedded == false, 'Тег показан true, а должен быть false'
wav.id3v23.get_full_size(mut audio)
wav.id3v23.fill_tags(mut audio)
@@ -63,7 +63,7 @@ fn test_writeidv3v23() {
wav.id3v23.txxx.set_data("comment2")
wav.id3v23.encode_embed_tags()
wav.id3v23.insert_tags_into_audio(mut audio)
wav.id3v23.insert_tags_into_audio(mut audio) or { panic(err) }
os.write_bytes("./data/temp_v23.mp3", wav.id3v23.encoded_header) or { panic(err) }
@@ -76,8 +76,8 @@ fn test_writeidv3v23() {
mut temp_wav := metadata.Audio{}
temp_wav.detect_tags(mut temp_audio)
assert temp_wav.id3v1.embedded == false, 'Тег показан false, а должен быть true'
assert temp_wav.id3v23.embedded == true, 'Тег показан true, а должен быть false'
assert temp_wav.id3v1.embedded == false, 'Тег показан true, а должен быть false'
assert temp_wav.id3v23.embedded == true, 'Тег показан false, а должен быть true'
assert temp_wav.id3v24.embedded == false, 'Тег показан true, а должен быть false'
temp_wav.id3v23.get_full_size(mut temp_audio)
temp_wav.id3v23.fill_tags(mut temp_audio)
@@ -92,7 +92,8 @@ fn test_writeidv3v23() {
assert temp_wav.id3v23.tcop.data == "Test2"
assert temp_wav.id3v23.txxx.data == "comment2"
id3v1 := wav.id3v23.to_v1()
// Проверяется прочитанный с диска тэг, а не тот, что в памяти
id3v1 := temp_wav.id3v23.to_v1()
assert id3v1.genre == "Rock2"
assert id3v1.title == "Test Title2"
@@ -112,9 +113,9 @@ fn test_idv3v24() {
mut wav := metadata.Audio{}
wav.detect_tags(mut audio)
assert wav.id3v1.embedded == false, 'Тег показан false, а должен быть true'
assert wav.id3v1.embedded == false, 'Тег показан true, а должен быть false'
assert wav.id3v23.embedded == false, 'Тег показан true, а должен быть false'
assert wav.id3v24.embedded == true, 'Тег показан true, а должен быть false'
assert wav.id3v24.embedded == true, 'Тег показан false, а должен быть true'
wav.id3v24.get_full_size(mut audio)
wav.id3v24.fill_tags(mut audio)
@@ -139,3 +140,59 @@ fn test_idv3v24() {
assert id3v1.comment == "comment"
}
// Кириллица во фрейме с кодировкой ISO-8859-1 не должна превращаться в '?'
fn test_write_unicode_into_latin1_frame() {
mut audio := os.open("./data/test_id3v23.mp3") or { panic(err) }
defer {
audio.close()
}
mut wav := metadata.Audio{}
wav.detect_tags(mut audio)
wav.id3v23.get_full_size(mut audio)
wav.id3v23.fill_tags(mut audio)
old_size := int(wav.id3v23.size)
wav.id3v23.tit2.set_data("Глава 2")
wav.id3v23.encode_embed_tags()
wav.id3v23.insert_tags_into_audio(mut audio) or { panic(err) }
temp_path := os.join_path(os.temp_dir(), "id3_editor_unicode_test.mp3")
os.write_bytes(temp_path, wav.id3v23.encoded_header) or { panic(err) }
defer {
os.rm(temp_path) or {}
}
mut temp_audio := os.open(temp_path) or { panic(err) }
defer {
temp_audio.close()
}
mut temp_wav := metadata.Audio{}
temp_wav.detect_tags(mut temp_audio)
temp_wav.id3v23.get_full_size(mut temp_audio)
temp_wav.id3v23.fill_tags(mut temp_audio)
assert temp_wav.id3v23.tit2.data == "Глава 2"
// Нетронутые фреймы и аудио сохраняются без изменений
assert temp_wav.id3v23.tpe1.data == "Test Author"
assert temp_wav.id3v23.others.len == 1
original := os.read_bytes("./data/test_id3v23.mp3") or { panic(err) }
written := os.read_bytes(temp_path) or { panic(err) }
assert written[int(temp_wav.id3v23.size) + 10..] == original[old_size + 10..]
}
// Вставка в файл без тэга ID3v2 возвращает ошибку, а не падает
fn test_insert_without_id3v2() {
mut audio := os.open("./data/test_id3v1.mp3") or { panic(err) }
defer {
audio.close()
}
mut wav := metadata.Audio{}
wav.id3v23.encode_embed_tags()
wav.id3v23.insert_tags_into_audio(mut audio) or {
assert err.msg() == "в файле нет тэга ID3v2"
return
}
assert false, 'Ошибка не возвращена'
}