Detalhes do pacote

@power-doctest/markdown

azu1.8kMIT5.3.4

A Markdown parser for power-doctest.

doctest, javascript, markdown

readme (leia-me)

power-doctest Actions Status: test

A monorepo for power-doctest.

power-doctest is a project that provide doctest system for JavaScript.

Features

  • Run Comments as Assertions
  • Support JavaScript, Markdown Code Block, Asciidoctor Code Block
  • Control doctest behavior from comments

Packages

power-doctest

power-doctest is consisted of two parts.

  • Comment Assertion Syntax
  • Doctest Control Annotation

Comment Assertion Syntax

You can write following comment in your JavaScript code. These comment will be canistered to assertion.

Syntax Transformed
1; // => 2 assert.strictEqual(1, 2)
console.log(1); // => 2 assert.strictEqual(1, 2)
a; // => b assert.deepStrictEqual(a, b)
[1, 2, 3]; // => [3, 4, 5] assert.deepStrictEqual([1, 2, 3], [3, 4, 5])
console.log({ a: 1 }): // => { b: 2 } assert.deepStrictEqual({ a: 1 }, { b: 2 })
throw new Error("message"); // => Error: "message" assert.throws(function() {throw new Error("message"); });"
Promise.resolve(1); // Resolve: 2 Promise.resolve(Promise.resolve(1)).then(v => { assert.strictEqual(1, 2) })
Promise.reject(1); // Reject: 2 assert.rejects(Promise.reject(1))

For more details, see comment-to-assert.

Doctest Control Annotation

Doctest Control Annotation is defined in Language specific plugin. For more details, see following package's README.

Recipes

Doctest JavaScript Code

Use @power-doctest/tester and @power-doctest/javascript in Mocha.

import { test } from "@power-doctest/tester";
import { parse } from "@power-doctest/javascript";
const globby = require("globby");
const fs = require("fs");
const path = require("path");
// doctest for source/**/*.js
describe("doctest:js", function() {
    const sourceDir = path.join(__dirname, "..", "source");
    const files = globby.sync([
        `${sourceDir}/**/*.js`,
        `!${sourceDir}/**/node_modules{,/**}`
    ]);
    files.forEach(filePath => {
        const normalizeFilePath = filePath.replace(sourceDir, "");
        it(`doctest:js ${normalizeFilePath}`, function() {
            const content = fs.readFileSync(filePath, "utf-8");
            const parsedResults = parse({
                content,
                filePath
            });
            const parsedCode = parsedResults[0];
            return test(parsedCode).catch(error => {
                // Stack Trace like
                console.error(`StrictEvalError: strict eval is failed
    at strictEval (${filePath}:1:1)`);
                return Promise.reject(error);
            });
        });
    });
});

Example

Doctest JavaScript Code in Markdown

Use @power-doctest/tester and @power-doctest/markdown in Mocha.

import { test } from "@power-doctest/tester";
import { parse } from "@power-doctest/markdown";
const globby = require("globby");
const fs = require("fs");
const path = require("path");
const transform = (code) => {
    return code; // you need pre transform for the code if needed.
};
// doctest for source/**/*.md
describe("doctest:md", function() {
    const sourceDir = path.join(__dirname, "..", "source");
    const files = globby.sync([
        `${sourceDir}/**/*.md`,
        `!${sourceDir}/**/node_modules{,/**}`,
    ]);
    files.forEach(filePath => {
        const normalizeFilePath = filePath.replace(sourceDir, "");
        describe(`${normalizeFilePath}`, function() {
            const content = fs.readFileSync(filePath, "utf-8");
            const parsedCodes = parse({
                filePath,
                content
            });
            // try to eval
            const dirName = path.dirname(filePath).split(path.sep).pop();
            parsedCodes.forEach((parsedCode, index) => {
                const codeValue = parsedCode.code;
                const testCaseName = codeValue.slice(0, 32).replace(/[\r\n]/g, "_");
                it(dirName + ": " + testCaseName, function() {
                    return test({
                        ...parsedCode,
                        code: transform(parsedCode.code)
                    }, {
                        defaultDoctestRunnerOptions: {
                            // Default timeout: 2sec
                            timeout: 1000 * 2
                        }
                    }).catch(error => {
                        const filePathLineColumn = `${error.fileName}:${error.lineNumber}:${error.columnNumber}`;
                        console.error(`Markdown Doctest is failed
  at ${filePathLineColumn}

----------
${codeValue}
----------
`);
                        return Promise.reject(error);
                    });
                });
            });
        });
    });
});

Example

Doctest JavaScript in Asciidoctor

Use @power-doctest/tester and @power-doctest/asciidoctor in Mocha.

const { test } = require("@power-doctest/tester");
const { parse } = require("@power-doctest/asciidoctor");
const globby = require("globby");
const fs = require("fs");
const path = require("path");
// Avoid "do not support nested sections" Error
// Replace Header with Dummy text
const replaceDummyHeader = (content) => {
    return content.split("\n").map(line => {
        return line.replace(/^(=+)/g, (all, match) => {
            return "♪".repeat(match.length);
        });
    }).join("\n");
};
// doctest for source/**/*.adoc
describe("doctest:adoc", function () {
    const sourceDir = path.join(__dirname, "..", "source");
    const files = globby.sync([
        `${sourceDir}/**/*.adoc`,
        `!**/node_modules{,/**}`,
    ]);
    files.forEach(filePath => {
        const normalizeFilePath = filePath.replace(sourceDir, "");
        describe(`${normalizeFilePath}`, function () {
            const content = fs.readFileSync(filePath, "utf-8");
            const parsedCodes = parse({
                filePath,
                content: replaceDummyHeader(content)
            });
            console.log("parsedCodes", parsedCodes);
            // try to eval
            const dirName = path.dirname(filePath).split(path.sep).pop();
            parsedCodes.forEach((parsedCode, index) => {
                const codeValue = parsedCode.code;
                const testCaseName = codeValue.slice(0, 32).replace(/[\r\n]/g, "_");
                it(dirName + ": " + testCaseName, function () {
                    return test(parsedCode).catch(error => {
                        const filePathLineColumn = `${error.fileName}:${error.lineNumber}:${error.columnNumber}`;
                        console.error(`Asciidoc Doctest is failed
  at ${filePathLineColumn}

----------
${codeValue}
----------
`);
                        return Promise.reject(error);
                    });
                });
            });
        });
    });
});

Example

Development

Require pnpm

Install project

pnpm install
pnpm boostrap

Build

pnpm run build

Test

pnpm test

Release: use npm

npm run versionup
# GH_TOKEN="${GITHUB_TOKEN}" npm run versionup:patch --create-release=github
# prepare release note
npm relase

changelog (log de mudanças)

Change Log

All notable changes to this project will be documented in this file. See Conventional Commits for commit guidelines.

5.3.3 (2023-07-15)

Bug Fixes

5.3.2 (2022-05-05)

Bug Fixes

5.3.1 (2022-01-05)

Bug Fixes

  • deps: Update babel dependencies to ^7.16.7 (#28) (92d68cd)

5.3.0 (2021-05-07)

Features

5.2.2 (2020-06-20)

Note: Version bump only for package root

5.2.1 (2020-06-20)

Bug Fixes

  • power-doctest: fix error Cannot access 'totalAssertionCount' before initialization (10b7e73)

5.2.0 (2020-06-20)

Bug Fixes

Features

  • power-doctest: support ES2020 (ef624cb)

5.1.3 (2019-09-01)

Bug Fixes

  • power-doctest: allow built-in modules (cd6a4ed)

5.1.2 (2019-09-01)

Bug Fixes

  • core: use module instead of file path (bf65ac3)
  • power-assert: fix README test (e6af70e)

5.1.1 (2019-09-01)

Bug Fixes

  • cli: rename @power-doctest/cli to power-doctest (1c5060b)

5.1.0 (2019-09-01)

Features

  • cli: support asciidoctor (4db0637)

5.0.1 (2019-09-01)

Note: Version bump only for package root

5.0.0 (2019-09-01)

Note: Version bump only for package root

4.1.2 (2019-09-01)

Note: Version bump only for package root

4.1.1 (2019-09-01)

Bug Fixes

  • asciidoctor: compute position form string match (7eedda1)

4.1.0 (2019-09-01)

Features

  • tester: add defaultDoctestRunnerOptions (3bcf8ed)

4.0.1 (2019-09-01)

Bug Fixes

4.0.0 (2019-09-01)

Bug Fixes

  • power-doctest: add try-catch (5e5e8da)
  • tester: remove preTransform options (c5fb80a)
  • fix tester requireMock (a4e0574)

Features

  • @power-doctest/asciidoctor: add asciidoctor parser (ffb3a9e)
  • @power-doctest/javascript: add package (79927f5)
  • cli: add CLI (4bb1f7a)
  • tester: add default state (9fc3aa8)

3.3.3 (2019-08-25)

Bug Fixes

  • power-doctest: support Node.js 8 (b2d63f0)

3.3.2 (2019-08-25)

Bug Fixes

  • power-doctest: disable babelrc (d0a49b7)

3.3.1 (2019-08-25)

Bug Fixes

  • power-doctest: disable config file (f610d2d)

3.3.0 (2019-08-25)

Features

  • power-doctes: support power-assert again (09632ec)

3.2.1 (2019-08-25)

Bug Fixes

  • power-doctest/javascript: add filepath to run method (40678bb)

3.2.0 (2019-08-25)

Features

  • markdown: support runCodeBlockNode function (657b1ed)

3.1.1 (2019-08-25)

Bug Fixes

  • @power-doctest/javascript: release event listener (47d4c04)

3.1.0 (2019-08-25)

Bug Fixes

  • @power-doctest/javascript: support No assertion code (b00d3e3)

Features

  • @power-doctest/markdown: add lineNumber and columnNumber (bbc3186)

3.0.1 (2019-08-25)

Bug Fixes

  • @power-doctest: fix main (c2baef9)

3.0.0 (2019-08-25)

Bug Fixes

  • assert: fix handling of undefined or null (#3) (daed652)
  • ast: generate code with comment (d950164)
  • error: can handle `// => *Error (628a26a)
  • example: run example then exit 0 (c1348bc)
  • example: use disableSourceMap option (04c1e32)
  • lib: fix TypeScript definition (d32b124)
  • node: console.assert does not throw on Node.js 10 (6a9a74a)
  • npm: fix npm test script (a90ed9f)
  • test: remove undefined method (333c81c)
  • util: #toAST return AST not Node (308dbe8)
  • utils: add missing extractionBody (3bca03e)
  • array and directive string expression support (1a6efcd)
  • update node types (6ad0195)

Features

  • @power-doctest/javascript: support preTransform options (20eacb1)
  • @power-doctest/markdown: add @power-doctest/markdown (d2c8014)
  • assert: use strictEqual and deepStrictEqual (#9) (85a4bed), closes #6
  • ast: implement replace comment with assert (8925ada)
  • ast: support asyncCallbackName option (#11) (a24e4ec)
  • ast: support block comment (16f3cb2)
  • ast: support console api (e1c7067)
  • bin: add cli (73701eb)
  • comment: Support object literal as comment (9c138c7)
  • error: support handling Error: message (33f1b70)
  • support context, console option (b868904)
  • example: add example (de07e6a)
  • lib: Resolve: and Reject: support (1169542)
  • options: support assertBeforeCallbackName and assertAfterCallbackName (2466b17)
  • src: support Promise comment (#4) (b7882b5)
  • util: add #wrapNode function (36baa81)
  • support NaN assert (117daeb)

BREAKING CHANGES

  • assert: assertion is strict by default

2.2.0 (2019-08-24)

Features

  • support assertBeforeCallbackName and assertAfterCallbackName options (32f5ade)

2.1.0 (2019-01-19)

Features

  • option: support asyncCallbackName option (0516ad5)

2.0.0 (2019-01-19)

Features

1.4.0 (2018-10-14)

Features

  • depsO: upgrade ast-source@3.0 (5bc4f71)

1.3.2 (2018-02-27)

Bug Fixes

  • pacakge: fix build script (6c498ab)

1.3.1 (2017-11-23)

1.3.0 (2017-09-10)

Features

1.2.0 (2016-11-19)

Features

  • npm: update to espower@2.0 (41afee6)

1.1.1 (2016-07-29)

Bug Fixes

1.1.0 (2016-06-16)

Features

  • ast: support module type (7e63fa0)

1.0.1 (2015-08-09)

Bug Fixes

  • bin: fix path to lib (2f99c82)
  • npm: add esprima to dependencies (e5529f3)

1.0.0 (2015-08-09)

Bug Fixes

Features

  • cli: add cli for power-doctest (d9e1a7c)

0.3.4 (2014-08-12)

0.3.3 (2014-07-21)

Bug Fixes

  • show pass when assert failed (402fe98)

0.3.2 (2014-03-22)

Bug Fixes

  • memory-leak: remove listeners when finished (4b98531)

0.3.0 (2014-03-22)

Bug Fixes

  • error: add domain error handling (324b87e)
  • reporter: change default reporter. (c3720d6), closes #8
  • travis: update node.js on travis (606f268)

0.2.5 (2014-03-02)

0.2.4 (2014-03-02)

Features

  • option: add extractConsole option (b7a76dc)

0.2.1 (2013-12-08)

0.2.0 (2013-12-08)

0.1.4 (2013-12-04)

0.1.3 (2013-12-04)

0.1.2 (2013-12-04)

0.1.1 (2013-12-04)

0.1.0 (2013-12-01)

0.0.1 (2013-12-01)