diff options
-rw-r--r-- | libpathod/rparse.py | 11 | ||||
-rw-r--r-- | libpathod/templates/docs_pathod.html | 11 | ||||
-rw-r--r-- | test/test_rparse.py | 9 |
3 files changed, 29 insertions, 2 deletions
diff --git a/libpathod/rparse.py b/libpathod/rparse.py index 5a2f84b1..e71265ea 100644 --- a/libpathod/rparse.py +++ b/libpathod/rparse.py @@ -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: diff --git a/libpathod/templates/docs_pathod.html b/libpathod/templates/docs_pathod.html index 1527f851..8fc062ca 100644 --- a/libpathod/templates/docs_pathod.html +++ b/libpathod/templates/docs_pathod.html @@ -159,6 +159,17 @@ various other goodies. Try it by visiting the server root:</p> <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 </td> <td> diff --git a/test/test_rparse.py b/test/test_rparse.py index 04a4972f..dfc8c758 100644 --- a/test/test_rparse.py +++ b/test/test_rparse.py @@ -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): |