Index: PyMySQL-0.9.3/pymysql/tests/__init__.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/__init__.py 2018-06-27 09:28:18.000000000 +0200 +++ PyMySQL-0.9.3/pymysql/tests/__init__.py 2020-06-03 10:13:17.705278419 +0200 @@ -14,5 +14,5 @@ from pymysql.tests.test_optionfile impor from pymysql.tests.thirdparty import * if __name__ == "__main__": - import unittest2 - unittest2.main() + import unittest + unittest.main() Index: PyMySQL-0.9.3/pymysql/tests/base.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/base.py 2018-12-17 13:00:21.000000000 +0100 +++ PyMySQL-0.9.3/pymysql/tests/base.py 2020-06-03 10:13:17.705278419 +0200 @@ -3,14 +3,33 @@ import json import os import re import warnings - -import unittest2 +import unittest import pymysql from .._compat import CPYTHON -class PyMySQLTestCase(unittest2.TestCase): +if CPYTHON: + import atexit + gc.set_debug(gc.DEBUG_UNCOLLECTABLE) + + @atexit.register + def report_uncollectable(): + import gc + if not gc.garbage: + print("No garbages!") + return + print('uncollectable objects') + for obj in gc.garbage: + print(obj) + if hasattr(obj, '__dict__'): + print(obj.__dict__) + for ref in gc.get_referrers(obj): + print("referrer:", ref) + print('---') + + +class PyMySQLTestCase(unittest.TestCase): # You can specify your test environment creating a file named # "databases.json" or editing the `databases` variable below. fname = os.path.join(os.path.dirname(__file__), "databases.json") @@ -97,7 +116,6 @@ class PyMySQLTestCase(unittest2.TestCase """Ensure cycles are collected via gc. Runs additional times on non-CPython platforms. - """ gc.collect() if not CPYTHON: Index: PyMySQL-0.9.3/pymysql/tests/test_basic.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/test_basic.py 2018-12-18 10:58:59.000000000 +0100 +++ PyMySQL-0.9.3/pymysql/tests/test_basic.py 2020-06-03 10:13:17.705278419 +0200 @@ -4,7 +4,7 @@ import json import time import warnings -from unittest2 import SkipTest +import pytest from pymysql import util import pymysql.cursors @@ -143,7 +143,7 @@ class TestConversion(base.PyMySQLTestCas conn = self.connect() if not self.mysql_server_is(conn, (5, 6, 4)): - raise SkipTest("target backend does not support microseconds") + pytest.skip("target backend does not support microseconds") c = conn.cursor() dt = datetime.datetime(2013, 11, 12, 9, 9, 9, 123450) c.execute("create table test_datetime (id int, ts datetime(6))") @@ -256,7 +256,7 @@ class TestCursor(base.PyMySQLTestCase): args["charset"] = "utf8mb4" conn = pymysql.connect(**args) if not self.mysql_server_is(conn, (5, 7, 0)): - raise SkipTest("JSON type is not supported on MySQL <= 5.6") + pytest.skip("JSON type is not supported on MySQL <= 5.6") self.safe_create_table(conn, "test_json", """\ create table test_json ( Index: PyMySQL-0.9.3/pymysql/tests/test_connection.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/test_connection.py 2018-12-18 10:58:59.000000000 +0100 +++ PyMySQL-0.9.3/pymysql/tests/test_connection.py 2020-06-03 10:13:17.705278419 +0200 @@ -1,7 +1,7 @@ import datetime import sys import time -import unittest2 +import pytest import pymysql from pymysql.tests import base from pymysql._compat import text_type @@ -100,14 +100,14 @@ class TestAuthentication(base.PyMySQLTes def test_plugin(self): conn = self.connect() if not self.mysql_server_is(conn, (5, 5, 0)): - raise unittest2.SkipTest("MySQL-5.5 required for plugins") + pytest.skip("MySQL-5.5 required for plugins") cur = conn.cursor() cur.execute("select plugin from mysql.user where concat(user, '@', host)=current_user()") for r in cur: self.assertIn(conn._auth_plugin_name, (r[0], 'mysql_native_password')) - @unittest2.skipUnless(socket_auth, "connection to unix_socket required") - @unittest2.skipIf(socket_found, "socket plugin already installed") + @pytest.mark.skipif(not socket_auth, reason="connection to unix_socket required") + @pytest.mark.skipif(socket_found, reason="socket plugin already installed") def testSocketAuthInstallPlugin(self): # needs plugin. lets install it. cur = self.connect().cursor() @@ -124,13 +124,13 @@ class TestAuthentication(base.PyMySQLTes self.realtestSocketAuth() except pymysql.err.InternalError: TestAuthentication.socket_found = False - raise unittest2.SkipTest('we couldn\'t install the socket plugin') + pytest.skip('we couldn\'t install the socket plugin') finally: if TestAuthentication.socket_found: cur.execute("uninstall plugin %s" % self.socket_plugin_name) - @unittest2.skipUnless(socket_auth, "connection to unix_socket required") - @unittest2.skipUnless(socket_found, "no socket plugin") + @pytest.mark.skipif(not socket_auth, reason="connection to unix_socket required") + @pytest.mark.skipif(not socket_found, reason="no socket plugin") def testSocketAuth(self): self.realtestSocketAuth() @@ -179,8 +179,8 @@ class TestAuthentication(base.PyMySQLTes self.con=con - @unittest2.skipUnless(socket_auth, "connection to unix_socket required") - @unittest2.skipIf(two_questions_found, "two_questions plugin already installed") + @pytest.mark.skipif(not socket_auth, reason="connection to unix_socket required") + @pytest.mark.skipif(two_questions_found, reason="two_questions plugin already installed") def testDialogAuthTwoQuestionsInstallPlugin(self): # needs plugin. lets install it. cur = self.connect().cursor() @@ -189,13 +189,13 @@ class TestAuthentication(base.PyMySQLTes TestAuthentication.two_questions_found = True self.realTestDialogAuthTwoQuestions() except pymysql.err.InternalError: - raise unittest2.SkipTest('we couldn\'t install the two_questions plugin') + pytest.skip('we couldn\'t install the two_questions plugin') finally: if TestAuthentication.two_questions_found: cur.execute("uninstall plugin two_questions") - @unittest2.skipUnless(socket_auth, "connection to unix_socket required") - @unittest2.skipUnless(two_questions_found, "no two questions auth plugin") + @pytest.mark.skipif(not socket_auth, reason="connection to unix_socket required") + @pytest.mark.skipif(not two_questions_found, reason="no two questions auth plugin") def testDialogAuthTwoQuestions(self): self.realTestDialogAuthTwoQuestions() @@ -209,8 +209,8 @@ class TestAuthentication(base.PyMySQLTes pymysql.connect(user='pymysql_2q', **self.db) pymysql.connect(user='pymysql_2q', auth_plugin_map={b'dialog': TestAuthentication.Dialog}, **self.db) - @unittest2.skipUnless(socket_auth, "connection to unix_socket required") - @unittest2.skipIf(three_attempts_found, "three_attempts plugin already installed") + @pytest.mark.skipif(not socket_auth, reason="connection to unix_socket required") + @pytest.mark.skipif(three_attempts_found, reason="three_attempts plugin already installed") def testDialogAuthThreeAttemptsQuestionsInstallPlugin(self): # needs plugin. lets install it. cur = self.connect().cursor() @@ -219,13 +219,13 @@ class TestAuthentication(base.PyMySQLTes TestAuthentication.three_attempts_found = True self.realTestDialogAuthThreeAttempts() except pymysql.err.InternalError: - raise unittest2.SkipTest('we couldn\'t install the three_attempts plugin') + pytest.skip('we couldn\'t install the three_attempts plugin') finally: if TestAuthentication.three_attempts_found: cur.execute("uninstall plugin three_attempts") - @unittest2.skipUnless(socket_auth, "connection to unix_socket required") - @unittest2.skipUnless(three_attempts_found, "no three attempts plugin") + @pytest.mark.skipif(not socket_auth, reason="connection to unix_socket required") + @pytest.mark.skipif(not three_attempts_found, reason="no three attempts plugin") def testDialogAuthThreeAttempts(self): self.realTestDialogAuthThreeAttempts() @@ -250,10 +250,10 @@ class TestAuthentication(base.PyMySQLTes with self.assertRaises(pymysql.err.OperationalError): pymysql.connect(user='pymysql_3a', auth_plugin_map={b'dialog': TestAuthentication.Dialog}, **self.db) - @unittest2.skipUnless(socket_auth, "connection to unix_socket required") - @unittest2.skipIf(pam_found, "pam plugin already installed") - @unittest2.skipIf(os.environ.get('PASSWORD') is None, "PASSWORD env var required") - @unittest2.skipIf(os.environ.get('PAMSERVICE') is None, "PAMSERVICE env var required") + @pytest.mark.skipif(not socket_auth, reason="connection to unix_socket required") + @pytest.mark.skipif(pam_found, reason="pam plugin already installed") + @pytest.mark.skipif(os.environ.get('PASSWORD') is None, reason="PASSWORD env var required") + @pytest.mark.skipif(os.environ.get('PAMSERVICE') is None, reason="PAMSERVICE env var required") def testPamAuthInstallPlugin(self): # needs plugin. lets install it. cur = self.connect().cursor() @@ -262,16 +262,16 @@ class TestAuthentication(base.PyMySQLTes TestAuthentication.pam_found = True self.realTestPamAuth() except pymysql.err.InternalError: - raise unittest2.SkipTest('we couldn\'t install the auth_pam plugin') + pytest.skip('we couldn\'t install the auth_pam plugin') finally: if TestAuthentication.pam_found: cur.execute("uninstall plugin pam") - @unittest2.skipUnless(socket_auth, "connection to unix_socket required") - @unittest2.skipUnless(pam_found, "no pam plugin") - @unittest2.skipIf(os.environ.get('PASSWORD') is None, "PASSWORD env var required") - @unittest2.skipIf(os.environ.get('PAMSERVICE') is None, "PAMSERVICE env var required") + @pytest.mark.skipif(not socket_auth, reason="connection to unix_socket required") + @pytest.mark.skipif(not pam_found, reason="no pam plugin") + @pytest.mark.skipif(os.environ.get('PASSWORD') is None, reason="PASSWORD env var required") + @pytest.mark.skipif(os.environ.get('PAMSERVICE') is None, reason="PAMSERVICE env var required") def testPamAuth(self): self.realTestPamAuth() @@ -311,16 +311,16 @@ class TestAuthentication(base.PyMySQLTes # select old_password("crummy p\tassword"); #| old_password("crummy p\tassword") | #| 2a01785203b08770 | - @unittest2.skipUnless(socket_auth, "connection to unix_socket required") - @unittest2.skipUnless(mysql_old_password_found, "no mysql_old_password plugin") + @pytest.mark.skipif(not socket_auth, reason="connection to unix_socket required") + @pytest.mark.skipif(not mysql_old_password_found, reason="no mysql_old_password plugin") def testMySQLOldPasswordAuth(self): conn = self.connect() if self.mysql_server_is(conn, (5, 7, 0)): - raise unittest2.SkipTest('Old passwords aren\'t supported in 5.7') + pytest.skip('Old passwords aren\'t supported in 5.7') # pymysql.err.OperationalError: (1045, "Access denied for user 'old_pass_user'@'localhost' (using password: YES)") # from login in MySQL-5.6 if self.mysql_server_is(conn, (5, 6, 0)): - raise unittest2.SkipTest('Old passwords don\'t authenticate in 5.6') + pytest.skip('Old passwords don\'t authenticate in 5.6') db = self.db.copy() db['password'] = "crummy p\tassword" c = conn.cursor() @@ -354,8 +354,8 @@ class TestAuthentication(base.PyMySQLTes cur.execute("SELECT VERSION()") c.execute('set global secure_auth=%r' % secure_auth_setting) - @unittest2.skipUnless(socket_auth, "connection to unix_socket required") - @unittest2.skipUnless(sha256_password_found, "no sha256 password authentication plugin found") + @pytest.mark.skipif(not socket_auth, reason="connection to unix_socket required") + @pytest.mark.skipif(not sha256_password_found, reason="no sha256 password authentication plugin found") def testAuthSHA256(self): conn = self.connect() c = conn.cursor() Index: PyMySQL-0.9.3/pymysql/tests/test_err.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/test_err.py 2016-09-01 13:09:00.000000000 +0200 +++ PyMySQL-0.9.3/pymysql/tests/test_err.py 2020-06-03 10:13:17.705278419 +0200 @@ -1,4 +1,4 @@ -import unittest2 +import unittest from pymysql import err @@ -6,7 +6,7 @@ from pymysql import err __all__ = ["TestRaiseException"] -class TestRaiseException(unittest2.TestCase): +class TestRaiseException(unittest.TestCase): def test_raise_mysql_exception(self): data = b"\xff\x15\x04Access denied" Index: PyMySQL-0.9.3/pymysql/tests/test_issues.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/test_issues.py 2018-12-18 10:58:59.000000000 +0100 +++ PyMySQL-0.9.3/pymysql/tests/test_issues.py 2020-06-03 10:13:17.705278419 +0200 @@ -3,11 +3,12 @@ import time import warnings import sys +import pytest + import pymysql from pymysql import cursors from pymysql._compat import text_type from pymysql.tests import base -import unittest2 try: import imp @@ -145,7 +146,7 @@ KEY (`station`,`dh`,`echeance`)) ENGINE= finally: c.execute("drop table issue16") - @unittest2.skip("test_issue_17() requires a custom, legacy MySQL configuration and will not be run.") + @pytest.mark.skip("test_issue_17() requires a custom, legacy MySQL configuration and will not be run.") def test_issue_17(self): """could not connect mysql use passwod""" conn = self.connect() @@ -189,7 +190,7 @@ class TestNewIssues(base.PyMySQLTestCase c.execute(u"select name from hei\xdfe") self.assertEqual(u"Pi\xdfata", c.fetchone()[0]) - @unittest2.skip("This test requires manual intervention") + @pytest.mark.skip("This test requires manual intervention") def test_issue_35(self): conn = self.connect() c = conn.cursor() Index: PyMySQL-0.9.3/pymysql/tests/test_nextset.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/test_nextset.py 2018-05-07 13:40:08.000000000 +0200 +++ PyMySQL-0.9.3/pymysql/tests/test_nextset.py 2020-06-03 10:13:17.705278419 +0200 @@ -1,4 +1,4 @@ -import unittest2 +import pytest import pymysql from pymysql import util @@ -50,7 +50,7 @@ class TestNextset(base.PyMySQLTestCase): self.assertEqual([(2,)], list(cur)) self.assertFalse(bool(cur.nextset())) - @unittest2.expectedFailure + @pytest.mark.xfail def test_multi_cursor(self): con = self.connect(client_flag=CLIENT.MULTI_STATEMENTS) cur1 = con.cursor() Index: PyMySQL-0.9.3/pymysql/tests/thirdparty/__init__.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/thirdparty/__init__.py 2014-08-29 13:32:54.000000000 +0200 +++ PyMySQL-0.9.3/pymysql/tests/thirdparty/__init__.py 2020-06-03 10:13:17.705278419 +0200 @@ -1,8 +1,5 @@ from .test_MySQLdb import * if __name__ == "__main__": - try: - import unittest2 as unittest - except ImportError: - import unittest + import unittest unittest.main() Index: PyMySQL-0.9.3/pymysql/tests/thirdparty/test_MySQLdb/capabilities.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/thirdparty/test_MySQLdb/capabilities.py 2018-05-07 13:40:08.000000000 +0200 +++ PyMySQL-0.9.3/pymysql/tests/thirdparty/test_MySQLdb/capabilities.py 2020-06-03 10:13:17.705278419 +0200 @@ -6,10 +6,7 @@ """ import sys from time import time -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest PY2 = sys.version_info[0] == 2 Index: PyMySQL-0.9.3/pymysql/tests/thirdparty/test_MySQLdb/dbapi20.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/thirdparty/test_MySQLdb/dbapi20.py 2018-03-26 09:46:10.000000000 +0200 +++ PyMySQL-0.9.3/pymysql/tests/thirdparty/test_MySQLdb/dbapi20.py 2020-06-03 10:13:17.705278419 +0200 @@ -14,12 +14,8 @@ __rcs_id__ = '$Id$' __version__ = '$Revision$'[11:-2] __author__ = 'Stuart Bishop ' -try: - import unittest2 as unittest -except ImportError: - import unittest - import time +import unittest # $Log$ # Revision 1.1.2.1 2006/02/25 03:44:32 adustman Index: PyMySQL-0.9.3/pymysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py 2018-05-07 13:55:31.000000000 +0200 +++ PyMySQL-0.9.3/pymysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py 2020-06-03 10:13:17.705278419 +0200 @@ -1,8 +1,5 @@ from . import capabilities -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import pymysql from pymysql.tests import base import warnings Index: PyMySQL-0.9.3/pymysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py 2018-03-26 09:46:10.000000000 +0200 +++ PyMySQL-0.9.3/pymysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py 2020-06-03 10:13:17.705278419 +0200 @@ -2,10 +2,7 @@ from . import dbapi20 import pymysql from pymysql.tests import base -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest class test_MySQLdb(dbapi20.DatabaseAPI20Test): Index: PyMySQL-0.9.3/pymysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py =================================================================== --- PyMySQL-0.9.3.orig/pymysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py 2018-03-26 09:46:10.000000000 +0200 +++ PyMySQL-0.9.3/pymysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py 2020-06-03 10:13:17.705278419 +0200 @@ -1,8 +1,5 @@ import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import pymysql _mysql = pymysql Index: PyMySQL-0.9.3/runtests.py =================================================================== --- PyMySQL-0.9.3.orig/runtests.py 2018-06-27 11:32:13.000000000 +0200 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -#!/usr/bin/env python -import unittest2 - -from pymysql._compat import PYPY, JYTHON, IRONPYTHON - -#import pymysql -#pymysql.connections.DEBUG = True -#pymysql._auth.DEBUG = True - -if not (PYPY or JYTHON or IRONPYTHON): - import atexit - import gc - gc.set_debug(gc.DEBUG_UNCOLLECTABLE) - - @atexit.register - def report_uncollectable(): - import gc - if not gc.garbage: - print("No garbages!") - return - print('uncollectable objects') - for obj in gc.garbage: - print(obj) - if hasattr(obj, '__dict__'): - print(obj.__dict__) - for ref in gc.get_referrers(obj): - print("referrer:", ref) - print('---') - -import pymysql.tests -unittest2.main(pymysql.tests, verbosity=2) Index: PyMySQL-0.9.3/tox.ini =================================================================== --- PyMySQL-0.9.3.orig/tox.ini 2018-12-17 12:37:20.000000000 +0100 +++ PyMySQL-0.9.3/tox.ini 2020-06-03 10:13:17.705278419 +0200 @@ -1,10 +1,9 @@ [tox] -envlist = py27,py34,py35,py36,py37,pypy,pypy3 +envlist = py27,py35,py36,py37,pypy,pypy3 [testenv] -commands = coverage run ./runtests.py -deps = unittest2 - coverage +commands = pytest -v pymysql/tests/ +deps = coverage pytest passenv = USER PASSWORD PAMSERVICE