UNPKG

uupaa.test.js

Version:
179 lines (141 loc) 6.18 kB
#!/usr/bin/env node var USAGE = _multiline(function() {/* Usage: node TestPage.js [--help] [--verbose] [--nobrowser] [--nonode] [--addtime] */}); var NODE_TEST_PAGE = _multiline(function() {/* __SCRIPT__ */}); var BROWSER_TEST_PAGE = _multiline(function() {/* <!DOCTYPE html><html><head><title>test</title> <meta name="viewport" content="width=device-width, user-scalable=no"> <meta charset="utf-8"></head><body> <script id="worker" type="javascript/worker"> onmessage = function(event) { self.MESSAGE = event.data; __IMPORT_SCRIPTS__ self.postMessage({ error: self.errorMessage || "" }); }; </script> __SCRIPT__ </body></html> */}); function put(msg) { console.log(msg); } put.error = function(msg) { put("\u001b[31m" + msg + "\u001b[0m"); }; put.warn = function(msg) { put("\u001b[33m" + msg + "\u001b[0m"); }; put.info = function(msg) { put("\u001b[32m" + msg + "\u001b[0m"); }; var fs = require("fs"); var argv = process.argv.slice(2); var NodeModule = require("uupaa.nodemodule.js"); var package = JSON.parse(fs.readFileSync("package.json", "UTF-8")); var options = _parseCommandLineOptions({ help: false, // Boolean - show help. verbose: false, // Boolean - verbose mode. browser: true, // Boolean - update test/index.html file. node: true, // Boolean - update test/index.node.js file. addtime: false, // Boolean - add "?time=now" for URLString }); if (options.help) { put.warn( USAGE ); return; } var files = NodeModule.files({ dir: "", develop: true }); // { all, node, worker, browser, label } if (options.verbose) { put.info( "files: \n " + JSON.stringify(files, null, 2).replace(/\n/g, "\n ") + "\n" ); } if (options.browser) { var browserTestPage = _createBrowserTestPage(options, files, package); fs.writeFileSync("test/index.html", browserTestPage); if (options.verbose) { put.info( "update test/index.html: \n " + browserTestPage.replace(/\n/g, "\n " ) ); } } if (options.node) { var nodeTestPage = _createNodeTestPage(options, files, package); fs.writeFileSync("test/index.node.js", nodeTestPage); if (options.verbose) { put.info( "update test/index.node.js: \n " + nodeTestPage.replace(/\n/g, "\n " ) ); } } // ========================================================= function _createBrowserTestPage(options, // @arg Object - files, // @arg Object - { all, node, worker, browser, label } package) { // @arg Object - package.json // @ret String var build = package["x-build"] || package["build"]; var source = build["source"] || build["files"]; // [DEPRECATED] var importScriptFiles = NodeModule.uniqueArray(files.worker.concat(source).map(_worker)).unique; if ( /(all|worker)/i.test( build.target.join(" ") ) ) { importScriptFiles.push('importScripts(MESSAGE.BASE_DIR + "../' + build.output + '");'); if (options.addtime) { importScriptFiles.push('importScripts(MESSAGE.BASE_DIR + "./test.js?_=' + Date.now() + '");'); } else { importScriptFiles.push('importScripts(MESSAGE.BASE_DIR + "./test.js");'); } BROWSER_TEST_PAGE = BROWSER_TEST_PAGE.replace("__IMPORT_SCRIPTS__", importScriptFiles.join("\n ")); } else { BROWSER_TEST_PAGE = BROWSER_TEST_PAGE.replace("__IMPORT_SCRIPTS__", ""); } var scriptFiles = NodeModule.uniqueArray(files.browser.concat(source).map(_browser)).unique; if ( /(all|browser)/i.test( build.target.join(" ") ) ) { // browser ready module scriptFiles.push('<script src="../' + build.output + '"></script>'); if (options.addtime) { scriptFiles.push('<script src="./test.js?=_' + Date.now() + '"></script>'); } else { scriptFiles.push('<script src="./test.js"></script>'); } BROWSER_TEST_PAGE = BROWSER_TEST_PAGE.replace("__SCRIPT__", scriptFiles.join("\n")); } else { BROWSER_TEST_PAGE = BROWSER_TEST_PAGE.replace("__SCRIPT__", ""); } return BROWSER_TEST_PAGE; function _worker(file) { return 'importScripts(MESSAGE.BASE_DIR + "../' + file + '");'; } function _browser(file) { return '<script src="../' + file + '"></script>'; } } function _createNodeTestPage(options, // @arg Object files, // @arg Object - { all, node, worker, browser, label } package) { // @arg Object - package.json // @ret String var build = package["x-build"] || package["build"]; var source = build["source"] || build["files"]; // [DEPRECATED] var requireFiles = NodeModule.uniqueArray(files.node.concat(source).map(_node)).unique; if ( /(all|node)/i.test( build.target.join(" ") ) ) { // node ready module requireFiles.push('require("../' + build.output + '");'); requireFiles.push('require("./test.js");'); return NODE_TEST_PAGE.replace("__SCRIPT__", requireFiles.join("\n")); } return ""; function _node(file) { return 'require("../' + file + '");'; } } function _parseCommandLineOptions(options) { // @arg Object: // @ret Object: for (var i = 0, iz = argv.length; i < iz; ++i) { switch (argv[i]) { case "-h": case "--help": options.help = true; break; case "-v": case "--verbose": options.verbose = true; break; case "--nobrowser": options.browser = false; break; case "--nonode": options.node = false; break; case "--addtime": options.addtime = false; break; default: } } return options; } function _multiline(fn) { // @arg Function: // @ret String: return (fn + "").split("\n").slice(1, -1).join("\n"); }