Test fixtures et reformatage

Les tests fixtures sont un des moyens de gérer les données nécessaires aux tests. Le système de test fixtures de Ruby on Rails se distingue par sa grande facilité d’écriture. Les données sont saisies dans des fichiers YAML, et le système de test gère les id, les relations 1-n et les relations n-n.

Parfois les données brutes ne sont pas disponibles dans le bon format. L’éditeur vi (ou vim), disponible sur toutes les bonnes plateformes, dispose d’une commande d’édition par expressions régulières très puissante. Prenons un exemple. J’ai donc besoin de convertir une liste d’ATA au format YAML.

Format liste

21 : Air conditioning
22 : Auto flight
23 : Communications

Format YAML

21:
  number: 21
  description: Air conditioning
 
22:
  number: 22
  description: Auto flight
 
23:
  number: 23
  description: Communications

La commande vi de substitution

Une « simple » commande suffit:

:%s/\([0-9][0-9]\) : \(.*\)/\1:\r  number: \1\r  description: \2\r/

Ça paraît un peu rude, mais c’est facile à décortiquer. Prenons la commande dans l’ordre.

  • % toutes les lignes du fichier
  • s/.../.../ la commande de substitution qui va être appliquée à chaque ligne
  • [0-9][0-9] deux chiffres ; je mémorise le numéro dans \1 en le mettant entre \( et \)
  • : deux points entre deux espace
  • .* tout le reste de la ligne, que je \(mémorise\) dans \2
  • maintenant le remplacement : je récupère le numéro avec \1, que j’insère suivi de : et d’un saut de ligne
  • insertion de number: puis le numéro
  • insertion de description: puis le texte récupéré

Facile, non ?

One Comment

  1. Posted 30 septembre 2008 at 3:06 | Permalink

    Hello,

    un petit commentaire pour te signaler que [0-9] peut être remplacé par \d (pour « digit »), et que [0-9][0-9] peut être remplacé par \d\{2\} (pour « deux digit »).

    Concernant les tests dans ruby on rails, j’ai écrit récemment un article sur leur intérêt : http://blog.olivier-elmekki.com/2008/09/27/test-driven-development-avec-ruby-on-rails/

    À bientôt

Post a Comment

Your email is never shared. Required fields are marked *

*
*