Testar sem display
A Sonda monta a mesma árvore que o Tk desenharia — e por isso ela não simula nada.
Uma biblioteca de interface que só funciona com display é uma biblioteca sem teste: o runner do CI não tem display. A separação entre a árvore e o desenho é o que resolve isso — e ela é a mesma decisão da Vitrine.
dataforge
adopt Arcane.Janela as J
adopt Arcane.Crucible as Crucible
itens := []
action tela(t):
t.titulo("Lista")
nome := t.entrada("Nome", "")
given t.botao("Adicionar"):
given nome is "":
t.erro("o nome é obrigatório")
otherwise:
itens.append(nome)
t.texto($"{len(itens)} item(ns)")
crucible "a tela":
trial "o nome vazio e recusado":
itens.clear()
s := J.testar(tela)
s.clicar("Adicionar")
expect s.tem("o nome é obrigatório") is yes
trial "adicionar conta":
itens.clear()
s := J.testar(tela)
s.digitar("Nome", "café")
s.clicar("Adicionar")
expect s.tem("1 item(ns)") is yes
Crucible.run()O que a Sonda faz#
| Chamada | O quê |
|---|---|
s.digitar(rotulo, valor) | preenche e reexecuta a tela |
s.clicar(rotulo) | clica e reexecuta — o clique vale para uma execução |
s.escolher(rotulo, valor) | recusa o que não está na lista |
s.marcar(rotulo, yes) | a caixa |
s.texto() | tudo o que a tela mostra |
s.valor(rotulo) | o valor de um campo |
s.campos(), s.botoes() | o que existe na tela |
s.tabelas() | as tabelas, com colunas e linhas |
s.arvore() | a árvore inteira como vault — para instantâneo |
Um rótulo que não existe lista os que existem#
dataforge
adopt Arcane.Janela as J
action tela(t):
t.entrada("Nome")
t.botao("Salvar")
s := J.testar(tela)
monitor:
s.digitar("Nomee", "x")
assert no
handle Error as e:
out e.message
out $" {e.nota}"A árvore é dado#
Guardá-la num instantâneo faz qualquer mudança de tela aparecer no diff do commit — inclusive a que ninguém pretendia:
dataforge
adopt Arcane.Janela as J
action tela(t):
t.titulo("Cadastro")
t.entrada("Nome")
t.botao("Salvar")
s := J.testar(tela)
arvore := s.arvore()
assert arvore["especie"] is "raiz"
assert [f["especie"] cycle f in arvore["filhos"]] is ["titulo", "entrada", "botao"]
out arvore["filhos"][1]O que a Sonda NÃO prova#
- O desenho. Se um componente não tiver ramo no desenho, a Sonda passa e a janela não mostra nada.
- A aparência — fonte, espaçamento, cor. Nenhum teste aqui finge isso.
- O comportamento do Tk — o que acontece ao redimensionar, ao colar texto grande, ao usar leitor de tela.
- Por isso existe
test_a_janela_abre_de_verdade, que abre uma janela e a fecha sozinha — e que pula onde não há display.