Files
gart/code/tests/test_writer_adjustment.py
T
João HenriqueandClaude Sonnet 5 d13f643ebc chore(fase0): higiene do repositório + corrige gitignore que escondia fcpxml/models/
Fase 0 do roteiro de reestruturação (Engine/docs/10_MAPA_REESTRUTURACAO.md):
move code/WHISPERX (2,6 GB de backups órfãos, sem uso ativo, sem
.gitmodules) para ~/Archives/G-ART-WHISPERX-backup fora do workspace git;
traz admin/ para o gate de lint de run_after_fix.sh; corrige
fcpxml/writer/adjustment.py, que gerava um wrapper <adjustment> inexistente
no DTD 1.13 (filtros agora vão direto no <clip>, na ordem exigida), com
teste de regressão novo.

Achado à parte: .gitignore tinha uma regra solta "models/" (pensada só
para o cache do Whisper em code/models/) que também escondia do git todo o
pacote fcpxml/models/ — nunca commitado, sem proteção nenhuma. Corrigida
para /code/models/, ancorada na raiz.

Docs atualizados no mesmo commit (02_MODULES, 09_MANUTENCAO,
10_MAPA_REESTRUTURACAO, 05_EXPERIENCIAS #34 e #36), conforme a regra do
CLAUDE.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 08:28:44 -04:00

61 lines
2.1 KiB
Python

"""ClipDeAjuste deve gerar filtros como filhos diretos do <clip>.
O DTD 1.13 não define nenhum elemento <adjustment> — filter-video/
filter-audio vêm direto no <clip>, depois de audio-channel-source* e antes
de metadata?. Ver Engine/docs/09_MANUTENCAO.md §2.6 e 05_EXPERIENCIAS.md.
"""
import xml.etree.ElementTree as ET
from fcpxml.models.timeline import EfeitoAjuste, ParametroEfeito
from fcpxml.models.timing import TimeValue
from fcpxml.writer.adjustment import ClipDeAjuste
def test_criar_nao_usa_wrapper_adjustment():
resources = ET.Element("resources")
efeito = EfeitoAjuste(
nome="Color Curves",
uid="FFFF0000-0000-0000-0000-000000000000",
tipo="video",
parametros=[ParametroEfeito(nome="Amount", valor="0.5", chave=".../9999")],
)
clip = ClipDeAjuste(
nome="Ajuste de cor", duracao=TimeValue(300, 30), efeitos=[efeito]
).criar(resources)
assert clip.find("adjustment") is None
filtro = clip.find("filter-video")
assert filtro is not None
assert filtro.get("name") == "Color Curves"
assert filtro in list(clip)
def test_filter_video_vem_antes_de_filter_audio():
resources = ET.Element("resources")
efeito_audio = EfeitoAjuste(
nome="Gain", uid="AAAA0000-0000-0000-0000-000000000000", tipo="audio"
)
efeito_video = EfeitoAjuste(
nome="Blur", uid="BBBB0000-0000-0000-0000-000000000000", tipo="video"
)
clip = ClipDeAjuste(
nome="Ajuste misto",
duracao=TimeValue(300, 30),
efeitos=[efeito_audio, efeito_video],
).criar(resources)
tags = [child.tag for child in clip]
assert tags == ["filter-video", "filter-audio"]
def test_criar_registra_recurso_effect_uma_vez_por_uid():
resources = ET.Element("resources")
efeito = EfeitoAjuste(
nome="Color Curves", uid="FFFF0000-0000-0000-0000-000000000000", tipo="video"
)
ClipDeAjuste(nome="A", duracao=TimeValue(300, 30), efeitos=[efeito]).criar(resources)
ClipDeAjuste(nome="B", duracao=TimeValue(300, 30), efeitos=[efeito]).criar(resources)
assert len(resources.findall("effect")) == 1