(test, obj, abilities)
| 214 | ) |
| 215 | |
| 216 | def do_test(test, obj, abilities): |
| 217 | readable = "r" in abilities |
| 218 | self.assertEqual(obj.readable(), readable) |
| 219 | writable = "w" in abilities |
| 220 | self.assertEqual(obj.writable(), writable) |
| 221 | |
| 222 | if isinstance(obj, self.TextIOBase): |
| 223 | data = "3" |
| 224 | elif isinstance(obj, (self.BufferedIOBase, self.RawIOBase)): |
| 225 | data = b"3" |
| 226 | else: |
| 227 | self.fail("Unknown base class") |
| 228 | |
| 229 | if "f" in abilities: |
| 230 | obj.fileno() |
| 231 | else: |
| 232 | self.assertRaises(OSError, obj.fileno) |
| 233 | |
| 234 | if readable: |
| 235 | obj.read(1) |
| 236 | obj.read() |
| 237 | else: |
| 238 | self.assertRaises(OSError, obj.read, 1) |
| 239 | self.assertRaises(OSError, obj.read) |
| 240 | |
| 241 | if writable: |
| 242 | obj.write(data) |
| 243 | else: |
| 244 | self.assertRaises(OSError, obj.write, data) |
| 245 | |
| 246 | if sys.platform.startswith("win") and test in ( |
| 247 | pipe_reader, pipe_writer): |
| 248 | # Pipes seem to appear as seekable on Windows |
| 249 | return |
| 250 | seekable = "s" in abilities |
| 251 | self.assertEqual(obj.seekable(), seekable) |
| 252 | |
| 253 | if seekable: |
| 254 | obj.tell() |
| 255 | obj.seek(0) |
| 256 | else: |
| 257 | self.assertRaises(OSError, obj.tell) |
| 258 | self.assertRaises(OSError, obj.seek, 0) |
| 259 | |
| 260 | if writable and seekable: |
| 261 | obj.truncate() |
| 262 | obj.truncate(0) |
| 263 | else: |
| 264 | self.assertRaises(OSError, obj.truncate) |
| 265 | self.assertRaises(OSError, obj.truncate, 0) |
| 266 | |
| 267 | for [test, abilities] in tests: |
| 268 | with self.subTest(test): |
nothing calls this directly
no test coverage detected