Esempio n. 1
0
 def testDefaultParseValueQuotedStrings(self):
     self.assertEqual(parser.DefaultParseValue("'hello'"), 'hello')
     self.assertEqual(parser.DefaultParseValue("'hello world'"),
                      'hello world')
     self.assertEqual(parser.DefaultParseValue("'--flag'"), '--flag')
     self.assertEqual(parser.DefaultParseValue('"hello"'), 'hello')
     self.assertEqual(parser.DefaultParseValue('"hello world"'),
                      'hello world')
     self.assertEqual(parser.DefaultParseValue('"--flag"'), '--flag')
Esempio n. 2
0
    def testDefaultParseValueFuzz(self, value):
        try:
            result = parser.DefaultParseValue(value)
        except TypeError:
            # It's OK to get a TypeError if the string has the null character.
            if u"\x00" in value:
                return
            raise
        except MemoryError:
            if len(value) > 100:
                # This is not what we're testing.
                return
            raise

        try:
            uvalue = six.text_type(value)
            uresult = six.text_type(result)
        except UnicodeDecodeError:
            # This is not what we're testing.
            return

        # Check that the parsed value doesn't differ too much from the input.
        distance = Levenshtein.distance(uresult, uvalue)
        max_distance = (
            2
            + sum(c.isspace() for c in value)  # Quotes or parenthesis can be implicit.
            + value.count('"')
            + value.count("'")
            + 3 * (value.count(",") + 1)
            + 3 * (value.count(":"))  # 'a,' can expand to "'a', "
            + 2 * value.count("\\")  # 'a:' can expand to "'a': "
        )
        if "#" in value:
            max_distance += len(value) - value.index("#")

        if not isinstance(result, six.string_types):
            max_distance += value.count("0")  # Leading 0s are stripped.

        # Note: We don't check distance for dicts since item order can be changed.
        if "{" not in value:
            self.assertLessEqual(
                distance, max_distance, (distance, max_distance, uvalue, uresult)
            )
Esempio n. 3
0
 def testDefaultParseValueBadLiteral(self):
     # If it can't be parsed, we treat it as a string. This behavior may change.
     self.assertEqual(parser.DefaultParseValue('[(A, 2, "3"), 5'),
                      '[(A, 2, "3"), 5')
     self.assertEqual(parser.DefaultParseValue("x=10"), "x=10")
Esempio n. 4
0
 def testDefaultParseValueComments(self):
     self.assertEqual(parser.DefaultParseValue('"0#comments"'),
                      "0#comments")
     # Comments are stripped. This behavior may change in the future.
     self.assertEqual(parser.DefaultParseValue("0#comments"), 0)
Esempio n. 5
0
 def testDefaultParseValueBareWordsTuple(self):
     self.assertEqual(parser.DefaultParseValue('(one, 2, "3")'),
                      ("one", 2, "3"))
     self.assertEqual(parser.DefaultParseValue('one, "2", 3'),
                      ("one", "2", 3))
Esempio n. 6
0
 def testDefaultParseValueBool(self):
     self.assertEqual(parser.DefaultParseValue("True"), True)
     self.assertEqual(parser.DefaultParseValue("False"), False)
Esempio n. 7
0
 def testDefaultParseValueNone(self):
     self.assertEqual(parser.DefaultParseValue("None"), None)
Esempio n. 8
0
 def testDefaultParseValueNestedContainers(self):
   self.assertEqual(
       parser.DefaultParseValue('[(A, 2, "3"), 5, {alph: 10.2, beta: "cat"}]'),
       [('A', 2, '3'), 5, {'alph': 10.2, 'beta': 'cat'}])
Esempio n. 9
0
 def testDefaultParseValueQuotedStringNumbers(self):
     self.assertEqual(parser.DefaultParseValue("\"'123'\""), "'123'")
Esempio n. 10
0
 def testDefaultParseValueQuotedStringNumbers(self):
     self.assertEqual(parser.DefaultParseValue('"\'123\'"'), "'123'")
Esempio n. 11
0
 def testDefaultParseValueNumbers(self):
     self.assertEqual(parser.DefaultParseValue('23'), 23)
     self.assertEqual(parser.DefaultParseValue('23.0'), 23.0)
     self.assertIsInstance(parser.DefaultParseValue('23'), int)
     self.assertIsInstance(parser.DefaultParseValue('23.0'), float)
     self.assertEqual(parser.DefaultParseValue('23.5'), 23.5)
Esempio n. 12
0
 def testDefaultParseValueBool(self):
     self.assertEqual(parser.DefaultParseValue('True'), True)
     self.assertEqual(parser.DefaultParseValue('False'), False)
Esempio n. 13
0
 def testDefaultParseValueIgnoreBinOp(self):
     self.assertEqual(parser.DefaultParseValue('2017-10-10'), '2017-10-10')
     self.assertEqual(parser.DefaultParseValue('1+1'), '1+1')
Esempio n. 14
0
 def testDefaultParseValueLists(self):
   self.assertEqual(parser.DefaultParseValue('[1, 2, 3]'), [1, 2, 3])
   self.assertEqual(parser.DefaultParseValue('[1, "2", 3]'), [1, '2', 3])
   self.assertEqual(parser.DefaultParseValue('[1, \'"2"\', 3]'), [1, '"2"', 3])
   self.assertEqual(parser.DefaultParseValue(
       '[1, "hello", 3]'), [1, 'hello', 3])
Esempio n. 15
0
 def testDefaultParseValueStrings(self):
   self.assertEqual(parser.DefaultParseValue('hello'), 'hello')
   self.assertEqual(parser.DefaultParseValue('path/file.jpg'), 'path/file.jpg')
   self.assertEqual(parser.DefaultParseValue('hello world'), 'hello world')
   self.assertEqual(parser.DefaultParseValue('--flag'), '--flag')
Esempio n. 16
0
 def testDefaultParseValueSyntaxError(self):
     # If it can't be parsed, we treat it as a string.
     self.assertEqual(parser.DefaultParseValue('"'), '"')
Esempio n. 17
0
 def testDefaultParseValueIgnoreBinOp(self):
     self.assertEqual(parser.DefaultParseValue("2017-10-10"), "2017-10-10")
     self.assertEqual(parser.DefaultParseValue("1+1"), "1+1")
Esempio n. 18
0
 def testDefaultParseValueBareWordsLists(self):
     self.assertEqual(parser.DefaultParseValue('[one, 2, "3"]'),
                      ["one", 2, "3"])
Esempio n. 19
0
 def testDefaultParseValueOtherNumbers(self):
     self.assertEqual(parser.DefaultParseValue("1e5"), 100000.0)
Esempio n. 20
0
 def testDefaultParseValueDict(self):
     self.assertEqual(parser.DefaultParseValue('{"abc": 5, "123": 1}'), {
         "abc": 5,
         "123": 1
     })