From d8c0a42e6caf0c155ad70e8e8ce0e77dfca67cdd Mon Sep 17 00:00:00 2001 From: Adrian Sampson Date: Sat, 26 Nov 2016 18:55:58 -0500 Subject: [PATCH] Avoid TestHelper dependency in MediaFile tests Part of #1966. This also introduces a nicer, more lightweight way to create and destroy temporary directories, decoupling that functionality from the giant morass that is TestHelper. --- test/_common.py | 22 ++++++++++++++++++++++ test/test_mediafile.py | 12 ++++-------- test/test_mediafile_edge.py | 9 ++++----- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/test/_common.py b/test/_common.py index 09747e595..4522d2da5 100644 --- a/test/_common.py +++ b/test/_common.py @@ -333,6 +333,28 @@ class Bag(object): return self.fields.get(key) +# Convenience methods for setting up a temporary sandbox directory for tests +# that need to interact with the filesystem. + +class TempDirMixin(object): + """Text mixin for creating and deleting a temporary directory. + """ + + def create_temp_dir(self): + """Create a temporary directory and assign it into `self.temp_dir`. + Call `remove_temp_dir` later to delete it. + """ + path = tempfile.mkdtemp() + if not isinstance(path, bytes): + path = path.encode('utf8') + self.temp_dir = path + + def remove_temp_dir(self): + """Delete the temporary directory created by `create_temp_dir`. + """ + shutil.rmtree(self.temp_dir) + + # Platform mocking. @contextmanager diff --git a/test/test_mediafile.py b/test/test_mediafile.py index 458ad6d8a..463cd534d 100644 --- a/test/test_mediafile.py +++ b/test/test_mediafile.py @@ -20,7 +20,6 @@ from __future__ import division, absolute_import, print_function import os import shutil -import tempfile import datetime import time import unittest @@ -293,7 +292,8 @@ class GenreListTestMixin(object): assertCountEqual(self, mediafile.genres, [u'the genre', u'another']) -class ReadWriteTestBase(ArtTestMixin, GenreListTestMixin): +class ReadWriteTestBase(ArtTestMixin, GenreListTestMixin, + _common.TempDirMixin): """Test writing and reading tags. Subclasses must set ``extension`` and ``audio_properties``. """ @@ -378,14 +378,10 @@ class ReadWriteTestBase(ArtTestMixin, GenreListTestMixin): ] def setUp(self): - name = tempfile.mkdtemp() - if not isinstance(name, bytes): - name = name.encode('utf8') - self.temp_dir = name + self.create_temp_dir() def tearDown(self): - if os.path.isdir(self.temp_dir): - shutil.rmtree(self.temp_dir) + self.remove_temp_dir() def test_read_nonexisting(self): mediafile = self._mediafile_fixture('full') diff --git a/test/test_mediafile_edge.py b/test/test_mediafile_edge.py index 2aae30c55..657ca455d 100644 --- a/test/test_mediafile_edge.py +++ b/test/test_mediafile_edge.py @@ -23,7 +23,6 @@ import unittest import mutagen.id3 from test import _common -from test.helper import TestHelper from beets import mediafile import six @@ -145,7 +144,7 @@ class InvalidValueToleranceTest(unittest.TestCase): self.assertEqual(v, 1.0) -class SafetyTest(unittest.TestCase, TestHelper): +class SafetyTest(unittest.TestCase, _common.TempDirMixin): def setUp(self): self.create_temp_dir() @@ -210,7 +209,7 @@ class SideEffectsTest(unittest.TestCase): self.assertEqual(old_mtime, new_mtime) -class MP4EncodingTest(unittest.TestCase, TestHelper): +class MP4EncodingTest(unittest.TestCase, _common.TempDirMixin): def setUp(self): self.create_temp_dir() src = os.path.join(_common.RSRC, b'full.m4a') @@ -229,7 +228,7 @@ class MP4EncodingTest(unittest.TestCase, TestHelper): self.assertEqual(new_mf.label, u'foo\xe8bar') -class MP3EncodingTest(unittest.TestCase, TestHelper): +class MP3EncodingTest(unittest.TestCase, _common.TempDirMixin): def setUp(self): self.create_temp_dir() src = os.path.join(_common.RSRC, b'full.mp3') @@ -332,7 +331,7 @@ class SoundCheckTest(unittest.TestCase): self.assertEqual(peak, 0.0) -class ID3v23Test(unittest.TestCase, TestHelper): +class ID3v23Test(unittest.TestCase, _common.TempDirMixin): def _make_test(self, ext=b'mp3', id3v23=False): self.create_temp_dir() src = os.path.join(_common.RSRC,