# tests for things that are not implemented, or have non-compliant behaviour try: import array import struct except ImportError: print("SKIP") raise SystemExit # when super can't find self try: exec("def f(): super()") except SyntaxError: print("SyntaxError") # store to exception attribute is not allowed try: ValueError().x = 0 except AttributeError: print("AttributeError") # array deletion not implemented try: a = array.array("b", (1, 2, 3)) del a[1] except TypeError: print("TypeError") # slice with step!=1 not implemented try: a = array.array("b", (1, 2, 3)) print(a[3:2:2]) except NotImplementedError: print("NotImplementedError") # containment, looking for integer not implemented try: print(1 in array.array("B", b"12")) except NotImplementedError: print("NotImplementedError") # uPy raises TypeError, should be ValueError try: "%c" % b"\x01\x02" except (TypeError, ValueError): print("TypeError, ValueError") # attributes/subscr not implemented try: print("{a[0]}".format(a=[1, 2])) except NotImplementedError: print("NotImplementedError") # str(...) with keywords not implemented try: str(b"abc", encoding="utf8") except NotImplementedError: print("NotImplementedError") # str.rsplit(None, n) not implemented try: "a a a".rsplit(None, 1) except NotImplementedError: print("NotImplementedError") # str.endswith(s, start) not implemented try: "abc".endswith("c", 1) except NotImplementedError: print("NotImplementedError") # str subscr with step!=1 not implemented try: print("abc"[1:2:3]) except NotImplementedError: print("NotImplementedError") # bytes(...) with keywords not implemented try: bytes("abc", encoding="utf8") except NotImplementedError: print("NotImplementedError") # bytes subscr with step!=1 not implemented try: b"123"[0:3:2] except NotImplementedError: print("NotImplementedError") # tuple load with step!=1 not implemented try: ()[2:3:4] except NotImplementedError: print("NotImplementedError") # list store with step!=1 not implemented try: [][2:3:4] = [] except NotImplementedError: print("NotImplementedError") # list delete with step!=1 not implemented try: del [][2:3:4] except NotImplementedError: print("NotImplementedError") # struct pack with too many args, not checked by uPy print(struct.pack("bb", 1, 2, 3)) # struct pack with too few args, not checked by uPy print(struct.pack("bb", 1)) # array slice assignment with unsupported RHS try: bytearray(4)[0:1] = [1, 2] except NotImplementedError: print("NotImplementedError") # can't assign attributes to a function def f(): pass try: f.x = 1 except AttributeError: print("AttributeError") # can't call a function type (ie make new instances of a function) try: type(f)() except TypeError: print("TypeError") # test when object explicitly listed at not-last position in parent tuple # this is not compliant with CPython because of illegal MRO class A: def foo(self): print("A.foo") class B(object, A): pass B().foo() # can't assign property (or other special accessors) to already-subclassed class class A: pass class B(A): pass try: A.bar = property() except AttributeError: print("AttributeError")