Mercurial > treepkg
view test/test_cmdexpand.py @ 99:7888fe374e11
Add support for notification mails in case of build errors
This involves a new status field notification_mail to keep track of
whether a notification has been sent for a particular build attempt and
two programs to list the pending notifications and to send the pending
notifications (similar to how the static web pages are published) as
well as the corresponding configuration files.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Tue, 19 Feb 2008 19:19:23 +0000 |
parents | a2ce575ce82b |
children |
line wrap: on
line source
# Copyright (C) 2007 by Intevation GmbH # Authors: # Bernhard Herzog <bh@intevation.de> # # This program is free software under the GPL (>=v2) # Read the file COPYING coming with the software for details. """Tests for the cmdexpand function""" import unittest from treepkg.cmdexpand import cmdexpand class TestCMDExpand(unittest.TestCase): def test_words(self): """Test cmdexpand with simple whitespace separated words""" self.assertEquals(cmdexpand("abc defg xyz zy"), ['abc', 'defg', 'xyz', 'zy']) def test_single_quoted(self): """Test cmdexpand with some single quoted words""" self.assertEquals(cmdexpand("abc 'defg xyz' zy"), ['abc', 'defg xyz', 'zy']) def test_double_quoted(self): """Test cmdexpand with some double quoted words""" self.assertEquals(cmdexpand('abc "defg xyz" zy'), ['abc', 'defg xyz', 'zy']) def test_word_expansion(self): """Test cmdexpand with simple word expansion""" self.assertEquals(cmdexpand('abc $foo ghi', foo="def"), ['abc', 'def', 'ghi']) self.assertEquals(cmdexpand('abc $foo ghi $bar', foo="def", bar="X"), ['abc', 'def', 'ghi', 'X']) def test_word_expansion_braced_name(self): """Test cmdexpand with word expansion using braced names""" self.assertEquals(cmdexpand('abc ${foo} x${foo}y ghi', foo="def"), ['abc', 'def', 'xdefy', 'ghi']) def test_word_expansion_non_byte_string(self): """Test cmdexpand quoting of dollar signs""" self.assertEquals(cmdexpand('abc $foo $bar ghi', foo=123, bar=u"1 2 3"), ['abc', '123', '1 2 3', 'ghi']) def test_word_expansion_non_identifier(self): """Test cmdexpand word expansion if dollar not followed by identifier""" # $ immediately followed by a non-identifier character self.assertRaises(ValueError, cmdexpand, 'abc $#foo bar', foo="def") def test_word_expansion_inside_words(self): """Test cmdexpand word expansions in parts of words""" self.assertEquals(cmdexpand("$foo x$bar y$baz.", foo="abc", bar="yz", baz="zx"), ["abc", "xyz", "yzx."]) self.assertEquals(cmdexpand("$foo x$bar-$baz.", foo="abc", bar="yz", baz="zx"), ["abc", "xyz-zx."]) def test_case_sensitivity(self): """Test case sensitivity of expansion keys""" self.assertEquals(cmdexpand('abc $foo $Foo $FOO', foo="def", Foo="DEF", FOO="Def"), ['abc', 'def', 'DEF', 'Def']) def test_list_expansion(self): """Test cmdexpand with list expansion""" self.assertEquals(cmdexpand('abc @foo ghi', foo=["d", "e", "f"]), ['abc', 'd', 'e', 'f', 'ghi']) def test_list_expansion_non_string(self): """Test cmdexpand with list expansion""" self.assertEquals(cmdexpand('abc @foo ghi', foo=[1, 1.0, None]), ['abc', '1', '1.0', 'None', 'ghi']) def test_list_expansion_with_iterators(self): """Test cmdexpand with list expansion using an iterator""" self.assertEquals(cmdexpand('abc @foo ghi', foo=(i**2 for i in range(3))), ['abc', '0', '1', '4', 'ghi']) def test_list_expansion_non_identifier(self): """Test cmdexpand with at-sign not followed by identifier""" # @+identifier do not cover entire word self.assertRaises(ValueError, cmdexpand, 'abc @foo, ghi', foo=["d", "e", "f"]) # @ immediately followed by a non-identifier character self.assertRaises(ValueError, cmdexpand, 'abc @. z') def test_list_expansion_inside_word(self): """Test whether cmdexpand raises ValueError for at-signs inside words""" self.assertRaises(ValueError, cmdexpand, 'abc x@foo ghi', foo=["d", "e", "f"]) def test_dollar_quoting(self): """Test cmdexpand quoting of dollar signs""" self.assertEquals(cmdexpand('abc $$foo $foo g$$hi', foo="def"), ['abc', '$foo', 'def', 'g$hi']) def test_atsign_quoting(self): """Test cmdexpand quoting of at-signs""" self.assertEquals(cmdexpand('abc @foo $@foo g$@i', foo=["d", "e", "f"]), ['abc', 'd', 'e', 'f', '@foo', 'g@i']) def test_interaction_with_shlex_quoting(self): """Test cmdexpand's interaction with shlex's quoting""" # Unlike unix-shells the expansion isn't influenced much by # shell quoting as supported by shlex. self.assertEquals(cmdexpand('abc "@foo" \'@foo\' ghi', foo=["d", "e", "f"]), ['abc', 'd', 'e', 'f', 'd', 'e', 'f', 'ghi']) self.assertEquals(cmdexpand('abc "$foo" \'$foo\' ghi', foo="def"), ['abc', 'def', 'def', 'ghi']) self.assertEquals(cmdexpand('abc " $foo" \'a $foo\' ghi', foo="def"), ['abc', ' def', 'a def', 'ghi']) if __name__ == "__main__": unittest.main()