コード例 #1
0
        public async Task OnUnsubscribe_StartAddingFiles_AddOrCancelThenRemoveIndex(int initFilesCount, int newFilesCount)
        {
            var searcher  = new Mock <ISearcher <string, string> >();
            var indexer   = new Mock <IIndexer <string, string> >(MockBehavior.Strict);
            var tokenizer = new Mock <ITokenizer <string> >();
            var analyzer  = new FileAnalyzer(tokenizer.Object, searcher.Object, indexer.Object);

            using var tmp = new TempFolder(initFilesCount);
            var folder = tmp.FolderPath;

            await Task.Run(async() => await analyzer.Subscribe(folder));

            SpinWait.SpinUntil(() => !analyzer.IsIndexing);

            var unsubscribe = Task.Run(async() => await analyzer.Unsubscribe(folder));
            await Task.Delay(10);

            var newFiles = new List <string>();

            for (var i = 0; i < newFilesCount; i++)
            {
                var sequence = new MockSequence();
                var file     = tmp.CreateFile();
                indexer.InSequence(sequence).Setup(x => x.Add(file, It.IsAny <IEnumerable <string> >()));
                indexer.InSequence(sequence).Setup(x => x.Remove(file));
                newFiles.Add(file);
            }

            await unsubscribe;

            foreach (var file in newFiles)
            {
                indexer.Verify(x => x.Add(file, It.IsAny <IEnumerable <string> >()), Times.AtMostOnce);
                indexer.Verify(x => x.Remove(file, It.IsAny <IEnumerable <string> >()), Times.AtMostOnce);
            }
        }