Fine-tuning for injection: docs, bugfixes.

This commit is contained in:
Aldo Cortesi 2012-07-20 23:47:34 +12:00
parent d7841898e3
commit 8e0c01ae39
3 changed files with 29 additions and 2 deletions

View File

@ -421,7 +421,8 @@ class InjectAt:
e = e + pp.MatchFirst(
[
v_integer,
pp.Literal("r")
pp.Literal("r"),
pp.Literal("a")
]
)
e += pp.Literal(",").suppress()
@ -429,7 +430,13 @@ class InjectAt:
return e.setParseAction(lambda x: klass(*x))
def accept(self, settings, r):
r.actions.append((self.offset, "inject", self.value))
r.actions.append(
(
self.offset,
"inject",
self.value.get_generator(settings)
)
)
class Header:

View File

@ -157,6 +157,17 @@ various other goodies. Try it by visiting the server root:</p>
</td>
</tr>
<tr>
<td>
iOFFSET,VALUE
</td>
<td>
Inject the specified value at the offset. OFFSET can be an
integer, or "r" to generate a random offset or "a" for an
offset just after all data has been sent.
</td>
</tr>
<tr>
<td>
lVALUE

View File

@ -175,6 +175,10 @@ class TestInject:
assert a[0] == "r"
assert a[1] == "inject"
a = rparse.parse_response({}, "400:ia,@100").actions[0]
assert a[0] == "a"
assert a[1] == "inject"
def test_at(self):
e = rparse.InjectAt.expr()
v = e.parseString("i0,'foo'")[0]
@ -185,6 +189,11 @@ class TestInject:
v = e.parseString("ir,'foo'")[0]
assert v.offset == "r"
def test_serve(self):
s = cStringIO.StringIO()
r = rparse.parse_response({}, "400:i0,'foo'")
assert r.serve(s)
class TestShortcuts:
def test_parse_response(self):