Author: rhs
Date: Thu Dec 17 04:56:17 2009
New Revision: 891536

URL: http://svn.apache.org/viewvc?rev=891536&view=rev
Log:
QPID-2286: added list support to address parser

Modified:
    qpid/trunk/qpid/python/qpid/address.py
    qpid/trunk/qpid/python/qpid/tests/address.py

Modified: qpid/trunk/qpid/python/qpid/address.py
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/address.py?rev=891536&r1=891535&r2=891536&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid/address.py (original)
+++ qpid/trunk/qpid/python/qpid/address.py Thu Dec 17 04:56:17 2009
@@ -24,6 +24,8 @@
 
 LBRACE = l.define("LBRACE", r"\{")
 RBRACE = l.define("RBRACE", r"\}")
+LBRACK = l.define("LBRACK", r"\[")
+RBRACK = l.define("RBRACK", r"\]")
 COLON = l.define("COLON", r":")
 SEMI = l.define("SEMI", r";")
 SLASH = l.define("SLASH", r"/")
@@ -128,8 +130,30 @@
       return tok2obj(self.eat())
     elif self.matches(LBRACE):
       return self.map()
+    elif self.matches(LBRACK):
+      return self.list()
     else:
-      raise ParseError(self.next(), NUMBER, STRING, ID, LBRACE)
+      raise ParseError(self.next(), NUMBER, STRING, ID, LBRACE, LBRACK)
+
+  def list(self):
+    self.eat(LBRACK)
+
+    result = []
+
+    while True:
+      if self.matches(RBRACK):
+        break
+      else:
+        result.append(self.value())
+        if self.matches(COMMA):
+          self.eat(COMMA)
+        elif self.matches(RBRACK):
+          break
+        else:
+          raise ParseError(self.next(), COMMA, RBRACK)
+
+    self.eat(RBRACK)
+    return result
 
 def parse(addr):
   return AddressParser(lex(addr)).parse()

Modified: qpid/trunk/qpid/python/qpid/tests/address.py
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/tests/address.py?rev=891536&r1=891535&r2=891536&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid/tests/address.py (original)
+++ qpid/trunk/qpid/python/qpid/tests/address.py Thu Dec 17 04:56:17 2009
@@ -145,7 +145,7 @@
 
   def testBadOptions3(self):
     self.invalid("name/subject; { key:",
-                 "expecting (NUMBER, STRING, ID, LBRACE), got EOF "
+                 "expecting (NUMBER, STRING, ID, LBRACE, LBRACK), got EOF "
                  "line:1,20:name/subject; { key:")
 
   def testBadOptions4(self):
@@ -167,3 +167,33 @@
     self.invalid("name/subject; { key: value } asdf",
                  "expecting EOF, got ID('asdf') "
                  "line:1,29:name/subject; { key: value } asdf")
+
+  def testList1(self):
+    self.valid("name/subject; { key: [] }", "name", "subject", {"key": []})
+
+  def testList2(self):
+    self.valid("name/subject; { key: ['one'] }", "name", "subject", {"key": 
['one']})
+
+  def testList3(self):
+    self.valid("name/subject; { key: [1, 2, 3] }", "name", "subject",
+               {"key": [1, 2, 3]})
+
+  def testList4(self):
+    self.valid("name/subject; { key: [1, [2, 3], 4] }", "name", "subject",
+               {"key": [1, [2, 3], 4]})
+
+  def testBadList1(self):
+    self.invalid("name/subject; { key: [ }", "expecting (NUMBER, STRING, ID, 
LBRACE, LBRACK), "
+                 "got RBRACE('}') line:1,23:name/subject; { key: [ }")
+
+  def testBadList2(self):
+    self.invalid("name/subject; { key: [ 1 }", "expecting (COMMA, RBRACK), "
+                 "got RBRACE('}') line:1,25:name/subject; { key: [ 1 }")
+
+  def testBadList3(self):
+    self.invalid("name/subject; { key: [ 1 2 }", "expecting (COMMA, RBRACK), "
+                 "got NUMBER('2') line:1,25:name/subject; { key: [ 1 2 }")
+
+  def testBadList4(self):
+    self.invalid("name/subject; { key: [ 1 2 ] }", "expecting (COMMA, RBRACK), 
"
+                 "got NUMBER('2') line:1,25:name/subject; { key: [ 1 2 ] }")



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to