diff options
Diffstat (limited to 'node_modules/twig/test-ext')
-rwxr-xr-x | node_modules/twig/test-ext/checkout.sh | 10 | ||||
-rw-r--r-- | node_modules/twig/test-ext/test.original.js | 314 |
2 files changed, 324 insertions, 0 deletions
diff --git a/node_modules/twig/test-ext/checkout.sh b/node_modules/twig/test-ext/checkout.sh new file mode 100755 index 0000000..514b286 --- /dev/null +++ b/node_modules/twig/test-ext/checkout.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +if [ ! -d $DIR/twig.php ]; then + git clone git://github.com/fabpot/Twig.git $DIR/twig.php +else + cd $DIR/twig.php + git pull +fi diff --git a/node_modules/twig/test-ext/test.original.js b/node_modules/twig/test-ext/test.original.js new file mode 100644 index 0000000..27304e2 --- /dev/null +++ b/node_modules/twig/test-ext/test.original.js @@ -0,0 +1,314 @@ +/*jshint node: true */ + +( function( ) { + "use strict"; + var fs = require( "fs" ), + path = require("path"), + twigPhpDir = "test-ext/twig.php", + + runTest = function( ) { + describe( "Twig original test ->", function( ) { + var + Twig = Twig || require("../twig"), + twig = twig || Twig.twig, + walk = function( dir, done ) { + var results = [], + list = fs.readdirSync( dir ), + i = 0; + + ( function next( ) { + var file = list[i++], + stat; + if ( !file ) { + return done( null, results ); + } + + file = dir + '/' + file; + stat = fs.statSync( file ); + if ( stat && stat.isDirectory( ) ) { + walk( file, function( err, res ) { + results = results.concat( res ); + next( ); + } ); + } else { + results.push( file ); + next( ); + } + } )( ); + }, + testFile = function( filepath ) { + var tmp = fs.readFileSync( filepath, "utf8" ), + tmp2 = tmp.split( /^--/gm ), + res = {}; + + tmp2.forEach( function( data ) { + if ( !data ) { + return; + } + + var name = ( "" + data.match( /^[A-Z]+--/ ) || "" ).replace( /--$/, '' ); + + if ( name ) { + res[ name ] = data.substring( name.length + 3 ).trim( ); + } + } ); + + res.filepath = filepath; + + return res; + }; + + walk( twigPhpDir + "/test", function( err, files ) { + var testFiles = []; + + files.forEach( function( filepath ) { + if ( filepath.substring( filepath.length - 5 ) === ".test" ) { + testFiles.push( testFile( filepath ) ); + } + } ); + + testFiles.forEach( function( data, idx ) { + var Tokenizer = require( "tokenizer" ), + t = new Tokenizer( ), + res, + str = data.DATA, + currentObject + ; + + if ( !data.DATA || data.DATA.match( /^class|\$|^date_default_timezone_set|new Twig|new SimpleXMLElement|new ArrayObject|new ArrayIterator/ ) ) { + if ( data.EXCEPTION ) { + it( data.filepath + " -> " + data.TEST.trim( ), function( ) { + try { + twig( { + "data" : data.TEMPLATE.trim( ) + } ) + .render( res ) + .trim( ); + } catch( exp ) { + return; + } + + throw "Should have thrown an exception: " + data.EXCEPTION; + } ); + } else { + it( data.filepath + " -> " + data.TEST.trim( ), function( ) { + throw "Unsupported"; + } ); + } + delete testFiles[ idx ]; + return; + } + + t.on( "token", function( token, type ) { + // console.log( token, type, res, currentObject ); + + var tmpObject, + match, + tmpLength, + tmpString, + parentObject, + i + ; + + if ( type === 'symbol' ) { + if ( token === "return" ) { + return; + } + } + + if ( type === "whitespace" ) { + return; + } + + if ( type === "semicolon" ) { + return; + } + + if ( type === 'array' ) { + if ( !currentObject ) { + + currentObject = { + "type" : "array", + "keys" : [], + "values" : [] + }; + } else { + tmpObject = currentObject; + currentObject = { + "type" : "array", + "keys" : [], + "values" : [], + "parent" : tmpObject + }; + } + + return; + } + + if ( type === "string" ) { + match = token.match( /^'(([^']*| \\')*)'$/ ); + if ( match && match[1] ) { + tmpString = match[1]; + } else { + match = token.match( /^"(([^"]*| \\")*)"$/ ); + if ( match && match[1] ) { + tmpString = match[1]; + } + } + + if ( tmpString ) { + currentObject.last_value = tmpString.replace( /\\n/g, "\n" ).replace( /\\r/g, "\r" ); + return; + } + } + + if ( type === "number" ) { + currentObject.last_value = parseFloat( token, 10 ); + return; + } + + if ( type === "comma" ) { + if ( currentObject.last_value ) { + if ( currentObject.type === "array" ) { + tmpLength = currentObject.values.length; + currentObject.keys.push( tmpLength ); + currentObject.values.push( currentObject.last_value ); + delete currentObject.last_value; + + return; + } else if ( currentObject.type === "object" ) { + currentObject.keys.push( currentObject.last_key ); + currentObject.values.push( currentObject.last_value ); + delete currentObject.last_key; + delete currentObject.last_value; + return; + } + } + } + + if ( type === "key-label" ) { + currentObject.type = "object"; + currentObject.last_key = currentObject.last_value; + delete currentObject.last_value; + + return; + } + + if ( type === "end-object" ) { + if ( currentObject.type === "array" ) { + if ( currentObject.last_value ) { + tmpLength = currentObject.values.length; + currentObject.keys.push( tmpLength ); + currentObject.values.push( currentObject.last_value ); + delete currentObject.last_value; + } + } else if ( currentObject.type === "object" ) { + if ( currentObject.last_key && currentObject.last_value ) { + currentObject.keys.push( currentObject.last_key ); + currentObject.values.push( currentObject.last_value ); + delete currentObject.last_key; + delete currentObject.last_value; + } + } + + if ( currentObject.type === "array" ) { + tmpObject = []; + } else if ( currentObject.type === "object" ) { + tmpObject = {}; + } + + for ( i = 0; i < currentObject.values.length; i+=1 ) { + tmpObject[ currentObject.keys[i] ] = currentObject.values[i]; + } + + if ( currentObject.parent ) { + parentObject = currentObject.parent; + delete currentObject.parent; + delete currentObject.last_key; + delete currentObject.last_value; + currentObject = parentObject; + currentObject.last_value = tmpObject; + } else { + res = tmpObject; + currentObject = undefined; + } + + return; + } + } ); + + t.on( "end", function( ) { + /* + if ( data.TEST.trim( ) === 'Twig supports the in operator' ) { + console.log( data.TEST.trim( ), res, data.DATA ); + console.log( "data.TEMPLATE" ); + console.log( data.TEMPLATE ); + console.log( data.TEMPLATE.substr( -1 ) ); + console.log( "data.EXPECT" ); + console.log( data.EXPECT ); + console.log( "data.RESULT" ); + console.log( + twig( { + "data" : data.TEMPLATE + } ) + .render( res ) + ); + } + */ + + it( data.filepath + " -> " + data.TEST.trim( ), function( ) { + twig( { + "data" : data.TEMPLATE.trim( ) + } ) + .render( res ) + .trim( ) + .should + .equal( data.EXPECT ); + } ); + } ); + + t.on( "error", function( err ) { + // console.log( err ); + } ); + + t.addRule( /^'([^']|\\')*'$/, 'string' ); + t.addRule( /^"([^"]|\\")*"$/, 'string' ); + t.addRule( /^'([^']|\\')*$/, 'maybe-string' ); + t.addRule( /^"([^"]|\\")*$/, 'maybe-string' ); + t.addRule( /^=$/, 'equal' ); + t.addRule( /^=>$/, 'key-label' ); + t.addRule( /^-\?\d+(\.\d+)?$/, 'number' ); + t.addRule( /^\d+$/, 'number' ); + t.addRule( /^\d+\.$/, 'maybe-float' ); + t.addRule( /^(true|false)$/, 'bool' ); + t.addRule( /^null$/, 'null' ); + t.addRule( /^array\s*\($/, 'array' ); + t.addRule( /^\($/, 'begin-object' ); + t.addRule( /^\)$/, 'end-object' ); + t.addRule( /^\[$/, 'begin-array' ); + t.addRule( /^\]$/, 'end-array' ); + t.addRule( /^,$/, 'comma' ); + t.addRule( /^'$/, 'ping' ); + t.addRule( /^;$/, 'semicolon' ); + t.addRule( /^"$/, 'double-ping' ); + t.addRule( /^\w+$/, "symbol" ); + t.addRule( /^(\s)+$/, 'whitespace' ); + + t.write( str + " " ); + t.end( ); + } ); + } ); + } ); + }, + + setup = function( ) { + var existsSync = fs.existsSync || path.existsSync; + + if ( existsSync( twigPhpDir ) ) { + runTest( ); + return; + } + }; + + setup( ); +} )( ); |