Use a contextmanager for changing directory

sh.cd does not work anymore, as it does not persist between lines. This is cleaner, as we now always know what directory we're in.
This commit is contained in:
Daniel Milnes 2023-10-01 15:53:14 +01:00
parent 8a60dd6441
commit 42edc0c298
No known key found for this signature in database
GPG key ID: 1701097BBDD44D1B
7 changed files with 72 additions and 35 deletions

View file

@ -3,6 +3,9 @@ import mock
import os
import tempfile
import shutil
import sh
import powerline_shell as p
@ -33,9 +36,9 @@ class CwdTest(unittest.TestCase):
@mock.patch('powerline_shell.warn')
def test_falls_back_to_getcwd(self, warn, getenv):
getenv.return_value = None
os.chdir(self.dirname)
self.assertEqual(p.get_valid_cwd(), self.dirname)
self.assertEqual(warn.call_count, 0)
with sh.pushd(self.dirname):
self.assertEqual(p.get_valid_cwd(), self.dirname)
self.assertEqual(warn.call_count, 0)
@mock.patch('os.getenv')
@mock.patch('powerline_shell.warn')
@ -44,10 +47,10 @@ class CwdTest(unittest.TestCase):
getenv.return_value = None
os.mkdir(subdir)
os.chdir(subdir)
os.rmdir(subdir)
with sh.pushd(subdir):
os.rmdir(subdir)
with self.assertRaises(SystemExit) as e:
p.get_valid_cwd()
with self.assertRaises(SystemExit) as e:
p.get_valid_cwd()
self.assertEqual(warn.call_count, 1)
self.assertEqual(warn.call_count, 1)

View file

@ -1,4 +1,6 @@
import unittest
from contextlib import ExitStack
import mock
import tempfile
import shutil
@ -28,14 +30,20 @@ class BzrTest(unittest.TestCase):
})
self.dirname = tempfile.mkdtemp()
sh.cd(self.dirname)
sh.bzr("init-repo", ".")
sh.mkdir("trunk")
sh.cd("trunk")
sh.bzr("init")
with sh.pushd(self.dirname):
sh.bzr("init-repo", ".")
sh.mkdir("trunk")
with sh.pushd(self.dirname + "/trunk"):
sh.bzr("init")
sh.bzr("whoami", "--branch", '"Example <example@example.com>"')
self.segment = bzr.Segment(self.powerline, {})
with ExitStack() as stack:
self._resource = stack.enter_context(sh.pushd(self.dirname + "/trunk"))
self.addCleanup(stack.pop_all().close)
def tearDown(self):
shutil.rmtree(self.dirname)
@ -45,9 +53,8 @@ class BzrTest(unittest.TestCase):
sh.bzr("commit", "-m", "add file " + filename)
def _checkout_new_branch(self, branch):
sh.cd("..")
sh.bzr("branch", "trunk", branch)
sh.cd(branch)
with sh.pushd(self.dirname):
sh.bzr("branch", "trunk", branch)
@mock.patch("powerline_shell.utils.get_PATH")
def test_bzr_not_installed(self, get_PATH):
@ -71,12 +78,14 @@ class BzrTest(unittest.TestCase):
def test_different_branch(self):
self._add_and_commit("foo")
self._checkout_new_branch("bar")
self.segment.start()
self.segment.add_to_powerline()
self.assertEqual(self.powerline.append.call_args[0][0], " bar ")
with sh.pushd(self.dirname + "/bar"):
self.segment.start()
self.segment.add_to_powerline()
self.assertEqual(self.powerline.append.call_args[0][0], " bar ")
@mock.patch('powerline_shell.segments.bzr._get_bzr_status')
def test_all(self, check_output):
for stdout, result in test_cases:
stats = bzr.parse_bzr_stats(stdout)
self.assertEquals(result, stats)
with sh.pushd(self.dirname + "/trunk"):
stats = bzr.parse_bzr_stats(stdout)
self.assertEqual(result, stats)

View file

@ -1,4 +1,6 @@
import unittest
from contextlib import ExitStack
import mock
import tempfile
import shutil
@ -24,12 +26,16 @@ class FossilTest(unittest.TestCase):
})
self.dirname = tempfile.mkdtemp()
sh.cd(self.dirname)
sh.fossil("init", "test.fossil")
sh.fossil("open", "test.fossil")
with sh.pushd(self.dirname):
sh.fossil("init", "test.fossil")
sh.fossil("open", "test.fossil")
self.segment = fossil.Segment(self.powerline, {})
with ExitStack() as stack:
self._resource = stack.enter_context(sh.pushd(self.dirname))
self.addCleanup(stack.pop_all().close)
def tearDown(self):
shutil.rmtree(self.dirname)
@ -72,4 +78,4 @@ class FossilTest(unittest.TestCase):
def test_all(self, check_output):
for stdout, result in test_cases.items():
stats = fossil.parse_fossil_stats([stdout])
self.assertEquals(result, stats)
self.assertEqual(result, stats)

View file

@ -1,4 +1,6 @@
import unittest
from contextlib import ExitStack
import mock
import tempfile
import shutil
@ -12,11 +14,15 @@ class GitStashTest(unittest.TestCase):
def setUp(self):
self.powerline = mock.MagicMock()
self.dirname = tempfile.mkdtemp()
sh.cd(self.dirname)
sh.git("init", ".")
with sh.pushd(self.dirname):
sh.git("init", ".")
self.segment = git_stash.Segment(self.powerline, {})
with ExitStack() as stack:
self._resource = stack.enter_context(sh.pushd(self.dirname))
self.addCleanup(stack.pop_all().close)
def tearDown(self):
shutil.rmtree(self.dirname)

View file

@ -1,4 +1,6 @@
import unittest
from contextlib import ExitStack
import mock
import tempfile
import shutil
@ -16,11 +18,16 @@ class GitTest(unittest.TestCase):
})
self.dirname = tempfile.mkdtemp()
sh.cd(self.dirname)
sh.git("init", ".")
with sh.pushd(self.dirname):
sh.git("init", ".")
self.segment = git.Segment(self.powerline, {})
with ExitStack() as stack:
self._resource = stack.enter_context(sh.pushd(self.dirname))
self.addCleanup(stack.pop_all().close)
def tearDown(self):
shutil.rmtree(self.dirname)
@ -57,7 +64,7 @@ class GitTest(unittest.TestCase):
self._add_and_commit("foo")
self.segment.start()
self.segment.add_to_powerline()
self.assertEqual(self.powerline.append.call_args[0][0], ' master ')
self.assertIn(self.powerline.append.call_args[0][0], [' master ', ' main '])
def test_different_branch(self):
self._add_and_commit("foo")

View file

@ -1,4 +1,6 @@
import unittest
from contextlib import ExitStack
import mock
import tempfile
import shutil
@ -26,11 +28,15 @@ class HgTest(unittest.TestCase):
})
self.dirname = tempfile.mkdtemp()
sh.cd(self.dirname)
sh.hg("init", ".")
with sh.pushd(self.dirname):
sh.hg("init", ".")
self.segment = hg.Segment(self.powerline, {})
with ExitStack() as stack:
self._resource = stack.enter_context(sh.pushd(self.dirname))
self.addCleanup(stack.pop_all().close)
def tearDown(self):
shutil.rmtree(self.dirname)
@ -72,4 +78,4 @@ class HgTest(unittest.TestCase):
def test_all(self, check_output):
for stdout, result in test_cases.items():
stats = hg.parse_hg_stats([stdout])
self.assertEquals(result, stats)
self.assertEqual(result, stats)

View file

@ -16,8 +16,8 @@ class SvnTest(unittest.TestCase):
})
self.dirname = tempfile.mkdtemp()
sh.cd(self.dirname)
# sh.svn("init", ".")
with sh.pushd(self.dirname):
sh.svn("init", ".")
self.segment = svn.Segment(self.powerline, {})