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")