199 lines
6.8 KiB
V
199 lines
6.8 KiB
V
import os
|
|
import metadata
|
|
|
|
// Проверка чтения id3v23
|
|
fn test_idv3v23() {
|
|
mut audio := os.open("./data/test_id3v23.mp3") or { panic(err) }
|
|
defer {
|
|
audio.close()
|
|
}
|
|
mut wav := metadata.Audio{}
|
|
wav.detect_tags(mut audio)
|
|
|
|
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)
|
|
|
|
assert wav.id3v23.tit2.data == "Test Title"
|
|
assert wav.id3v23.tpe1.data == "Test Author"
|
|
assert wav.id3v23.tpe2.data == "Test Narator"
|
|
assert wav.id3v23.talb.data == "Test Album"
|
|
assert wav.id3v23.tyer.data == "2026"
|
|
assert wav.id3v23.trck.data == "6/7"
|
|
assert wav.id3v23.tcon.data == "Rock"
|
|
assert wav.id3v23.tcop.data == "Test"
|
|
assert wav.id3v23.txxx.data == "comment"
|
|
|
|
id3v1 := wav.id3v23.to_v1()
|
|
|
|
assert id3v1.genre == "Rock"
|
|
assert id3v1.title == "Test Title"
|
|
assert id3v1.artist == "Test Narator"
|
|
assert id3v1.album == "Test Album"
|
|
assert id3v1.track == "6"
|
|
assert id3v1.year == "2026"
|
|
assert id3v1.comment == "comment"
|
|
}
|
|
|
|
fn test_writeidv3v23() {
|
|
mut audio := os.open("./data/test_id3v23.mp3") or { panic(err) }
|
|
defer {
|
|
audio.close()
|
|
}
|
|
mut wav := metadata.Audio{}
|
|
wav.detect_tags(mut audio)
|
|
|
|
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)
|
|
|
|
// Изменение значений тэга
|
|
wav.id3v23.tit2.set_data("Test Title2")
|
|
wav.id3v23.tpe1.set_data("Test Author2")
|
|
wav.id3v23.tpe2.set_data("Test Narator2")
|
|
wav.id3v23.talb.set_data("Test Album2")
|
|
wav.id3v23.tyer.set_data("2027")
|
|
wav.id3v23.trck.set_data("7/7")
|
|
wav.id3v23.tcon.set_data("Rock2")
|
|
wav.id3v23.tcop.set_data("Test2")
|
|
wav.id3v23.txxx.set_data("comment2")
|
|
|
|
wav.id3v23.encode_embed_tags()
|
|
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) }
|
|
|
|
// Чтение файла и проверка записи
|
|
mut temp_audio := os.open("./data/temp_v23.mp3") or { panic(err) }
|
|
defer {
|
|
temp_audio.close()
|
|
}
|
|
|
|
mut temp_wav := metadata.Audio{}
|
|
temp_wav.detect_tags(mut temp_audio)
|
|
|
|
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)
|
|
|
|
assert temp_wav.id3v23.tit2.data == "Test Title2"
|
|
assert temp_wav.id3v23.tpe1.data == "Test Author2"
|
|
assert temp_wav.id3v23.tpe2.data == "Test Narator2"
|
|
assert temp_wav.id3v23.talb.data == "Test Album2"
|
|
assert temp_wav.id3v23.tyer.data == "2027"
|
|
assert temp_wav.id3v23.trck.data == "7/7"
|
|
assert temp_wav.id3v23.tcon.data == "Rock2"
|
|
assert temp_wav.id3v23.tcop.data == "Test2"
|
|
assert temp_wav.id3v23.txxx.data == "comment2"
|
|
|
|
// Проверяется прочитанный с диска тэг, а не тот, что в памяти
|
|
id3v1 := temp_wav.id3v23.to_v1()
|
|
|
|
assert id3v1.genre == "Rock2"
|
|
assert id3v1.title == "Test Title2"
|
|
assert id3v1.artist == "Test Narator2"
|
|
assert id3v1.album == "Test Album2"
|
|
assert id3v1.track == "7"
|
|
assert id3v1.year == "2027"
|
|
assert id3v1.comment == "comment2"
|
|
}
|
|
|
|
// Проверка чтения id3v24
|
|
fn test_idv3v24() {
|
|
mut audio := os.open("./data/test_id3v24.mp3") or { panic(err) }
|
|
defer {
|
|
audio.close()
|
|
}
|
|
mut wav := metadata.Audio{}
|
|
wav.detect_tags(mut audio)
|
|
|
|
assert wav.id3v1.embedded == false, 'Тег показан true, а должен быть false'
|
|
assert wav.id3v23.embedded == false, 'Тег показан true, а должен быть false'
|
|
assert wav.id3v24.embedded == true, 'Тег показан false, а должен быть true'
|
|
wav.id3v24.get_full_size(mut audio)
|
|
wav.id3v24.fill_tags(mut audio)
|
|
|
|
assert wav.id3v24.tit2.data == "Test Title"
|
|
assert wav.id3v24.tpe1.data == "Test Author"
|
|
assert wav.id3v24.tpe2.data == "Test Narator"
|
|
assert wav.id3v24.talb.data == "Test Album"
|
|
assert wav.id3v24.tdrc.data == "2026"
|
|
assert wav.id3v24.trck.data == "6/7"
|
|
assert wav.id3v24.tcon.data == "Rock"
|
|
assert wav.id3v24.tcop.data == "Test"
|
|
assert wav.id3v24.txxx.data == "comment"
|
|
|
|
id3v1 := wav.id3v24.to_v1()
|
|
|
|
assert id3v1.genre == "Rock"
|
|
assert id3v1.title == "Test Title"
|
|
assert id3v1.artist == "Test Narator"
|
|
assert id3v1.album == "Test Album"
|
|
assert id3v1.track == "6"
|
|
assert id3v1.year == "2026"
|
|
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, 'Ошибка не возвращена'
|
|
}
|