diff --git a/tests/name_parser_tests.py b/tests/name_parser_tests.py
index 7154d75bc039fb796ee9db79c02421cee6c85e46..50293a9078039849bb8b8a4ddb0cb57c0e838987 100644
--- a/tests/name_parser_tests.py
+++ b/tests/name_parser_tests.py
@@ -1,12 +1,18 @@
-import sys, os.path
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+"""
+Test name parsing
+"""
+
+# pylint: disable=line-too-long
 
+import sys
+import os.path
 import datetime
 import unittest
 
-from tests import test_lib as test
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
+from tests import test_lib as test
 import sickbeard
 from sickbeard import tv
 from sickbeard.name_parser import parser
@@ -15,7 +21,7 @@ sickbeard.SYS_ENCODING = 'UTF-8'
 
 DEBUG = VERBOSE = False
 
-simple_test_cases = {
+SIMPLE_TEST_CASES = {
     'standard': {
         'Mr.Show.Name.S01E02.Source.Quality.Etc-Group': parser.ParseResult(None, 'Mr Show Name', 1, [2], 'Source.Quality.Etc', 'Group'),
         'Show.Name.S01E02': parser.ParseResult(None, 'Show Name', 1, [2]),
@@ -115,7 +121,7 @@ simple_test_cases = {
     },
 }
 
-combination_test_cases = [
+COMBINATION_TEST_CASES = [
     ('/test/path/to/Season 02/03 - Ep Name.avi',
      parser.ParseResult(None, None, 2, [3], 'Ep Name'),
      ['no_season', 'season_only']),
@@ -149,18 +155,20 @@ combination_test_cases = [
      ['no_season', 'season_only']),
 ]
 
-unicode_test_cases = [
+UNICODE_TEST_CASES = [
     (u'The.Big.Bang.Theory.2x07.The.Panty.Pi\xf1ata.Polarization.720p.HDTV.x264.AC3-SHELDON.mkv',
      parser.ParseResult(None, 'The.Big.Bang.Theory', 2, [7], u'The.Panty.Pi\xf1ata.Polarization.720p.HDTV.x264.AC3', 'SHELDON')),
     ('The.Big.Bang.Theory.2x07.The.Panty.Pi\xc3\xb1ata.Polarization.720p.HDTV.x264.AC3-SHELDON.mkv',
      parser.ParseResult(None, 'The.Big.Bang.Theory', 2, [7], u'The.Panty.Pi\xf1ata.Polarization.720p.HDTV.x264.AC3', 'SHELDON'))
 ]
 
-failure_cases = ['7sins-jfcs01e09-720p-bluray-x264']
+FAILURE_CASES = ['7sins-jfcs01e09-720p-bluray-x264']
 
 
 class UnicodeTests(test.SickbeardTestDBCase):
-
+    """
+    Test unicode
+    """
     def __init__(self, something):
         super(UnicodeTests, self).__init__(something)
         super(UnicodeTests, self).setUp()
@@ -168,24 +176,43 @@ class UnicodeTests(test.SickbeardTestDBCase):
         self.show.name = "The Big Bang Theory"
 
     def _test_unicode(self, name, result):
-        np = parser.NameParser(True, showObj=self.show)
-        parse_result = np.parse(name)
+        """
+        Test unicode
+
+        :param name:
+        :param result:
+        :return:
+        """
+        name_parser = parser.NameParser(True, showObj=self.show)
+        parse_result = name_parser.parse(name)
 
         # this shouldn't raise an exception
         repr(str(parse_result))
         self.assertEqual(parse_result.extra_info, result.extra_info)
 
     def test_unicode(self):
-        for (name, result) in unicode_test_cases:
+        """
+        Test unicode
+        """
+        for (name, result) in UNICODE_TEST_CASES:
             self._test_unicode(name, result)
 
-class FailureCaseTests(test.SickbeardTestDBCase):
 
+class FailureCaseTests(test.SickbeardTestDBCase):
+    """
+    Test cases that should fail
+    """
     @staticmethod
     def _test_name(name):
-        np = parser.NameParser(True)
+        """
+        Test name
+
+        :param name:
+        :return:
+        """
+        name_parser = parser.NameParser(True)
         try:
-            parse_result = np.parse(name)
+            parse_result = name_parser.parse(name)
         except (parser.InvalidNameException, parser.InvalidShowException):
             return True
 
@@ -194,21 +221,36 @@ class FailureCaseTests(test.SickbeardTestDBCase):
         return False
 
     def test_failures(self):
-        for name in failure_cases:
+        """
+        Test failures
+        """
+        for name in FAILURE_CASES:
             self.assertTrue(self._test_name(name))
 
+
 class ComboTests(test.SickbeardTestDBCase):
+    """
+    Perform combination tests
+    """
 
     def _test_combo(self, name, result, which_regexes):
+        """
+        Perform combination test
+
+        :param name:
+        :param result:
+        :param which_regexes:
+        :return:
+        """
 
         if VERBOSE:
             print
             print 'Testing', name
 
-        np = parser.NameParser(True)
+        name_parser = parser.NameParser(True)
 
         try:
-            test_result = np.parse(name)
+            test_result = name_parser.parse(name)
         except parser.InvalidShowException:
             return False
 
@@ -216,50 +258,63 @@ class ComboTests(test.SickbeardTestDBCase):
             print test_result, test_result.which_regex
             print result, which_regexes
 
-
         self.assertEqual(test_result, result)
         for cur_regex in which_regexes:
             self.assertTrue(cur_regex in test_result.which_regex)
         self.assertEqual(len(which_regexes), len(test_result.which_regex))
 
     def test_combos(self):
-
-        for (name, result, which_regexes) in combination_test_cases:
+        """
+        Perform combination tests
+        """
+        for (name, result, which_regexes) in COMBINATION_TEST_CASES:
             # Normalise the paths. Converts UNIX-style paths into Windows-style
             # paths when test is run on Windows.
             self._test_combo(os.path.normpath(name), result, which_regexes)
 
-class BasicTests(test.SickbeardTestDBCase):
 
+class BasicTests(test.SickbeardTestDBCase):
+    """
+    Basic name parsing tests
+    """
     def __init__(self, something):
         super(BasicTests, self).__init__(something)
         super(BasicTests, self).setUp()
         self.show = tv.TVShow(1, 1, 'en')
 
-    def _test_names(self, np, section, transform=None, verbose=False):
+    def _test_names(self, name_parser, section, transform=None, verbose=False):
+        """
+        Performs a test
+
+        :param name_parser: to use for test
+        :param section:
+        :param transform:
+        :param verbose:
+        :return:
+        """
 
         if VERBOSE or verbose:
             print
             print 'Running', section, 'tests'
-        for cur_test_base in simple_test_cases[section]:
+        for cur_test_base in SIMPLE_TEST_CASES[section]:
             if transform:
                 cur_test = transform(cur_test_base)
-                np.file_name = cur_test
+                name_parser.file_name = cur_test
             else:
                 cur_test = cur_test_base
             if VERBOSE or verbose:
                 print 'Testing', cur_test
 
-            result = simple_test_cases[section][cur_test_base]
+            result = SIMPLE_TEST_CASES[section][cur_test_base]
 
             self.show.name = result.series_name if result else None
-            np.showObj = self.show
+            name_parser.showObj = self.show
             if not result:
-                self.assertRaises(parser.InvalidNameException, np.parse, cur_test)
+                self.assertRaises(parser.InvalidNameException, name_parser.parse, cur_test)
                 return
             else:
                 result.which_regex = [section]
-                test_result = np.parse(cur_test)
+                test_result = name_parser.parse(cur_test)
 
             if DEBUG or verbose:
                 print 'air_by_date:', test_result.is_air_by_date, 'air_date:', test_result.air_date
@@ -270,109 +325,238 @@ class BasicTests(test.SickbeardTestDBCase):
             self.assertEqual(str(test_result), str(result))
 
     def test_standard_names(self):
-        np = parser.NameParser(True)
-        self._test_names(np, 'standard')
-
-    def test_standard_repeat_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'standard_repeat')
-
-    def test_fov_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'fov')
-
-    def test_fov_repeat_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'fov_repeat')
-
-    #def test_bare_names(self):
-    #    np = parser.NameParser(False)
-    #    self._test_names(np, 'bare')
-
-    def test_stupid_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'stupid')
-
-    #def test_no_season_names(self):
-    #    np = parser.NameParser(False)
-    #    self._test_names(np, 'no_season')
-
-    def test_no_season_general_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'no_season_general')
-
-    def test_no_season_multi_ep_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'no_season_multi_ep')
-
-    def test_season_only_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'season_only')
-
-    #def test_scene_date_format_names(self):
-    #    np = parser.NameParser(False)
-    #    self._test_names(np, 'scene_date_format')
+        """
+        Test standard names
+        """
+        name_parser = parser.NameParser(True)
+        self._test_names(name_parser, 'standard')
 
     def test_standard_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'standard', lambda x: x + '.avi')
+        """
+        Test standard file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'standard', lambda x: x + '.avi')
+
+    def test_standard_repeat_names(self):
+        """
+        Test standard repeat names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'standard_repeat')
 
     def test_standard_repeat_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'standard_repeat', lambda x: x + '.avi')
+        """
+        Test standard repeat file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'standard_repeat', lambda x: x + '.avi')
+
+    def test_fov_names(self):
+        """
+        Test fov names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'fov')
 
     def test_fov_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'fov', lambda x: x + '.avi')
+        """
+        Test fov file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'fov', lambda x: x + '.avi')
+
+    def test_fov_repeat_names(self):
+        """
+        Test fov repeat names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'fov_repeat')
 
     def test_fov_repeat_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'fov_repeat', lambda x: x + '.avi')
+        """
+        Test fov repeat file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'fov_repeat', lambda x: x + '.avi')
 
-    #def test_bare_file_names(self):
-    #    np = parser.NameParser()
-    #    self._test_names(np, 'bare', lambda x: x + '.avi')
+    def test_stupid_names(self):
+        """
+        Test stupid names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'stupid')
 
     def test_stupid_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'stupid', lambda x: x + '.avi')
+        """
+        Test stupid file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'stupid', lambda x: x + '.avi')
+
+    def test_no_s_general_names(self):
+        """
+        Test no season general names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'no_season_general')
+
+    def test_no_s_general_file_names(self):
+        """
+        Test no season general file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'no_season_general', lambda x: x + '.avi')
+
+    def test_no_s_multi_ep_names(self):
+        """
+        Test no season multi episode names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'no_season_multi_ep')
+
+    def test_no_s_multi_ep_file_names(self):
+        """
+        Test no season multi episode file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'no_season_multi_ep', lambda x: x + '.avi')
+
+    def test_s_only_names(self):
+        """
+        Test season only names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'season_only')
+
+    def test_s_only_file_names(self):
+        """
+        Test season only file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'season_only', lambda x: x + '.avi')
+
+
+# TODO: Make these work or document why they shouldn't
+class BasicFailedTests(test.SickbeardTestDBCase):
+    """
+    Basic tests that currently fail
+    """
+    def __init__(self, something):
+        super(BasicFailedTests, self).__init__(something)
+        super(BasicFailedTests, self).setUp()
+        self.show = tv.TVShow(1, 1, 'en')
 
-    #def test_no_season_file_names(self):
-    #    np = parser.NameParser()
-    #    self._test_names(np, 'no_season', lambda x: x + '.avi')
+    def _test_names(self, name_parser, section, transform=None, verbose=False):
+        """
+        Performs a test
 
-    def test_no_season_general_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'no_season_general', lambda x: x + '.avi')
+        :param name_parser: to use for test
+        :param section:
+        :param transform:
+        :param verbose:
+        :return:
+        """
+        if VERBOSE or verbose:
+            print
+            print 'Running', section, 'tests'
+        for cur_test_base in SIMPLE_TEST_CASES[section]:
+            if transform:
+                cur_test = transform(cur_test_base)
+                name_parser.file_name = cur_test
+            else:
+                cur_test = cur_test_base
+            if VERBOSE or verbose:
+                print 'Testing', cur_test
 
-    def test_no_season_multi_ep_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'no_season_multi_ep', lambda x: x + '.avi')
+            result = SIMPLE_TEST_CASES[section][cur_test_base]
 
-    def test_season_only_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'season_only', lambda x: x + '.avi')
+            self.show.name = result.series_name if result else None
+            name_parser.showObj = self.show
+            if not result:
+                self.assertRaises(parser.InvalidNameException, name_parser.parse, cur_test)
+                return
+            else:
+                result.which_regex = [section]
+                test_result = name_parser.parse(cur_test)
 
-    #def test_scene_date_format_file_names(self):
-    #    np = parser.NameParser()
-    #    self._test_names(np, 'scene_date_format', lambda x: x + '.avi')
+            if DEBUG or verbose:
+                print 'air_by_date:', test_result.is_air_by_date, 'air_date:', test_result.air_date
+                print 'anime:', test_result.is_anime, 'ab_episode_numbers:', test_result.ab_episode_numbers
+                print test_result
+                print result
+            self.assertEqual(test_result.which_regex, [section])
+            self.assertEqual(str(test_result), str(result))
 
+    @unittest.expectedFailure
+    def test_no_s_names(self):
+        """
+        Test no season names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'no_season')
+
+    @unittest.expectedFailure
+    def test_no_s_file_names(self):
+        """
+        Test no season file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'no_season', lambda x: x + '.avi')
+
+    @unittest.expectedFailure
+    def test_bare_names(self):
+        """
+        Test bare names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'bare')
+
+    @unittest.expectedFailure
+    def test_bare_file_names(self):
+        """
+        Test bare file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'bare', lambda x: x + '.avi')
+
+    @unittest.skip('Not yet implemented')
     def test_combination_names(self):
+        """
+        Test combination names
+        """
         pass
 
+    @unittest.skip('Not trying indexer')
+    def test_scene_date_fmt_names(self):
+        """
+        Test scene date format names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'scene_date_format')
+
+    @unittest.skip('Not trying indexer')
+    def test_scene_date_fmt_file_names(self):
+        """
+        Test scene date format file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'scene_date_format', lambda x: x + '.avi')
+
+
 if __name__ == '__main__':
     if len(sys.argv) > 1:
-        suite = unittest.TestLoader().loadTestsFromName('name_parser_tests.BasicTests.test_'+sys.argv[1])
-        unittest.TextTestRunner(verbosity=2).run(suite)
+        SUITE = unittest.TestLoader().loadTestsFromName('name_parser_tests.BasicTests.test_'+sys.argv[1])
+        unittest.TextTestRunner(verbosity=2).run(SUITE)
     else:
-        suite = unittest.TestLoader().loadTestsFromTestCase(BasicTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+        SUITE = unittest.TestLoader().loadTestsFromTestCase(BasicTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
 
-    suite = unittest.TestLoader().loadTestsFromTestCase(ComboTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(ComboTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
 
-    suite = unittest.TestLoader().loadTestsFromTestCase(UnicodeTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(UnicodeTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
 
-    suite = unittest.TestLoader().loadTestsFromTestCase(FailureCaseTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(FailureCaseTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)