|
18 | 18 | """
|
19 | 19 |
|
20 | 20 | import datetime
|
| 21 | +import io |
21 | 22 | import sys
|
22 | 23 | import zipfile
|
23 | 24 |
|
@@ -323,6 +324,20 @@ def test_close(self):
|
323 | 324 | self.assertRaises(ValueError, f.write, "test")
|
324 | 325 | f.close()
|
325 | 326 |
|
| 327 | + def test_closed(self): |
| 328 | + f = GridIn(self.db.fs, chunkSize=5) |
| 329 | + f.write(b"Hello world.\nHow are you?") |
| 330 | + f.close() |
| 331 | + |
| 332 | + g = GridOut(self.db.fs, f._id) |
| 333 | + self.assertFalse(g.closed) |
| 334 | + g.read(1) |
| 335 | + self.assertFalse(g.closed) |
| 336 | + g.read(100) |
| 337 | + self.assertFalse(g.closed) |
| 338 | + g.close() |
| 339 | + self.assertTrue(g.closed) |
| 340 | + |
326 | 341 | def test_multi_chunk_file(self):
|
327 | 342 | random_string = b'a' * (DEFAULT_CHUNK_SIZE + 1000)
|
328 | 343 |
|
@@ -447,27 +462,85 @@ def test_readline(self):
|
447 | 462 | self.assertEqual(b"e", g.readline(1))
|
448 | 463 | self.assertEqual(b"llo world,\n", g.readline())
|
449 | 464 |
|
| 465 | + def test_readlines(self): |
| 466 | + f = GridIn(self.db.fs, chunkSize=5) |
| 467 | + f.write((b"""Hello world, |
| 468 | +How are you? |
| 469 | +Hope all is well. |
| 470 | +Bye""")) |
| 471 | + f.close() |
| 472 | + |
| 473 | + # Try read(), then readlines(). |
| 474 | + g = GridOut(self.db.fs, f._id) |
| 475 | + self.assertEqual(b"He", g.read(2)) |
| 476 | + self.assertEqual([b"llo world,\n", b"How are you?\n"], g.readlines(11)) |
| 477 | + self.assertEqual([b"Hope all is well.\n", b"Bye"], g.readlines()) |
| 478 | + self.assertEqual([], g.readlines()) |
| 479 | + |
| 480 | + # Try readline(), then readlines(). |
| 481 | + g = GridOut(self.db.fs, f._id) |
| 482 | + self.assertEqual(b"Hello world,\n", g.readline()) |
| 483 | + self.assertEqual([b"How are you?\n", b"Hope all is well.\n"], g.readlines(13)) |
| 484 | + self.assertEqual(b"Bye", g.readline()) |
| 485 | + self.assertEqual([], g.readlines()) |
| 486 | + |
| 487 | + # Only readlines(). |
| 488 | + g = GridOut(self.db.fs, f._id) |
| 489 | + self.assertEqual( |
| 490 | + [b"Hello world,\n", b"How are you?\n", b"Hope all is well.\n", b"Bye"], |
| 491 | + g.readlines()) |
| 492 | + |
| 493 | + g = GridOut(self.db.fs, f._id) |
| 494 | + self.assertEqual( |
| 495 | + [b"Hello world,\n", b"How are you?\n", b"Hope all is well.\n", b"Bye"], |
| 496 | + g.readlines(0)) |
| 497 | + |
| 498 | + g = GridOut(self.db.fs, f._id) |
| 499 | + self.assertEqual([b"Hello world,\n"], g.readlines(1)) |
| 500 | + self.assertEqual([b"How are you?\n"], g.readlines(12)) |
| 501 | + self.assertEqual([b"Hope all is well.\n", b"Bye"], g.readlines(18)) |
| 502 | + |
| 503 | + # Try readlines() first, then read(). |
| 504 | + g = GridOut(self.db.fs, f._id) |
| 505 | + self.assertEqual([b"Hello world,\n"], g.readlines(1)) |
| 506 | + self.assertEqual(b"H", g.read(1)) |
| 507 | + self.assertEqual([b"ow are you?\n", b"Hope all is well.\n"], g.readlines(29)) |
| 508 | + self.assertEqual([b"Bye"], g.readlines(1)) |
| 509 | + |
| 510 | + # Try readlines() first, then readline(). |
| 511 | + g = GridOut(self.db.fs, f._id) |
| 512 | + self.assertEqual([b"Hello world,\n"], g.readlines(1)) |
| 513 | + self.assertEqual(b"How are you?\n", g.readline()) |
| 514 | + self.assertEqual([b"Hope all is well.\n"], g.readlines(17)) |
| 515 | + self.assertEqual(b"Bye", g.readline()) |
| 516 | + |
450 | 517 | def test_iterator(self):
|
451 | 518 | f = GridIn(self.db.fs)
|
452 | 519 | f.close()
|
453 | 520 | g = GridOut(self.db.fs, f._id)
|
454 | 521 | self.assertEqual([], list(g))
|
455 | 522 |
|
456 | 523 | f = GridIn(self.db.fs)
|
457 |
| - f.write(b"hello world") |
| 524 | + f.write(b"hello world\nhere are\nsome lines.") |
458 | 525 | f.close()
|
459 | 526 | g = GridOut(self.db.fs, f._id)
|
460 |
| - self.assertEqual([b"hello world"], list(g)) |
461 |
| - self.assertEqual(b"hello", g.read(5)) |
462 |
| - self.assertEqual([b"hello world"], list(g)) |
463 |
| - self.assertEqual(b" worl", g.read(5)) |
| 527 | + self.assertEqual([b"hello world\n", b"here are\n", b"some lines."], list(g)) |
| 528 | + self.assertEqual(b"", g.read(5)) |
| 529 | + self.assertEqual([], list(g)) |
| 530 | + |
| 531 | + g = GridOut(self.db.fs, f._id) |
| 532 | + self.assertEqual(b"hello world\n", next(iter(g))) |
| 533 | + self.assertEqual(b"here", g.read(4)) |
| 534 | + self.assertEqual(b" are\n", next(iter(g))) |
| 535 | + self.assertEqual(b"some lines", g.read(10)) |
| 536 | + self.assertEqual(b".", next(iter(g))) |
| 537 | + self.assertRaises(StopIteration, iter(g).__next__) |
464 | 538 |
|
465 | 539 | f = GridIn(self.db.fs, chunk_size=2)
|
466 | 540 | f.write(b"hello world")
|
467 | 541 | f.close()
|
468 | 542 | g = GridOut(self.db.fs, f._id)
|
469 |
| - self.assertEqual([b"he", b"ll", b"o ", |
470 |
| - b"wo", b"rl", b"d"], list(g)) |
| 543 | + self.assertEqual([b"hello world"], list(g)) |
471 | 544 |
|
472 | 545 | def test_read_unaligned_buffer_size(self):
|
473 | 546 | in_data = (b"This is a text that doesn't "
|
@@ -665,6 +738,21 @@ def test_zip(self):
|
665 | 738 | self.assertSequenceEqual(z.namelist(), ["test.txt"])
|
666 | 739 | self.assertEqual(z.read("test.txt"), b"hello world")
|
667 | 740 |
|
| 741 | + def test_grid_out_unsupported_operations(self): |
| 742 | + f = GridIn(self.db.fs, chunkSize=3) |
| 743 | + f.write(b"hello world") |
| 744 | + f.close() |
| 745 | + |
| 746 | + g = GridOut(self.db.fs, f._id) |
| 747 | + |
| 748 | + self.assertRaises(io.UnsupportedOperation, g.writelines, [b"some", b"lines"]) |
| 749 | + self.assertRaises(io.UnsupportedOperation, g.write, b"some text") |
| 750 | + self.assertRaises(io.UnsupportedOperation, g.fileno) |
| 751 | + self.assertRaises(io.UnsupportedOperation, g.truncate) |
| 752 | + |
| 753 | + self.assertFalse(g.writable()) |
| 754 | + self.assertFalse(g.isatty()) |
| 755 | + |
668 | 756 |
|
669 | 757 | if __name__ == "__main__":
|
670 | 758 | unittest.main()
|
0 commit comments