diff options
author | Fedor Indutny <fedor.indutny@gmail.com> | 2014-01-18 22:49:18 +0000 |
---|---|---|
committer | Fedor Indutny <fedor.indutny@gmail.com> | 2014-01-22 00:39:13 +0400 |
commit | 1442c1c6de1009a7f451a443c02b1450bcb5bc44 (patch) | |
tree | 32cace77dfd18e93d3edf85f1ace0e39456074a3 /tools/doc/addon-verify.js | |
parent | 2a0b619f7b830b2e34f1707f4428c77a6fcf33fc (diff) | |
download | android-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.js | 94 |
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(); + } + }); +} |