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 ) ;
2013-12-17 17:53:59 +04:00
var item = po . items [ 0 ] ;
assert . equal ( item . msgid , "Title" ) ;
assert . equal ( item . msgstr , "Titre" ) ;
} ) ;
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 ) ;
var item = po . items [ 0 ] ;
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." ) ;
} ) ;
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-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 ) ;
assert . equal ( po . items . length , 1 ) ;
var item = po . items [ 0 ] ;
assert . equal ( item . msgid , "Title, as plain text" ) ;
assert . equal ( item . msgstr , "Attribut title, en tant que texte brut" ) ;
2014-03-02 22:11:37 +04:00
assert . deepEqual ( item . comments , [ "Translator comment" ] ) ;
} ) ;
it ( 'Handles extracted comments' , function ( ) {
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/comment.po' , 'utf8' ) ) ;
assert . notEqual ( po , null ) ;
assert . equal ( po . items . length , 1 ) ;
var item = po . items [ 0 ] ;
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 ) ;
var item = po . items [ 0 ] ;
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" ] ) ;
item = po . items [ 1 ] ;
assert . equal ( item . msgid , "X" ) ;
assert . equal ( item . msgstr , "Y" ) ;
assert . deepEqual ( item . references , [ "a" , "b" ] ) ;
} ) ;
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 ] ;
assert . equal ( item . msgid , "Sources" ) ;
assert . equal ( item . msgstr , "Source" ) ;
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' ) ) ;
assert . equal ( po . items . length , 2 ) ;
var item = po . items [ 0 ] ;
assert . equal ( item . obsolete , false ) ;
assert . equal ( item . msgid , "{{dataLoader.data.length}} results" ) ;
assert . equal ( item . msgstr , "{{dataLoader.data.length}} resultaten" ) ;
item = po . items [ 1 ] ;
assert . equal ( item . obsolete , true ) ;
assert . equal ( item . msgid , "Add order" ) ;
assert . equal ( item . msgstr , "Order toevoegen" ) ;
} ) ;
2014-03-05 14:37:48 +04:00
describe ( 'C-Strings' , function ( ) {
it ( 'should parse the c-strings.po file' , function ( ) {
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/c-strings.po' , 'utf8' ) ) ;
assert . notEqual ( po , null ) ;
} ) ;
it ( 'should extract strings containing " and \\ characters' , function ( ) {
var po = PO . parse ( fs . readFileSync ( _ _dirname + '/fixtures/c-strings.po' , 'utf8' ) ) ;
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 \\' ) ;
} ) ;
} ) ;
2013-12-17 17:53:59 +04:00
} ) ;