How to run phpt tests with PHPUnit

In this post I will explain how to run phpt tests with PHPUnit.

For my GSOC project I will use (and contribute to) the PEAR package Text_Wiki (more about my contributions on this package on another post). This package use phpt tests for unit testing. I’m not familiar with phpt tests as I’m with PHPUnit and phpt tests didn’t give me a good impression (its difficult to understand feedback and its syntax mixing PHP code and plain text statements lead to improper syntax highlighting in Emacs :-D).

So I proposed the main developer of Text_Wiki to switch to PHPUnit. He had no objections if I were able to provide a solution that made possible to run the old phpt tests with the new PHPUnit tests at the same time.

I found that there is a PHPUnit extension that does exactly what I was looking for. As I wasn’t able to find a tutorial explaining how to use it, I decided to write this post to share the way I used that extension.

I’m using version 3.3.17 of PHPUnit and it came with two phpt related extensions located in the directory PHPUnit/Extensions (if you use Ubuntu as I do the full path will probably be /usr/share/php/PHPUnit/Extensions): PhptTestCase.php and PhptTestSuite.php

The first one implements the class PHPUnit_Extensions_PhptTestCase. The constructor of this class receive as a parameter the path to a single phpt file. I did not use this one.

The other file implements the class PHPUnit_Extensions_PhptTestSuite. You can instantiate this class in your test script passing as the first parameter the root directory where your phpt files are located. The constructor of the class will recursively look for all files with the extension .phpt.

On the link below you can view the code I used to integrate the old Text_Wiki phpt tests with the new PHPUnit classes I’m writing:

http://cvs.php.net/viewvc.cgi/pear/Text_Wiki/tests/tests.php?revision=1.2&view=markup

First day of GSOC 2009

English version below

Há algumas semanas atrás saiu a lista de projetos aprovados para o GSOC 2009 (Google Summer of Code) e meu projeto de implementar um importador de MediaWiki e phpBB para Tikiwiki foi aceito.

Hoje foi o primeiro dia de trabalho, entrei em contato com o Nelson Ko (o mentor do meu projeto) e definimos alguns objetivos para essa primeira semana. Vou pesquisar alguns importadores feitos anteriormente pela comunidade do Tikiwiki e que nunca foram finalizados bem como outros scripts para importar o MediaWiki para outros softwares. Além disso pretendo dar uma olhada na documentação da sintaxe do MediaWiki (a idéia é começar por esse software e deixar o phpBB para uma segunda fase).

Para o fim da semana pretendo ter uma avaliação das implentações existentes para ter uma idéia do caminho que o software que vou criar vai seguir. E também ter uma tabela comparativa entre a sintaxe do MediaWiki e do Tikiwiki indicando quais sintaxes serão fáceis de suportar, quais serão difíceis e quais não serão suportadas.

Pretendo publicar de vez em quando algumas atualizações aqui no blog sobre esse projeto, quem quiser acompanhá-lo de perto pode monitar a página wiki usada para documentação.


A few weeks ago Google released the list of approved projects to GSOC 2009 (Google Summer of Code) and my project (a script to import MediaWiki or phpBB content to Tikiwiki) was accepted.

Today was my first GSOC working day. I talked with Nelson Ko (my mentor for this project) through Skype (he lives in Canada and I in Brazil) and we decided the goals for this first week. I’ll research some old importers made by the Tikiwiki community and some scripts to import MediaWiki content to other software. I am also going to read the syntax documentation of MediaWiki (the plan is to start with MediaWiki and leave phpBB to a second stage).

By the end of the week I intend to perform an evaluation of the old scripts to start planning my implementation and I will produce a comparative table of TikiWiki and MediaWiki syntax to define what is simple to import, what is difficult and what is not going to be imported.

Occasionally I plan to update this blog with news about the GSOC. If you are interested in the project I suggest that you monitor the wiki page used to document my progress.

Como impedir que o editor do WordPress (TinyMCE) remova quebras de linha

Atualização (21/12/2010): Não utilizo mais o TinyMCE Advanced pois simplesmente mudando para o modo de edição HTML e apertando enter consigo gerar uma quebra de linha. Não sei se isso já existia no WordPress antes e eu nunca reparei ou se é algo de alguma versão recente.

Atualização (15/10/2009): o Rafael Biriba deixou um comentário falando do PS Disable Auto Formatting, um outro plugin do WordPress que também server para impedir a remoção automática das tags “br” e “p”.

Mais de uma vez quis formatar o texto de um post do WordPress usando algumas quebras de linha (enter) para separar dois blocos de texto ou então um bloco de texto de uma imagem. Porém, por padrão o editor do WordPress, o TinyMCE, remove qualquer tag “br” ou “p” que ele considere que esteja “sobrando”.

Talvez exista uma forma mais inteligente de se fazer isso sem usar quebra de linha, porém eu desconheço e já perdi um bom tempo tentando enganar o editor.

Ontem, encontrei o TinyMCE Advanced um plugin que tem uma opção para que as tags “br ”

e “p” não sejam removidas e além disso permite customizar os itens que aparecem na barra de edição. Abaixo um screenshot de parte da tela de administração:

Parte da tela de administração do TinyMCE Advanced

Moderação de usuários no WordPress

Uma das demandas do portal eletrocooperativa.org.br (um dos projetos desenvolvidos pelo Hacklab neste semestre) é a moderação dos usuários que se registram no site. Como esse recurso não existe no core do WordPress, saímos em busca de um plugin.

O Leo encontrou no diretório de plugins do WordPress (http://wordpress.org/extend/plugins/) o New User Approve, uma extensão simples que faz exatamente o que precisávamos. Durante o desenvolvimento encontramos dois problemas na versão atual (1.0):

  1. Se um usuário é criado pelo administrador e não pelo formulário de registro, ele aparece na listagem de usuários para moderação e se o administrador aprová-lo sua senha será alterada.
  2. Com o plugin habilitado, o formulário de registro sempre mostra uma mensagem de usuário criado com sucesso mesmo quando ocorreram erros (como por exemplo nome de usuário já existente ou senhas não conferem).

Fizemos dois patches para corrigir esses erros e enviamos para o desenvolvedor do plugin. Essa é a melhor parte do software livre 🙂

Ele agradeceu mas infelizmente ainda não teve tempo para incorporar as mudanças no código e lançar uma nova versão. Acredito que o fará em breve.

Se alguém precisar da mesma funcionalidade e quiser utilizar o plugin com as correções, o patch está disponível neste link (mais detalhes podem ser vistos nos comentários que fiz na página do próprio plugin).

Atualização (em 22/04/2009): foi lançada uma nova versão (1.1) do plugin que incorpora os patches que enviei, basta baixá-la aqui.