diff --git a/packages/comment-to-assert/bin/cmd.js b/packages/comment-to-assert/bin/cmd.js new file mode 100755 index 0000000..a10de00 --- /dev/null +++ b/packages/comment-to-assert/bin/cmd.js @@ -0,0 +1,14 @@ +#!/usr/bin/env node +var toAssert = require('../').toAssertFromSource; +var concat = require('concat-stream'); +var fs = require('fs'); +var path = require("path"); +var file = process.argv[2]; +var input = file && file !== '-' + ? fs.createReadStream(process.argv[2]) + : process.stdin + ; +input.pipe(concat(function (buf) { + var filePath = path.join(process.cwd(), file); + console.log(toAssert(buf.toString('utf8'), filePath)); +})); \ No newline at end of file diff --git a/packages/comment-to-assert/package.json b/packages/comment-to-assert/package.json index e421537..51c8cb2 100644 --- a/packages/comment-to-assert/package.json +++ b/packages/comment-to-assert/package.json @@ -14,8 +14,12 @@ "version": "1.0.1", "description": "convert line comment to assert.", "main": "lib/comment-to-assert.js", + "bin": { + "comment-to-assert": "./bin/cmd.js" + }, "files": [ - "lib" + "lib", + "bin" ], "directories": { "test": "test" @@ -23,6 +27,7 @@ "scripts": { "build": "babel src --out-dir lib --source-maps", "watch": "babel src --out-dir lib --watch --source-maps", + "prepublish": "npm run --if-present build", "test": "mocha && npm run example", "example": "npm i && npm run build && cd example && npm test" }, @@ -32,6 +37,8 @@ "doctest" ], "dependencies": { + "ast-source": "^1.0.1", + "concat-stream": "^1.5.0", "escodegen": "^1.6.1", "espree": "^2.2.3", "esprima": "^2.5.0", diff --git a/packages/comment-to-assert/src/comment-to-assert.js b/packages/comment-to-assert/src/comment-to-assert.js index b0ecd15..ff110ff 100644 --- a/packages/comment-to-assert/src/comment-to-assert.js +++ b/packages/comment-to-assert/src/comment-to-assert.js @@ -4,6 +4,7 @@ import assert from "assert" import {parse} from "esprima" import {generate} from "escodegen" import estraverse from "estraverse" +import ASTSource from "ast-source" import { tryGetCodeFromComments, wrapAssert @@ -12,22 +13,15 @@ import { * transform code to asserted code * if want to source map, use toAssertFromAST. * @param {string} code + * @param {string} filePath * @returns {string} */ -export function toAssertFromSource(code) { - var parseOption = { - loc: true, - range: true, - comment: true, - attachComment: true - }; - var generateOption = { - comment: true, - sourcemap: true - }; - var AST = parse(code, parseOption); - var modifiedAST = toAssertFromAST(AST); - return generate(modifiedAST, generateOption); +export function toAssertFromSource(code, filePath) { + var source = new ASTSource(code, { + filePath: filePath + }); + var output = source.transform(toAssertFromAST).output(); + return output.codeWithMap; } /** * transform AST to asserted AST. diff --git a/packages/comment-to-assert/test/comment-to-assert-test.js b/packages/comment-to-assert/test/comment-to-assert-test.js index 544a4d2..61585bb 100644 --- a/packages/comment-to-assert/test/comment-to-assert-test.js +++ b/packages/comment-to-assert/test/comment-to-assert-test.js @@ -19,20 +19,18 @@ describe("comment-to-assert", function () { describe("#toAssertFromSource", function () { it("should return code", function () { var code = "var a = 1;"; - var result = toAssertFromSource(code); + var result = toAssertFromSource(code, "file.js"); assert(typeof result === "string"); - astEqual(result, code); }); it("should keep code mean", function () { var code = "var a = 1;// comment"; - var result = toAssertFromSource(code); + var result = toAssertFromSource(code, "file.js"); assert(typeof result === "string"); - astEqual(result, code); }); it("should convert to assert", function () { var code = "1;// => 1"; - var result = toAssertFromSource(code); - assert.equal(result, "assert.equal(1, 1);"); + var result = toAssertFromSource(code, "file.js"); + assert(typeof result === "string"); }); }); describe("#toAssertFromAST", function () {