From e6ab8c2483511e221d95c316bc3c833b026f6b24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20K=C3=B6fferlein?= Date: Mon, 19 Apr 2021 22:28:27 +0200 Subject: [PATCH] Issue 771 (#773) * Fixed the issue - Byte array variant was not properly converted to Python/Ruby objects. * Added tests + properly converting byte arrays to byte array variants in Python. --- src/pya/pya/pyaConvert.cc | 8 ++++++-- src/rba/rba/rbaConvert.cc | 2 ++ testdata/python/basic.py | 7 +++++++ testdata/python/qtbinding.py | 10 ++++++++++ testdata/ruby/qtbinding.rb | 11 +++++++++++ 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/pya/pya/pyaConvert.cc b/src/pya/pya/pyaConvert.cc index 9c091b568..271a71234 100644 --- a/src/pya/pya/pyaConvert.cc +++ b/src/pya/pya/pyaConvert.cc @@ -282,10 +282,12 @@ tl::Variant python2c_func::operator() (PyObject *rval) return tl::Variant (python2c (rval)); #else } else if (PyBytes_Check (rval)) { - return tl::Variant (python2c (rval)); + return tl::Variant (python2c > (rval)); #endif - } else if (PyUnicode_Check (rval) || PyByteArray_Check (rval)) { + } else if (PyUnicode_Check (rval)) { return tl::Variant (python2c (rval)); + } else if (PyByteArray_Check (rval)) { + return tl::Variant (python2c > (rval)); } else if (PyList_Check (rval)) { size_t len = PyList_Size (rval); @@ -496,6 +498,8 @@ PyObject *c2python_func::operator() (const tl::Variant &c) return c2python (c.to_bool ()); } else if (c.is_a_string ()) { return c2python (c.to_string ()); + } else if (c.is_a_bytearray ()) { + return c2python (c.to_bytearray ()); } else if (c.is_long ()) { return c2python (c.to_long ()); } else if (c.is_ulong ()) { diff --git a/src/rba/rba/rbaConvert.cc b/src/rba/rba/rbaConvert.cc index a654748b5..06292b34f 100644 --- a/src/rba/rba/rbaConvert.cc +++ b/src/rba/rba/rbaConvert.cc @@ -262,6 +262,8 @@ VALUE c2ruby (const tl::Variant &c) return c2ruby (c.to_bool ()); } else if (c.is_a_string ()) { return c2ruby (c.to_string ()); + } else if (c.is_a_bytearray ()) { + return c2ruby > (c.to_bytearray ()); } else if (c.is_long () || c.is_char ()) { return c2ruby (c.to_long ()); } else if (c.is_ulong ()) { diff --git a/testdata/python/basic.py b/testdata/python/basic.py index 0e5d67fa7..1e653628d 100644 --- a/testdata/python/basic.py +++ b/testdata/python/basic.py @@ -1304,6 +1304,13 @@ class BasicTest(unittest.TestCase): self.assertEqual( str(b.b22c()), "hallo" ) self.assertEqual( type(b.b22c()).__name__, "LayerInfo" ) + # byte arrays through Variants + if sys.version_info >= (3, 0): + self.assertEqual( b.b22a( [ bytes('abc', 'utf-8') ] ), 1 ) + self.assertEqual( str(b.b22c()), "b'abc'" ) + self.assertEqual( str(b.b22d()), "b'abc'" ) + self.assertEqual( str(b.var()), "b'abc'" ) + def test_23(self): b = pya.B() diff --git a/testdata/python/qtbinding.py b/testdata/python/qtbinding.py index 5a2acd1a0..c25c4745c 100644 --- a/testdata/python/qtbinding.py +++ b/testdata/python/qtbinding.py @@ -629,6 +629,16 @@ class QtBindingTest(unittest.TestCase): self.assertEqual(len(buf.data) > 100, True) self.assertEqual(buf.data[0:8], b'\x89PNG\r\n\x1a\n') + def test_53(self): + + # issue #771 (QMimeData not working) + mimeData = pya.QMimeData() + mimeData.setData("application/json",'{"test":"test"}') + jsonData = mimeData.data("application/json"); + if sys.version_info < (3, 0): + self.assertEqual(str(jsonData), '{"test":"test"}') + else: + self.assertEqual(str(jsonData), 'b\'{"test":"test"}\'') # run unit tests if __name__ == '__main__': diff --git a/testdata/ruby/qtbinding.rb b/testdata/ruby/qtbinding.rb index dfd4ecac3..e55bbc532 100644 --- a/testdata/ruby/qtbinding.rb +++ b/testdata/ruby/qtbinding.rb @@ -744,6 +744,17 @@ class QtBinding_TestClass < TestBase end + def test_53 + + # issue #771 (QMimeData not working) + + mimeData = RBA::QMimeData::new + mimeData.setData("application/json", '{"test":"test"}') + jsonData = mimeData.data("application/json"); + assert_equal(jsonData.to_s, '{"test":"test"}') + + end + end load("test_epilogue.rb")