(self)
| 657 | self.assertEqual(''.join(l), LIST_DATA.replace('\r\n', '')) |
| 658 | |
| 659 | def test_mlsd(self): |
| 660 | list(self.client.mlsd()) |
| 661 | list(self.client.mlsd(path='/')) |
| 662 | list(self.client.mlsd(path='/', facts=['size', 'type'])) |
| 663 | |
| 664 | ls = list(self.client.mlsd()) |
| 665 | for name, facts in ls: |
| 666 | self.assertIsInstance(name, str) |
| 667 | self.assertIsInstance(facts, dict) |
| 668 | self.assertTrue(name) |
| 669 | self.assertIn('type', facts) |
| 670 | self.assertIn('perm', facts) |
| 671 | self.assertIn('unique', facts) |
| 672 | |
| 673 | def set_data(data): |
| 674 | self.server.handler_instance.next_data = data |
| 675 | |
| 676 | def test_entry(line, type=None, perm=None, unique=None, name=None): |
| 677 | type = 'type' if type is None else type |
| 678 | perm = 'perm' if perm is None else perm |
| 679 | unique = 'unique' if unique is None else unique |
| 680 | name = 'name' if name is None else name |
| 681 | set_data(line) |
| 682 | _name, facts = next(self.client.mlsd()) |
| 683 | self.assertEqual(_name, name) |
| 684 | self.assertEqual(facts['type'], type) |
| 685 | self.assertEqual(facts['perm'], perm) |
| 686 | self.assertEqual(facts['unique'], unique) |
| 687 | |
| 688 | # plain |
| 689 | test_entry('type=type;perm=perm;unique=unique; name\r\n') |
| 690 | # "=" in fact value |
| 691 | test_entry('type=ty=pe;perm=perm;unique=unique; name\r\n', type="ty=pe") |
| 692 | test_entry('type==type;perm=perm;unique=unique; name\r\n', type="=type") |
| 693 | test_entry('type=t=y=pe;perm=perm;unique=unique; name\r\n', type="t=y=pe") |
| 694 | test_entry('type=====;perm=perm;unique=unique; name\r\n', type="====") |
| 695 | # spaces in name |
| 696 | test_entry('type=type;perm=perm;unique=unique; na me\r\n', name="na me") |
| 697 | test_entry('type=type;perm=perm;unique=unique; name \r\n', name="name ") |
| 698 | test_entry('type=type;perm=perm;unique=unique; name\r\n', name=" name") |
| 699 | test_entry('type=type;perm=perm;unique=unique; n am e\r\n', name="n am e") |
| 700 | # ";" in name |
| 701 | test_entry('type=type;perm=perm;unique=unique; na;me\r\n', name="na;me") |
| 702 | test_entry('type=type;perm=perm;unique=unique; ;name\r\n', name=";name") |
| 703 | test_entry('type=type;perm=perm;unique=unique; ;name;\r\n', name=";name;") |
| 704 | test_entry('type=type;perm=perm;unique=unique; ;;;;\r\n', name=";;;;") |
| 705 | # case sensitiveness |
| 706 | set_data('Type=type;TyPe=perm;UNIQUE=unique; name\r\n') |
| 707 | _name, facts = next(self.client.mlsd()) |
| 708 | for x in facts: |
| 709 | self.assertTrue(x.islower()) |
| 710 | # no data (directory empty) |
| 711 | set_data('') |
| 712 | self.assertRaises(StopIteration, next, self.client.mlsd()) |
| 713 | set_data('') |
| 714 | for x in self.client.mlsd(): |
| 715 | self.fail("unexpected data %s" % x) |
| 716 |
nothing calls this directly
no test coverage detected