def _check_case_insensitive_sources_destinations(self): key_getter = lambda path: ([component.lower() for component in path.components], path) source_paths = sets_union([f.old_file_ref.path.subpaths(exclude_root=True) for f in self.renamed_files]) for path_a, path_b in pairwise(sorted(source_paths, key=key_getter)): if path_a.equals_ignore_case(path_b): raise CaseInsensitiveConflictInSourcePathsError(path_a.path_text(), path_b.path_text()) destination_paths = sets_union([f.path.subpaths(exclude_root=True) for f in self.renamed_files]) for path_a, path_b in pairwise(sorted(destination_paths, key=key_getter)): if path_a.equals_ignore_case(path_b): raise CaseInsensitiveConflictInDestinationPathsError(path_a.path_text(), path_b.path_text())
def verify_reported_progress(self): progress_events = [] collector = lambda progress_info: progress_events.append(progress_info) yield collector self.assertTrue(len(progress_events) > 0, 'No progress events received') first_non_indeterminate = next(filter(lambda event: not event.is_indeterminate(), progress_events), None) if first_non_indeterminate is not None: self.assertEqual(first_non_indeterminate.done, 0) for a, b in pairwise(progress_events): if a.is_indeterminate(): self.assertTrue(b.is_indeterminate() or b.is_complete()) elif not b.is_indeterminate(): self.assertGreaterEqual(b.done, a.done) self.assertGreaterEqual(b.total, a.total) last_event = progress_events[-1] self.assertTrue(last_event.is_indeterminate() or last_event.is_complete())