Carlos Brando

Nome do Jogo

ZenTest com Growl, mais uma vez...

Desde que instalei o Leopard venho sofrendo para integrar o ZenTest com o Growl. Quando achei que tinha encontrado a solução para o problema, logo depois uma atualização no ZenTest ferrou tudo de novo.

Finalmente começamos a usar RSpec em um projeto de verdade aqui na Surgeworks e eu comecei a me lamentar do porque do maldito do Growl não estar funcionando. Naveguei e segui quase todas as dicas que encontrei pelo caminho para fazer isto funcionar e nada deu certo. Tentei o Test Notifier do Nando Vieira, que também não funcionou aqui…

Então resolvi que eu tinha de parar de ficar pegando scripts prontos na internet e coçar minha própria coceira…

Na verdade foi muito mais fácil do que imaginei, mas como foi algo que estava me dando dor de cabeça, segue abaixo o script que criei para fazer o ZenTest funcionar com o Growl no Leopard. Na verdade este fica sendo apenas mais um dos tantos por aí… pode ser também que não funcione em sua máquina, mas pode servir de modelo para que você crie o seu.

Para saber o que fazer com este script, leia o artigo que escrevi em fevereiro explicando como fiz a mesma coisa naquela época, e só troque o script antigo por este.

# ~.autotest
require 'autotest/growl'

module Autotest::Growl
  FAIL_IMAGE    = "/Users/carlosbrando/.autotest_images/fail.png"
  PENDING_IMAGE = "/Users/carlosbrando/.autotest_images/pending.png"
  SUCCESS_IMAGE = "/Users/carlosbrando/.autotest_images/pass.png"

  Autotest.add_hook :ran_command do |at|
    result = at.results.last
    if result
      # examples = result =~ /(\d+) examples/ ? $1.to_i : 0
      failures = result =~ /(\d+) failure/ ? $1.to_i : 0
      pendings = result =~ /(\d+) pending/ ? $1.to_i : 0

      if failures > 0
        growl "Tests Failed", "#{failures} test#{ 's' if failures > 1 } failed", FAIL_IMAGE
      elsif pendings > 0
        growl "Tests Pending", "#{pendings} test#{ pendings == 1 ? ' is pending' : 's are pending'}", PENDING_IMAGE
      else
        growl "Tests Passed", "All tests passed", SUCCESS_IMAGE
      end

      code = (failures > 0) ? 31 : (pendings > 0) ? 33 : 32
      puts "\e[#{code}m#{'=' * 80}\e[0m\n\n"
    end
  end

  class << self
    def growl(title, msg, img = SUCCESS_IMAGE, pri = 0)
      title = "Autotest Running" if title == "autotest running"
      msg += " at #{Time.now.strftime("%I:%M %p")}" if msg == "Started"

      system "growlnotify -n autotest --image #{img} -p #{pri} -m #{msg.inspect} #{title}"
    end
  end
end

Não sei porque (e por pura preguiça não procurei saber ainda) mas o WordPress troca o caractere de aspas no código, então se na hora de copiá-lo ficar tudo zoado, pegue o código aqui.

Comments