Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deepEqual support #1

Closed
azu opened this issue Dec 5, 2013 · 2 comments
Closed

deepEqual support #1

azu opened this issue Dec 5, 2013 · 2 comments

Comments

@azu
Copy link
Owner

azu commented Dec 5, 2013

power-assert support assert.deepEqual

power-doctest also should support assert.deepEqual .

@azu
Copy link
Owner Author

azu commented Dec 5, 2013

deepEqual をサポートする方針としては、何個か方法がありそう。

  • ASTを書き換えるときに、actualがobjectならdeepEqualに書き換える
    • 理想的だけど、ASTで変数を解決しないといけないので難しそう
  • 別途関数を定義してそれをassertの代わりに使う
    • お手軽だけど、行番号は破滅する
function doctest(actual, expect) {
    if (typeof actual === "object") {
        assert.deepEqual(actual, expect);
    } else {
        assert(actual === expect);
    }
}

失敗した時の表示は以下みたいにまとまるのでキレイといればキレイ。

2013-12-06 at 0 34

@azu
Copy link
Owner Author

azu commented Dec 6, 2013

以下みたいな、埋め込むときに第三引数にlocオブジェクトを埋め込めば、
エラーが出た時に元のソースコードと同期した行数が取れるのでよさそう。

function __doctest(actual, expect, loc) {
    try {
        if (typeof actual === "object") {
            assert.deepEqual(actual, expect);
        } else {
            assert(actual === expect);
        }
    } catch (error) {
        var newError = new Error(error.message);
        newError.loc = loc;
        throw newError;
    }
}

gif

こういうのって関数じゃなくてインライン化して埋め込むケースがおおい気がするけど、
やっぱり関数呼び出しとかで挙動でが変わったりそういう可能性をできるだけ少なくするためにそうした方がいいのかな?

@azu azu closed this as completed in 353e6bf Dec 7, 2013
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant