[Lldb-commits] [lldb] e3a7c77 - [lldb/Lit] Change the lldbtest format to behave more like shell test.

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Thu Jan 30 13:53:18 PST 2020


Yep, MichaƂ also reported this here: https://reviews.llvm.org/D73384

I hope to take a look at that today.

On Thu, Jan 30, 2020 at 1:43 PM Vedant Kumar <vedant_kumar at apple.com> wrote:
>
>
>
> > On Jan 24, 2020, at 4:18 PM, Jonas Devlieghere via lldb-commits <lldb-commits at lists.llvm.org> wrote:
> >
> >
> > Author: Jonas Devlieghere
> > Date: 2020-01-24T16:17:55-08:00
> > New Revision: e3a7c7713cd87e37a95a544373cd21f6f06ab94e
> >
> > URL: https://github.com/llvm/llvm-project/commit/e3a7c7713cd87e37a95a544373cd21f6f06ab94e
> > DIFF: https://github.com/llvm/llvm-project/commit/e3a7c7713cd87e37a95a544373cd21f6f06ab94e.diff
> >
> > LOG: [lldb/Lit] Change the lldbtest format to behave more like shell test.
> >
> > The current lldbtest format has a number of shortcomings, all related to
> > how we omit information based on why the test fails. For example, a
> > successful test would print nothing, even when `-a` is passed to lit.
> > It's not up to the test format to decide whether to print something or
> > not, that's handled by lit itself. For other test results we would
> > sometimes print stdout & stderr, but not always, such as when a timeout
> > was reached or we couldn't parse the dotest output.
> >
> > This patch changes the lldbtest format and makes it behave more like
> > lit. We now always print the dotest invocation, the exit code, the
> > output to stdout & stderr. If you're used to dealing with ShTests in
> > lit, this will feel all very familiar.
> >
> > Differential revision: https://reviews.llvm.org/D73384
> >
> > Added:
> >
> >
> > Modified:
> >    lldb/test/API/lldbtest.py
> >
> > Removed:
> >
> >
> >
> > ################################################################################
> > diff  --git a/lldb/test/API/lldbtest.py b/lldb/test/API/lldbtest.py
> > index 349a67f22fb3..864d5ea1df03 100644
> > --- a/lldb/test/API/lldbtest.py
> > +++ b/lldb/test/API/lldbtest.py
> > @@ -86,33 +86,46 @@ def execute(self, test, litConfig):
> >                 shutil.copy(python, copied_python)
> >             cmd[0] = copied_python
> >
> > +        timeoutInfo = None
> >         try:
> >             out, err, exitCode = lit.util.executeCommand(
> >                 cmd,
> >                 env=test.config.environment,
> >                 timeout=litConfig.maxIndividualTestTime)
> >         except lit.util.ExecuteCommandTimeoutException:
> > -            return (lit.Test.TIMEOUT, 'Reached timeout of {} seconds'.format(
> > -                litConfig.maxIndividualTestTime))
> > +            timeoutInfo = 'Reached timeout of {} seconds'.format(
> > +                litConfig.maxIndividualTestTime)
> > +
> > +        output = """Script:\n--\n%s\n--\nExit Code: %d\n""" % (
> > +            ' '.join(cmd), exitCode)
>
> Heads up, when a test times out this prints:
>
>   File "/Users/vsk/src/llvm-project-master/lldb/test/API/lldbtest.py", line 100, in execute
>     ' '.join(cmd), exitCode)
> UnboundLocalError: local variable 'exitCode' referenced before assignment
>
>
> > +        if timeoutInfo is not None:
> > +            output += """Timeout: %s\n""" % (timeoutInfo,)
> > +        output += "\n"
> > +
> > +        if out:
> > +            output += """Command Output (stdout):\n--\n%s\n--\n""" % (out,)
> > +        if err:
> > +            output += """Command Output (stderr):\n--\n%s\n--\n""" % (err,)
> > +
> > +        if timeoutInfo:
> > +            return lit.Test.TIMEOUT, output
> >
> >         if exitCode:
> >             # Match FAIL but not XFAIL.
> >             for line in out.splitlines() + err.splitlines():
> >                 if line.startswith('FAIL:'):
> > -                    return lit.Test.FAIL, out + err
> > +                    return lit.Test.FAIL, output
> >
> >             if 'XPASS:' in out or 'XPASS:' in err:
> > -                return lit.Test.XPASS, out + err
> > +                return lit.Test.XPASS, output
> >
> >         has_unsupported_tests = 'UNSUPPORTED:' in out or 'UNSUPPORTED:' in err
> >         has_passing_tests = 'PASS:' in out or 'PASS:' in err
> >         if has_unsupported_tests and not has_passing_tests:
> > -            return lit.Test.UNSUPPORTED, out + err
> > +            return lit.Test.UNSUPPORTED, output
> >
> >         passing_test_line = 'RESULT: PASSED'
> >         if passing_test_line not in out and passing_test_line not in err:
> > -            msg = ('Unable to find %r in dotest output (exit code %d):\n\n%s%s'
> > -                   % (passing_test_line, exitCode, out, err))
> > -            return lit.Test.UNRESOLVED, msg
> > +            return lit.Test.UNRESOLVED, output
> >
> > -        return lit.Test.PASS, ''
> > +        return lit.Test.PASS, output
> >
> >
> >
> > _______________________________________________
> > lldb-commits mailing list
> > lldb-commits at lists.llvm.org
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>


More information about the lldb-commits mailing list