public static async Task TestQuitAllOnError()
        {
            FakeUIThread fakeUIThread = new FakeUIThread();

            fakeUIThread.IsOn = true;
            TypeMap.Register.Singleton <IUIThread>(() => fakeUIThread);

            FakeRuntimeEnvironment.Instance.MaxConcurrency = 2;

            IDataStore            info1 = New <IDataStore>(@"c:\file1.txt");
            IDataStore            info2 = New <IDataStore>(@"c:\file2.txt");
            IDataStore            info3 = New <IDataStore>(@"c:\file3.txt");
            IDataStore            info4 = New <IDataStore>(@"c:\file4.txt");
            ParallelFileOperation pfo   = new ParallelFileOperation();

            int callCount = 0;
            await pfo.DoFilesAsync(new IDataStore[] { info1, info2, info3, info4 },
                                   (info, progress) =>
            {
                int result = Interlocked.Increment(ref callCount);
                if (result == 1)
                {
                    return(Task.FromResult(new FileOperationContext(String.Empty, ErrorStatus.UnspecifiedError)));
                }
                Thread.Sleep(1);
                return(Task.FromResult(new FileOperationContext(String.Empty, ErrorStatus.Success)));
            },
                                   (status) => Constant.CompletedTask);

            Assert.That(callCount, Is.LessThanOrEqualTo(2), "There are several files, but max concurrency is two, so there could be up to two calls.");
        }
        public FileOperationViewModel(FileSystemState fileSystemState, SessionNotify sessionNotify, KnownIdentities knownIdentities, ParallelFileOperation fileOperation, IStatusChecker statusChecker, IdentityViewModel identityViewModel)
        {
            _fileSystemState = fileSystemState;
            _sessionNotify   = sessionNotify;
            _knownIdentities = knownIdentities;
            _fileOperation   = fileOperation;
            _statusChecker   = statusChecker;

            IdentityViewModel = identityViewModel;

            InitializePropertyValues();
            SubscribeToModelEvents();
        }
        public static async Task TestParallelFileOperationSimple()
        {
            IDataStore            info1 = New <IDataStore>(@"c:\file1.txt");
            IDataStore            info2 = New <IDataStore>(@"c:\file2.txt");
            ParallelFileOperation pfo   = new ParallelFileOperation();
            int callCount = 0;
            await pfo.DoFilesAsync(new IDataStore[] { info1, info2 },
                                   (info, progress) =>
            {
                ++callCount;
                return(Task.FromResult(new FileOperationContext(String.Empty, ErrorStatus.Success)));
            },
                                   (status) =>
            {
                return(Constant.CompletedTask);
            });

            Assert.That(callCount, Is.EqualTo(2), "There are two files, so there should be two calls.");
        }