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); }
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); }