2013-12-17 17:53:59 +04:00
var assert = require ( 'assert' ) ;
var fs = require ( 'fs' ) ;
var PO = require ( '..' ) ;
describe ( 'Parse' , function ( ) {
it ( 'Parses the big po file' , function ( ) {
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/big.po' , 'utf8' ) ) ;
assert . notEqual ( po , null ) ;
2014-01-21 16:44:52 +04:00
assert . equal ( po . items . length , 69 ) ;
2014-06-19 16:16:30 +04:00
2013-12-17 17:53:59 +04:00
var item = po . items [ 0 ] ;
2014-06-19 16:16:30 +04:00
assert . equal ( item . msgid , 'Title' ) ;
assert . equal ( item . msgstr , 'Titre' ) ;
2013-12-17 17:53:59 +04:00
} ) ;
it ( 'Handles multi-line strings' , function ( ) {
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/multi-line.po' , 'utf8' ) ) ;
assert . notEqual ( po , null ) ;
assert . equal ( po . items . length , 1 ) ;
2014-06-19 16:16:30 +04:00
2013-12-17 17:53:59 +04:00
var item = po . items [ 0 ] ;
2014-06-19 16:16:30 +04:00
assert . equal ( item . 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.' ) ;
assert . equal ( item . 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.' ) ;
2013-12-17 17:53:59 +04:00
} ) ;
2014-03-21 13:14:00 +04:00
it ( 'Handles multi-line headers' , function ( ) {
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/multi-line.po' , 'utf8' ) ) ;
assert . notEqual ( po , null ) ;
assert . equal ( po . items . length , 1 ) ;
assert . equal ( po . headers [ 'Plural-Forms' ] , 'nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;' ) ;
} ) ;
2014-06-19 19:04:03 +04:00
it ( 'Handle empty comments' , function ( done ) {
PO . load ( _ _dirname + '/fixtures/comment.po' , function ( err , po ) {
assert . equal ( err , null ) ;
var item = po . items [ 1 ] ;
assert . equal ( item . msgid , 'Empty comment' ) ;
assert . equal ( item . msgstr , 'Empty' ) ;
assert . deepEqual ( item . comments , [ '' ] ) ;
assert . deepEqual ( item . extractedComments , [ '' ] ) ;
assert . deepEqual ( item . references , [ '' ] ) ;
done ( ) ;
} ) ;
} ) ;
2014-03-02 22:11:37 +04:00
it ( 'Handles translator comments' , function ( ) {
2013-12-17 17:53:59 +04:00
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/comment.po' , 'utf8' ) ) ;
assert . notEqual ( po , null ) ;
2014-06-19 19:04:03 +04:00
assert . equal ( po . items . length , 2 ) ;
2014-06-19 16:16:30 +04:00
2013-12-17 17:53:59 +04:00
var item = po . items [ 0 ] ;
2014-06-19 16:16:30 +04:00
assert . equal ( item . msgid , 'Title, as plain text' ) ;
assert . equal ( item . msgstr , 'Attribut title, en tant que texte brut' ) ;
assert . deepEqual ( item . comments , [ 'Translator comment' ] ) ;
2014-03-02 22:11:37 +04:00
} ) ;
it ( 'Handles extracted comments' , function ( ) {
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/comment.po' , 'utf8' ) ) ;
assert . notEqual ( po , null ) ;
2014-06-19 19:04:03 +04:00
assert . equal ( po . items . length , 2 ) ;
2014-03-02 22:11:37 +04:00
var item = po . items [ 0 ] ;
2014-06-19 16:16:30 +04:00
assert . equal ( item . msgid , 'Title, as plain text' ) ;
assert . equal ( item . msgstr , 'Attribut title, en tant que texte brut' ) ;
assert . deepEqual ( item . extractedComments , [ 'Extracted comment' ] ) ;
2013-12-17 17:53:59 +04:00
} ) ;
2013-12-17 17:56:47 +04:00
it ( 'Handles string references' , function ( ) {
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/reference.po' , 'utf8' ) ) ;
assert . notEqual ( po , null ) ;
assert . equal ( po . items . length , 2 ) ;
2014-06-19 16:16:30 +04:00
2013-12-17 17:56:47 +04:00
var item = po . items [ 0 ] ;
2014-06-19 16:16:30 +04:00
assert . equal ( item . msgid , 'Title, as plain text' ) ;
assert . equal ( item . msgstr , 'Attribut title, en tant que texte brut' ) ;
assert . deepEqual ( item . comments , [ 'Comment' ] ) ;
assert . deepEqual ( item . references , [ '.tmp/crm/controllers/map.js' ] ) ;
2013-12-17 17:56:47 +04:00
item = po . items [ 1 ] ;
2014-06-19 16:16:30 +04:00
assert . equal ( item . msgid , 'X' ) ;
assert . equal ( item . msgstr , 'Y' ) ;
assert . deepEqual ( item . references , [ 'a' , 'b' ] ) ;
2013-12-17 17:56:47 +04:00
} ) ;
2013-12-17 18:04:44 +04:00
it ( 'Parses flags' , function ( ) {
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/fuzzy.po' , 'utf8' ) ) ;
assert . notEqual ( po , null ) ;
assert . equal ( po . items . length , 1 ) ;
var item = po . items [ 0 ] ;
2014-06-19 16:16:30 +04:00
assert . equal ( item . msgid , 'Sources' ) ;
assert . equal ( item . msgstr , 'Source' ) ;
2013-12-17 18:04:44 +04:00
assert . notEqual ( item . flags , null ) ;
assert . equal ( item . flags . fuzzy , true ) ;
} ) ;
2014-01-21 16:44:52 +04:00
it ( 'Parses item context' , function ( ) {
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/big.po' , 'utf8' ) ) ;
var ambiguousItems = po . items . filter ( function ( item ) {
return item . msgid === 'Empty folder' ;
} ) ;
assert . equal ( ambiguousItems [ 0 ] . msgctxt , 'folder display' ) ;
assert . equal ( ambiguousItems [ 1 ] . msgctxt , 'folder action' ) ;
} ) ;
2014-03-05 14:37:48 +04:00
2014-03-07 13:15:50 +04:00
it ( 'Handles obsolete items' , function ( ) {
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/commented.po' , 'utf8' ) ) ;
2014-06-19 15:38:07 +04:00
assert . equal ( po . items . length , 4 ) ;
2014-03-07 13:15:50 +04:00
var item = po . items [ 0 ] ;
assert . equal ( item . obsolete , false ) ;
2014-06-17 23:19:14 +04:00
assert . equal ( item . msgid , '{{dataLoader.data.length}} results' ) ;
assert . equal ( item . msgstr , '{{dataLoader.data.length}} resultaten' ) ;
2014-03-07 13:15:50 +04:00
item = po . items [ 1 ] ;
assert . equal ( item . obsolete , true ) ;
2014-06-17 23:19:14 +04:00
assert . equal ( item . msgid , 'Add order' ) ;
assert . equal ( item . msgstr , 'Order toevoegen' ) ;
2014-06-19 15:38:07 +04:00
item = po . items [ 2 ] ;
assert . equal ( item . obsolete , true ) ;
assert . equal ( item . msgid , 'Commented item' ) ;
assert . equal ( item . msgstr , 'not sure' ) ;
item = po . items [ 3 ] ;
assert . equal ( item . obsolete , true ) ;
assert . equal ( item . msgid , 'Second commented item' ) ;
assert . equal ( item . msgstr , 'also not sure' ) ;
2014-03-07 13:15:50 +04:00
} ) ;
2014-03-05 14:37:48 +04:00
describe ( 'C-Strings' , function ( ) {
2014-06-23 20:24:02 +04:00
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/c-strings.po' , 'utf8' ) ) ;
2014-03-05 14:37:48 +04:00
it ( 'should parse the c-strings.po file' , function ( ) {
assert . notEqual ( po , null ) ;
} ) ;
it ( 'should extract strings containing " and \\ characters' , function ( ) {
var items = po . items . filter ( function ( item ) {
return ( /^The name field must not contain/ ) . test ( item . msgid ) ;
} ) ;
assert . equal ( items [ 0 ] . msgid , 'The name field must not contain characters like " or \\' ) ;
} ) ;
2014-06-23 20:24:02 +04:00
it ( 'should handle \n characters' , function ( ) {
var item = po . items [ 1 ] ;
assert . equal ( item . msgid , '%1$s\n%2$s %3$s\n%4$s\n%5$s' ) ;
} ) ;
it ( 'should handle \t characters' , function ( ) {
var item = po . items [ 2 ] ;
assert . equal ( item . msgid , 'define(\'some/test/module\', function () {\n' +
'\t\'use strict\';\n' +
'\treturn {};\n' +
'});\n' ) ;
} ) ;
2014-03-05 14:37:48 +04:00
} ) ;
2013-12-17 17:53:59 +04:00
} ) ;