Tarantool development patches archive
 help / color / mirror / Atom feed
From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
To: Alexander Turenko <alexander.turenko@tarantool.org>,
	Eugine Blikh <bigbes@gmail.com>
Cc: tarantool-patches@freelists.org
Subject: [tarantool-patches] Re: [PATCH] lua: show locals when a tap test fails
Date: Fri, 24 Aug 2018 15:25:07 +0300	[thread overview]
Message-ID: <4ed59be1-1b73-423f-f016-d7ecb14ed907@tarantool.org> (raw)
In-Reply-To: <84509c8ab6e29159082ff27a5d72c9228adc1c21.1534595542.git.alexander.turenko@tarantool.org>

Hi! Thanks for the patch! See 7 comments below and the patch
on the branch.

On 18/08/2018 15:36, Alexander Turenko wrote:
> Fixes #3627.
> ---
> 
> branch: Totktonada/gh-3627-tap-show-local-variables
> travis-ci: https://travis-ci.org/tarantool/tarantool/builds/417616160
> issue: https://github.com/tarantool/tarantool/issues/3627
> 
>   src/lua/tap.lua           | 45 ++++++++++++++++++++++++++++++++++-----
>   test/app-tap/tap.result   | 26 ++++++++++++++++++++--
>   test/app-tap/tap.test.lua | 21 +++++++++++++++---
>   3 files changed, 82 insertions(+), 10 deletions(-)
> 
> diff --git a/src/lua/tap.lua b/src/lua/tap.lua
> index edc9f2211..9dd531422 100644
> --- a/src/lua/tap.lua
> +++ b/src/lua/tap.lua
> @@ -36,12 +36,43 @@ local function traceback(level)
>       return trace
>   end
>   
> +local function locals(test, level)
> +    level = level or 3
> +    local variables = {}
> +    local idx = 1
> +    while true do
> +      local name, value = debug.getlocal(level, idx)

1. Broken indentation: use 4 spaces, not 2.

> +      if name ~= nil then
> +          -- compare a table with a tuple raises an error, so we check types
> +          -- first

2. Please, start sentence with a capital letter and finish with
the dot.

3. Out of 66 symbols.

> +          local eq = type(value) == type(test) and value == test
> +          -- temporary values start with '('
> +          if not name:startswith('(') and not eq then
> +              variables[name] = value

4. So the variables, having nil value, are not showed?

> +          end
> +      else
> +          break
> +      end
> +      idx = 1 + idx
> +    end
> +    return variables
> +end
> @@ -221,6 +255,7 @@ local function test(parent, name, fun, ...)
>           failed  = 0;
>           planned = 0;
>           trace   = parent == nil and true or parent.trace;
> +        locals  = parent == nil and true or parent.locals;

5. If parent == nil, then this turns into 'true and true or ..',
so what is a point of 'and true'?

>       }, test_mt)
>       if fun ~= nil then
>           test:diag('%s', test.name)
> @@ -245,7 +280,7 @@ local function check(test)
>       if test.planned ~= test.total then
>           if test.parent ~= nil then
>               ok(test.parent, false, "bad plan", { planned = test.planned;
> -                run = test.total})
> +                run = test.total}, {locals = false})

6. Are we sure, that locals should be printed by default? Maybe
it would be better to print them on demand only via a global
option and remove per-test-case option? As I imagine a typical
test fail, when a test did not pass, you turn locals printing
on and run the test again.

>           else
>               diag(test, string.format("bad plan: planned %d run %d",
>                   test.planned, test.total))
> diff --git a/test/app-tap/tap.test.lua b/test/app-tap/tap.test.lua
> index 0e1de7f1c..29dc0b100 100755
> --- a/test/app-tap/tap.test.lua
> +++ b/test/app-tap/tap.test.lua
> @@ -12,15 +12,16 @@ local tap = require "tap"
>   -- Create a root test
>   --
>   test = tap.test("root test")
> --- Disable stack traces for this test because Tarantool test system also
> --- checks test output.
> +-- Disable stack traces and locals for this test because Tarantool test system
> +-- also checks test output.
>   test.trace = false
> +test.locals = false

7. In the comment 6 I meant exactly this: it is not
useful to reset locals, when I do not need them.

>   
>   --
>   -- ok, fail and skip predicates
>   --
>   
> -test:plan(32) -- plan to run 3 test
> +test:plan(33) -- plan to run 3 test
>   test:ok(true, 'true') -- basic function
>   local extra = { state = 'some userful information to debug on failure',
>           details = 'a table argument formatted using yaml.encode()' }

My diff (so far it is requested by SOP to paste it here):

  parent reply	other threads:[~2018-08-24 12:25 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-18 12:36 [tarantool-patches] " Alexander Turenko
2018-08-19 15:35 ` [tarantool-patches] " Alexander Turenko
2018-08-19 15:36   ` Alexander Turenko
2018-08-24 12:25 ` Vladislav Shpilevoy [this message]
2018-08-24 12:51   ` Vladislav Shpilevoy
2018-09-23 17:59   ` Alexander Turenko
2018-09-24 10:47     ` Vladislav Shpilevoy
2018-09-27  0:45       ` Alexander Turenko
2018-10-20 18:36         ` Alexander Turenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4ed59be1-1b73-423f-f016-d7ecb14ed907@tarantool.org \
    --to=v.shpilevoy@tarantool.org \
    --cc=alexander.turenko@tarantool.org \
    --cc=bigbes@gmail.com \
    --cc=tarantool-patches@freelists.org \
    --subject='[tarantool-patches] Re: [PATCH] lua: show locals when a tap test fails' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox