At the first place I would like to clarify that the mentioned method: public Match Expect(Regex pattern, int maximumWaitTime);
is a method from the VirtualTerminal
class while the example you included uses a method from the VirtualShell
class: public string Expect(string regexPattern)
.
However, the behavior of both methods is the same: Receives data until the specified pattern is found, but no longer than a timeout period.
The issue in your example is caused by "incorrect" input regex pattern. Please note, that "regex:" prefix is not wanted, just pass the pattern directly.
So, your example behaves correctly: wait until pattern "regex:(.*)" is found. Because it is not found, method returns null after the specified timeout. The m_shell.ReceivedData
property contains all received data up to that time.
Also please note, that m_shell.Expect(".*")
matches everything, which is also an empty string. It leads to a specific behavior: if no data are buffered, no data are received and the method returns immediately with success. You should rather use m_shell.Expect(".+")
to receive at least one character (or more if available).
I would like to also point at the m_shell.Match
property. The idea is as follows: The Expect
method returns received data without the matched pattern. The Match
property returns a data matched by the specified pattern. The ReceivedData
property returns all received data. So, there is such an equality:
- output of the
Expect
method concatenated with the Match
property is equal to the ReceivedData
property
- C#: shell.Expect("pattern") + shell.Match == shell.ReceivedData
- VB: shell.Expect("pattern") & shell.Match = shell.ReceivedData