I'd really prefer to do this as/along with an SB API test since we also need 
commands made through the SB API to be interruptible, and we should test that 
that also works.  So this kills two birds with one stone.

In general, when developing any high-level features in lldb one of the 
questions you should ask yourself is whether this is useful at the SB API 
layer.  In this case it obviously is (actually I'm a little embarrassed I 
didn't think of this requirement).  If so, then it's simplest to test it at 
that layer.  If the SB API is anything more than a pass-through, then you might 
also want to write a unit test for the underlying C++ API's.  But in this case 
the SB function will just call the underlying CommandInterpreter one, so 
testing at the SB layer is sufficient.

Jim

> On Sep 19, 2017, at 10:45 AM, Zachary Turner via Phabricator 
> <revi...@reviews.llvm.org> wrote:
> 
> zturner added a comment.
> 
> In https://reviews.llvm.org/D37923#875322, @clayborg wrote:
> 
>> We should have a test. The test would need to use pexpect or something 
>> similar. If anyone has any pointer on how to make a test for this, please 
>> chime in. I was thinking just a pexpect based test.
> 
> 
> This kind of thing is perfect for a unit test, but I'm not sure how easy that 
> would be with the current design.  You'd basically do something like:
> 
>  struct MockStream {
>    explicit MockStream(CommandInterpreter &Interpreter, int InterruptAfter) 
>      : CommandInterpreter(Interpreter), InterruptAfter(InterruptAfter) {}
> 
>    CommandInterpreter &Interpreter;
>    const int InterruptAfter;
>    int Lines = 0;
>    std::string Buffer;
> 
>    void Write(StringRef S) {
>      ++Lines;
>      if (Lines >= InterruptAfter) {
>        Interpreter.Interrupt();
>        return;
>      }
>      Buffer += S;
>    }
>  };
> 
>  TEST_F(CommandInterruption) {
>    CommandInterpreter Interpreter;
>    MockStream Stream(Interpreter, 3);
>    Interpreter.PrintCommandOutput(Stream, "a\nb\nc\nd\ne\nf\n");
>    EXPECT_EQ(Stream.Lines == 3);
>    EXPECT_EQ(Stream.Buffer == "a\nb\nc\n");
>  }
> 
> 
> https://reviews.llvm.org/D37923
> 
> 
> 

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to