diff --git a/tests/extmod/vfs_basic.py b/tests/extmod/vfs_basic.py
index 32bfe8ab4df83d277c3fd58c9917e39e4ce99bd7..a3b2f3c29b768e4ad297554d1b2b00317d9c6288 100644
--- a/tests/extmod/vfs_basic.py
+++ b/tests/extmod/vfs_basic.py
@@ -20,9 +20,9 @@ class Filesystem:
         print(self.id, 'mount', readonly, mkfs)
     def umount(self):
         print(self.id, 'umount')
-    def listdir(self, dir):
-        print(self.id, 'listdir', dir)
-        return ['a%d' % self.id]
+    def ilistdir(self, dir):
+        print(self.id, 'ilistdir', dir)
+        return iter([('a%d' % self.id, 0, 0)])
     def chdir(self, dir):
         print(self.id, 'chdir', dir)
     def getcwd(self):
@@ -64,6 +64,18 @@ print(uos.getcwd())
 uos.mount(Filesystem(1), '/test_mnt')
 print(uos.listdir())
 
+# ilistdir
+i = uos.ilistdir()
+print(next(i))
+try:
+    next(i)
+except StopIteration:
+    print('StopIteration')
+try:
+    next(i)
+except StopIteration:
+    print('StopIteration')
+
 # referencing the mount point in different ways
 print(uos.listdir('test_mnt'))
 print(uos.listdir('/test_mnt'))
diff --git a/tests/extmod/vfs_basic.py.exp b/tests/extmod/vfs_basic.py.exp
index 416d45961a9189d0c80e854fd2240578d630025a..8a23aa8ae7ff95bd84f253adfc4049c24596e1d2 100644
--- a/tests/extmod/vfs_basic.py.exp
+++ b/tests/extmod/vfs_basic.py.exp
@@ -2,20 +2,23 @@
 /
 1 mount False False
 ['test_mnt']
-1 listdir /
+('test_mnt', 16384, 0)
+StopIteration
+StopIteration
+1 ilistdir /
 ['a1']
-1 listdir /
+1 ilistdir /
 ['a1']
 2 mount True False
 ['test_mnt', 'test_mnt2']
-2 listdir /
+2 ilistdir /
 ['a2']
 3 mount False False
 OSError
 OSError
 OSError
 1 chdir /
-1 listdir 
+1 ilistdir 
 ['a1']
 1 getcwd
 /test_mntdir1
@@ -33,19 +36,19 @@ OSError
 2 umount
 OSError
 3 mount False False
-3 listdir /
+3 ilistdir /
 ['a3']
 3 open test r
 4 mount False False
-3 listdir /
+3 ilistdir /
 ['mnt', 'a3']
-4 listdir /
+4 ilistdir /
 ['a4']
 4 chdir /
-4 listdir 
+4 ilistdir 
 ['a4']
 3 chdir /subdir
-3 listdir 
+3 ilistdir 
 ['a3']
 3 chdir /
 3 umount
diff --git a/tests/extmod/vfs_fat_fileio1.py b/tests/extmod/vfs_fat_fileio1.py
index 526b3f5c1bf71177dfb921e7feb0cfd5e58a55b2..9036df7a5ce13af893749df819c85d5e3348b0cd 100644
--- a/tests/extmod/vfs_fat_fileio1.py
+++ b/tests/extmod/vfs_fat_fileio1.py
@@ -115,4 +115,4 @@ except OSError as e:
     print(e.args[0] == 20) # uerrno.ENOTDIR
 
 vfs.remove("foo_file.txt")
-print(vfs.listdir())
+print(list(vfs.ilistdir()))
diff --git a/tests/extmod/vfs_fat_fileio1.py.exp b/tests/extmod/vfs_fat_fileio1.py.exp
index 7959a70eed513cf0e8269f65e80826d44fe5d17e..d777585cf76e0b876f6f0b832ab740991d25d775 100644
--- a/tests/extmod/vfs_fat_fileio1.py.exp
+++ b/tests/extmod/vfs_fat_fileio1.py.exp
@@ -10,4 +10,4 @@ e
 True
 d
 True
-['foo_dir']
+[('foo_dir', 16384, 0)]
diff --git a/tests/extmod/vfs_fat_fileio2.py b/tests/extmod/vfs_fat_fileio2.py
index 111abfa7eab07f5e413b91a39428511bcfbf0967..b2a0ba70f4dc0f2b4c941512fd82722f43f27ebb 100644
--- a/tests/extmod/vfs_fat_fileio2.py
+++ b/tests/extmod/vfs_fat_fileio2.py
@@ -91,23 +91,23 @@ except OSError as e:
 
 # trim full path
 vfs.rename("foo_dir/file-in-dir.txt", "foo_dir/file.txt")
-print(vfs.listdir("foo_dir"))
+print(list(vfs.ilistdir("foo_dir")))
 
 vfs.rename("foo_dir/file.txt", "moved-to-root.txt")
-print(vfs.listdir())
+print(list(vfs.ilistdir()))
 
 # check that renaming to existing file will overwrite it
 with open("temp", "w") as f:
     f.write("new text")
 vfs.rename("temp", "moved-to-root.txt")
-print(vfs.listdir())
+print(list(vfs.ilistdir()))
 with open("moved-to-root.txt") as f:
     print(f.read())
 
 # valid removes
 vfs.remove("foo_dir/sub_file.txt")
 vfs.rmdir("foo_dir")
-print(vfs.listdir())
+print(list(vfs.ilistdir()))
 
 # disk full
 try:
diff --git a/tests/extmod/vfs_fat_fileio2.py.exp b/tests/extmod/vfs_fat_fileio2.py.exp
index 38ec5c9b9d7696943515ee9f4138e951d3a62311..118dee26b545896e16f9a3efdc41bfbfb5245453 100644
--- a/tests/extmod/vfs_fat_fileio2.py.exp
+++ b/tests/extmod/vfs_fat_fileio2.py.exp
@@ -3,9 +3,9 @@ True
 True
 b'data in file'
 True
-['sub_file.txt', 'file.txt']
-['foo_dir', 'moved-to-root.txt']
-['foo_dir', 'moved-to-root.txt']
+[('sub_file.txt', 32768, 0), ('file.txt', 32768, 0)]
+[('foo_dir', 16384, 0), ('moved-to-root.txt', 32768, 0)]
+[('foo_dir', 16384, 0), ('moved-to-root.txt', 32768, 0)]
 new text
-['moved-to-root.txt']
+[('moved-to-root.txt', 32768, 0)]
 ENOSPC: True
diff --git a/tests/extmod/vfs_fat_oldproto.py b/tests/extmod/vfs_fat_oldproto.py
index 77d3492125aca18f10b5f8f3e22c4e4611bfef64..3e66758c364997fdf22351846d20ca9b689a45ea 100644
--- a/tests/extmod/vfs_fat_oldproto.py
+++ b/tests/extmod/vfs_fat_oldproto.py
@@ -53,10 +53,10 @@ uos.mount(vfs, "/ramdisk")
 with vfs.open("file.txt", "w") as f:
     f.write("hello!")
 
-print(vfs.listdir())
+print(list(vfs.ilistdir()))
 
 with vfs.open("file.txt", "r") as f:
     print(f.read())
 
 vfs.remove("file.txt")
-print(vfs.listdir())
+print(list(vfs.ilistdir()))
diff --git a/tests/extmod/vfs_fat_oldproto.py.exp b/tests/extmod/vfs_fat_oldproto.py.exp
index a389a521705eb8ae5a97ce0a124773297702e5ad..ab8338cbba35adfd4f3664b6cd7f090a573e4acd 100644
--- a/tests/extmod/vfs_fat_oldproto.py.exp
+++ b/tests/extmod/vfs_fat_oldproto.py.exp
@@ -1,3 +1,3 @@
-['file.txt']
+[('file.txt', 32768, 0)]
 hello!
 []
diff --git a/tests/extmod/vfs_fat_ramdisk.py b/tests/extmod/vfs_fat_ramdisk.py
index 81f9418b28ed3626b065a7e2d7b75bdbec290120..89b40e3a24e4b7e2a57b03c9af4a77428ad55094 100644
--- a/tests/extmod/vfs_fat_ramdisk.py
+++ b/tests/extmod/vfs_fat_ramdisk.py
@@ -65,7 +65,7 @@ except OSError as e:
 
 with vfs.open("foo_file.txt", "w") as f:
     f.write("hello!")
-print(vfs.listdir())
+print(list(vfs.ilistdir()))
 
 print("stat root:", vfs.stat("/"))
 print("stat file:", vfs.stat("foo_file.txt")[:-3]) # timestamps differ across runs
@@ -76,7 +76,7 @@ print(b"hello!" in bdev.data)
 vfs.mkdir("foo_dir")
 vfs.chdir("foo_dir")
 print("getcwd:", vfs.getcwd())
-print(vfs.listdir())
+print(list(vfs.ilistdir()))
 
 with vfs.open("sub_file.txt", "w") as f:
     f.write("subdir file")
@@ -92,4 +92,4 @@ print("getcwd:", vfs.getcwd())
 uos.umount(vfs)
 
 vfs = uos.VfsFat(bdev)
-print(vfs.listdir(b""))
+print(list(vfs.ilistdir(b"")))
diff --git a/tests/extmod/vfs_fat_ramdisk.py.exp b/tests/extmod/vfs_fat_ramdisk.py.exp
index 137db5841966f12f2e4d8802408235ee646177a2..6298a7efdcee0383cc53c1db78f1ee0180dbb51f 100644
--- a/tests/extmod/vfs_fat_ramdisk.py.exp
+++ b/tests/extmod/vfs_fat_ramdisk.py.exp
@@ -3,7 +3,7 @@ True
 statvfs: (512, 512, 16, 16, 16, 0, 0, 0, 0, 255)
 getcwd: /
 True
-['foo_file.txt']
+[('foo_file.txt', 32768, 0)]
 stat root: (16384, 0, 0, 0, 0, 0, 0, 0, 0, 0)
 stat file: (32768, 0, 0, 0, 0, 0, 6)
 True
@@ -12,4 +12,4 @@ getcwd: /foo_dir
 []
 True
 getcwd: /
-[b'foo_file.txt', b'foo_dir']
+[(b'foo_file.txt', 32768, 0), (b'foo_dir', 16384, 0)]