dot.dot.dot.exampol
This commit is contained in:
commit
a0bc2d79de
406 changed files with 34577 additions and 0 deletions
1
node_modules/bunker/.npmignore
generated
vendored
Normal file
1
node_modules/bunker/.npmignore
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
node_modules
|
4
node_modules/bunker/.travis.yml
generated
vendored
Normal file
4
node_modules/bunker/.travis.yml
generated
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
language: node_js
|
||||
node_js:
|
||||
- 0.4
|
||||
- 0.6
|
82
node_modules/bunker/README.markdown
generated
vendored
Normal file
82
node_modules/bunker/README.markdown
generated
vendored
Normal file
|
@ -0,0 +1,82 @@
|
|||
bunker
|
||||
======
|
||||
|
||||
Bunker is a module to calculate code coverage using native javascript
|
||||
[burrito](https://github.com/substack/node-burrito) AST trickery.
|
||||
|
||||
[](http://travis-ci.org/substack/node-bunker)
|
||||
|
||||

|
||||
|
||||
examples
|
||||
========
|
||||
|
||||
tiny
|
||||
----
|
||||
|
||||
````javascript
|
||||
var bunker = require('bunker');
|
||||
var b = bunker('var x = 0; for (var i = 0; i < 30; i++) { x++ }');
|
||||
|
||||
var counts = {};
|
||||
|
||||
b.on('node', function (node) {
|
||||
if (!counts[node.id]) {
|
||||
counts[node.id] = { times : 0, node : node };
|
||||
}
|
||||
counts[node.id].times ++;
|
||||
});
|
||||
|
||||
b.run();
|
||||
|
||||
Object.keys(counts).forEach(function (key) {
|
||||
var count = counts[key];
|
||||
console.log(count.times + ' : ' + count.node.source());
|
||||
});
|
||||
````
|
||||
|
||||
output:
|
||||
|
||||
$ node example/tiny.js
|
||||
1 : var x=0;
|
||||
31 : i<30
|
||||
30 : i++
|
||||
30 : x++;
|
||||
30 : x++
|
||||
|
||||
methods
|
||||
=======
|
||||
|
||||
var bunker = require('bunker');
|
||||
|
||||
var b = bunker(src)
|
||||
-------------------
|
||||
|
||||
Create a new bunker code coverageifier with some source `src`.
|
||||
|
||||
The bunker object `b` is an `EventEmitter` that emits `'node'` events with two
|
||||
parameters:
|
||||
|
||||
* `node` - the [burrito](https://github.com/substack/node-burrito) node object
|
||||
* `stack` - the stack, [stackedy](https://github.com/substack/node-stackedy) style
|
||||
|
||||
b.include(src)
|
||||
--------------
|
||||
|
||||
Include some source into the bunker.
|
||||
|
||||
b.compile()
|
||||
-----------
|
||||
|
||||
Return the source wrapped with burrito.
|
||||
|
||||
b.assign(context={})
|
||||
--------------------
|
||||
|
||||
Assign the statement-tracking functions into `context`.
|
||||
|
||||
b.run(context={})
|
||||
-----------------
|
||||
|
||||
Run the source using `vm.runInNewContext()` with some `context`.
|
||||
The statement-tracking functions will be added to `context` by `assign()`.
|
51
node_modules/bunker/example/prof.js
generated
vendored
Normal file
51
node_modules/bunker/example/prof.js
generated
vendored
Normal file
|
@ -0,0 +1,51 @@
|
|||
var bunker = require('bunker');
|
||||
var b = bunker('(' + function () {
|
||||
function beep () {
|
||||
var x = 0;
|
||||
for (var i = 0; i < 1000; i++) {
|
||||
for (var j = 0; j < 100; j++) {
|
||||
x += j;
|
||||
}
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
beep();
|
||||
|
||||
} + ')()');
|
||||
|
||||
var counts = {};
|
||||
|
||||
b.on('node', function (node) {
|
||||
if (!counts[node.id]) {
|
||||
counts[node.id] = { times : 0, node : node, elapsed : 0 };
|
||||
}
|
||||
counts[node.id].times ++;
|
||||
|
||||
var now = Date.now();
|
||||
|
||||
if (last.id !== undefined) {
|
||||
counts[last.id].elapsed += last.
|
||||
}
|
||||
|
||||
if (node.name === 'call') {
|
||||
var start = now;
|
||||
|
||||
last.id = node.id;
|
||||
counts[node.id].elapsed += Date.now() - start;
|
||||
}
|
||||
else {
|
||||
counts[node.id].elapsed += now - last;
|
||||
last = now;
|
||||
}
|
||||
});
|
||||
|
||||
b.run();
|
||||
|
||||
Object.keys(counts).forEach(function (key) {
|
||||
var count = counts[key];
|
||||
console.log(
|
||||
[ count.times, count.node.source(), count.elapsed ]
|
||||
.join(' : ')
|
||||
);
|
||||
});
|
18
node_modules/bunker/example/tiny.js
generated
vendored
Normal file
18
node_modules/bunker/example/tiny.js
generated
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
var bunker = require('bunker');
|
||||
var b = bunker('var x = 0; for (var i = 0; i < 30; i++) { x++ }');
|
||||
|
||||
var counts = {};
|
||||
|
||||
b.on('node', function (node) {
|
||||
if (!counts[node.id]) {
|
||||
counts[node.id] = { times : 0, node : node };
|
||||
}
|
||||
counts[node.id].times ++;
|
||||
});
|
||||
|
||||
b.run();
|
||||
|
||||
Object.keys(counts).forEach(function (key) {
|
||||
var count = counts[key];
|
||||
console.log(count.times + ' : ' + count.node.source());
|
||||
});
|
31
node_modules/bunker/example/top/run.js
generated
vendored
Normal file
31
node_modules/bunker/example/top/run.js
generated
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
var bunker = require('bunker');
|
||||
var fs = require('fs');
|
||||
var src = fs.readFileSync(__dirname + '/src.js', 'utf8');
|
||||
|
||||
var counts = {};
|
||||
|
||||
var b = bunker(src);
|
||||
b.on('node', function (node) {
|
||||
if (!counts[node.id]) {
|
||||
counts[node.id] = { times : 0, node : node };
|
||||
}
|
||||
counts[node.id].times ++;
|
||||
});
|
||||
|
||||
b.run({
|
||||
setInterval : setInterval,
|
||||
clearInterval : clearInterval,
|
||||
end : function () {
|
||||
Object.keys(counts)
|
||||
.sort(function (a, b) {
|
||||
return counts[b].times - counts[a].times
|
||||
})
|
||||
.forEach(function (key) {
|
||||
var count = counts[key];
|
||||
console.log(
|
||||
count.times + ' : ' + count.node.source()
|
||||
);
|
||||
})
|
||||
;
|
||||
}
|
||||
});
|
18
node_modules/bunker/example/top/src.js
generated
vendored
Normal file
18
node_modules/bunker/example/top/src.js
generated
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
function boop () {
|
||||
for (var i = 0; i < 30; i++) {
|
||||
nop();
|
||||
}
|
||||
}
|
||||
|
||||
function nop () {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
var times = 0;
|
||||
var iv = setInterval(function () {
|
||||
if (++times === 10) {
|
||||
clearInterval(iv);
|
||||
end();
|
||||
}
|
||||
else boop()
|
||||
}, 100);
|
116
node_modules/bunker/index.js
generated
vendored
Normal file
116
node_modules/bunker/index.js
generated
vendored
Normal file
|
@ -0,0 +1,116 @@
|
|||
var burrito = require('burrito');
|
||||
var vm = require('vm');
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
module.exports = function (src) {
|
||||
var b = new Bunker();
|
||||
if (src) b.include(src);
|
||||
return b;
|
||||
};
|
||||
|
||||
function Bunker () {
|
||||
this.sources = [];
|
||||
this.nodes = [];
|
||||
|
||||
this.names = {
|
||||
call : burrito.generateName(6),
|
||||
expr : burrito.generateName(6),
|
||||
stat : burrito.generateName(6),
|
||||
return : burrito.generateName(6)
|
||||
};
|
||||
}
|
||||
|
||||
Bunker.prototype = new EventEmitter;
|
||||
|
||||
Bunker.prototype.include = function (src) {
|
||||
this.sources.push(src);
|
||||
this.source = null;
|
||||
return this;
|
||||
};
|
||||
|
||||
Bunker.prototype.compile = function () {
|
||||
var src = this.sources.join('\n');
|
||||
var nodes = this.nodes;
|
||||
var names = this.names;
|
||||
|
||||
return burrito(src, function (node) {
|
||||
var i = nodes.length;
|
||||
|
||||
if (node.name === 'call') {
|
||||
nodes.push(node);
|
||||
node.wrap(names.call + '(' + i + ')(%s)');
|
||||
}
|
||||
else if (node.name === 'stat' || node.name === 'throw'
|
||||
|| node.name === 'var') {
|
||||
nodes.push(node);
|
||||
node.wrap('{' + names.stat + '(' + i + ');%s}');
|
||||
}
|
||||
else if (node.name === 'return') {
|
||||
nodes.push(node);
|
||||
// We need to wrap the new source in a function definition
|
||||
// so that UglifyJS will allow the presence of return
|
||||
var stat = names.stat + '(' + i + ');';
|
||||
var wrapped = 'function ' + names.return + '() {'
|
||||
+ stat + node.source()
|
||||
+'}'
|
||||
;
|
||||
var parsed = burrito.parse(wrapped);
|
||||
// Remove the function definition from the AST
|
||||
parsed[1] = parsed[1][0][3];
|
||||
node.state.update(parsed, true);
|
||||
}
|
||||
else if (node.name === 'binary') {
|
||||
nodes.push(node);
|
||||
node.wrap(names.expr + '(' + i + ')(%s)');
|
||||
}
|
||||
else if (node.name === 'unary-postfix' || node.name === 'unary-prefix') {
|
||||
nodes.push(node);
|
||||
node.wrap(names.expr + '(' + i + ')(%s)');
|
||||
}
|
||||
|
||||
if (i !== nodes.length) {
|
||||
node.id = i;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Bunker.prototype.assign = function (context) {
|
||||
if (!context) context = {};
|
||||
|
||||
var self = this;
|
||||
var stack = [];
|
||||
|
||||
context[self.names.call] = function (i) {
|
||||
var node = self.nodes[i];
|
||||
stack.unshift(node);
|
||||
self.emit('node', node, stack);
|
||||
|
||||
return function (expr) {
|
||||
stack.shift();
|
||||
return expr;
|
||||
};
|
||||
};
|
||||
|
||||
context[self.names.expr] = function (i) {
|
||||
var node = self.nodes[i];
|
||||
self.emit('node', node, stack);
|
||||
|
||||
return function (expr) {
|
||||
return expr;
|
||||
};
|
||||
};
|
||||
|
||||
context[self.names.stat] = function (i) {
|
||||
var node = self.nodes[i];
|
||||
self.emit('node', node, stack);
|
||||
};
|
||||
|
||||
return context;
|
||||
};
|
||||
|
||||
Bunker.prototype.run = function (context) {
|
||||
var src = this.compile();
|
||||
vm.runInNewContext(src, this.assign(context));
|
||||
|
||||
return this;
|
||||
};
|
35
node_modules/bunker/package.json
generated
vendored
Normal file
35
node_modules/bunker/package.json
generated
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"name" : "bunker",
|
||||
"version" : "0.1.2",
|
||||
"description" : "code coverage in native javascript",
|
||||
"main" : "index.js",
|
||||
"directories" : {
|
||||
"lib" : ".",
|
||||
"example" : "example",
|
||||
"test" : "test"
|
||||
},
|
||||
"dependencies" : {
|
||||
"burrito" : ">=0.2.5 <0.3"
|
||||
},
|
||||
"devDependencies" : {
|
||||
"tap" : "~0.2.4"
|
||||
},
|
||||
"scripts" : {
|
||||
"test" : "tap test/*.js"
|
||||
},
|
||||
"repository" : {
|
||||
"type" : "git",
|
||||
"url" : "http://github.com/substack/node-bunker.git"
|
||||
},
|
||||
"keywords" : [
|
||||
"code",
|
||||
"coverage"
|
||||
],
|
||||
"author" : {
|
||||
"name" : "James Halliday",
|
||||
"email" : "mail@substack.net",
|
||||
"url" : "http://substack.net"
|
||||
},
|
||||
"license" : "MIT/X11",
|
||||
"engine" : { "node" : ">=0.4" }
|
||||
}
|
36
node_modules/bunker/test/cover.js
generated
vendored
Normal file
36
node_modules/bunker/test/cover.js
generated
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
var test = require('tap').test;
|
||||
var bunker = require('../');
|
||||
var fs = require('fs');
|
||||
|
||||
var src = fs.readdirSync(__dirname + '/src').reduce(function (acc, file) {
|
||||
acc[file] = fs.readFileSync(__dirname + '/src/' + file, 'utf8');
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
test('cover', function (t) {
|
||||
t.plan(1);
|
||||
|
||||
var b = bunker(src['cover.js']);
|
||||
var counts = {};
|
||||
|
||||
b.on('node', function (node) {
|
||||
counts[node.name] = (counts[node.name] || 0) + 1;
|
||||
});
|
||||
|
||||
b.run({
|
||||
setInterval : setInterval,
|
||||
clearInterval : function () {
|
||||
process.nextTick(function () {
|
||||
t.same(counts, {
|
||||
binary : 11,
|
||||
'unary-postfix' : 11,
|
||||
'var' : 2,
|
||||
call : 2, // setInterval and clearInterval
|
||||
stat : 1, // clearInterval
|
||||
});
|
||||
});
|
||||
|
||||
return clearInterval.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
});
|
29
node_modules/bunker/test/return.js
generated
vendored
Normal file
29
node_modules/bunker/test/return.js
generated
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
var test = require('tap').test;
|
||||
var bunker = require('../');
|
||||
|
||||
test('cover', function (t) {
|
||||
t.plan(1);
|
||||
|
||||
var b = bunker('(' + function () {
|
||||
function foo () {}
|
||||
function bar () {}
|
||||
|
||||
(function () {
|
||||
return foo();
|
||||
})();
|
||||
} + ')()');
|
||||
var counts = {};
|
||||
|
||||
b.on('node', function (node) {
|
||||
counts[node.name] = (counts[node.name] || 0) + 1;
|
||||
});
|
||||
b.run();
|
||||
|
||||
process.nextTick(function () {
|
||||
t.same(counts, {
|
||||
stat : 2,
|
||||
call : 2,
|
||||
return : 1,
|
||||
});
|
||||
});
|
||||
});
|
6
node_modules/bunker/test/src/cover.js
generated
vendored
Normal file
6
node_modules/bunker/test/src/cover.js
generated
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
var i = 0;
|
||||
var iv = setInterval(function () {
|
||||
if (i++ === 10) {
|
||||
clearInterval(iv);
|
||||
}
|
||||
}, 10);
|
Loading…
Add table
Add a link
Reference in a new issue