From ac519bfaf5979e8d170b2aff65ef0dda14922d87 Mon Sep 17 00:00:00 2001 From: Ruben Vermeersch Date: Tue, 17 Dec 2013 14:37:17 +0100 Subject: [PATCH] Start adding a real unit test framework. --- .jshintrc | 7 +- Gruntfile.coffee | 16 ++- package.json | 3 +- test/fixtures/big.po | 287 +++++++++++++++++++++++++++++++++++++++++++ test/headers.js | 30 +++++ 5 files changed, 338 insertions(+), 5 deletions(-) create mode 100644 test/fixtures/big.po create mode 100644 test/headers.js diff --git a/.jshintrc b/.jshintrc index 9021e97..d616838 100644 --- a/.jshintrc +++ b/.jshintrc @@ -10,5 +10,10 @@ "boss": true, "eqnull": true, "node": true, - "white": true + "white": true, + "predef": [ + "describe", + "it", + "before" + ] } diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 731a845..8d4387b 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -1,18 +1,28 @@ module.exports = (grunt) -> @loadNpmTasks('grunt-contrib-jshint') @loadNpmTasks('grunt-contrib-watch') + @loadNpmTasks('grunt-mocha-cli') @initConfig jshint: - all: [ 'lib/*.js' ] + all: [ 'lib/*.js', 'test/*.js' ] options: jshintrc: '.jshintrc' watch: all: - files: ['lib/**.js', 'test/*/*'] + options: + atBegin: true + files: ['lib/**.js', 'test/*{,/*}'] tasks: ['test'] + mochacli: + options: + files: 'test/*.js' + spec: + options: + reporter: 'spec' + @registerTask 'default', ['test'] @registerTask 'build', ['jshint'] - @registerTask 'test', ['build'] + @registerTask 'test', ['build', 'mochacli'] diff --git a/package.json b/package.json index e4b0be9..6580393 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "devDependencies": { "grunt": "~0.4.2", "grunt-contrib-watch": "~0.5.3", - "grunt-contrib-jshint": "~0.7.2" + "grunt-contrib-jshint": "~0.7.2", + "grunt-mocha-cli": "~1.4.0" } } diff --git a/test/fixtures/big.po b/test/fixtures/big.po new file mode 100644 index 0000000..d2a37a7 --- /dev/null +++ b/test/fixtures/big.po @@ -0,0 +1,287 @@ +# French translation of Link (6.x-2.9) +# Copyright (c) 2011 by the French translation team +# +msgid "" +msgstr "" +"Project-Id-Version: Link (6.x-2.9)\n" +"POT-Creation-Date: 2011-12-31 23:39+0000\n" +"PO-Revision-Date: 2013-12-17 14:21+0100\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Last-Translator: Ruben Vermeersch \n" +"Language: fr\n" +"X-Generator: Poedit 1.6.2\n" + +msgid "Title" +msgstr "Titre" + +msgid "CCK" +msgstr "CCK" + +msgid "Content" +msgstr "Contenu" + +msgid "Link" +msgstr "Lien" + +msgid "Link Target" +msgstr "Cible du Lien" + +msgid "URL" +msgstr "URL" + +msgid "Placeholder tokens" +msgstr "Jetons (tokens) de substitution" + +msgid "" +"The following placeholder tokens can be used in both paths and titles. When " +"used in a path or title, they will be replaced with the appropriate values." +msgstr "" +"Les ébauches de jetons suivantes peuvent être utilisées à la fois dans les " +"chemins et dans les titres. Lorsqu'elles sont utilisées dans un chemin ou un " +"titre, elles seront remplacées par les valeurs appropriées." + +msgid "Optional Title" +msgstr "Titre Optionnel" + +msgid "Required Title" +msgstr "Titre Obligatoire" + +msgid "No Title" +msgstr "Aucun Titre" + +msgid "Link Title" +msgstr "Titre du Lien" + +msgid "URL Display Cutoff" +msgstr "Coupure de l'Affichage de l'URL" + +msgid "" +"If the user does not include a title for this link, the URL will be used as " +"the title. When should the link title be trimmed and finished with an " +"elipsis (…)? Leave blank for no limit." +msgstr "" +"Si l'utilisateur n'inclue pas de titre pour ce lien, l'URL sera utilisée en " +"tant que titre. A quel endroit le lien devra-t-il être coupé et terminé par " +"une ellipse (…) ? Laissez vide pour aucune limite." + +msgid "Default (no target attribute)" +msgstr "Par Défaut (aucun attribut de cible)" + +msgid "Open link in window root" +msgstr "Ouvrir le lien dans la fenêtre courante" + +msgid "Open link in new window" +msgstr "Ouvrir le lien dans une nouvelle fenêtre" + +msgid "Allow the user to choose" +msgstr "Autoriser l'utilisateur à choisir" + +msgid "Additional CSS Class" +msgstr "Classe CSS additionnelle" + +msgid "Not a valid URL." +msgstr "Cette URL n'est pas valide." + +msgid "Titles are required for all links." +msgstr "Les titres sont obligatoires pour tous les liens." + +msgid "Open URL in a New Window" +msgstr "Ouvril l'URL dans une Nouvelle Fenêtre" + +msgid "Defines simple link field types." +msgstr "Définit les types de champs \"lien simple\"." + +msgid "Link URL" +msgstr "Url du Lien" + +msgid "Wildcard" +msgstr "Joker" + +msgid "=" +msgstr "=" + +msgid "Protocol" +msgstr "Protocole" + +msgid "Optional URL" +msgstr "URL optionnelle" + +msgid "Static Title: " +msgstr "Titre Statique : " + +msgid "" +"If the link title is optional or required, a field will be displayed to the " +"end user. If the link title is static, the link will always use the same " +"title. If token module is " +"installed, the static title value may use any other node field as its value. " +"Static and token-based titles may include most inline XHTML tags such as " +"strong, em, img, span, etc." +msgstr "" +"Si le titre du lien est facultatif ou obligatoire, un champ sera affiché à " +"l'utilisateur final. Si le titre du lien est statique, le lien utilisera " +"toujours le même titre. Si le module token est installé, le titre statique peut utiliser n'importe " +"quel autre champ du nœud pour sa valeur. Les titres statiques et basés sur " +"des jetons (tokens) peuvent contenir la plupart des balises XHTML en ligne, " +"telles que strong, em, img, span, etc." + +msgid "Allow user-entered tokens" +msgstr "Autoriser les jetons (tokens) saisis par l'utilisateur" + +msgid "" +"Checking will allow users to enter tokens in URLs and Titles on the node " +"edit form. This does not affect the field settings on this page." +msgstr "" +"Le fait de cocher cette case permettra aux utilisateurs de saisir des jetons " +"dans les URL et les Titres dans le formulaire d'édition du nœud. Ceci " +"n'affecte pas les configurations de champ sur cette page." + +msgid "Rel Attribute" +msgstr "Attribut Rel" + +msgid "" +"When output, this link will have this rel attribute. The most common usage " +"is rel="nofollow"" +" which prevents some search engines from spidering entered links." +msgstr "" +"Quand il sera affiché, ce lien aura cet attribut rel. L'usage le plus commun " +"est rel="" +"nofollow" qui empêche certains moteurs de recherche d'aspirer les " +"liens suivis." + +msgid "A default title must be provided if the title is a static value" +msgstr "" +"Un titre pas défaut doit être fourni si le titre est une valeur statique" + +msgid "At least one title or URL must be entered." +msgstr "Vous devez saisir au moins un titre ou une URL." + +msgid "You cannot enter a title without a link url." +msgstr "Vous ne pouvez pas saisir un titre dans une url de lien." + +msgid "Title, as link (default)" +msgstr "Titre, en tant que lien (par défaut)" + +msgid "URL, as link" +msgstr "URL, en tant que lien" + +msgid "Short, as link with title \"Link\"" +msgstr "Court, comme lien avec le titre \"Lien\"" + +msgid "Label, as link with label as title" +msgstr "Étiquette, comme lien avec l'étiquette comme titre" + +msgid "Separate title and URL" +msgstr "Titre et URL séparés" + +msgid "Validator" +msgstr "Validateur" + +msgid "Is one of" +msgstr "Fait partie de" + +msgid "@label title" +msgstr "Titre de @label" + +msgid "@label protocol" +msgstr "Protocole de @label" + +msgid "@label target" +msgstr "Cible de @label" + +msgid "" +"The title to use when this argument is present; it will override the title " +"of the view and titles from previous arguments. You can use percent " +"substitution here to replace with argument titles. Use \"%1\" for the first " +"argument, \"%2\" for the second, etc." +msgstr "" +"Le titre à utiliser lorsque cet argument est présent ; il écrasera le titre " +"de la vue et les titres provenant des arguments précédents. Vous pouvez " +"utiliser ici les substitutions de pourcentage pour remplacer avec les titres " +"des arguments. Utilisez \"%1\" pour le premier argument, \"%2\" pour le " +"second, etc." + +msgid "Action to take if argument is not present" +msgstr "Action à mener si l'argument est absent" + +msgid "" +"If this value is received as an argument, the argument will be ignored; i.e, " +"\"all values\"" +msgstr "" +"Si cette valeur est reçue comme argument, l'argument sera ignoré ; " +"correspond à \"toutes les valeurs\"" + +msgid "Wildcard title" +msgstr "Titre du joker" + +msgid "The title to use for the wildcard in substitutions elsewhere." +msgstr "" +"Le titre à utiliser pour le joker dans les substitutions partout ailleurs." + +msgid "" +msgstr "" + +msgid "Action to take if argument does not validate" +msgstr "Actions à mener si l'argument ne passe pas la validation" + +msgid "" +"The protocols displayed here are those globally available. You may add more " +"protocols by modifying the filter_allowed_protocols variable in " +"your installation." +msgstr "" +"Les protocoles affichés ici sont ceux disponibles de manière globale. Vous " +"pouvez ajouter plus de protocoles en modifiant la variable " +"filter_allowed_protocols de votre installation." + +msgid "Link title" +msgstr "Titre du lien" + +msgid "exposed" +msgstr "exposé" + +msgid "Formatted html link" +msgstr "Lien html formaté" + +msgid "Store a title, href, and attributes in the database to assemble a link." +msgstr "" +"Stocker un titre, href et des attributs dans la base de données pour les " +"assembler dans un lien." + +msgid "URL, as plain text" +msgstr "URL, texte simple" + +msgid "@label URL" +msgstr "URL de @label" + +msgid "Validate URL" +msgstr "Valider l'URL" + +msgid "" +"If checked, the URL field will be verified as a valid URL during validation." +msgstr "" +"Si coché, la validité du format de l'URL sera verifiée durant la validation." + +msgid "" +"If checked, the URL field is optional and submitting a title alone will be " +"acceptable. If the URL is omitted, the title will be displayed as plain text." +msgstr "" +"Si coché, le champ URL est optionnel and soumettre un titre seul sera " +"accepté. SI l'URL est omise, le titre sera affiché en texte brut." + +msgid "" +"When output, this link will have this class attribute. Multiple classes " +"should be separated by spaces." +msgstr "" +"Lors de l'affichage, le lien aura cet attribut de classe (class). Les " +"classes doivent être séparées par des espaces." + +msgid "Link 'title' Attribute" +msgstr "Attribut 'title' du lien" + +# Comment +msgid "Title, as plain text" +msgstr "Attribut title, en tant que texte brut" diff --git a/test/headers.js b/test/headers.js new file mode 100644 index 0000000..d3605c4 --- /dev/null +++ b/test/headers.js @@ -0,0 +1,30 @@ +var assert = require('assert'); +var PO = require('..'); + +describe('Headers', function () { + var po; + + before(function (done) { + PO.load(__dirname + '/fixtures/big.po', function (err, result) { + assert.equal(err, null); + po = result; + done(); + }); + }); + + it('Parses the po file', function () { + assert.notEqual(po, null); + }); + + it('Parses headers correctly', function () { + assert.equal(po.headers['Project-Id-Version'], 'Link (6.x-2.9)'); + assert.equal(po.headers['MIME-Version'], '1.0'); + assert.equal(po.headers['Plural-Forms'], 'nplurals=2; plural=(n > 1);'); + }); + + it('Parses all headers', function () { + // There are 11 headers in the .po file, but some default headers + // are defined (nr. 12 in this case is Report-Msgid-Bugs-To). + assert.equal(Object.keys(po.headers).length, 12); + }); +});