diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/basics/builtin_delattr.py | 18 | ||||
-rw-r--r-- | tests/basics/builtin_slice.py | 6 | ||||
-rw-r--r-- | tests/basics/gc1.py | 8 | ||||
-rw-r--r-- | tests/basics/list_slice_3arg.py | 19 | ||||
-rw-r--r-- | tests/extmod/btree1.py | 2 | ||||
-rw-r--r-- | tests/extmod/framebuf1.py | 15 | ||||
-rw-r--r-- | tests/extmod/framebuf1.py.exp | 4 | ||||
-rw-r--r-- | tests/extmod/ticks_diff.py | 33 | ||||
-rw-r--r-- | tests/extmod/ticks_diff.py.exp | 1 | ||||
-rw-r--r-- | tests/extmod/uhashlib_sha1.py | 22 | ||||
-rw-r--r-- | tests/extmod/uhashlib_sha256.py (renamed from tests/extmod/sha256.py) | 0 | ||||
-rw-r--r-- | tests/extmod/vfs_fat_fileio.py | 156 | ||||
-rw-r--r-- | tests/extmod/vfs_fat_fileio.py.exp | 22 | ||||
-rw-r--r-- | tests/extmod/vfs_fat_fsusermount.py | 96 | ||||
-rw-r--r-- | tests/extmod/vfs_fat_fsusermount.py.exp | 7 | ||||
-rw-r--r-- | tests/extmod/vfs_fat_oldproto.py | 63 | ||||
-rw-r--r-- | tests/extmod/vfs_fat_oldproto.py.exp | 4 | ||||
-rw-r--r-- | tests/extmod/vfs_fat_ramdisk.py | 63 | ||||
-rw-r--r-- | tests/extmod/vfs_fat_ramdisk.py.exp | 14 |
19 files changed, 500 insertions, 53 deletions
diff --git a/tests/basics/builtin_delattr.py b/tests/basics/builtin_delattr.py new file mode 100644 index 0000000000..3743df227c --- /dev/null +++ b/tests/basics/builtin_delattr.py @@ -0,0 +1,18 @@ +# test builtin delattr + +class A: pass +a = A() +a.x = 1 +print(a.x) + +delattr(a, 'x') + +try: + a.x +except AttributeError: + print('AttributeError') + +try: + delattr(a, 'x') +except AttributeError: + print('AttributeError') diff --git a/tests/basics/builtin_slice.py b/tests/basics/builtin_slice.py index 4da1229fa0..df84d5c57b 100644 --- a/tests/basics/builtin_slice.py +++ b/tests/basics/builtin_slice.py @@ -4,4 +4,8 @@ class A: def __getitem__(self, idx): print(idx) -A()[1:2:3] + return idx +s = A()[1:2:3] + +# check type +print(type(s) is slice) diff --git a/tests/basics/gc1.py b/tests/basics/gc1.py index 140c8b0a60..be6c6faed2 100644 --- a/tests/basics/gc1.py +++ b/tests/basics/gc1.py @@ -20,3 +20,11 @@ if hasattr(gc, 'mem_free'): # just test they execute and return an int assert type(gc.mem_free()) is int assert type(gc.mem_alloc()) is int + +if hasattr(gc, 'threshold'): + # uPy has this extra function + # check execution and returns + assert(gc.threshold(1) is None) + assert(gc.threshold() == 0) + assert(gc.threshold(-1) is None) + assert(gc.threshold() == -1) diff --git a/tests/basics/list_slice_3arg.py b/tests/basics/list_slice_3arg.py index b98ca3e4f2..8578d5855e 100644 --- a/tests/basics/list_slice_3arg.py +++ b/tests/basics/list_slice_3arg.py @@ -7,3 +7,22 @@ x = list(range(9)) print(x[::-1]) print(x[::2]) print(x[::-2]) + +x = list(range(5)) +print(x[:0:-1]) +print(x[:1:-1]) +print(x[:2:-1]) +print(x[0::-1]) +print(x[1::-1]) +print(x[2::-1]) + +x = list(range(5)) +print(x[0:0:-1]) +print(x[4:4:-1]) +print(x[5:5:-1]) + +x = list(range(10)) +print(x[-1:-1:-1]) +print(x[-1:-2:-1]) +print(x[-1:-11:-1]) +print(x[-10:-11:-1]) diff --git a/tests/extmod/btree1.py b/tests/extmod/btree1.py index 6629837661..715f628246 100644 --- a/tests/extmod/btree1.py +++ b/tests/extmod/btree1.py @@ -9,7 +9,7 @@ except ImportError: #f = open("_test.db", "w+b") f = uio.BytesIO() -db = btree.open(f) +db = btree.open(f, pagesize=512) db[b"foo3"] = b"bar3" db[b"foo1"] = b"bar1" diff --git a/tests/extmod/framebuf1.py b/tests/extmod/framebuf1.py index f550b6b4f4..52899028c7 100644 --- a/tests/extmod/framebuf1.py +++ b/tests/extmod/framebuf1.py @@ -23,6 +23,10 @@ fbuf.pixel(0, 15, 1) fbuf.pixel(4, 15, 1) print(buf) +# clear pixel +fbuf.pixel(4, 15, 0) +print(buf) + # get pixel print(fbuf.pixel(0, 0), fbuf.pixel(1, 1)) @@ -39,3 +43,14 @@ fbuf.scroll(-1, 0) print(buf) fbuf.scroll(2, 2) print(buf) + +# print text +fbuf.fill(0) +fbuf.text("hello", 0, 0, 1) +print(buf) +fbuf.text("hello", 0, 0, 0) # clear +print(buf) + +# char out of font range set to chr(127) +fbuf.text(str(chr(31)), 0, 0) +print(buf) diff --git a/tests/extmod/framebuf1.py.exp b/tests/extmod/framebuf1.py.exp index 8fd8c37098..1577faac8a 100644 --- a/tests/extmod/framebuf1.py.exp +++ b/tests/extmod/framebuf1.py.exp @@ -1,9 +1,13 @@ bytearray(b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff') bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') bytearray(b'\x01\x00\x00\x00\x01\x80\x00\x00\x00\x80') +bytearray(b'\x01\x00\x00\x00\x01\x80\x00\x00\x00\x00') 1 0 bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00') bytearray(b'\x00\x00@\x00\x00\x00\x00\x00\x00\x00') bytearray(b'\x00\x00\x00@\x00\x00\x00\x00\x00\x00') bytearray(b'\x00\x00@\x00\x00\x00\x00\x00\x00\x00') bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') +bytearray(b'\x00\x7f\x7f\x04\x04\x00\x00\x00\x00\x00') +bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +bytearray(b'\xaaU\xaaU\xaa\x00\x00\x00\x00\x00') diff --git a/tests/extmod/ticks_diff.py b/tests/extmod/ticks_diff.py new file mode 100644 index 0000000000..4d8df83cf9 --- /dev/null +++ b/tests/extmod/ticks_diff.py @@ -0,0 +1,33 @@ +from utime import ticks_diff, ticks_add + +MAX = ticks_add(0, -1) +# Should be done like this to avoid small int overflow +MODULO_HALF = MAX // 2 + 1 + +# Invariants: +# if ticks_diff(a, b) = c, +# then ticks_diff(b, a) = -c + +assert ticks_diff(1, 0) == 1, ticks_diff(1, 0) +assert ticks_diff(0, 1) == -1 + +assert ticks_diff(0, MAX) == 1 +assert ticks_diff(MAX, 0) == -1 + +assert ticks_diff(0, MAX - 1) == 2 + +# Maximum "positive" distance +assert ticks_diff(MODULO_HALF, 1) == MODULO_HALF - 1, ticks_diff(MODULO_HALF, 1) +# Step further, and it becomes a negative distance +assert ticks_diff(MODULO_HALF, 0) == -MODULO_HALF + +# Offsetting that in either direction doesn't affect the result +off = 100 +# Cheating and skipping to use ticks_add() when we know there's no wraparound +# Real apps should use always it. +assert ticks_diff(MODULO_HALF + off, 1 + off) == MODULO_HALF - 1 +assert ticks_diff(MODULO_HALF + off, 0 + off) == -MODULO_HALF +assert ticks_diff(MODULO_HALF - off, ticks_add(1, -off)) == MODULO_HALF - 1 +assert ticks_diff(MODULO_HALF - off, ticks_add(0, -off)) == -MODULO_HALF + +print("OK") diff --git a/tests/extmod/ticks_diff.py.exp b/tests/extmod/ticks_diff.py.exp new file mode 100644 index 0000000000..d86bac9de5 --- /dev/null +++ b/tests/extmod/ticks_diff.py.exp @@ -0,0 +1 @@ +OK diff --git a/tests/extmod/uhashlib_sha1.py b/tests/extmod/uhashlib_sha1.py new file mode 100644 index 0000000000..f12fc649aa --- /dev/null +++ b/tests/extmod/uhashlib_sha1.py @@ -0,0 +1,22 @@ +import sys +try: + import uhashlib as hashlib +except ImportError: + try: + import hashlib + except ImportError: + # This is neither uPy, nor cPy, so must be uPy with + # uhashlib module disabled. + print("SKIP") + sys.exit() + +try: + hashlib.sha1 +except AttributeError: + # SHA1 is only available on some ports + print("SKIP") + sys.exit() + +sha1 = hashlib.sha1(b'hello') +sha1.update(b'world') +print(sha1.digest()) diff --git a/tests/extmod/sha256.py b/tests/extmod/uhashlib_sha256.py index ff51f2ffa5..ff51f2ffa5 100644 --- a/tests/extmod/sha256.py +++ b/tests/extmod/uhashlib_sha256.py diff --git a/tests/extmod/vfs_fat_fileio.py b/tests/extmod/vfs_fat_fileio.py new file mode 100644 index 0000000000..de8d4953c4 --- /dev/null +++ b/tests/extmod/vfs_fat_fileio.py @@ -0,0 +1,156 @@ +import sys +import uos +import uerrno +try: + uos.VfsFat +except AttributeError: + print("SKIP") + sys.exit() + + +class RAMFS: + + SEC_SIZE = 512 + + def __init__(self, blocks): + self.data = bytearray(blocks * self.SEC_SIZE) + + def readblocks(self, n, buf): + #print("readblocks(%s, %x(%d))" % (n, id(buf), len(buf))) + for i in range(len(buf)): + buf[i] = self.data[n * self.SEC_SIZE + i] + + def writeblocks(self, n, buf): + #print("writeblocks(%s, %x)" % (n, id(buf))) + for i in range(len(buf)): + self.data[n * self.SEC_SIZE + i] = buf[i] + + def ioctl(self, op, arg): + #print("ioctl(%d, %r)" % (op, arg)) + if op == 4: # BP_IOCTL_SEC_COUNT + return len(self.data) // self.SEC_SIZE + if op == 5: # BP_IOCTL_SEC_SIZE + return self.SEC_SIZE + + +try: + bdev = RAMFS(48) +except MemoryError: + print("SKIP") + sys.exit() + +uos.VfsFat.mkfs(bdev) +vfs = uos.VfsFat(bdev, "/ramdisk") + +# file IO +f = vfs.open("foo_file.txt", "w") +print(str(f)[:17], str(f)[-1:]) +f.write("hello!") +f.flush() +f.close() +f.close() # allowed +try: + f.write("world!") +except OSError as e: + print(e.args[0] == uerrno.EINVAL) + +try: + f.read() +except OSError as e: + print(e.args[0] == uerrno.EINVAL) + +try: + f.flush() +except OSError as e: + print(e.args[0] == uerrno.EINVAL) + +try: + vfs.open("foo_file.txt", "x") +except OSError as e: + print(e.args[0] == uerrno.EEXIST) + +with vfs.open("foo_file.txt", "a") as f: + f.write("world!") + +with vfs.open("foo_file.txt") as f2: + print(f2.read()) + print(f2.tell()) + + f2.seek(0, 0) # SEEK_SET + print(f2.read(1)) + + f2.seek(0, 1) # SEEK_CUR + print(f2.read(1)) + try: + f2.seek(1, 1) # SEEK_END + except OSError as e: + print(e.args[0] == uerrno.EOPNOTSUPP) + + f2.seek(-2, 2) # SEEK_END + print(f2.read(1)) + +# dirs +vfs.mkdir("foo_dir") + +try: + vfs.rmdir("foo_file.txt") +except OSError as e: + print(e.args[0] == 20) # uerrno.ENOTDIR + +try: + vfs.mkdir("foo_dir") +except OSError as e: + print(e.args[0] == uerrno.EEXIST) + +try: + vfs.remove("foo_dir") +except OSError as e: + print(e.args[0] == uerrno.EISDIR) + +try: + vfs.remove("no_file.txt") +except OSError as e: + print(e.args[0] == uerrno.ENOENT) + +try: + vfs.rename("foo_dir", "/null") +except OSError as e: + print(e.args[0] == uerrno.ENODEV) + +# file in dir +with vfs.open("foo_dir/file-in-dir.txt", "w+t") as f: + f.write("data in file") + +with vfs.open("foo_dir/file-in-dir.txt", "r+b") as f: + print(f.read()) + +with vfs.open("foo_dir/sub_file.txt", "w") as f: + f.write("subdir file") + +# directory not empty +try: + vfs.rmdir("foo_dir") +except OSError as e: + print(e.args[0] == uerrno.EACCES) + +# trim full path +vfs.rename("foo_dir/file-in-dir.txt", "/ramdisk/foo_dir/file.txt") +print(vfs.listdir("foo_dir")) + +vfs.rename("foo_dir/file.txt", "moved-to-root.txt") +print(vfs.listdir()) + +# valid removes +vfs.remove("foo_dir/sub_file.txt") +vfs.remove("foo_file.txt") +vfs.rmdir("foo_dir") +print(vfs.listdir()) + +# disk full +try: + bsize = vfs.statvfs("/ramdisk")[0] + free = vfs.statvfs("/ramdisk")[2] + 1 + f = vfs.open("large_file.txt", "wb") + f.write(bytearray(bsize * free)) +except OSError as e: + print("ENOSPC:", e.args[0] == 28) # uerrno.ENOSPC diff --git a/tests/extmod/vfs_fat_fileio.py.exp b/tests/extmod/vfs_fat_fileio.py.exp new file mode 100644 index 0000000000..c438bc850c --- /dev/null +++ b/tests/extmod/vfs_fat_fileio.py.exp @@ -0,0 +1,22 @@ +<io.TextIOWrapper > +True +True +True +True +hello!world! +12 +h +e +True +d +True +True +True +True +True +b'data in file' +True +['sub_file.txt', 'file.txt'] +['foo_file.txt', 'foo_dir', 'moved-to-root.txt'] +['moved-to-root.txt'] +ENOSPC: True diff --git a/tests/extmod/vfs_fat_fsusermount.py b/tests/extmod/vfs_fat_fsusermount.py new file mode 100644 index 0000000000..7326172eed --- /dev/null +++ b/tests/extmod/vfs_fat_fsusermount.py @@ -0,0 +1,96 @@ +import sys +import uos +import uerrno +try: + uos.VfsFat +except AttributeError: + print("SKIP") + sys.exit() + + +class RAMFS: + + SEC_SIZE = 512 + + def __init__(self, blocks): + self.data = bytearray(blocks * self.SEC_SIZE) + + def readblocks(self, n, buf): + #print("readblocks(%s, %x(%d))" % (n, id(buf), len(buf))) + for i in range(len(buf)): + buf[i] = self.data[n * self.SEC_SIZE + i] + + def writeblocks(self, n, buf): + #print("writeblocks(%s, %x)" % (n, id(buf))) + for i in range(len(buf)): + self.data[n * self.SEC_SIZE + i] = buf[i] + + def ioctl(self, op, arg): + #print("ioctl(%d, %r)" % (op, arg)) + if op == 4: # BP_IOCTL_SEC_COUNT + return len(self.data) // self.SEC_SIZE + if op == 5: # BP_IOCTL_SEC_SIZE + return self.SEC_SIZE + + +try: + bdev = RAMFS(48) +except MemoryError: + print("SKIP") + sys.exit() + +# can't mkfs readonly device +try: + uos.vfs_mkfs(bdev, "/ramdisk", readonly=True) +except OSError as e: + print(e) + +# mount before mkfs +try: + uos.vfs_mount(bdev, "/ramdisk") +except OSError as e: + print(e) + +# invalid umount +try: + uos.vfs_umount("/ramdisk") +except OSError as e: + print(e.args[0] == uerrno.EINVAL) + +try: + uos.vfs_mount(None, "/ramdisk") +except OSError as e: + print(e) + +try: + uos.vfs_mkfs(None, "/ramdisk") +except OSError as e: + print(e) + +# valid mkfs/mount +uos.vfs_mkfs(bdev, "/ramdisk") +uos.vfs_mount(bdev, "/ramdisk") + +# umount by path +uos.vfs_umount("/ramdisk") + +# readonly mount +uos.vfs_mount(bdev, "/ramdisk", readonly=True) +vfs = uos.VfsFat(bdev, "/ramdisk") +try: + f = vfs.open("file.txt", "w") +except OSError as e: + print("EROFS:", e.args[0] == 30) # uerrno.EROFS + +# device is None == umount +uos.vfs_mount(None, "/ramdisk") + +# max mounted devices +dev = [] +try: + for i in range(0,4): + dev.append(RAMFS(48)) + uos.vfs_mkfs(dev[i], "/ramdisk" + str(i)) + uos.vfs_mount(dev[i], "/ramdisk" + str(i)) +except OSError as e: + print(e) diff --git a/tests/extmod/vfs_fat_fsusermount.py.exp b/tests/extmod/vfs_fat_fsusermount.py.exp new file mode 100644 index 0000000000..3b30688dd9 --- /dev/null +++ b/tests/extmod/vfs_fat_fsusermount.py.exp @@ -0,0 +1,7 @@ +can't mkfs +can't mount +True +can't umount +can't umount +EROFS: True +too many devices mounted diff --git a/tests/extmod/vfs_fat_oldproto.py b/tests/extmod/vfs_fat_oldproto.py new file mode 100644 index 0000000000..73983567d9 --- /dev/null +++ b/tests/extmod/vfs_fat_oldproto.py @@ -0,0 +1,63 @@ +import sys +import uos +import uerrno +try: + uos.VfsFat + uos.vfs_mkfs + uos.vfs_mount +except AttributeError: + print("SKIP") + sys.exit() + +class RAMFS_OLD: + + SEC_SIZE = 512 + + def __init__(self, blocks): + self.data = bytearray(blocks * self.SEC_SIZE) + + def readblocks(self, n, buf): + #print("readblocks(%s, %x(%d))" % (n, id(buf), len(buf))) + for i in range(len(buf)): + buf[i] = self.data[n * self.SEC_SIZE + i] + + def writeblocks(self, n, buf): + #print("writeblocks(%s, %x)" % (n, id(buf))) + for i in range(len(buf)): + self.data[n * self.SEC_SIZE + i] = buf[i] + + def sync(self): + pass + + def count(self): + return len(self.data) // self.SEC_SIZE + + +try: + bdev = RAMFS_OLD(48) +except MemoryError: + print("SKIP") + sys.exit() + +uos.vfs_mkfs(bdev, "/ramdisk") +uos.vfs_mount(bdev, "/ramdisk") + +# file io +vfs = uos.VfsFat(bdev, "/ramdisk") +with vfs.open("file.txt", "w") as f: + f.write("hello!") + +print(vfs.listdir()) + +with vfs.open("file.txt", "r") as f: + print(f.read()) + +vfs.remove("file.txt") +print(vfs.listdir()) + +# umount by device +uos.vfs_umount(bdev) +try: + vfs.listdir() +except OSError as e: + print(e.args[0] == uerrno.ENODEV) diff --git a/tests/extmod/vfs_fat_oldproto.py.exp b/tests/extmod/vfs_fat_oldproto.py.exp new file mode 100644 index 0000000000..4120c277ac --- /dev/null +++ b/tests/extmod/vfs_fat_oldproto.py.exp @@ -0,0 +1,4 @@ +['file.txt'] +hello! +[] +True diff --git a/tests/extmod/vfs_fat_ramdisk.py b/tests/extmod/vfs_fat_ramdisk.py index 6380761c6d..184672ff15 100644 --- a/tests/extmod/vfs_fat_ramdisk.py +++ b/tests/extmod/vfs_fat_ramdisk.py @@ -45,55 +45,38 @@ print(b"FOO_FILETXT" not in bdev.data) print(b"hello!" not in bdev.data) vfs = uos.VfsFat(bdev, "/ramdisk") -print("statvfs:", vfs.statvfs("/ramdisk")) - -print("getcwd:", vfs.getcwd()) - -f = vfs.open("foo_file.txt", "w") -f.write("hello!") -f.close() - -f2 = vfs.open("foo_file.txt") -print(f2.read()) -f2.close() - -print(b"FOO_FILETXT" in bdev.data) -print(b"hello!" in bdev.data) - -print(vfs.listdir()) try: - vfs.rmdir("foo_file.txt") + vfs.statvfs("/null") except OSError as e: - print(e.args[0] == 20) # uerrno.ENOTDIR - -vfs.remove('foo_file.txt') -print(vfs.listdir()) + print(e.args[0] == uerrno.ENODEV) -vfs.mkdir("foo_dir") -print(vfs.listdir()) +print("statvfs:", vfs.statvfs("/ramdisk")) +print("getcwd:", vfs.getcwd()) try: - vfs.remove("foo_dir") + vfs.stat("no_file.txt") except OSError as e: - print(e.args[0] == uerrno.EISDIR) + print(e.args[0] == uerrno.ENOENT) -f = vfs.open("foo_dir/file-in-dir.txt", "w") -f.write("data in file") -f.close() +with vfs.open("foo_file.txt", "w") as f: + f.write("hello!") +print(vfs.listdir()) -print(vfs.listdir("foo_dir")) +print("stat root:", vfs.stat("/")) +print("stat disk:", vfs.stat("/ramdisk/")) +print("stat file:", vfs.stat("foo_file.txt")) -vfs.rename("foo_dir/file-in-dir.txt", "moved-to-root.txt") -print(vfs.listdir()) +print(b"FOO_FILETXT" in bdev.data) +print(b"hello!" in bdev.data) +vfs.mkdir("foo_dir") vfs.chdir("foo_dir") print("getcwd:", vfs.getcwd()) print(vfs.listdir()) with vfs.open("sub_file.txt", "w") as f: - f.write("test2") -print(vfs.listdir()) + f.write("subdir file") try: vfs.chdir("sub_file.txt") @@ -103,20 +86,16 @@ except OSError as e: vfs.chdir("..") print("getcwd:", vfs.getcwd()) +vfs.umount() try: - vfs.rmdir("foo_dir") + vfs.listdir() except OSError as e: - print(e.args[0] == uerrno.EACCES) - -vfs.remove("foo_dir/sub_file.txt") -vfs.rmdir("foo_dir") -print(vfs.listdir()) + print(e.args[0] == uerrno.ENODEV) -vfs.umount() try: - vfs.listdir() + vfs.getcwd() except OSError as e: print(e.args[0] == uerrno.ENODEV) vfs = uos.VfsFat(bdev, "/ramdisk") -print(vfs.listdir()) +print(vfs.listdir(b"")) diff --git a/tests/extmod/vfs_fat_ramdisk.py.exp b/tests/extmod/vfs_fat_ramdisk.py.exp index 8a498b2fc4..eaf6371998 100644 --- a/tests/extmod/vfs_fat_ramdisk.py.exp +++ b/tests/extmod/vfs_fat_ramdisk.py.exp @@ -1,23 +1,19 @@ True True +True statvfs: (512, 512, 14, 14, 14, 0, 0, 0, 0, 255) getcwd: /ramdisk -hello! -True True ['foo_file.txt'] +stat root: (16384, 0, 0, 0, 0, 0, 0, 0, 0, 0) +stat disk: (16384, 0, 0, 0, 0, 0, 0, 0, 0, 0) +stat file: (32768, 0, 0, 0, 0, 0, 6, -631238400, -631238400, -631238400) True -[] -['foo_dir'] True -['file-in-dir.txt'] -['foo_dir', 'moved-to-root.txt'] getcwd: /ramdisk/foo_dir [] -['sub_file.txt'] True getcwd: /ramdisk True -['moved-to-root.txt'] True -['moved-to-root.txt'] +[b'foo_file.txt', b'foo_dir'] |