summaryrefslogtreecommitdiff
path: root/tests/basics/class_store_class.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-05-11 12:10:35 +0100
committerDamien George <damien.p.george@gmail.com>2014-05-11 12:10:35 +0100
commit18ceb7055b43d158e46ff6d0a0389bc3cd05e5d5 (patch)
treef3b1ad5d9c242a8aec5c0dc58b876e6f57529f05 /tests/basics/class_store_class.py
parenta7a1a38df43958a267410d333f495db56a8b0902 (diff)
parenteea01186547f0f1568ea1c8f002da4e33b7b0e46 (diff)
Merge branch 'master' of github.com:micropython/micropython
Diffstat (limited to 'tests/basics/class_store_class.py')
-rw-r--r--tests/basics/class_store_class.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/basics/class_store_class.py b/tests/basics/class_store_class.py
new file mode 100644
index 000000000..60f65220d
--- /dev/null
+++ b/tests/basics/class_store_class.py
@@ -0,0 +1,47 @@
+# Inspired by urlparse.py from CPython 3.3 stdlib
+# There was a bug in MicroPython that under some conditions class stored
+# in instance attribute later was returned "bound" as if it was a method,
+# which caused class constructor to receive extra argument.
+try:
+ from collections import namedtuple
+except ImportError:
+ from _collections import namedtuple
+
+_DefragResultBase = namedtuple('DefragResult', 'foo bar')
+
+class _ResultMixinStr(object):
+ def encode(self):
+ return self._encoded_counterpart(*(x.encode() for x in self))
+
+class _ResultMixinBytes(object):
+ def decode(self):
+ return self._decoded_counterpart(*(x.decode() for x in self))
+
+class DefragResult(_DefragResultBase, _ResultMixinStr):
+ pass
+
+class DefragResultBytes(_DefragResultBase, _ResultMixinBytes):
+ pass
+
+
+DefragResult._encoded_counterpart = DefragResultBytes
+DefragResultBytes._decoded_counterpart = DefragResult
+
+# Due to differences in type and native subclass printing,
+# the best thing we can do here is to just test that no exceptions
+# happen
+
+#print(DefragResult, DefragResult._encoded_counterpart)
+#print(DefragResultBytes, DefragResultBytes._decoded_counterpart)
+
+o1 = DefragResult("a", "b")
+#print(o1, type(o1))
+o2 = DefragResultBytes("a", "b")
+#print(o2, type(o2))
+
+#print(o1._encoded_counterpart)
+_o1 = o1.encode()
+print(_o1[0], _o1[1])
+#print(_o1, type(_o1))
+
+print("All's ok")