diff options
author | Damien George <damien.p.george@gmail.com> | 2014-05-11 12:10:35 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-05-11 12:10:35 +0100 |
commit | 18ceb7055b43d158e46ff6d0a0389bc3cd05e5d5 (patch) | |
tree | f3b1ad5d9c242a8aec5c0dc58b876e6f57529f05 /tests/basics/class_store_class.py | |
parent | a7a1a38df43958a267410d333f495db56a8b0902 (diff) | |
parent | eea01186547f0f1568ea1c8f002da4e33b7b0e46 (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.py | 47 |
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") |