public void HasChanged_ReturnsFalseIfNoFilesExist()
        {
            // Arrange
            var directoryInfo = new Mock <DirectoryInfoBase>();

            directoryInfo.Setup(d => d.EnumerateFileSystemInfos())
            .Returns(Enumerable.Empty <FileSystemInfoBase>());
            var clock = new TestClock();
            var token = new PollingWildCardChangeToken(directoryInfo.Object, "**/*.txt", clock);

            // Act
            clock.Increment();
            var result = token.HasChanged;

            // Assert
            Assert.False(result);
        }
Пример #2
0
        internal IChangeToken GetOrAddWildcardChangeToken(string pattern)
        {
            if (!_wildcardTokenLookup.TryGetValue(pattern, out var tokenInfo))
            {
                var cancellationTokenSource = new CancellationTokenSource();
                var cancellationChangeToken = new CancellationChangeToken(cancellationTokenSource.Token);
                var matcher = new Matcher(StringComparison.OrdinalIgnoreCase);
                matcher.AddInclude(pattern);
                tokenInfo = new ChangeTokenInfo(cancellationTokenSource, cancellationChangeToken, matcher);
                tokenInfo = _wildcardTokenLookup.GetOrAdd(pattern, tokenInfo);
            }

            IChangeToken changeToken = tokenInfo.ChangeToken;

            if (PollForChanges)
            {
                // The expiry of CancellationChangeToken is controlled by this type and consequently we can cache it.
                // PollingFileChangeToken on the other hand manages its own lifetime and consequently we cannot cache it.
                var pollingChangeToken = new PollingWildCardChangeToken(_root, pattern);

                if (UseActivePolling)
                {
                    pollingChangeToken.ActiveChangeCallbacks   = true;
                    pollingChangeToken.CancellationTokenSource = new CancellationTokenSource();
                    PollingChangeTokens.TryAdd(pollingChangeToken, pollingChangeToken);
                }

                changeToken = new CompositeChangeToken(
                    new[]
                {
                    changeToken,
                    pollingChangeToken,
                });
            }

            return(changeToken);
        }