Os componentes
Vinte e dois, e o que cada um devolve para o programa.
Cada chamada põe um componente e devolve o valor dele. É o que faz a tela ser um programa comum, de cima para baixo.
Entradas#
dataforge
adopt Arcane.Janela as J
action tela(t):
nome := t.entrada("Nome", "")
senha := t.senha("Senha")
idade := t.numero("Idade", 18, 0, 120)
obs := t.area("Observações", "", 4)
cor := t.escolha("Cor", ["azul", "verde"], "verde")
ativo := t.caixa("Ativo", yes)
nivel := t.deslizante("Nível", 0, 10, 5)
quando := t.data("Quando", "2026-09-22")
onde := t.arquivo("Arquivo", "", ["csv"])
t.texto($"{nome}|{idade}|{cor}|{ativo}|{nivel}")
s := J.testar(tela)
assert s.campos() is ["Arquivo", "Ativo", "Cor", "Idade", "Nome", "Nível", "Observações", "Quando", "Senha"]
s.digitar("Nome", "Ana")
s.digitar("Idade", 30)
assert s.tem("Ana|30|verde|yes|5")
out s.texto()| Componente | Devolve | Nota |
|---|---|---|
entrada | texto | uma linha |
senha | texto | esconde o que se digita |
numero | Integer ou Float | digitado ele chega como texto, e n + 1 daria concatenação |
area | texto | várias linhas |
escolha | a opção | uma de uma lista |
caixa | yes/no | |
deslizante | número | com mínimo e máximo |
data | texto | sem seletor nativo — é um campo com formato |
arquivo | o caminho | sem display, é um campo de texto |
Mostrar#
dataforge
adopt Arcane.Janela as J
action tela(t):
t.titulo("Relatório")
t.texto("uma linha de texto comum")
t.aviso("deu certo")
t.erro("não deu")
t.separador()
t.tabela(["produto", "preço"], [
{"produto": "café", "preço": "32,90"},
{"produto": "filtro", "preço": "8,50"},
])
t.lista(["primeiro", "segundo"])
t.progresso(0.72, "carregando")
s := J.testar(tela)
assert s.tem("Relatório") and s.tem("deu certo")
assert s.tabelas()[0]["linhas"] is [["café", "32,90"], ["filtro", "8,50"]]
out s.texto()A tabela aceita vault ou lista: com vault, as colunas casam pelo nome; com lista, pela posição. Os dois são comuns — Database.query devolve vaults, e um CSV lido devolve listas.
O botão vale para UMA execução#
dataforge
adopt Arcane.Janela as J
salvos := []
action tela(t):
t.entrada("Nome", "")
given t.botao("Salvar", yes):
salvos.append(1)
s := J.testar(tela)
s.clicar("Salvar")
assert len(salvos) is 1
// Reexecutar NÃO salva de novo: o clique é um evento, e não estado.
s.digitar("Nome", "x")
assert len(salvos) is 1
out "um clique, um salvamento"Se o clique ficasse guardado, a próxima reexecução salvaria o formulário de novo — e esse é o defeito clássico de quem monta isto à mão.
Agrupar#
dataforge
adopt Arcane.Janela as J
action tela(t):
t.grupo("Identificação")
t.entrada("Nome")
t.entrada("E-mail")
t.fim()
t.grupo("Endereço")
t.entrada("Rua")
t.fim()
s := J.testar(tela)
assert s.tem("Identificação") and s.tem("Endereço")
assert len(s.campos()) is 3
out s.texto()