UNPKG

leetcode-cli

Version:
101 lines (80 loc) 2.56 kB
var fs = require('fs'); var _ = require('underscore'); var h = require('../helper'); var chalk = require('../chalk'); var log = require('../log'); var core = require('../core'); var session = require('../session'); var cmd = { command: 'test <filename>', aliases: ['run'], desc: 'send solution to leetcode and run test', builder: { testcase: { alias: 't', type: 'string', default: '', describe: 'Provide test case in command line' }, i: { type: 'boolean', default: false, describe: 'Provide test case interactively' } } }; function printResult(actual, expect, k) { if (!actual.hasOwnProperty(k)) return; // HACk: leetcode still return 'Accepted' even the answer is wrong!! var v = actual[k] || ''; if (k === 'state' && v === 'Accepted') return; var ok = actual.ok; if (expect && !_.isEqual(actual[k], expect[k])) ok = false; var lines = _.isArray(v) ? v : [v]; lines.forEach(function(line) { if (k !== 'state') line = k + ': ' + line; log.info(' ' + h.prettyText(' ' + line, ok)); }); } function runTest(argv) { if (!fs.existsSync(argv.filename)) return log.error('File ' + argv.filename + ' not exist!'); // use the 1st section in filename as keyword // e.g. two-sum.cpp, or two-sum.78502271.ac.cpp var keyword = h.getFilename(argv.filename).split('.')[0]; core.getProblem(keyword, function(e, problem) { if (e) return log.fail(e); if (!problem.testable) return log.fail('not testable? please submit directly!'); if (argv.testcase) problem.testcase = argv.testcase.replace(/\\n/g, '\n'); if (!problem.testcase) return log.fail('missing testcase?'); problem.file = argv.filename; log.info('\nInput data:'); log.info(problem.testcase); core.testProblem(problem, function(e, results) { if (e) return log.fail(e); for (var i = 0; i < results.length; ++i) { log.info(); log.info(chalk.yellow(results[i].type)); printResult(results[i], null, 'state'); printResult(results[i], null, 'runtime'); printResult(results[i], results[i + 1], 'answer'); printResult(results[i], results[i + 1], 'stdout'); printResult(results[i], null, 'error'); } }); }); } cmd.handler = function(argv) { session.argv = argv; if (!argv.i) return runTest(argv); h.readStdin(function(e, data) { if (e) return log.fail(e); argv.testcase = data; return runTest(argv); }); }; module.exports = cmd;