Como testar na trilha Unison

Aprenda a testar seus exercícios de Unison no Exercism


Getting familiar with the Unison Codebase Manager

O Unison Codebase Manager (UCM) é a ferramenta que roda a linguagem de programação Unison e permite navegar pelo código Unison que você escreveu e salvou.

💡 Lembre-se: o código Unison não é salvo como conteúdo de arquivo em texto. Por isso, precisamos de uma ferramenta que permita alterar e rodar programas Unison.

Escrever código Unison é tão simples quanto abrir o terminal de sua preferência e rodar o comando ucm no diretório onde você vai escrever seu código Unison. Depois, você pode usar seu editor de texto favorito para criar ou abrir um arquivo com sufixo .u, como scratch.u ou hello.u. A maior parte do seu fluxo de trabalho será navegar entre a instância de linha de comando do ucm em execução e o seu arquivo .u. O UCM detecta automaticamente as mudanças no seu arquivo com sufixo .u assim que você o salva.

Em vez de uma estrutura de diretórios, os codebases Unison são organizados por meio de "namespaces". Você vai explorar o namespace da biblioteca padrão, chamado base, em busca de funções e tipos de dados úteis, e vai criar os seus próprios conforme escreve código Unison. No UCM, a navegação pelo codebase é feita com os comandos ls e view. O primeiro lista o conteúdo de um namespace e o segundo mostra o código-fonte.

Você pode navegar e ver seu codebase pela CLI do UCM, mas também pode querer uma boa representação gráfica do seu trabalho. Para isso, execute o comando ui na CLI do UCM. Ele abre uma janela do navegador com uma visão do código do seu codebase. A UI local do codebase também é uma ótima forma de explorar funções da nossa biblioteca padrão, chamada base, que podem ser úteis para resolver os exercícios. Leia mais sobre a UI local do codebase aqui.

Você pode praticar o fluxo de trabalho de programação em Unison com o tour da linguagem Unison.

Configuração de testes do Exercism

Resumo rápido

  1. Crie um novo projeto com o comando project.create e informe o nome dele (por exemplo, project.create hello-world)

  2. Com o UCM observando o diretório do exercício, faça suas alterações no arquivo <myFileName>.u

  3. Salve o arquivo <myFileName>.u

  4. Se o arquivo passar na verificação de tipos, execute os comandos add ou update do UCM

    • Se o arquivo não passar na verificação de tipos, altere o código no seu arquivo <myFileName>.u até que ele compile
  5. Execute o comando load <myFileName>.test.u na CLI do UCM para trazer os testes para o escopo e executá-los

Passo a passo detalhado

Se você está resolvendo um problema do Exercism na linha de comando, provavelmente vai implementar sua solução no diretório com o nome do exercício. Por exemplo, se o exercício for hello-world, abra o ucm na linha de comando depois de rodar cd em ~/exercism/unison/hello-world e crie um projeto no ucm (por exemplo, project.create hello-world). Faça as alterações da sua implementação no arquivo hello.u e, quando estiver satisfeito com ela, digite o comando add ou update na CLI do Unison Codebase Manager (UCM) para adicionar ao codebase o seu trabalho feito no arquivo.

O arquivo que contém os testes de cada exercício tem o sufixo .test.u. Você vai querer usar o comando load no UCM para trazer os testes para o escopo e executá-los. O comando load recebe um caminho de arquivo como argumento. Veja como isso ficaria para o exercício hello world e o projeto hello-world:

hello-world/main> load hello.test.u

Você deve ver uma mensagem do UCM sobre os termos que foram trazidos para o escopo e, mais importante, o resultado da execução do teste:


  ⍟ These new definitions are ok to `add`:

    hello.test : Test.Test
    tests      : [Result]

Now evaluating any watch expressions (lines starting with
`>`)... Ctrl+C cancels.


  6 | test> tests = runAll [hello.test]

  🚫 FAILED

Digamos que seus testes não passaram na primeira vez. Volte a editar seu arquivo myExercise.u e, ao salvar, você pode rodar update

I found and typechecked these definitions in ~/Exercism/unison/hello-world/hello.u. If you do an
`add` or `update`, here's how your codebase would change:

  ⍟ These names already exist. You can `update` them to your new definition:

    hello : Text

hello-world/main> update

⍟ I've updated these names to your new definition:

  hello : Text

Agora podemos recarregar nossos testes para ver se algo mudou!

hello-world/main> load hello.test.u
  Now evaluating any watch expressions (lines starting with `>`)... Ctrl+C cancels.


  6 | test> tests = runAll [hello.test]

  ✅ Passed : Passed 1 tests.

Comandos úteis do UCM

Para ver uma lista dos comandos disponíveis para interagir com seu codebase, execute help na CLI do Unison Codebase Manager. A lista de comandos do UCM também está descrita no nosso site. Aqui estão alguns que podem ser úteis:

  • add: adiciona ao codebase as novas definições do arquivo .u.
  • update: funciona como o add, mas se uma definição no arquivo tiver o mesmo nome de uma definição existente, o nome é atualizado para apontar para a nova definição.
    • Se a definição antiga tiver dependentes, o update propaga a mudança automaticamente quando possível, ou cria um item todo para uma refatoração futura.
  • load: analisa, verifica os tipos e avalia o arquivo de rascunho com sufixo .u informado. Depois de verificado e avaliado, você pode adicionar os termos ao seu codebase.
  • ls: lista o conteúdo de um namespace
  • view: mostra o código-fonte de uma definição Unison
  • ui: abre a UI local do codebase
  • exit: fecha o UCM