Mercurial > hgsubversion
diff tests/test_push_autoprops.py @ 911:772280aed751
Honor SVN auto-props (solves issue #186)
The auto-props are read from the users subversion configuration file
(~/.subversion/config on posix). System-wide configuration files are not
taken into account.
The implementation completely bypasses the subversion bindings,
because the current bindings provide little support for this functionality.
author | Ronny Voelker <ronny.voelker@googlemail.com> |
---|---|
date | Sun, 01 Jan 2012 15:59:15 +0100 |
parents | |
children | d741f536f23a |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/tests/test_push_autoprops.py @@ -0,0 +1,107 @@ +import subprocess +import sys +import unittest +import os + +import test_util + +from hgsubversion import svnwrap + +class PushAutoPropsTests(test_util.TestBase): + def setUp(self): + test_util.TestBase.setUp(self) + repo, self.repo_path = self.load_and_fetch('emptyrepo.svndump') + + def test_push_honors_svn_autoprops(self): + self.setup_svn_config( + "[miscellany]\n" + "enable-auto-props = yes\n" + "[auto-props]\n" + "*.py = test:prop=success\n") + changes = [('test.py', 'test.py', 'echo hallo')] + self.commitchanges(changes) + self.pushrevisions(True) + prop_val = test_util.svnpropget( + self.repo_path, "trunk/test.py", 'test:prop') + self.assertEqual('success', prop_val) + + +class AutoPropsConfigTest(test_util.TestBase): + def test_use_autoprops_for_matching_file_when_enabled(self): + self.setup_svn_config( + "[miscellany]\n" + "enable-auto-props = yes\n" + "[auto-props]\n" + "*.py = test:prop=success\n") + props = self.new_autoprops_config().properties('xxx/test.py') + self.assertEqual({ 'test:prop': 'success'}, props) + + def new_autoprops_config(self): + return svnwrap.AutoPropsConfig(self.config_dir) + + def test_ignore_nonexisting_config(self): + config_file = os.path.join(self.config_dir, 'config') + os.remove(config_file) + self.assertTrue(not os.path.exists(config_file)) + props = self.new_autoprops_config().properties('xxx/test.py') + self.assertEqual({}, props) + + def test_ignore_autoprops_when_file_doesnt_match(self): + self.setup_svn_config( + "[miscellany]\n" + "enable-auto-props = yes\n" + "[auto-props]\n" + "*.py = test:prop=success\n") + props = self.new_autoprops_config().properties('xxx/test.sh') + self.assertEqual({}, props) + + def test_ignore_autoprops_when_disabled(self): + self.setup_svn_config( + "[miscellany]\n" + "#enable-auto-props = yes\n" + "[auto-props]\n" + "*.py = test:prop=success\n") + props = self.new_autoprops_config().properties('xxx/test.py') + self.assertEqual({}, props) + + def test_combine_properties_of_multiple_matches(self): + self.setup_svn_config( + "[miscellany]\n" + "enable-auto-props = yes\n" + "[auto-props]\n" + "*.py = test:prop=success\n" + "test.* = test:prop2=success\n") + props = self.new_autoprops_config().properties('xxx/test.py') + self.assertEqual({ + 'test:prop': 'success', 'test:prop2': 'success'}, props) + + +class ParseAutoPropsTests(test_util.TestBase): + def test_property_value_is_optional(self): + props = svnwrap.parse_autoprops("svn:executable") + self.assertEqual({'svn:executable': ''}, props) + props = svnwrap.parse_autoprops("svn:executable=") + self.assertEqual({'svn:executable': ''}, props) + + def test_property_value_may_be_quoted(self): + props = svnwrap.parse_autoprops("svn:eol-style=\" native \"") + self.assertEqual({'svn:eol-style': ' native '}, props) + props = svnwrap.parse_autoprops("svn:eol-style=' native '") + self.assertEqual({'svn:eol-style': ' native '}, props) + + def test_surrounding_whitespaces_are_ignored(self): + props = svnwrap.parse_autoprops(" svn:eol-style = native ") + self.assertEqual({'svn:eol-style': 'native'}, props) + + def test_multiple_properties_are_separated_by_semicolon(self): + props = svnwrap.parse_autoprops( + "svn:eol-style=native;svn:executable=true\n") + self.assertEqual({ + 'svn:eol-style': 'native', + 'svn:executable': 'true'}, + props) + + +def suite(): + return unittest.findTestCases(sys.modules[__name__]) +