summaryrefslogtreecommitdiff
path: root/tools/doc/addon-verify.js
diff options
context:
space:
mode:
authorFedor Indutny <fedor.indutny@gmail.com>2014-01-18 22:49:18 +0000
committerFedor Indutny <fedor.indutny@gmail.com>2014-01-22 00:39:13 +0400
commit1442c1c6de1009a7f451a443c02b1450bcb5bc44 (patch)
tree32cace77dfd18e93d3edf85f1ace0e39456074a3 /tools/doc/addon-verify.js
parent2a0b619f7b830b2e34f1707f4428c77a6fcf33fc (diff)
downloadandroid-node-v8-1442c1c6de1009a7f451a443c02b1450bcb5bc44.tar.gz
android-node-v8-1442c1c6de1009a7f451a443c02b1450bcb5bc44.tar.bz2
android-node-v8-1442c1c6de1009a7f451a443c02b1450bcb5bc44.zip
addons: build and test examples
fix #6910
Diffstat (limited to 'tools/doc/addon-verify.js')
-rw-r--r--tools/doc/addon-verify.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/tools/doc/addon-verify.js b/tools/doc/addon-verify.js
new file mode 100644
index 0000000000..f87cfecdf5
--- /dev/null
+++ b/tools/doc/addon-verify.js
@@ -0,0 +1,94 @@
+var fs = require('fs');
+var path = require('path');
+var marked = require('marked');
+
+var doc = path.resolve(__dirname, '..', '..', 'doc', 'api', 'addons.markdown');
+var verifyDir = path.resolve(__dirname, '..', '..', 'test', 'addons');
+
+var contents = fs.readFileSync(doc).toString();
+
+var tokens = marked.lexer(contents, {});
+var files = null;
+var id = 0;
+
+// Just to make sure that all examples will be processed
+tokens.push({ type: 'heading' });
+
+var oldDirs = fs.readdirSync(verifyDir);
+oldDirs = oldDirs.filter(function(dir) {
+ return /^doc-/.test(dir);
+}).map(function(dir) {
+ return path.resolve(verifyDir, dir);
+});
+
+for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i];
+ if (token.type === 'heading') {
+ if (files && Object.keys(files).length !== 0) {
+ verifyFiles(files, function(err) {
+ if (err)
+ console.log(err);
+ else
+ console.log('done');
+ });
+ }
+ files = {};
+ } else if (token.type === 'code') {
+ var match = token.text.match(/^\/\/\s+(.*\.(?:cc|h|js))[\r\n]/);
+ if (match === null)
+ continue;
+ files[match[1]] = token.text;
+ }
+}
+
+function once(fn) {
+ var once = false;
+ return function() {
+ if (once)
+ return;
+ once = true;
+ fn.apply(this, arguments);
+ };
+}
+
+function verifyFiles(files, callback) {
+ var dir = path.resolve(verifyDir, 'doc-' + id++);
+
+ files = Object.keys(files).map(function(name) {
+ return {
+ path: path.resolve(dir, name),
+ name: name,
+ content: files[name]
+ };
+ });
+ files.push({
+ path: path.resolve(dir, 'binding.gyp'),
+ content: JSON.stringify({
+ targets: [
+ {
+ target_name: 'addon',
+ sources: files.map(function(file) {
+ return file.name;
+ })
+ }
+ ]
+ })
+ });
+
+ fs.mkdir(dir, function() {
+ // Ignore errors
+
+ var waiting = files.length;
+ for (var i = 0; i < files.length; i++)
+ fs.writeFile(files[i].path, files[i].content, next);
+
+ var done = once(callback);
+ function next(err) {
+ if (err)
+ return done(err);
+
+ if (--waiting === 0)
+ done();
+ }
+ });
+}