1# Test for behaviour of combined standard and extended block device 2 3try: 4 import uos 5 6 uos.VfsFat 7 uos.VfsLfs2 8except (ImportError, AttributeError): 9 print("SKIP") 10 raise SystemExit 11 12 13class RAMBlockDevice: 14 ERASE_BLOCK_SIZE = 512 15 16 def __init__(self, blocks): 17 self.data = bytearray(blocks * self.ERASE_BLOCK_SIZE) 18 19 def readblocks(self, block, buf, off=0): 20 addr = block * self.ERASE_BLOCK_SIZE + off 21 for i in range(len(buf)): 22 buf[i] = self.data[addr + i] 23 24 def writeblocks(self, block, buf, off=None): 25 if off is None: 26 # erase, then write 27 off = 0 28 addr = block * self.ERASE_BLOCK_SIZE + off 29 for i in range(len(buf)): 30 self.data[addr + i] = buf[i] 31 32 def ioctl(self, op, arg): 33 if op == 4: # block count 34 return len(self.data) // self.ERASE_BLOCK_SIZE 35 if op == 5: # block size 36 return self.ERASE_BLOCK_SIZE 37 if op == 6: # erase block 38 return 0 39 40 41def test(bdev, vfs_class): 42 print("test", vfs_class) 43 44 # mkfs 45 vfs_class.mkfs(bdev) 46 47 # construction 48 vfs = vfs_class(bdev) 49 50 # statvfs 51 print(vfs.statvfs("/")) 52 53 # open, write close 54 f = vfs.open("test", "w") 55 for i in range(10): 56 f.write("some data") 57 f.close() 58 59 # ilistdir 60 print(list(vfs.ilistdir())) 61 62 # read 63 with vfs.open("test", "r") as f: 64 print(f.read()) 65 66 67try: 68 bdev = RAMBlockDevice(50) 69except MemoryError: 70 print("SKIP") 71 raise SystemExit 72 73test(bdev, uos.VfsFat) 74test(bdev, uos.VfsLfs2) 75