Skip to content

Commit e054ef4

Browse files
committed
Make sure dependency parsing works locutusjs#217
1 parent 8dab2d5 commit e054ef4

File tree

7 files changed

+443
-138
lines changed

7 files changed

+443
-138
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"dependencies": {
1111
"cli": "^0.6.5",
1212
"deep-equal": "^1.0.0",
13+
"deep-equal-with-difflet": "^0.1.2",
1314
"glob": "^4.4.0",
1415
"js-beautify": "^1.5.4",
1516
"mocha": "^2.1.0",

test/fixtures/fix_array_change_key_case.js

Lines changed: 361 additions & 0 deletions
Large diffs are not rendered by default.

test/fixtures/array_change_key_case.js renamed to test/fixtures/func_array_change_key_case.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ function array_change_key_case(array, cs) {
33
// original by: Ates Goral (http://magnetiq.com)
44
// improved by: marrtins
55
// improved by: Brett Zamir (http://brett-zamir.me)
6+
// depends on: pos
7+
// depends on: is_binary
68
// example 1: array_change_key_case(42);
79
// returns 1: false
810
// example 2: array_change_key_case([ 3, 5 ]);

test/fixtures/func_current.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
function current(arr) {
2+
// discuss at: http://phpjs.org/functions/current/
3+
// original by: Brett Zamir (http://brett-zamir.me)
4+
// note: Uses global: php_js to store the array pointer
5+
// example 1: transport = ['foot', 'bike', 'car', 'plane'];
6+
// example 1: current(transport);
7+
// returns 1: 'foot'
8+
9+
this.php_js = this.php_js || {};
10+
this.php_js.pointers = this.php_js.pointers || [];
11+
var indexOf = function (value) {
12+
for (var i = 0, length = this.length; i < length; i++) {
13+
if (this[i] === value) {
14+
return i;
15+
}
16+
}
17+
return -1;
18+
};
19+
// END REDUNDANT
20+
var pointers = this.php_js.pointers;
21+
if (!pointers.indexOf) {
22+
pointers.indexOf = indexOf;
23+
}
24+
if (pointers.indexOf(arr) === -1) {
25+
pointers.push(arr, 0);
26+
}
27+
var arrpos = pointers.indexOf(arr);
28+
var cursor = pointers[arrpos + 1];
29+
if (Object.prototype.toString.call(arr) === '[object Array]') {
30+
return arr[cursor] || false;
31+
}
32+
var ct = 0;
33+
for (var k in arr) {
34+
if (ct === cursor) {
35+
return arr[k];
36+
}
37+
ct++;
38+
}
39+
// Empty
40+
return false;
41+
}

test/fixtures/func_is_binary.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
function is_binary(vr) {
2+
// discuss at: http://phpjs.org/functions/is_binary/
3+
// original by: Brett Zamir (http://brett-zamir.me)
4+
// example 1: is_binary('This could be binary as far as JavaScript knows...');
5+
// returns 1: true
6+
7+
return typeof vr === 'string'; // If it is a string of any kind, it could be binary
8+
}

test/fixtures/func_pos.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function pos(arr) {
2+
// discuss at: http://phpjs.org/functions/pos/
3+
// original by: Brett Zamir (http://brett-zamir.me)
4+
// note: Uses global: php_js to store the array pointer
5+
// depends on: current
6+
// example 1: transport = ['foot', 'bike', 'car', 'plane'];
7+
// example 1: pos(transport);
8+
// returns 1: 'foot'
9+
10+
return this.current(arr);
11+
}

test/test-phpjsutil.js

Lines changed: 19 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -1,155 +1,36 @@
11
var assert = require('assert');
22
var fs = require('fs');
3+
var glob = require('glob');
4+
var path = require('path');
35
var __root = __dirname + '/..';
46
var phpjsutil = new require('../lib/phpjsutil');
57
var PhpjsUtil = phpjsutil({
68
injectDependencies: ['ini_set', 'ini_get'],
79
});
10+
assert.deepEqualWithDifflet = require('deep-equal-with-difflet');
811

912
var files = {
10-
"array_change_key_case": fs.readFileSync(__root + '/test/fixtures/array_change_key_case.js', 'utf-8')
13+
"array_change_key_case": fs.readFileSync(__root + '/test/fixtures/func_array_change_key_case.js', 'utf-8'),
14+
"pos" : fs.readFileSync(__root + '/test/fixtures/func_pos.js', 'utf-8'),
15+
"current" : fs.readFileSync(__root + '/test/fixtures/func_current.js', 'utf-8'),
16+
"is_binary" : fs.readFileSync(__root + '/test/fixtures/func_is_binary.js', 'utf-8')
1117
};
1218

13-
var fixtures = {
14-
"array_change_key_case": {
15-
"headKeys":{
16-
"discuss at":[
17-
[
18-
"http://phpjs.org/functions/array_change_key_case/"
19-
]
20-
],
21-
"original by":[
22-
[
23-
"Ates Goral (http://magnetiq.com)"
24-
]
25-
],
26-
"improved by":[
27-
[
28-
"marrtins",
29-
"Brett Zamir (http://brett-zamir.me)"
30-
]
31-
],
32-
"example":[
33-
[
34-
"array_change_key_case(42);"
35-
],
36-
[
37-
"array_change_key_case([ 3, 5 ]);"
38-
],
39-
[
40-
"array_change_key_case({ FuBaR: 42 });"
41-
],
42-
[
43-
"array_change_key_case({ FuBaR: 42 }, 'CASE_LOWER');"
44-
],
45-
[
46-
"array_change_key_case({ FuBaR: 42 }, 'CASE_UPPER');"
47-
],
48-
[
49-
"array_change_key_case({ FuBaR: 42 }, 2);"
50-
],
51-
[
52-
"ini_set('phpjs.return_phpjs_arrays', 'on');",
53-
"var arr = [{a: 0}, {B: 1}, {c: 2}];",
54-
"var newArr = array_change_key_case(arr);",
55-
"newArr.splice(1, 1);"
56-
]
57-
],
58-
"returns":[
59-
[
60-
"false"
61-
],
62-
[
63-
"[3, 5]"
64-
],
65-
[
66-
"{\"fubar\": 42}"
67-
],
68-
[
69-
"{\"fubar\": 42}"
70-
],
71-
[
72-
"{\"FUBAR\": 42}"
73-
],
74-
[
75-
"{\"FUBAR\": 42}"
76-
],
77-
[
78-
"{b: 1}"
79-
]
80-
]
81-
},
82-
"body":"var case_fn, key, tmp_ar = {};\n\n if (Object.prototype.toString.call(array) === '[object Array]') {\n return array;\n }\n if (array && typeof array === 'object' && array.change_key_case) { // Duck-type check for our own array()-created PHPJS_Array\n return array.change_key_case(cs);\n }\n if (array && typeof array === 'object') {\n case_fn = (!cs || cs === 'CASE_LOWER') ? 'toLowerCase' : 'toUpperCase';\n for (key in array) {\n tmp_ar[key[case_fn]()] = array[key];\n }\n return tmp_ar;\n }\n\n return false;",
83-
"head":" // discuss at: http://phpjs.org/functions/array_change_key_case/\n // original by: Ates Goral (http://magnetiq.com)\n // improved by: marrtins\n // improved by: Brett Zamir (http://brett-zamir.me)\n // example 1: array_change_key_case(42);\n // returns 1: false\n // example 2: array_change_key_case([ 3, 5 ]);\n // returns 2: [3, 5]\n // example 3: array_change_key_case({ FuBaR: 42 });\n // returns 3: {\"fubar\": 42}\n // example 4: array_change_key_case({ FuBaR: 42 }, 'CASE_LOWER');\n // returns 4: {\"fubar\": 42}\n // example 5: array_change_key_case({ FuBaR: 42 }, 'CASE_UPPER');\n // returns 5: {\"FUBAR\": 42}\n // example 6: array_change_key_case({ FuBaR: 42 }, 2);\n // returns 6: {\"FUBAR\": 42}\n // example 7: ini_set('phpjs.return_phpjs_arrays', 'on');\n // example 7: var arr = [{a: 0}, {B: 1}, {c: 2}];\n // example 7: var newArr = array_change_key_case(arr);\n // example 7: newArr.splice(1, 1);\n // returns 7: {b: 1}",
84-
"name":"array_change_key_case",
85-
"code":"function array_change_key_case(array, cs) {\n // discuss at: http://phpjs.org/functions/array_change_key_case/\n // original by: Ates Goral (http://magnetiq.com)\n // improved by: marrtins\n // improved by: Brett Zamir (http://brett-zamir.me)\n // example 1: array_change_key_case(42);\n // returns 1: false\n // example 2: array_change_key_case([ 3, 5 ]);\n // returns 2: [3, 5]\n // example 3: array_change_key_case({ FuBaR: 42 });\n // returns 3: {\"fubar\": 42}\n // example 4: array_change_key_case({ FuBaR: 42 }, 'CASE_LOWER');\n // returns 4: {\"fubar\": 42}\n // example 5: array_change_key_case({ FuBaR: 42 }, 'CASE_UPPER');\n // returns 5: {\"FUBAR\": 42}\n // example 6: array_change_key_case({ FuBaR: 42 }, 2);\n // returns 6: {\"FUBAR\": 42}\n // example 7: ini_set('phpjs.return_phpjs_arrays', 'on');\n // example 7: var arr = [{a: 0}, {B: 1}, {c: 2}];\n // example 7: var newArr = array_change_key_case(arr);\n // example 7: newArr.splice(1, 1);\n // returns 7: {b: 1}\n\n var case_fn, key, tmp_ar = {};\n\n if (Object.prototype.toString.call(array) === '[object Array]') {\n return array;\n }\n if (array && typeof array === 'object' && array.change_key_case) { // Duck-type check for our own array()-created PHPJS_Array\n return array.change_key_case(cs);\n }\n if (array && typeof array === 'object') {\n case_fn = (!cs || cs === 'CASE_LOWER') ? 'toLowerCase' : 'toUpperCase';\n for (key in array) {\n tmp_ar[key[case_fn]()] = array[key];\n }\n return tmp_ar;\n }\n\n return false;\n}",
86-
"dependencies":{
87-
88-
},
89-
"func_signature":"function array_change_key_case(array, cs) {\n ",
90-
"func_name":"array_change_key_case",
91-
"func_arguments":[
92-
"array",
93-
"cs"
94-
],
95-
"commentBlocks":[
96-
{
97-
"clean":[
98-
"discuss at: http://phpjs.org/functions/array_change_key_case/",
99-
"original by: Ates Goral (http://magnetiq.com)",
100-
"improved by: marrtins",
101-
"improved by: Brett Zamir (http://brett-zamir.me)",
102-
"example 1: array_change_key_case(42);",
103-
"returns 1: false",
104-
"example 2: array_change_key_case([ 3, 5 ]);",
105-
"returns 2: [3, 5]",
106-
"example 3: array_change_key_case({ FuBaR: 42 });",
107-
"returns 3: {\"fubar\": 42}",
108-
"example 4: array_change_key_case({ FuBaR: 42 }, 'CASE_LOWER');",
109-
"returns 4: {\"fubar\": 42}",
110-
"example 5: array_change_key_case({ FuBaR: 42 }, 'CASE_UPPER');",
111-
"returns 5: {\"FUBAR\": 42}",
112-
"example 6: array_change_key_case({ FuBaR: 42 }, 2);",
113-
"returns 6: {\"FUBAR\": 42}",
114-
"example 7: ini_set('phpjs.return_phpjs_arrays', 'on');",
115-
"example 7: var arr = [{a: 0}, {B: 1}, {c: 2}];",
116-
"example 7: var newArr = array_change_key_case(arr);",
117-
"example 7: newArr.splice(1, 1);",
118-
"returns 7: {b: 1}"
119-
],
120-
"raw":[
121-
" // discuss at: http://phpjs.org/functions/array_change_key_case/",
122-
" // original by: Ates Goral (http://magnetiq.com)",
123-
" // improved by: marrtins",
124-
" // improved by: Brett Zamir (http://brett-zamir.me)",
125-
" // example 1: array_change_key_case(42);",
126-
" // returns 1: false",
127-
" // example 2: array_change_key_case([ 3, 5 ]);",
128-
" // returns 2: [3, 5]",
129-
" // example 3: array_change_key_case({ FuBaR: 42 });",
130-
" // returns 3: {\"fubar\": 42}",
131-
" // example 4: array_change_key_case({ FuBaR: 42 }, 'CASE_LOWER');",
132-
" // returns 4: {\"fubar\": 42}",
133-
" // example 5: array_change_key_case({ FuBaR: 42 }, 'CASE_UPPER');",
134-
" // returns 5: {\"FUBAR\": 42}",
135-
" // example 6: array_change_key_case({ FuBaR: 42 }, 2);",
136-
" // returns 6: {\"FUBAR\": 42}",
137-
" // example 7: ini_set('phpjs.return_phpjs_arrays', 'on');",
138-
" // example 7: var arr = [{a: 0}, {B: 1}, {c: 2}];",
139-
" // example 7: var newArr = array_change_key_case(arr);",
140-
" // example 7: newArr.splice(1, 1);",
141-
" // returns 7: {b: 1}"
142-
]
143-
}
144-
]
145-
}
19+
PhpjsUtil.opener = function(name, cb) {
20+
return cb(null, files[name]);
14621
};
14722

148-
describe('phpjsutil', function(){
149-
describe('parse', function(){
150-
it('should return exact fixture', function(done){
23+
var fixture = JSON.parse(fs.readFileSync(__root + '/test/fixtures/fix_array_change_key_case.js', 'utf-8'));
24+
25+
describe('phpjsutil', function() {
26+
describe('parse', function() {
27+
it('should return exact fixture', function(done) {
15128
PhpjsUtil.parse('array_change_key_case', files['array_change_key_case'], function(err, params) {
152-
assert.deepEqual(params, fixtures['array_change_key_case']);
29+
assert.equal(null, err);
30+
31+
// fs.writeFileSync(__root + '/test/fixtures/fix_array_change_key_case.js', JSON.stringify(params, null, ' '));
32+
33+
assert.deepEqualWithDifflet(params, fixture);
15334
done();
15435
});
15536
});

0 commit comments

Comments
 (0)