This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC] Fixing gdb.base/completion.exp (PR testsuite/12649)


Hi!

I am now trying to get rid of racy cases in gdb.base/completion.exp.  The
first thing to do is to make use of `complete' rather than of '\t'.  The '\t's
do not work well with char-wise read1() and thus they're occasionally causing
problems.  The next thing to do is to remove ubiquitous `sleep's, which are racy
themselves and also make this test quite slow (with read1() this test takes 
~8 minutes (!), with normal read() about 35 seconds).

This test basically comprises of chunks like this:

send_gdb "show output\t"
sleep 1
gdb_expect  {
        -re "^show output-radix $"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
                                        { pass "complete 'show output'"}
                      -re ".*$gdb_prompt $" { fail "complete 'show output'"}
                      timeout           {fail "(timeout) complete 'show output'"}
                     }
            }
        -re "^show output$"\
            { send_gdb "\n"
               gdb_expect {
                      -re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
                                        { fail "1complete 'show output'"}
                      -re ".*$gdb_prompt $" { fail "2complete 'show output'"}
                      timeout           { fail "(timeout) complete 'show output'"}
                     }

             }

        -re ".*$gdb_prompt $"       { fail "3complete 'show output'" }
        timeout         { fail "(timeout) complete 'show output'" }
        }


I think this whole shenanigans is not necessary iff we are interested
only in testing that the _completion_ works.  If you look at it, this chunk
has only one `pass'.  What if we could replace this all with only one line like
the following?

gdb_test "complete show output" "show output-radix" "complete 'show output'"

Thus, my point is that we could replace those "send_gdb + sleep + gdb_expect"
sequences with just one gdb_test{,multiple,no_output}.  I don't know yet if this
transformation is possible for every test in the completion.exp file.
Maybe the changes would be quite dramatical.  However, this test would be _much_
simpler and much faster.  Also, the current formatting is ugly ;).

So, do you think this is a good idea?  Is there something I'm missing?

Thanks.

	Marek


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]