Bug 1272414 - 'true' and 'false' literals in manifests should work irrespective of case, r?chmanchester draft
authorGijs Kruitbosch <gijskruitbosch@gmail.com>
Thu, 12 May 2016 18:25:39 +0100
changeset 366380 81b8f2fb1b137886e1982ab6678de87063886bea
parent 366352 092d7ffc5eeed5c0096117fff18638bbda0ebf6e
child 520763 9f8f2a44749189d95081dce63bc4569d9002432f
push id17970
push usergijskruitbosch@gmail.com
push dateThu, 12 May 2016 17:26:48 +0000
reviewerschmanchester
bugs1272414
milestone49.0a1
Bug 1272414 - 'true' and 'false' literals in manifests should work irrespective of case, r?chmanchester MozReview-Commit-ID: Lgw4GO033fk
testing/mozbase/manifestparser/manifestparser/expression.py
testing/mozbase/manifestparser/tests/test_expressionparser.py
--- a/testing/mozbase/manifestparser/manifestparser/expression.py
+++ b/testing/mozbase/manifestparser/manifestparser/expression.py
@@ -31,16 +31,18 @@ import traceback
 #          | INT
 #          | STRING
 #          | IDENT
 # BOOL   := true|false
 # INT    := [0-9]+
 # STRING := "[^"]*"
 # IDENT  := [A-Za-z_]\w*
 
+# Note that BOOL reading is case insensitive.
+
 # Identifiers take their values from a mapping dictionary passed as the second
 # argument.
 
 # Glossary (see above URL for details):
 # - nud: null denotation
 # - led: left detonation
 # - lbp: left binding power
 # - rbp: right binding power
@@ -118,17 +120,17 @@ class rparen_token(object):
 
 class end_token(object):
     """always ends parsing"""
 
 ### derived literal tokens
 
 class bool_token(literal_token):
     def __init__(self, scanner, value):
-        value = {'true':True, 'false':False}[value]
+        value = {'true':True, 'false':False}[value.lower()]
         literal_token.__init__(self, scanner, value)
 
 class int_token(literal_token):
     def __init__(self, scanner, value):
         literal_token.__init__(self, scanner, int(value))
 
 class string_token(literal_token):
     def __init__(self, scanner, value):
@@ -211,17 +213,17 @@ class ExpressionParser(object):
                 (r"<", lt_op_token()),
                 (r">", gt_op_token()),
                 (r"\|\|", or_op_token()),
                 (r"!", not_op_token()),
                 (r"&&", and_op_token()),
                 (r"\(", lparen_token()),
                 (r"\)", rparen_token()),
                 (r"\s+", None), # skip whitespace
-            ])
+            ], flags=re.IGNORECASE)
         tokens, remainder = ExpressionParser.scanner.scan(self.text)
         for t in tokens:
             yield t
         yield end_token()
 
     def value(self, ident):
         """
         Look up the value of |ident| in the value mapping passed in the
--- a/testing/mozbase/manifestparser/tests/test_expressionparser.py
+++ b/testing/mozbase/manifestparser/tests/test_expressionparser.py
@@ -7,16 +7,18 @@ class ExpressionParserTest(unittest.Test
     """Test the conditional expression parser."""
 
     def test_basic(self):
 
         self.assertEqual(parse("1"), 1)
         self.assertEqual(parse("100"), 100)
         self.assertEqual(parse("true"), True)
         self.assertEqual(parse("false"), False)
+        self.assertEqual(parse("True"), True)
+        self.assertEqual(parse("False"), False)
         self.assertEqual('', parse('""'))
         self.assertEqual(parse('"foo bar"'), 'foo bar')
         self.assertEqual(parse("'foo bar'"), 'foo bar')
         self.assertEqual(parse("foo", foo=1), 1)
         self.assertEqual(parse("bar", bar=True), True)
         self.assertEqual(parse("abc123", abc123="xyz"), 'xyz')
 
     def test_equality(self):