aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libpathod/rparse.py11
-rw-r--r--libpathod/templates/docs_pathod.html11
-rw-r--r--test/test_rparse.py9
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):