def testExtractor(self): """Test seeking inside a record list""" record_list = """# file: 0foo user.multiline=0sVGhpcyBpcyBhIGZhaXJseSBsb25nIGV4dGVuZGVkIGF0dHJpYnV0ZS4KCQkJIEVuY29kaW5nIGl0IHdpbGwgcmVxdWlyZSBzZXZlcmFsIGxpbmVzIG9mCgkJCSBiYXNlNjQusbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx user.third=0saGVsbG8= user.not_empty=0sZm9vYmFy user.binary=0sAAECjC89Ig== user.empty # file: 1foo/bar/baz user.multiline=0sVGhpcyBpcyBhIGZhaXJseSBsb25nIGV4dGVuZGVkIGF0dHJpYnV0ZS4KCQkJIEVuY29kaW5nIGl0IHdpbGwgcmVxdWlyZSBzZXZlcmFsIGxpbmVzIG9mCgkJCSBiYXNlNjQusbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx user.third=0saGVsbG8= user.binary=0sAAECjC89Ig== user.empty # file: 2foo/\\012 user.empty """ extractor = EAExtractor(io.BytesIO(os.fsencode(record_list))) ea_iter = extractor._iterate_starting_with(()) first = next(ea_iter) self.assertEqual(first.index, (b'0foo', )) second = next(ea_iter) self.assertEqual(second.index, (b'1foo', b'bar', b'baz')) third = next(ea_iter) # Test quoted filenames self.assertEqual(third.index, (b'2foo', b'\n')) with self.assertRaises(StopIteration, msg="Too many elements in iterator"): next(ea_iter) extractor = EAExtractor(io.BytesIO(os.fsencode(record_list))) ea_iter = extractor._iterate_starting_with((b'1foo', b'bar')) self.assertEqual(next(ea_iter).index, (b'1foo', b'bar', b'baz')) with self.assertRaises(StopIteration, msg="Too many elements in iterator"): next(ea_iter)
def testRecord(self): """Test writing a record and reading it back""" record = ExtendedAttributesFile._object_to_record(self.sample_ea) new_ea = EAExtractor._record_to_object(record) if not new_ea == self.sample_ea: new_list = list(new_ea.attr_dict.keys()) sample_list = list(self.sample_ea.attr_dict.keys()) new_list.sort() sample_list.sort() self.assertEqual(new_list, sample_list) for name in new_list: self.assertEqual(self.sample_ea.get(name), new_ea.get(name)) self.assertEqual(self.sample_ea.index, new_ea.index) self.assertFalse("We shouldn't have gotten this far")