Ejemplo n.º 1
0
 def setUp(self):
     self.p = StringParser(
         {
             "asdf": "qwer",
             "xyz": "123",
             "null": "",
             "indirect": "asdf"
         }, {"echo": echo}, {})
Ejemplo n.º 2
0
 def setUp(self):
     self.p = StringParser(
         {
             "asdf": "qwer",
             "xyz" : "123",
             "null" : "",
             "indirect" : "asdf"
         },
         {"echo" : echo},
         {})
Ejemplo n.º 3
0
class TestStringParser(TestCase):

    def setUp(self):
        self.p = StringParser(
            {
                "asdf": "qwer",
                "xyz" : "123",
                "null" : "",
                "indirect" : "asdf"
            },
            {"echo" : echo},
            {})

    def tearDown(self):
        self.p = None

    def testNoSubst(self):
        self.assertEqual(self.p.parse("string"), "string")
        self.assertEqual(self.p.parse('asdf"123"gf'), "asdf123gf")
        self.assertEqual(self.p.parse('a\'sd\'f"123"gf'), "asdf123gf")

    def testVariables(self):
        self.assertEqual(self.p.parse("${asdf}"), "qwer")
        self.assertEqual(self.p.parse(">${asdf}<"), ">qwer<")
        self.assertEqual(self.p.parse("..${asdf}..${xyz}.."), "..qwer..123..")

        self.assertEqual(self.p.parse("${asdf:-foobar}"), "qwer")
        self.assertEqual(self.p.parse("${asdf:+foobar}"), "foobar")
        self.assertEqual(self.p.parse("${asdf-foobar}"), "qwer")
        self.assertEqual(self.p.parse("${asdf+foobar}"), "foobar")

        self.assertEqual(self.p.parse("${null:-foobar}"), "foobar")
        self.assertEqual(self.p.parse("${null:+foobar}"), "")
        self.assertEqual(self.p.parse("${null-foobar}"), "")
        self.assertEqual(self.p.parse("${null+foobar}"), "foobar")

        self.assertEqual(self.p.parse("${unset:-foobar}"), "foobar")
        self.assertEqual(self.p.parse("${unset:+foobar}"), "")
        self.assertEqual(self.p.parse("${unset-foobar}"), "foobar")
        self.assertEqual(self.p.parse("${unset+foobar}"), "")

    def testAdvancedVariabled(self):
        self.assertEqual(self.p.parse("${unset:->${asdf}}"), ">qwer")
        self.assertEqual(self.p.parse("""${unset:-">${asdf}"}"""), ">qwer")

    def testIndirectVariables(self):
        self.assertEqual(self.p.parse("${${indirect}}"), "qwer")
        self.assertEqual(self.p.parse("${${indirect}:+alternate}"), "alternate")
        self.assertEqual(self.p.parse("${${asdf}:-default}"), "default")

    def testCommandSubst(self):
        self.assertEqual(self.p.parse("$(echo,foo,bar)"), "1:foo;2:bar")
        self.assertEqual(self.p.parse("$(echo,foo bar )"), "1:foo bar ")
        self.assertEqual(self.p.parse("$(echo,\"foo,bar\" )"), "1:foo,bar ")
        self.assertEqual(self.p.parse("$(echo,foo \"${asdf} bar\" )"), "1:foo qwer bar ")
        self.assertEqual(self.p.parse("$(echo,\'foo ${asdf} bar)\' )"), "1:foo ${asdf} bar) ")
        self.assertEqual(self.p.parse("$(echo,a,${null})"), "1:a;2:")
        self.assertEqual(self.p.parse("$(echo,a \"${null}\" )"), "1:a  ")

    def testEscaping(self):
        self.assertEqual(self.p.parse("as\\df"), "asdf")
        self.assertEqual(self.p.parse("as\\'df"), "as'df")
        self.assertEqual(self.p.parse("\\${null+foobar}"), "${null+foobar}")
        self.assertEqual(self.p.parse("${null:-\\}}"), "}")
        self.assertEqual(self.p.parse("$(echo,foo\\,bar)"), "1:foo,bar")

    def testFails(self):
        self.assertRaises(ParseError, self.p.parse, "$")
        self.assertRaises(ParseError, self.p.parse, "asdf\\")
        self.assertRaises(ParseError, self.p.parse, "as'df")
        self.assertRaises(ParseError, self.p.parse, "$<asdf>")
        self.assertRaises(ParseError, self.p.parse, "${asdf")
        self.assertRaises(ParseError, self.p.parse, "${unknown}")
        self.assertRaises(ParseError, self.p.parse, "${asdf:")
        self.assertRaises(ParseError, self.p.parse, "$()")
        self.assertRaises(ParseError, self.p.parse, "$(unknown)")
Ejemplo n.º 4
0
class TestStringParser(TestCase):
    def setUp(self):
        self.p = StringParser(
            {
                "asdf": "qwer",
                "xyz": "123",
                "null": "",
                "indirect": "asdf"
            }, {"echo": echo}, {})

    def tearDown(self):
        self.p = None

    def testNoSubst(self):
        self.assertEqual(self.p.parse("string"), "string")
        self.assertEqual(self.p.parse('asdf"123"gf'), "asdf123gf")
        self.assertEqual(self.p.parse('a\'sd\'f"123"gf'), "asdf123gf")

    def testVariables(self):
        self.assertEqual(self.p.parse("${asdf}"), "qwer")
        self.assertEqual(self.p.parse(">${asdf}<"), ">qwer<")
        self.assertEqual(self.p.parse("..${asdf}..${xyz}.."), "..qwer..123..")

        self.assertEqual(self.p.parse("${asdf:-foobar}"), "qwer")
        self.assertEqual(self.p.parse("${asdf:+foobar}"), "foobar")
        self.assertEqual(self.p.parse("${asdf-foobar}"), "qwer")
        self.assertEqual(self.p.parse("${asdf+foobar}"), "foobar")

        self.assertEqual(self.p.parse("${null:-foobar}"), "foobar")
        self.assertEqual(self.p.parse("${null:+foobar}"), "")
        self.assertEqual(self.p.parse("${null-foobar}"), "")
        self.assertEqual(self.p.parse("${null+foobar}"), "foobar")

        self.assertEqual(self.p.parse("${unset:-foobar}"), "foobar")
        self.assertEqual(self.p.parse("${unset:+foobar}"), "")
        self.assertEqual(self.p.parse("${unset-foobar}"), "foobar")
        self.assertEqual(self.p.parse("${unset+foobar}"), "")

    def testAdvancedVariabled(self):
        self.assertEqual(self.p.parse("${unset:->${asdf}}"), ">qwer")
        self.assertEqual(self.p.parse("""${unset:-">${asdf}"}"""), ">qwer")

    def testIndirectVariables(self):
        self.assertEqual(self.p.parse("${${indirect}}"), "qwer")
        self.assertEqual(self.p.parse("${${indirect}:+alternate}"),
                         "alternate")
        self.assertEqual(self.p.parse("${${asdf}:-default}"), "default")

    def testCommandSubst(self):
        self.assertEqual(self.p.parse("$(echo,foo,bar)"), "1:foo;2:bar")
        self.assertEqual(self.p.parse("$(echo,foo bar )"), "1:foo bar ")
        self.assertEqual(self.p.parse("$(echo,\"foo,bar\" )"), "1:foo,bar ")
        self.assertEqual(self.p.parse("$(echo,foo \"${asdf} bar\" )"),
                         "1:foo qwer bar ")
        self.assertEqual(self.p.parse("$(echo,\'foo ${asdf} bar)\' )"),
                         "1:foo ${asdf} bar) ")
        self.assertEqual(self.p.parse("$(echo,a,${null})"), "1:a;2:")
        self.assertEqual(self.p.parse("$(echo,a \"${null}\" )"), "1:a  ")

    def testEscaping(self):
        self.assertEqual(self.p.parse("as\\df"), "asdf")
        self.assertEqual(self.p.parse("as\\'df"), "as'df")
        self.assertEqual(self.p.parse("\\${null+foobar}"), "${null+foobar}")
        self.assertEqual(self.p.parse("${null:-\\}}"), "}")
        self.assertEqual(self.p.parse("$(echo,foo\\,bar)"), "1:foo,bar")

    def testFails(self):
        self.assertRaises(ParseError, self.p.parse, "$")
        self.assertRaises(ParseError, self.p.parse, "asdf\\")
        self.assertRaises(ParseError, self.p.parse, "as'df")
        self.assertRaises(ParseError, self.p.parse, "$<asdf>")
        self.assertRaises(ParseError, self.p.parse, "${asdf")
        self.assertRaises(ParseError, self.p.parse, "${unknown}")
        self.assertRaises(ParseError, self.p.parse, "${asdf:")
        self.assertRaises(ParseError, self.p.parse, "$()")
        self.assertRaises(ParseError, self.p.parse, "$(unknown)")