diff --git a/rbtools/clients/tests.py b/rbtools/clients/tests.py
index e0572045626112d9e8d6e0b040880ad385c3b83b..b9dd338581eef1b16b72c9f0732850da96d31c62 100644
--- a/rbtools/clients/tests.py
+++ b/rbtools/clients/tests.py
@@ -11,10 +11,9 @@ from nose import SkipTest
 
 from rbtools.api.capabilities import Capabilities
 from rbtools.clients import RepositoryInfo
-from rbtools.clients.bazaar import (
-    BazaarClient,
-    USING_PARENT_PREFIX as BZR_USING_PARENT_PREFIX)
-from rbtools.clients.errors import InvalidRevisionSpecError
+from rbtools.clients.bazaar import BazaarClient
+from rbtools.clients.errors import (InvalidRevisionSpecError,
+                                    TooManyRevisionsError)
 from rbtools.clients.git import GitClient
 from rbtools.clients.mercurial import MercurialClient
 from rbtools.clients.perforce import PerforceClient, P4Wrapper
@@ -130,6 +129,12 @@ class GitClientTests(SCMClientTests):
         self.assertEqual(result['base_commit_id'], base_commit_id)
         self.assertEqual(result['commit_id'], commit_id)
 
+    def test_too_many_revisions(self):
+        """Testing GitClient parse_revision_spec with too many revisions"""
+        self.assertRaises(TooManyRevisionsError,
+                          self.client.parse_revision_spec,
+                          [1, 2, 3])
+
     def test_diff_simple_multiple(self):
         """Testing GitClient simple diff with multiple commits case"""
         self.client.get_repository_info()
@@ -454,6 +459,28 @@ class GitClientTests(SCMClientTests):
         self.assertEqual(revisions['base'], base_commit_id)
         self.assertEqual(revisions['tip'], tip_commit_id)
 
+    def test_is_valid_version(self):
+        """Testing GitClient.is_valid_version"""
+        self.assertTrue(self.client.is_valid_version((1, 0, 0), (1, 0, 0)))
+        self.assertTrue(self.client.is_valid_version((1, 1, 0), (1, 0, 0)))
+        self.assertTrue(self.client.is_valid_version((1, 0, 1), (1, 0, 0)))
+        self.assertTrue(self.client.is_valid_version((1, 1, 0), (1, 1, 0)))
+        self.assertTrue(self.client.is_valid_version((1, 1, 1), (1, 1, 0)))
+        self.assertTrue(self.client.is_valid_version((1, 1, 1), (1, 1, 1)))
+
+        self.assertFalse(self.client.is_valid_version((0, 9, 9), (1, 0, 0)))
+        self.assertFalse(self.client.is_valid_version((1, 0, 9), (1, 1, 0)))
+        self.assertFalse(self.client.is_valid_version((1, 1, 0), (1, 1, 1)))
+
+    def test_get_raw_commit_message(self):
+        """Testing GitClient.get_raw_commit_message"""
+        self._git_add_file_commit('foo.txt', FOO2, 'Commit 2')
+        self.client.get_repository_info()
+        revisions = self.client.parse_revision_spec()
+
+        self.assertEqual(self.client.get_raw_commit_message(revisions),
+                         'Commit 2')
+
 
 class MercurialTestBase(SCMClientTests):
     def setUp(self):
@@ -1232,7 +1259,6 @@ class SVNClientTests(SCMClientTests):
         self.assertEqual(revisions['base'], 1549822)
         self.assertEqual(revisions['tip'], 1549823)
 
-
     def test_parse_revision_spec_two_revisions_url(self):
         """Testing SVNClient.parse_revision_spec with R1:R2 syntax and a repository URL"""
         self.options.repository_url = \
@@ -1246,6 +1272,18 @@ class SVNClientTests(SCMClientTests):
         self.assertEqual(revisions['base'], 1549823)
         self.assertEqual(revisions['tip'], 1550211)
 
+    def test_parse_revision_spec_invalid_spec(self):
+        """Testing SVNClient.parse_revision_spec with invalid specifications"""
+        self.assertRaises(InvalidRevisionSpecError,
+                          self.client.parse_revision_spec,
+                          ['aoeu'])
+        self.assertRaises(InvalidRevisionSpecError,
+                          self.client.parse_revision_spec,
+                          ['aoeu', '1234'])
+        self.assertRaises(TooManyRevisionsError,
+                          self.client.parse_revision_spec,
+                          ['1', '2', '3'])
+
 
 class P4WrapperTests(RBTestBase):
     def is_supported(self):
@@ -1418,8 +1456,8 @@ class PerforceClientTests(SCMClientTests):
 
         self.assertEqual(url, RB_URL)
 
-    def test_diff_with_changenum(self):
-        """Testing PerforceClient.diff with changenums"""
+    def test_diff_with_pending_changelist(self):
+        """Testing PerforceClient.diff with a pending changelist"""
         client = self._build_client()
         client.p4.repo_files = [
             {
@@ -1468,6 +1506,74 @@ class PerforceClientTests(SCMClientTests):
         diff = client.diff(revisions)
         self._compare_diff(diff, '07aa18ff67f9aa615fcda7ecddcb354e')
 
+    def test_diff_for_submitted_changelist(self):
+        """Testing PerforceClient.diff with a submitted changelist"""
+        class TestWrapper(self.P4DiffTestWrapper):
+            def change(self, changelist):
+                return [{
+                    'Change': '12345',
+                    'Date': '2013/12/19 11:32:45',
+                    'User': 'example',
+                    'Status': 'submitted',
+                    'Description': 'My change description\n',
+                }]
+
+            def filelog(self, path):
+                return [
+                    {
+                        'change0': '12345',
+                        'action0': 'edit',
+                        'rev0': '3',
+                        'depotFile': '//mydepot/test/README',
+                    }
+                ]
+
+        client = PerforceClient(TestWrapper)
+        client.p4.repo_files = [
+            {
+                'depotFile': '//mydepot/test/README',
+                'rev': '2',
+                'action': 'edit',
+                'change': '12345',
+                'text': 'This is a test.\n',
+            },
+            {
+                'depotFile': '//mydepot/test/README',
+                'rev': '3',
+                'action': 'edit',
+                'change': '',
+                'text': 'This is a mess.\n',
+            },
+        ]
+
+        readme_file = make_tempfile()
+        client.p4.print_file('//mydepot/test/README#3', readme_file)
+
+        client.p4.where_files = {
+            '//mydepot/test/README': readme_file,
+        }
+        client.p4.repo_files = [
+            {
+                'depotFile': '//mydepot/test/README',
+                'rev': '2',
+                'action': 'edit',
+                'change': '12345',
+                'text': 'This is a test.\n',
+            },
+            {
+                'depotFile': '//mydepot/test/README',
+                'rev': '3',
+                'action': 'edit',
+                'change': '',
+                'text': 'This is a mess.\n',
+            },
+        ]
+
+        revisions = client.parse_revision_spec(['12345'])
+        diff = client.diff(revisions)
+        self._compare_diff(diff, '8af5576f5192ca87731673030efb5f39',
+                           expect_changenum=False)
+
     def test_diff_with_moved_files_cap_on(self):
         """Testing PerforceClient.diff with moved files and capability on"""
         self._test_diff_with_moved_files(
@@ -1565,10 +1671,12 @@ class PerforceClientTests(SCMClientTests):
         client.p4d_version = (2012, 2)
         return client
 
-    def _compare_diff(self, diff_info, expected_diff_hash):
+    def _compare_diff(self, diff_info, expected_diff_hash,
+                      expect_changenum=True):
         self.assertTrue(isinstance(diff_info, dict))
         self.assertTrue('diff' in diff_info)
-        self.assertTrue('changenum' in diff_info)
+        if expect_changenum:
+            self.assertTrue('changenum' in diff_info)
 
         diff_content = re.sub('\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}',
                               '1970-01-01 00:00:00',
@@ -1661,6 +1769,7 @@ class PerforceClientTests(SCMClientTests):
             PerforceClient.REVISION_PENDING_CLN_PREFIX + '12345')
 
     def test_parse_revision_spec_two_args(self):
+        """Testing PerforceClient.parse_revision_spec with two changelists"""
         class TestWrapper(P4Wrapper):
             def change(self, changelist):
                 change = {
@@ -1692,15 +1801,36 @@ class PerforceClientTests(SCMClientTests):
         self.assertEqual(revisions['tip'], '100')
 
         self.assertRaises(InvalidRevisionSpecError,
-                          lambda: client.parse_revision_spec(['99', '101']))
+                          client.parse_revision_spec,
+                          ['99', '101'])
         self.assertRaises(InvalidRevisionSpecError,
-                          lambda: client.parse_revision_spec(['99', '102']))
+                          client.parse_revision_spec,
+                          ['99', '102'])
         self.assertRaises(InvalidRevisionSpecError,
-                          lambda: client.parse_revision_spec(['101', '100']))
+                          client.parse_revision_spec,
+                          ['101', '100'])
         self.assertRaises(InvalidRevisionSpecError,
-                          lambda: client.parse_revision_spec(['102', '100']))
+                          client.parse_revision_spec,
+                          ['102', '100'])
         self.assertRaises(InvalidRevisionSpecError,
-                          lambda: client.parse_revision_spec(['102', '10284']))
+                          client.parse_revision_spec,
+                          ['102', '10284'])
+
+    def test_parse_revision_spec_invalid_spec(self):
+        """Testing PerforceClient.parse_revision_spec with invalid
+        specifications"""
+        class TestWrapper(P4Wrapper):
+            def change(self, changelist):
+                return []
+        client = PerforceClient(TestWrapper)
+
+        self.assertRaises(InvalidRevisionSpecError,
+                          client.parse_revision_spec,
+                          ['aoeu'])
+
+        self.assertRaises(TooManyRevisionsError,
+                          client.parse_revision_spec,
+                          ['1', '2', '3'])
 
 
 class BazaarClientTests(SCMClientTests):
@@ -1743,19 +1873,6 @@ class BazaarClientTests(SCMClientTests):
         self._run_bzr(["add", file])
         self._run_bzr(["commit", "-m", msg, '--author', 'Test User'])
 
-    def _bzr_get_revno(self, revision_spec=None):
-        command = ['revno']
-        if revision_spec:
-            command += ['-r', revision_spec]
-
-        result = self._run_bzr(command).strip().split('\n')
-
-        if len(result) == 1:
-            return 'revno:' + result[0]
-        elif len(result) == 2 and result[0].startswith(BZR_USING_PARENT_PREFIX):
-            branch = result[0][len(BZR_USING_PARENT_PREFIX):]
-            return 'revno:%s:%s' % (result[1], branch)
-
     def _compare_diffs(self, filename, full_diff, expected_diff_digest):
         """
         Testing that the full_diff for ``filename`` matches the ``expected_diff``.
@@ -1801,6 +1918,12 @@ class BazaarClientTests(SCMClientTests):
         ri = self.client.get_repository_info()
         self.assertEqual(ri, None)
 
+    def test_too_many_revisions(self):
+        """Testing BazaarClient parse_revision_spec with too many revisions"""
+        self.assertRaises(TooManyRevisionsError,
+                          self.client.parse_revision_spec,
+                          [1, 2, 3])
+
     def test_diff_simple(self):
         """Testing BazaarClient simple diff case"""
         os.chdir(self.child_branch)
@@ -1976,9 +2099,9 @@ class BazaarClientTests(SCMClientTests):
         """Testing BazaarClient.parse_revision_spec with no specified revisions"""
         os.chdir(self.child_branch)
 
-        base_commit_id = self._bzr_get_revno()
+        base_commit_id = self.client._get_revno()
         self._bzr_add_file_commit("foo.txt", FOO1, "commit 1")
-        tip_commit_id = self._bzr_get_revno()
+        tip_commit_id = self.client._get_revno()
 
         revisions = self.client.parse_revision_spec()
         self.assertTrue(isinstance(revisions, dict))
@@ -1992,9 +2115,9 @@ class BazaarClientTests(SCMClientTests):
         """Testing BazaarClient.parse_revision_spec with one specified revision"""
         os.chdir(self.child_branch)
 
-        base_commit_id = self._bzr_get_revno()
+        base_commit_id = self.client._get_revno()
         self._bzr_add_file_commit("foo.txt", FOO1, "commit 1")
-        tip_commit_id = self._bzr_get_revno()
+        tip_commit_id = self.client._get_revno()
 
         revisions = self.client.parse_revision_spec([tip_commit_id])
         self.assertTrue(isinstance(revisions, dict))
@@ -2007,15 +2130,15 @@ class BazaarClientTests(SCMClientTests):
     def test_parse_revision_spec_one_arg_parent(self):
         """Testing BazaarClient.parse_revision_spec with one specified revision and a parent diff"""
         os.chdir(self.original_branch)
-        parent_base_commit_id = self._bzr_get_revno()
+        parent_base_commit_id = self.client._get_revno()
 
         grand_child_branch = mktemp()
         self._run_bzr(["branch", self.child_branch, grand_child_branch])
         os.chdir(grand_child_branch)
 
-        base_commit_id = self._bzr_get_revno()
+        base_commit_id = self.client._get_revno()
         self._bzr_add_file_commit("foo.txt", FOO2, "commit 2")
-        tip_commit_id = self._bzr_get_revno()
+        tip_commit_id = self.client._get_revno()
 
         self.options.parent_branch = self.child_branch
 
@@ -2033,9 +2156,9 @@ class BazaarClientTests(SCMClientTests):
         os.chdir(self.child_branch)
 
         self._bzr_add_file_commit("foo.txt", FOO1, "commit 1")
-        base_commit_id = self._bzr_get_revno()
+        base_commit_id = self.client._get_revno()
         self._bzr_add_file_commit("foo.txt", FOO2, "commit 2")
-        tip_commit_id = self._bzr_get_revno()
+        tip_commit_id = self.client._get_revno()
 
         revisions = self.client.parse_revision_spec(
             ['%s..%s' % (base_commit_id, tip_commit_id)])
@@ -2051,9 +2174,9 @@ class BazaarClientTests(SCMClientTests):
         os.chdir(self.child_branch)
 
         self._bzr_add_file_commit("foo.txt", FOO1, "commit 1")
-        base_commit_id = self._bzr_get_revno()
+        base_commit_id = self.client._get_revno()
         self._bzr_add_file_commit("foo.txt", FOO2, "commit 2")
-        tip_commit_id = self._bzr_get_revno()
+        tip_commit_id = self.client._get_revno()
 
         revisions = self.client.parse_revision_spec(
             [base_commit_id, tip_commit_id])
diff --git a/rbtools/utils/filesystem.py b/rbtools/utils/filesystem.py
index b25a1a83d31fc77545e9242ad3177ae469a67f8d..4174fe43fac157ac7cce12390fbae15d6171ff6c 100644
--- a/rbtools/utils/filesystem.py
+++ b/rbtools/utils/filesystem.py
@@ -26,14 +26,6 @@ def cleanup_tempfiles():
         shutil.rmtree(tmpdir, ignore_errors=True)
 
 
-def get_config_value(configs, name, default=None):
-    for c in configs:
-        if name in c:
-            return c[name]
-
-    return default
-
-
 def load_config_files(homepath):
     """Loads data from .reviewboardrc files."""
     def _load_config(path):
diff --git a/rbtools/utils/tests.py b/rbtools/utils/tests.py
index d5f41f3ea9f8d3a6916f3eea426f57c8249198ea..2cc724c50494082e11eeaa830c0f4a45223003ce 100644
--- a/rbtools/utils/tests.py
+++ b/rbtools/utils/tests.py
@@ -3,6 +3,7 @@
 Any new modules created under rbtools/api should be tested here."""
 import os
 import re
+import shutil
 import sys
 
 from rbtools.utils import checks, filesystem, process
@@ -23,6 +24,22 @@ class UtilitiesTest(RBTestBase):
         self.assertEqual(os.stat(fname).st_uid, os.geteuid())
         self.assertTrue(os.access(fname, os.R_OK | os.W_OK))
 
+    def test_make_empty_files(self):
+        """Testing 'make_empty_files' method."""
+        # Use make_tempdir to get a unique directory name
+        tmpdir = filesystem.make_tempdir()
+        self.assertTrue(os.path.isdir(tmpdir))
+        filesystem.cleanup_tempfiles()
+
+        fname = os.path.join(tmpdir, 'file')
+        filesystem.make_empty_files([fname])
+        self.assertTrue(os.path.isdir(tmpdir))
+        self.assertTrue(os.path.isfile(fname))
+        self.assertEqual(os.stat(fname).st_uid, os.geteuid())
+        self.assertTrue(os.access(fname, os.R_OK | os.W_OK))
+
+        shutil.rmtree(tmpdir, ignore_errors=True)
+
     def test_execute(self):
         """Testing 'execute' method."""
         self.assertTrue(re.match('.*?%d.%d.%d' % sys.version_info[:3],
