diff options
author | 2023-08-03 16:33:41 +0600 | |
---|---|---|
committer | 2023-08-03 16:33:41 +0600 | |
commit | 70faa8e9a0ff3cba74b4f753e257d56b768fcbd2 (patch) | |
tree | 3a49460715f7319d100e0cc9c1a278758500c7c8 /tests/_test_py2_string_handling.py | |
download | aptdaemon-70faa8e9a0ff3cba74b4f753e257d56b768fcbd2.tar.gz aptdaemon-70faa8e9a0ff3cba74b4f753e257d56b768fcbd2.zip |
Import Upstream version 1.1.1+bzr982
Diffstat (limited to 'tests/_test_py2_string_handling.py')
-rw-r--r-- | tests/_test_py2_string_handling.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/_test_py2_string_handling.py b/tests/_test_py2_string_handling.py new file mode 100644 index 0000000..86709fb --- /dev/null +++ b/tests/_test_py2_string_handling.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2011 Michael Vogt <mvo@ubuntu.com> +# +# Licensed under the GNU General Public License Version 2 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Licensed under the GNU General Public License Version 2 + +"""Regression test for a unicode decoding error in the status_details, +progress_download or error_properties attributes of the transaction, +see LP #724735. +""" + +__author__ = "Michael Vogt <mvo@glatzor.de>" + +import os +import sys +import unittest + +import dbus +from dbus.lowlevel import ErrorMessage, Message + +from aptdaemon.core import Transaction +from aptdaemon.errors import TransactionFailed +from aptdaemon.test import AptDaemonTestCase, Chroot + + +class TestUnicodeDecoding(AptDaemonTestCase): + + """Test the workaround.""" + + def setUp(self): + self.chroot = Chroot() + self.chroot.setup() + self.addCleanup(self.chroot.remove) + self.start_dbus_daemon() + self.dbus = dbus.bus.BusConnection(self.dbus_address) + self.trans = Transaction(None, "role-test", None, + os.getpid(), os.getuid(), os.getgid(), + sys.argv[0], + "org.debian.apt.test", bus=self.dbus) + + def test(self): + # ensure we don't crash regardless if str or unicode is passed here + self.trans.status_details = "äää" + self.trans.status_details = u"äää" + + self.trans.progress_download = ("äö", "ß", "üöä", 1L, 2L, "ö") + self.trans.progress_download = (u"äö", u"ß", u"üöä", 1L, 2L, u"ö") + + self.trans.error = TransactionFailed("ERROR_TEST", "Mixed ä %s", u"öä") + self.trans.error = TransactionFailed("ERROR_TEST", u"Mixed ü %s", "öä") + self.trans.error = TransactionFailed("ERROR_TEST", "Str ä %s", "öä") + self.trans.error = TransactionFailed("ERROR_TEST", u"Uni ä %s", u"öä") + + def test_dbus_exception(self): + """This tests simulates the steps taken by the DBus bindings to + send an error reply, see LP# 761386""" + # The original error message that we get from python-apt + orig = "E:Die Paketliste oder die Statusdatei konnte nicht " \ + "eingelesen oder ge\xc3\xb6ffnet werden." + for msg in [u"E:Die Paketliste oder die Statusdatei konnte nicht " + u"eingelesen oder geöffnet werden.", + "E:Die Paketliste oder die Statusdatei konnte nicht " + "eingelesen oder geöffnet werden.", orig]: + # Create a simple DBus exception + error = TransactionFailed("ERROR_TEST", msg) + + # Taken from dbus.service._method_reply_error() + name = error.get_dbus_name() + content = error.get_dbus_message() + self.assertEqual(orig, content[12:]) + # The constructor of the ErrorMessage fails since we only use + # a fake Message + self.assertRaises(MemoryError, ErrorMessage, Message(), name, + content) + + def test_dbus_exception_lp846044(self): + e = TransactionFailed("foo", "bar") + e.details = u"ä" + foo = unicode(e) + self.assertEqual(foo, u"Transaction failed: None\nä") + foo = str(e) + self.assertEqual(foo, u"Transaction failed: None\nä".encode("utf-8")) + + +if __name__ == "__main__": + unittest.main() + +# vim: ts=4 et sts=4 |